极客秀
搜索

基于C#和ESP32的远程示波器(3)—— 使用C#连接MQTT百度云服务器

上期我们介绍了C#中的折线工具,本期我们介绍C#中利用MQTT协议连接百度云服务器。

在使用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云平台啦。

** 下期介绍使用ESP32连接MQTT服务器发送数据
(但是MQTT存在很大的缺陷后续可能不会使用MQTT)
**

1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容