MQTT Client for mbed LPC1768 and Application Board over Ethernet; publish only.

Dependencies:   C12832 MMA7660 MQTT

Fork of HelloMQTT by MQTT

CspWpfClient

Table of Contents

    Home

    Ein C#-Projekt egal ob Forms oder Wpf benötigt die MQTT Software, die mittels Projekt -> NuGet-Paketmanager installiert werden kann:

    /media/uploads/fpucher/nuget.jpg

    Nachfolgend wird eine Windows Wpf-Anwendung mit C# dokumentiert

    Ein Wpf-Tutorial ist hier zu finden.

    Folgende Namespaces sind einzubinden:

    using uPLibrary.Networking.M2Mqtt;
    using uPLibrary.Networking.M2Mqtt.Messages;
    using System.Diagnostics;
    using System.Threading;
    using System.Windows.Threading;
    
    • Zeile 1 und 2 wird für MQTT benötigt.
    • Zeile 3 für die Ausgabe im Fendter Ansicht -> Ausgabe mit Debug.WriteLine
    • Zeile 4 für einen sicheren UI Zugriff

    Ein globale Variable für den Client wird definiert (Zeile 8):

        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            MqttClient client;
    

    Die Verbindung mit dem Broker erfolgt z.B. im Event-Handler von Button btnConnect:

            private void btnConnect_Click(object sender, RoutedEventArgs e)
            {
                client = new MqttClient("broker.hivemq.com");
                string cl_str = "SimpleClientCsp" + RandomString(4);    // Client-Id mit Zuffalssstring
                client.Connect(cl_str);
                client.MqttMsgPublishReceived += client_MqttMsgPublishReceived;  // Messages handler ist zu erzeugen
            }
    

    Erzeuge den MQTT Messages Handler für das Empfangen von Nachrichten aus Zeile 6 des vorigen Codes:

            private void client_MqttMsgPublishReceived(object sender, uPLibrary.Networking.M2Mqtt.Messages.MqttMsgPublishEventArgs e)
            {
                Debug.WriteLine("Received = " + Encoding.UTF8.GetString(e.Message) + " on topic " + e.Topic);
               
            }
    

    Die Daten im MQTT Messages Handler werden allerdings in einem eigenen Thread empfangen, sodass ein Thread-safe Zugriff auf das UI mit folgendem Code gemacht werden kann (siehe https://stackoverflow.com/questions/11625208/accessing-ui-main-thread-safely-in-wpf) :

                Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate
                {
                    //Update UI here
                    txtReceived.AppendText(str);
                }));
    

    Das Subscriben (z.B. im Mbed-Beispiel "mbed/sample/Eth1") auf den Broker erfolgt mit folgenden Event-Handler für den Button btnSubscribe:

            private void btnSubscribe_Click(object sender, RoutedEventArgs e)
            {
                client.Subscribe(new string[] { "mbed/sample/Eth1" }, new byte[] { MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE });
            }
    

    Das Abmelden vom Broker erfolgt mit:

            private void btnDisconnect_Click(object sender, RoutedEventArgs e)
            {
                client.Disconnect();        // MqttMsgPublished event to disconnect the client.
            }
    

    Zufallsstring Methode:

            private string RandomString(int size)
            {
                StringBuilder builder = new StringBuilder();
                Random random = new Random();
                char ch;
                for (int i = 0; i < size; i++)
                {
                    ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
                    builder.Append(ch);
                }
                return builder.ToString();
            }
    

    All wikipages