上期我们介绍了C#中的折线工具,本期我们介绍C#中利用MQTT协议连接baidu服务器。
在使用MQTT之前,我们需要获得我们的MQTT服务器地址和相关信息,往期有介绍关于如何使用百度云创建MQTT服务器并获取连接信息的文章,可以参考百度云物联网之MQTT协议创建设备及获取信息。
关于ESP32连接MQTT的部分可以参考下的(哥们能不水就不水)
ESP32物联网教程之MQTT(Ardunio IDE)
但是有一点要注意的是,WIFI的使用会占用ADC2导致ADC2不能用,所以不能使用ADC2,或者先采集数据,再连接WIFI,再上传数据,之后再断开连接·
相关库
在C#中有许多库是可以使用MQTT的,使用较多的有MQTTnet,M2Mqtt等,我们选择的是M2Mqtt库(MQTTnet我没用明白)我们打开NuGet程序包管理。

在其中搜索M2Mqtt
安装最新版即可。
连接MQTT服务器
接着我们在代码中连接我们的MQTT服务器。
首在全局中创建我们的MQTT句柄,用以连接我们的MQTT服务器。
接着加入如下代码,连接MQTT服务器并且配置我们的回调函数
private void InitializeMqttClient()
{
// 服务器地址
string brokerAddress = "你的服务器地址";
// 你的用户名和密码
string username = "你的用户名";
string password = "你的密码";
// 创建MqttClient实例
mqttClient = new MqttClient(brokerAddress);
// 设置用户名和密码
mqttClient.Connect(Guid.NewGuid().ToString(), username, password);
// 订阅主题
string topic = "你的主题";
mqttClient.Subscribe(new string[] { topic }, new byte[] { MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE });
// 设置接收消息的回调函数
//这个Client_MqttMesgPublishReceived是我自己定义的
mqttClient.MqttMsgPublishReceived += Client_MqttMsgPublishReceived;
Console.WriteLine($"Connected to {brokerAddress} with username {username}");
}
服务器的地址用户名和密码,参考开头的那期有讲解如何获取相关信息的。
接着我们在Form函数中调用这个函数,这样子我们在窗口加载的时候就可以连接到我们的MQTT服务器
public Form1()
{
InitializeComponent();
InitializeMqttClient();
}
接着我们点击运行,前往百度云的后台查看是否有设备连接并运行。

首先我们可以看到我们的控制台提示:我们已经连接到了MQTT服务器,并且打印了服务器地址以及用户名。
之后在运维管理中,我们也可以看到我们当前有一个设备正在使用。
接收MQTT消息并显示
连接好设备之后,我们需要编写我们的相关回调函数,我们之前定义了我们的回调函数
这里要对其做具体定义。
我们在上一期的时候介绍了如何使用chart控件显示折线图,我们在消息回调函数中,利用chart控件,将我们的信打印出来。
private void Client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
{
// 处理接收到的消息
string message = Encoding.UTF8.GetString(e.Message);
number++;
Console.WriteLine(message);
// 在图表中添加新数据点
this.Invoke((MethodInvoker)delegate
{
Series series = chart1.Series[0];
series.Points.AddXY(number,int.Parse(message));
// 如果超过一定数量的数据点,删除最旧的数据点,保持图表显示的数据量有限
if (series.Points.Count > 50)
{
series.Points.RemoveAt(0);
}
});
}
这里我还定义了一个number变量,用以确定折线图的下标。
需要注意的是,我们收到的数据应该使用Encoding.UTF8.GetString方法转化成字符串否则会报错。
接着我们在百度云中,创建一个新的实例,然后模拟设备,进入MQTT服务端
我们需要订阅和我们程序中连接的服务端一样的主题,之后设置我们的消息,点击发布(Publish)
可以看到我们成功的发布了消息。

同样的我们C#中的服务器也接收到了消息并且在折线图中打印了出来。
这样子我们就成功的让我们的C#服务器连接到MQTT云平台啦。


登录 或 注册 后才可以进行评论哦!
还没有评论,抢个沙发!