VOOZH about

URL: https://qiita.com/m_take/items/35fe5d67d82554fe9217

⇱ ESP-NOWを使ってGateWay方式でSORACOMへ送信する~機械のIoT化を低コストで #ESP32 - Qiita


👁 Image
14

Go to list of users who liked

12

Share on X(Twitter)

Share on Facebook

Add to Hatena Bookmark

More than 3 years have passed since last update.

@m_take

ESP-NOWを使ってGateWay方式でSORACOMへ送信する~機械のIoT化を低コストで

14
Last updated at Posted at 2021-08-16

動機

私は稲作農家でコンバインで収穫した籾を穀物乾燥機で水分を乾燥させる必要があります。
日中収穫し夕方までに乾燥機内に張り込んで、夜通し灯油を燃やした熱風を当てて乾かします。
ほとんどは設定すれば翌朝の乾燥終了まで自動で行われますが、なにかトラブルがあると米の品質にも影響がありますし翌日の作業にも支障があります。
そこで夜に確認しに機械を見て廻ることがあり、こういった作業や異常警報を素速くわかるようにIoT化しようと思いました。

構成

機械の稼働状況と警報をリモートで確認したい。
ただし複数あるので個々にSimを挿してではコストがかかる。
かといって有線を張り巡らすのは邪魔。

そこでESP32を一台を親機として複数の子機から送られてくるデータを無線で集めて、SORACOMに送信するゲートウェイ方式を考えました。
IoTデバイスはLTE-M Shield for ArduinoとESP32開発ボード、子機からの送信方式はEspressif独自の通信方式のESP-NOWが使いやすそうなので採用しました。仕様としては子機の数は20個以下payloadは250Byte以下の制約はありますが、使ってみた感じでは到達距離も問題なさそう。
👁 2.png

送信(子機 Sender)

温度センサーはOneWire DS18B20
モーターのオンオフは電磁開閉器の補助接点から、
警報はDC12Vブザーの配線を分岐してフォトカプラを介して取りました。

👁 IMG_20211105_163810.jpg

ESP-NOWのスケッチはこちらを参考にしました。

親機のMacアドレスを予め調べておきペアさせます
送信データは構造体にして複数の数値を送ります

typedef struct struct_message {
 char name[4];//機体名
 uint8_t id;//機体ID
 uint8_t motorStatus;//モーター状態
 float temp;//温度
} struct_message;

motorStatus は8bitのうち5bitで以下のON/OFFの状態を表しています

|bit5|bit4|bit3|bit2|bit1|bit0|||
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|警報ブザー|スロワモーター|繰出モーター|送風モーター|搬送モーター|受信チェック||
|buzzer|thrower|kuridashi|soufu|hansou|receive|十進||
|0|0|0|0|0|0|0|受信異常|
|0|0|0|0|0|1|1|停止|
|0|0|0|0|1|1|3|運転中*|
|0|0|0|1|1|1|7|張込|
|0|0|1|1|1|1|15|通風/乾燥|
|0|1|1|x|1|1|27,31|排出|
|1|x|x|x|x|x|32~|警報|
*機械によってはモーターが1台のものもある

受信(親機 Receiver)

arduinoUNO型のESP32搭載ボードIotExpressLTE-M Shield for Arduino を重ねてUART接続により子機から集めたデータをモデムを通してSORACOMへ送信します。
送信の際はこの記事を参考にバイナリーで送りバイナリーパーサーでJSON形式に戻すことで通信料を削減できます。

稼働時間、警告フラグと子機1台につきmotorStatus=1Byte + temp=2Byte をHEXにして送ります

バイナリーパーサー

数が増えて手入力だと面倒なのでpythonで作りました

binaryparser.py
text="uptime:0:uint:16 error:2:uint:8 "
names = ["A1","A2","A3","A4","B1","B2","B3","B4","C1","C2","C3","C4"]
for i ,name in enumerate(names):
 text+=f"{name}:{i*3+3}:uint:8 t_{name}:{i*3+4}:uint:16:/100 "
print(text)
uptime:0:uint:16 error:2:uint:8 A1:3:uint:8 t_A1:4:uint:16:/100 A2:6:uint:8 t_A2:7:uint:16:/100 A3:9:uint:8 t_A3:10:uint:16:/100 A4:12:uint:8 t_A4:13:uint:16:/100 B1:15:uint:8 t_B1:16:uint:16:/100 B2:18:uint:8 t_B2:19:uint:16:/100 B3:21:uint:8 t_B3:22:uint:16:/100 B4:24:uint:8 t_B4:25:uint:16:/100 C1:27:uint:8 t_C1:28:uint:16:/100 C2:30:uint:8 t_C2:31:uint:16:/100 C3:33:uint:8 t_C3:34:uint:16:/100 C4:36:uint:8 t_C4:37:uint:16:/100

SORACOM Lagoon - ダッシュボード

新しくなったSORACOM Lagoonでこのようにひと目で機械の稼働状況を確認でき,警報時はLINEで通知もされるようになりました。
👁 スクリーンショット 2021-08-16 180544.png

便利と思った機能は

  • Table 表示される文字列を変更する

int型のmortorStatusから日本語へ変換ができわかりやすく表示できました。

👁 スクリーンショット 2021-08-16 180631.png

  • LINE通知

警報が鳴ったらLINEで通知するようにした
👁 Screenshot_20210816_200523_jp.naver.line.android_LI (2).jpg

苦労した点、課題

・SDカードスロットが付いていたのでcsvファイルで保存できるようにしたら、IotExpressのSDカードに使用してるピンとモデムのUARTに使うピンがかぶっていた。

・はじめ子機はM5-ATOMを使うつもりだったが電波の到達距離が短かかったので、ESP開発ボードを使い端子台用にPCBを作った。

・配線が大変だった

・電磁開閉器の接点から取れない機械もあるので他の方法でモーターのON/OFFを検知する方法が必要

・機械ごとの稼働時間もグラフ化したい

・Wi-Fiの届くところではLTE-Mセルラー回線を使わずにESP32からSORACOM Arcが使えるそうなので試してみたい

制作費用 (2021/10/1追記)

・親機

購入先 価格(税込み・送料別)
IoT Express MkII https://www.aitendo.com/product/16899 3058円
ESPrOne 32 https://www.switch-science.com/catalog/3555/ 3575円(似たようなボード ピン配置等は未検証です)
LTE-M Shield for Arduino https://soracom.jp/store/5303/ 7180円(1500円クーポン付き)
300MBパック (IoT SIM plan-D D-300MB) https://soracom.jp/store/13380/ 初期902円 月額330円
SORACOM Harvest https://soracom.jp/pricing/ 日額5.5円~(無料枠あり)

・子機

購入先 価格(税込み・送料別)
ESP32-DevKitC ESP-WROOM-32開発ボード https://akizukidenshi.com/catalog/g/gM-11819/ ~1480円(aliexpressで探せば安いのも)
PCB https://www.fusionpcb.jp/ $4.9 50mmx100mm 20枚分
DS18B20 防水型温度センサ https://www.amazon.co.jp/gp/product/B083TTCB9Q/ 5個988円
フォトカプラTLP222GF https://akizukidenshi.com/catalog/g/gI-07331/ 60円
ピンソケット、ターミナルブロック、抵抗、LED、配線、端子等 13台分で5000円ほど
USB充電器、USBケーブル、ケース 百均 400円
14

Go to list of users who liked

12
0

Go to list of comments

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14

Go to list of users who liked

12