ESP32C3搭載のXiaoばかり使っているので、SAMD21マイコン搭載のXiaoが「遊休化」。これにカツを入れるべく、今回はSAMD21版XiaoからUART経由でラズパイ上のNodeREDにJSONを送り付けてみます。WiFiは無いけど、ちゃんとJSONでやりとりができるようにしたいです。今回は送るだけですけど。
※「IoT何をいまさら」投稿順Indexはこちら
※今回実験に使用の Seeeduino Xiaoは、Microchip社のSAMD21G18A(Arm Cortex M0+)を搭載した切手サイズのマイコンボードです。前回使用のRISC-VコアESP32C3搭載のXiaoとは異なるマイコンですが、同じXiaoシリーズなので端子配列とその機能はよく似ています。ただしESP32系とことなり無線の搭載はない機種です。
SAMD21版の実験用ソフトの作成
ESP32C3版のXiao同様、プログラム作成にはバージョン2.0.3のArduino IDEを使わせていただいております。ただし、同じXiaoシリーズといっても、搭載マイコンが異なるため、まずIDEに追加のボードマネージャのURLを設定。
その後で、ボードマネージャを開いて Seed SAMD Boardsを検索してインストールを行う必要があります。
以降、プルダウンメニューから Seeeduino XIAO を選択すれば普通に開発できます。
実験に使用したソース全文
前回使用したWiFi使ってMQTTブローカ経由でNodeREDにJSONオブジェクトをパブリッシュしたソースの大幅縮小版です。WiFiもなにもないので、Serial1(UART)から直接ラズパイのUART /dev/ttyS0 にシリアライズしたJSONオブジェクトを送り付けています。USBシリアルは「生きて動いているよ~」とホストのパソコンにお知らせするだけのもの。
// Seeeduino Xiao Json test #include <ArduinoJson.h> #define JSONBUFSIZE (400) const int jsonCapacity = JSON_OBJECT_SIZE(3); StaticJsonDocument<jsonCapacity> doc; char serializedDoc[JSONBUFSIZE]; int loopCount = 0; void setup() { SerialUSB.begin(115200); while (!SerialUSB) continue; Serial1.begin(9600); while (!Serial1) continue; } void loop() { SerialUSB.println(loopCount++); doc["field1"] = "abc"; doc["field2"] = 123; serializeJson(doc, Serial1); Serial1.println(); delay(5000); }
ハードウエアの接続
以下は手元のSAMD21版のXiaoです(2号機。)3本の線の先がNodeREDを走らせているラズパイです。
Node-RED側の実験フローとその動作
Node-RED側で直接シリアルデバイスとインタフェースするのは、別シリーズで何度かやってきています。今回は以下の回で作成したフローをこれまた「チョイ直し」して使ってみてます。
ブロックを積みながら(93) Node-RED、serial-inとserial-out
serial-inで /dev/ttyS0 から入力されるのはシリアライズされたJSON文字列であるので、その後の JSONパーサ(str2jsonとお名前書いてあるノード)でJSONオブジェクト化してます。今回はただデバッグウインドウにオブジェクトをたれ流すだけ。
serial inノードの設定が以下に。シリアルポートの細かい設定は、鉛筆アイコンの先に。
ちゃんと、SAMD21版Xiaoから送られてきたJSONオブジェクト届いてますな。後はいかようにでもNode-REDで処理できるっと。ホントか?