.NET nanoFrameworkのサンプルプログラム3つ目です。
今回はWifi接続とMQTTです。
使用したデバイスは M5 ATOM Matrix ですが、ESP32ボードならどれでも動作すると思います。
ハードウェア
・M5 ATOM Matrix
・ESP32 DevkitC
ソフトウェア
・VisualStudio2019
・ファームウェア ESP32_PICO 1.7.4-preview.54
・ファームウェア ESP32_REV0 1.7.4-preview.54
追加するNuGetパッケージ
・nanoFramework.System.Device.WiFi 1.4.0-preview.36
・nanoFramework.M2Mqtt 5.0.2-preview.80
プログラム
using System;
using System.Diagnostics;
using System.Threading;
//追加
using nanoFramework.Networking;
using System.Text;
using nanoFramework.M2Mqtt;
using nanoFramework.M2Mqtt.Messages;
namespace NF_WiFi_MQTT
{
public class Program
{
const string ssid = "YOUR SSID";
const string password = "PASSWORD";
public static void Main()
{
//Wifi接続
ConnectWifi();
//mqttクライアント
var client = new MqttClient("BROKER ADDRESS");
var clientId = Guid.NewGuid().ToString();
client.Connect(clientId);
//Subscribe
client.Subscribe(new[] { "NF-mqtt/demo" }, new[] { MqttQoSLevel.AtLeastOnce });
//イベント登録
client.MqttMsgPublishReceived += Client_MqttMsgPublishReceived;
//Publish
for (int i = 0; i < 5; i++)
{
client.Publish("NF-mqtt/demo", Encoding.UTF8.GetBytes("=== Hello MQTT! ==="), MqttQoSLevel.AtLeastOnce, false);
Thread.Sleep(5000);
}
//接続の解除
client.Disconnect();
Thread.Sleep(Timeout.Infinite);
}
private static void Client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
{
Debug.WriteLine($"Message received: {Encoding.UTF8.GetString(e.Message, 0, e.Message.Length)}");
}
private static void ConnectWifi()
{
CancellationTokenSource cs = new(60000);
//WifiでDHCP接続
var success = WiFiNetworkHelper.ConnectDhcp(ssid, password, requiresDateTime: true, token: cs.Token);
if (!success)
{
Debug.WriteLine($"Can't connect to the network, error: {WiFiNetworkHelper.Status}");
if (WiFiNetworkHelper.HelperException != null)
{
Debug.WriteLine($"ex: {WiFiNetworkHelper.HelperException}");
}
}
else
{
Debug.WriteLine("Wifi Connected!");
}
}
}
}
・"YOUR SSID","PASSWORD","BROKER ADDRESS"は自分の環境に合わせて変更してください。
・Brokerは色々ありますが、shiftr.io Desktopがローカル環境で試せるのでお勧めです。
・少し前までWifi接続のためにはnanoFramework.Windows.Devices.Wifiを使っていたのですが、最新のファームウェアではnanoFramework.System.Device.WiFiを使う必要があります。他にもGPIOなどのパッケージが変更になっています。
ソースコードはこちらからダウンロードできます。