LoginSignup
0
0

More than 1 year has passed since last update.

.NET nanoFrameworkでマイコンプログラミング(WiFiとMQTT)

Posted at

.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

プログラム

Program.cs
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などのパッケージが変更になっています。

ソースコードはこちらからダウンロードできます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0