sakura.ioというサービス?があって、それの通信モジュールを手に入れたわけです。
sakura.ioはさくらインターネットのIoTプラットフォームで、SoftBankとL2接続した閉域網を通じて、さくらインターネットに設置されたデータセンターと通信できるサービス。っていう感じみたいです。
モジュールの通信先は閉域網でつながっているのでサービスが提供するデータセンター固定。SIMの差し替えとかも不可。なんですが、データセンターから先にWebSocketとかMQTTとかで任意のWebシステムと連携できるので実質インターネットにつながっているようなもんですね。
とりあえず、ドキュメントに沿ってスケッチを書いてデータが送信できることまで確認しました
室温を送り続ける装置になった pic.twitter.com/PWyVpCNylM
— ゆたか (@tmyt) November 26, 2018
送信するデータがなにもないと寂しいのでLM35DZをつないで、室温を投げ続ける装置と化したsakura.io通信モジュールとArduino UNO R3の図。
せっかくなので.NETで使おう!
NetduinoというArduinoコンパチ風な.NET MicroFrameworkが動くマイコンボードが昔々ありました。.NET CoreだのWindows 10 IoTだの言われる前の時代のもので、スイッチサイエンスによると、掲載日が2015年だそうです*1。
このボード、国内で使えるWiFiモジュールがついていて、SDカードリーダが付いていて、C#でプログラムが書けて、Visual Studioでブレークポイントまで設定できて、Arduinoとピン配列互換という素晴らしいやつなんですが、まぁ流行った気は全くしないです。
ちなみにSDにログ書くなんてのはC#なのでこう書けば普通にできるようなやつでした。
using (var writer = new StreamWriter("\\SD\\log.txt", true)) { writer.WriteLine("Event happen!"); }
NetduinoはArduino UNOと違って、IOが3.3vの5vトレラントです。が、sakura.ioのArduinoシールドボードはIO電圧を5v/3.3vから選択できるとても優秀な設計なため、3.3vにしてあげればそのまま使えるはず…なのでArduino向けのライブラリをC#に移植しました。
もともとがとてもよくできたライブラリだったので、ほとんどそのまま移植してあります。名前とか定数をC#っぽくしたくらい。
その結果、アナログA0からデータを読んで、sakura.ioに送信するのはこう書けるようになりました。
public static void Main() { var sakuraio = new SakuraIO.SakuraIO_I2C(); for (;;) { if ((sakuraio.GetConnectionStatus() & 0x80) == 0x80) break; Debug.Print("."); Thread.Sleep(1000); } var input = new AnalogInput(Cpu.AnalogChannel.ANALOG_0); while (true) { Debug.Print((330 * input.Read()).ToString()); sakuraio.EnqueueTx(0, 330 * input.Read()); sakuraio.Send(); Thread.Sleep(1000 * 30); } }
Netduino 3 WiFiに載せるとこんな感じ。白色LEDがクソまぶしい。
Netduino 3 WiFiに、https://t.co/emXDRNwyQMのモジュール乗せた pic.twitter.com/3D92UIMk0c
— ゆたか (@tmyt) November 27, 2018
Netduino 3 WiFi向けの話
2018年の暮れにもなって、.NET MicroFrameworkをNetduinoで使う人が何人いるかはわかりませんが、書き残しておきます。
Netduino 3 WifiはUSB 5vをVINへ流していないのでACアダプタが無いとsakrua.io通信モジュールに電源が供給されません。 ちゃんと電源を接続しましょう。
電源は7v~12vまで大丈夫なので、僕はマルツでArduino用に今回のために手に入れた9v/2.5A電源をそのまま流用しました。