2023年5月28日日曜日

ThingsBoard + ESP32 + SIM7600で4G LTE経由のOTA(無線プログラム更新)


背景

以前ThingsBoard(ログ取りサーバー)とESP32を利用して、指定したファームウェアへの更新を試しました。
4GモジュールであるSIM7600JCとThingsBoardの組み合わせを調べたところ、ThingsBoardのライブラリで4G通信可能と分かりました。

動かしたプログラムと情報を記事に残します。

使ったもの

  • ESP32にプログラムを書き込めるPC
    この記事ではPlatformIO + VSCodeの環境を利用しました。
  • ドメインを紐付けて動かしているThingsboardサーバー
    4G通信で接続するためドメインで呼び出せる状態のThingsBoardが必要です。
  • ESP32 + SIM7600JC-H + SIM差込口
    今回は下記部品の組み合わせで回路を組みました。
    • SIM7600JC-H
      SIM7600にはいくつか種類がありますが日本で使うならJCが必要です。
      Gを試しましたが自分が試した範囲では動かせませんでした。
    • SIM7600JC-Hの信号線を引出しつつSIMに接続し、電源を供給する自作基板基板
    • ESP32S3開発ボード
    • ブレッドボード
    • 導線(はんだ付け)
    基板を自作したくない場合は、下記のようなPCIEコネクタとSIM差込口が付いたESP32の基板を利用するのが良いです。
    Simcom-bluetooth nano simカードスロット,wifi ESP32-WROVER-B,開発ボード
  • soracomのSIM

ESP32とSIM7600を接続

SIM7600はuart端子を備えているので、それをESP32のSerial1に接続します。
PCIE端子の17がRX、19がTXです。

参考: ESP32とSIM7600を繋ぐ基板の回路図: SIM7600-Modem.pdf

無印ESP32はSerial1が使いづらいのでSerial2のRX:17とTX:18に繋いで動かすのが良いです。
ESP32S3のSerail1はRX:15TX16です。

ということで、PCIEから出てくるUARTをESP32S3のUART(RXをTX、TXをRXに繋ぐ)とGNDを接続して回路を準備しました。


ThingsBoard SDKのSIM900とOTAのサンプルコードを統合してプログラム作成

SIM900というSIM7600と同じ系統のICを扱うサンプルコード 0004-arduino-sim900_send_telemetry.ino と OTAのサンプルコード 0011-esp8266_esp32_subscribe_OTA_MQTT.ino を統合して4G通信でOTAするプログラムを作成します。

統合して作成したプログラムは長めなので下記のgithubのページで共有します。

https://github.com/asukiaaa/practice-esp32-ota-with-sim7600/blob/main/src/main.cpp

要所を解説します。

#include "secret.hpp"
上記のプログラムは公開したくない設定値をsrc/secret.hppで定義して使っています。
利用する際はsecrets.example.hppをコピーしてsecrets.hpp作成し送信対象のThingsBoardのホスト名とデバイストークンを記述してください。

#define TINY_GSM_MODEM_SIM7600
SIM900のサンプルコードにはSIM7600の有効化方法が記載されていませんが、その中で使っているライブラリTinyGSMのサンプルコードでSIM7600の設定を有効化するマクロの記述があるので、それを有効にします。


ThingsBoard tb(client, MAX_MESSAGE_SIZE);
TinyGSMがESP32のClientクラスを継承しているため、ThingsBoardのコンストラクタとして渡せます。
WiFiを使う場合は、この第一引数のclientをWiFiClientのインスタンスにします。

動作確認

以前試した指定したファームウェアへの更新処理のように、SIM7600を使うプログラムをThingsBoardにアップロードしてデバイスプロファイルで切り替えてOTAさせます。
プログラムを更新できたら成功です。

おわり

SIM7600とESP32とThingsBoradを組み合わせて4G通信でOTAできました。

ThingsBoardの通信モジュールを利用するサンプルがtelemetryの送信処理だけだったのでOTAを使うと何か不具合が起きるのかと思っていましたが、すんなり実現できて良かったです。

なお、今回は手元にあったSIM7600を利用しましたが、通信速度を抑えたLET-M通信のSIM7080という製品も同様に使えるようなので(参考: TimerCAMとCAT-Mで画像をLINEに送信する)、LTE-Mの通信速度で十分なら安くて小さいそちらを使うのも一手です。
ESP32S3とSIM7080が一体になった基板も売られていて試しやすいです。

参考

SIM7600とESP32を繋ぐ装置の回路図です。
SIM7600-Modem.pdf

ESP32でSIM7600が使える可能性が高いと知った記事です。
ESP32をLTEに接続する

参考にしたThingsBoard SDKのサンプルプログラムです。
0004-arduino-sim900_send_telemetry.ino
0011-esp8266_esp32_subscribe_OTA_MQTT.ino

以前WiFi環境内で取り組んだThingsBoardを利用したESP32のOTAの紹介記事です。
thingsboardでOTAを利用してESP32のプログラムを更新

今回作成したプログラムを含むPlatformIOのプロジェクトです。
https://github.com/asukiaaa/practice-esp32-ota-with-sim7600

0 件のコメント :