Foxtable(狐表)用户栏目专家坐堂 → [免费开源]狐表集成MQTT解决方案,MQTT是目前大热物联网领域最广泛使用的软硬件通讯协议。如果连MQTT都没听过,别说自己是做物联网项目的,会被人笑的....


  共有32156人关注过本帖树形打印复制链接

主题:[免费开源]狐表集成MQTT解决方案,MQTT是目前大热物联网领域最广泛使用的软硬件通讯协议。如果连MQTT都没听过,别说自己是做物联网项目的,会被人笑的....

帅哥哟,离线,有人找我吗?
chen37280600
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1264 积分:7827 威望:0 精华:4 注册:2017/12/31 14:53:00
[免费开源]狐表集成MQTT解决方案,MQTT是目前大热物联网领域最广泛使用的软硬件通讯协议。如果连MQTT都没听过,别说自己是做物联网项目的,会被人笑的....  发帖心情 Post By:2020/12/10 15:28:00 [只看该作者]

(快速浏览杰哥分享过的所有经验汇总,点击跳转

简介
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,在物联网领域应用特别广泛。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。


此主题相关图片如下:微信截图_20201210153205.png
按此在新窗口浏览图片


1基础
 1引入dll
来自于github高分的开源m2mqtt库,dll下载:在帖子结尾

github源码地址:https://github.com/eclipse/paho.mqtt.m2mqtt

此主题相关图片如下:1.png
按此在新窗口浏览图片


2添加命名空间

 空间名:uPLibrary.Networking.M2Mqtt  ,别名:mq  
  空间名:uPLibrary.Networking.M2Mqtt.Messages   ,别名:mqs 

 
此主题相关图片如下:2.png
按此在新窗口浏览图片


重启项目,再检查命名空间是否还在。因为如果你写错英文,它会消失

3添加全局代码
Public MqttSub As mq.MqttClient 'MQTT的1个订阅端,方便连接后全局调用
Public MqttPub As mq.MqttClient 'MQTT的1个发布端,方便连接后全局调用
Public MqttQosDic As new Dictionary(of Integer,Byte)'qos质量枚举,在AfterOpenProject后初始化

'1订阅者相关---
'MQTT订阅者断开连接后触发的事件
Public Sub SubConnectionClosed(ByVal sender As Object, ByVal e As EventArgs)
    Functions.Execute("MqttSubDisConnected")
End Sub

'MQTT订阅者订阅后触发的事件
Public Sub MqttMsgSubscribed(ByVal sender As Object, ByVal e As mqs.MqttMsgSubscribedEventArgs)
    Functions.Execute("MqttMsgSubscribed")
End Sub

'MQTT订阅者收到消息时触发的事件
Public Sub MqttMsgPublishReceived(ByVal sender As Object, ByVal e As mqs.MqttMsgPublishEventArgs)
    Functions.Execute("MqttReceivedMessage",e.Message,e.Topic,e.QosLevel)
End Sub

'MQTT订阅者取消订阅后触发的事件
Public Sub MqttMsgUnsubscribed(ByVal sender As Object, ByVal e As mqs.MqttMsgUnsubscribedEventArgs)
    Functions.Execute("MqttMsgUnsubscribed")
End Sub

'2发布者相关
'MQTT发布者断开连接后触发的事件
Public Sub PubConnectionClosed(ByVal sender As Object, ByVal e As EventArgs)
    Functions.Execute("MqttPubDisConnected")
End Sub

4狐表AfterOpenProject事件添加代码

'初始化MqttQos的枚举---
MqttQosDic.Add(0,mqs.MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE) '0级,最多1次,消息可能会丢失
MqttQosDic.Add(1,mqs.MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE) '1级,最少1次,消息可能会重复
MqttQosDic.Add(2,mqs.MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE) '2级,仅发1次,会增加开销甚至堵塞
'初始化MqttQos的枚举---

 5添加内部函数
5.1订阅者相关
内部函数名:MqttMsgSubscribed
'MQTT订阅者订阅主题后触发的委托事件


内部函数名:MqttMsgUnsubscribed
'MQTT订阅者订阅后触发的委托事件


内部函数名:MqttReceivedMessage
'订阅的MQTT收到信息时触发的事件
'注意编码有Default和UTF8,乱码请切换
Dim msg As String = Encoding.Default.GetString(args(0)) '消息内容
Dim Topic As String = args(1) '主题名
Dim QosLevel As Integer = args(2) 'qos质量,有0,1,2


内部函数名:MqttSubDisconnected
'MQTT订阅者断开连接后触发的委托事件


5.2发布者相关
内部函数名:MqttPubDisconnected
'MQTT发布者断开连接后的委托事件

内部函数名:MqttPublish
'对某个主题发送某个qos质量的消息
'通过 Functions.Execute("MqttPublish","主题","内容",0,False) 使用
'MqttQosDic是全局Qos枚举变量,已经定义好012级别

Dim Topic As String = Args(0) '主题
Dim msg As String = Args(1) '消息文本内容
Dim qos As Integer = Args(2) '质量等级,有012
Dim retain As Boolean = Args(3)
'Retain若为True,该条消息将被保留做为最后一条收到的消息。下一个订阅消息者将能至少收到该条消息

If MqttPub.IsConnected Then   
    '注意编码类型有Default和UTF8,乱码请切换
    MqttPub.Publish(Topic, Encoding.Default.GetBytes(msg), MqttQosDic(qos),retain)
End If


 6覆盖help.mdb

用我的help.mdb覆盖到狐表程序里的help.mdb(参考路径C:\foxtable\Professional)
我为代码精灵增加了很多mqtt的提示

下载:
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:help.zip



此主题相关图片如下:3.png
按此在新窗口浏览图片

(顺便如果你想问我怎么添加的提示,你可以看之前我分享的帖子http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=152491&replyID=&skin=1)


2订阅者教程
 1初始化变量
MqttSub = new mq.MqttClient("127.0.0.1",1884,False,new System.Security.Cryptography.X509Certificates.X509Certificate,new System.Security.Cryptography.X509Certificates.X509Certificate,new mq.MqttSslProtocols )
'或者new mq.MqttClient("http://域名:端口号/")

'把全局代码里自定义的事件委托给当前MqttSub实例
AddHandler MqttSub.ConnectionClosed, AddressOf SubConnectionClosed
AddHandler MqttSub.MqttMsgSubscribed, AddressOf MqttMsgSubscribed
AddHandler MqttSub.MqttMsgPublishReceived , AddressOf MqttMsgPublishReceived
AddHandler MqttSub.MqttMsgUnsubscribed, AddressOf MqttMsgUnsubscribed


2连接服务器
If MqttSub.IsConnected =False Then
MqttSub.Connect(Guid.NewGuid.ToString,"admin","111") '指定连接的随机ID,账号,密码
'如果没有账号密码 MqttSub.Connect(Guid.NewGuid.ToString)
output.show(MqttSub.IsConnected)
End If


3订阅主题
支持多个主题,用数组传入
注意有多少个主题,就有多少个质量系数
MqttSub.Subscribe({"mytopic"},{MqttQosDic(0)})


4取消订阅
MqttSub.UnSubscribe({"mytopic"})


5关闭连接
If MqttPub.IsConnected Then
    MqttPub.Disconnect
End If


3发布者教程
1初始化变量
MqttPub = new mq.MqttClient("127.0.0.1",1884,False,new System.Security.Cryptography.X509Certificates.X509Certificate,new System.Security.Cryptography.X509Certificates.X509Certificate,new mq.MqttSslProtocols )
'或者new mq.MqttClient("http://域名:端口号/")

'把全局代码里自定义的事件委托给当前MqttSub实例
AddHandler MqttPub.ConnectionClosed, AddressOf PubConnectionClosed

2连接服务器
If MqttPub.IsConnected =False Then
    MqttPub.Connect(Guid.NewGuid.ToString,"admin","111") '指定连接的随机ID,账号,密码
    '如果没有账号密码 MqttSub.Connect(Guid.NewGuid.ToString)
    Output.show(MqttPub.IsConnected)
End If

3发送消息
Functions.Execute("MqttPublish","主题","内容",0,False)


4关闭连接
关闭后会释放内存,重连需要重新创建实例
If MqttPub.IsConnected Then
    MqttPub.Disconnect
End If

5MQTT服务器推荐
这个dll对主流的MQTT服务器版本都支持,Windows下,我推荐mosquitto,免安装,直接cmd运行即可。使用方法自行百度

6注意的坑
1. 一个程序,可以同时对同一个mqtt服务器进行订阅和发布
2. 一般是先有人订阅主题,再对主题发布信息。如果反过来,则发布的消息会被服务器当垃圾扔掉
3. 不支持TLS1.2加密,因为.net4.0框架不支持

7dll下载

这么高端的功能,不打个广告有点可惜,下载链接在我淘宝详情页的结尾,记得滚下去看完哦

以下内容只有回复后才可以浏览



===============================================================
顺便总结以前分享过的帖子,方便大家学习

联系QQ:2385350359

免费产品:

经验分享:



















[此贴子已经被作者于2022/7/21 9:59:34编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
teng0731
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:459 积分:3471 威望:0 精华:0 注册:2011/6/6 11:22:00
  发帖心情 Post By:2020/12/10 15:59:00 [只看该作者]

我是来点赞的

 回到顶部
帅哥哟,离线,有人找我吗?
WELOVEFOX
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:463 积分:3343 威望:0 精华:0 注册:2016/12/21 22:58:00
  发帖心情 Post By:2020/12/10 16:01:00 [只看该作者]

杰哥又出大作了图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
wei0769
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1814 积分:19228 威望:0 精华:0 注册:2013/4/10 14:38:00
  发帖心情 Post By:2020/12/10 16:20:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
zhangjian222200
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1521 积分:10733 威望:0 精华:0 注册:2016/9/12 11:18:00
  发帖心情 Post By:2020/12/10 16:37:00 [只看该作者]

mark

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106028 积分:539233 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/12/10 16:44:00 [只看该作者]

多谢分享!

 回到顶部
帅哥哟,离线,有人找我吗?
flashman
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:81 积分:1043 威望:0 精华:0 注册:2014/4/6 20:26:00
  发帖心情 Post By:2020/12/10 16:52:00 [只看该作者]

谢谢分享这么好的东西。

 回到顶部
帅哥哟,离线,有人找我吗?
ljh29206
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1357 积分:11978 威望:0 精华:0 注册:2012/3/5 11:32:00
  发帖心情 Post By:2020/12/10 17:10:00 [只看该作者]

厉害

 回到顶部
帅哥哟,离线,有人找我吗?
xuanxiao
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:640 积分:5407 威望:0 精华:0 注册:2014/8/27 11:12:00
  发帖心情 Post By:2020/12/10 17:18:00 [只看该作者]

用户已经被屏蔽

 回到顶部
帅哥哟,离线,有人找我吗?
hrsoft
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:97 积分:1049 威望:0 精华:0 注册:2020/10/14 23:52:00
  发帖心情 Post By:2020/12/10 19:40:00 [只看该作者]

图片点击可在新窗口打开查看

 回到顶部
总数 78 1 2 3 4 5 6 7 8 下一页