Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: C12832 MMA7660 MQTT
Fork of HelloMQTT by
CspWpfClient
Ein C#-Projekt egal ob Forms oder Wpf benötigt die MQTT Software, die mittels Projekt -> NuGet-Paketmanager installiert werden kann:
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();
}
