tmytのらくがき

個人の日記レベルです

sakura.io通信モジュールを手に入れたのでNetduino 3 Wifiに接続した

sakura.ioというサービス?があって、それの通信モジュールを手に入れたわけです。

sakura.io

sakura.ioはさくらインターネットのIoTプラットフォームで、SoftBankとL2接続した閉域網を通じて、さくらインターネットに設置されたデータセンターと通信できるサービス。っていう感じみたいです。

モジュールの通信先は閉域網でつながっているのでサービスが提供するデータセンター固定。SIMの差し替えとかも不可。なんですが、データセンターから先にWebSocketとかMQTTとかで任意のWebシステムと連携できるので実質インターネットにつながっているようなもんですね。

とりあえず、ドキュメントに沿ってスケッチを書いてデータが送信できることまで確認しました

送信するデータがなにもないと寂しいので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#に移植しました。

github.com

もともとがとてもよくできたライブラリだったので、ほとんどそのまま移植してあります。名前とか定数を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向けの話

2018年の暮れにもなって、.NET MicroFrameworkをNetduinoで使う人が何人いるかはわかりませんが、書き残しておきます。

Netduino 3 WifiはUSB 5vをVINへ流していないのでACアダプタが無いとsakrua.io通信モジュールに電源が供給されません。 ちゃんと電源を接続しましょう。

電源は7v~12vまで大丈夫なので、僕はマルツでArduino用に今回のために手に入れた9v/2.5A電源をそのまま流用しました。