在这次的项目开始时,我们使用了ESP32开发板,当然,需要给设备联网,这个在代码中添加,
在使用Easy IoT时,需要连接一个可以访问网络的WiFi,
在使用SIoT时只需要提供一个WiFi就可以,形成局域网,手机电脑的WiFi都可以
目录
一、MQTT概念
MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)是一种基于发布/订阅范式的“轻量级”消息协议,由 IBM 发布。
MQTT 可以被解释为一种低开销,低带宽占用的即时通讯协议,可以用极少的代码和带宽的为连接远程设备提供实时可靠的消息服务,它适用于硬件性能低下的远程设备以及网络状况糟糕的环境下,因此 MQTT 协议在 IoT(Internet of things,物联网),小型设备应用,移动应用等方面有较广泛的应用。
IoT 设备要运作,就必须连接到互联网,设备才能相互协作,以及与后端服务协同工作。而互联网的基础网络协议是 TCP/IP,MQTT 协议是基于 TCP/IP 协议栈而构建的,因此它已经慢慢的已经成为了 IoT 通讯的标准。
1.基本特点
MQTT是一种发布/订阅传输协议,基本原理和实现如下;
MQTT 协议提供一对多的消息发布,可以解除应用程序耦合,信息冗余小。该协议需要客户端和服务端,而协议中主要有三种身份:发布者(Publisher)、代理(Broker,服务器)、订阅者(Subscriber)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,而消息发布者可以同时是订阅者,实现了生产者与消费者的脱耦
2.基本概念
-
MQTT 客户端
一个使用 MQTT 协议的设备、应用程序等,它总是建立到服务器的网络连接。
- 可以发布信息,其他客户端可以订阅该信息
- 订阅其它客户端发布的消息
- 退订或删除应用程序的消息
- 断开与服务器连接
-
MQTT 服务器
MQTT 服务器也称为 Broker(消息代理),以是一个应用程序或一台设备。它是位于消息发布者 和订阅者之间
- 接受来自客户端的网络连接
- 接受客户端发布的应用信息
- 处理来自客户端的订阅和退订请求
- 向订阅的客户转发应用程序消息
-
主题(Topic)
- 连接到一个应用程序消息的标签,该标签与服务器的订阅相匹配。服务器会将消息发送给订阅所匹配标签的每个客户端。
- 要订阅的主题。一个主题可以有多个级别,级别之间用斜杠字符分隔。例如,/world 和 emq/emqtt/emqx 是有效的主题。
- 订阅者的Topic name支持通配符#和+ : # 支持一个主题内任意级别话题,+ 只匹配一个主题级别的通配符,这里可能解释的不到位,请读者查阅资料
- 客户端成功订阅某个主题后,代理会返回一条 SUBACK 消息,其中包含一个或多个 returnCode参数
二、Easy IoT
Easy Iot是一个旨在简化和加速物联网设备的连接和管理的物联网平台。它提供了易于使用的工具和界面,使用户能够轻松地将各种设备和传感器连接到云平台,并实时监控和控制这些设备。平台使用MQTT协议与开发板进行通信。MQTT是一种轻量级的通信协议,专为物联网设备和网络环境设计。它采用发布-订阅模式,其中消息发布者(可以是手机,也可以是物联网设备)将消息发送到特定的主题(Topic),而消息订阅者(可以是手机,也可以是物联网设备)则订阅感兴趣的主题,以接收相应的消息。
理解了发布者和订阅者的概念,也就好理解本实验设置Topic的用途了。Topic0的发布者是电脑,发布内容是指令,订阅者是开发板,用于接收电脑指令。
1.如何注册和配置Easy Iot
http://iot.dfrobot.com.cnhttp://iot.dfrobot.com.cn
(1)在首页右上角选择“注册”,按提示注册账号
(2)登录平台后选择“工作间”,在左边查看账号、密码信息 (点击小眼睛就可以看得到)
(3)新添加1个设备,命名为“送文件机械人”,了解Topic概念,下一步编程会用到
2.代码实现
#include <DFRobot_Iot.h>
// 函数声明
void obloqMqttEventT0(String& message);
// 静态常量
const String topics[5] = {"vUbidcvIg","","","",""};
const MsgHandleCb msgHandles[5] = {obloqMqttEventT0,NULL,NULL,NULL,NULL};
// 创建对象
DFRobot_Iot myIot;
// 主程序开始
void setup() {
Serial.begin(9600);
myIot.setMqttCallback(msgHandles);
myIot.wifiConnect("Xiaomi 13", "123456789");
while (!myIot.wifiStatus()) {}
myIot.init("iot.dfrobot.com.cn","AvPM-----","","AvPGi-----",topics,1883);
myIot.connect();
Serial.println("hello");
while (!myIot.connected()) {}
myIot.publish(topic_0, "hello");
}
void loop() {
}
// 事件回调函数
void obloqMqttEventT0(String& message) {
Serial.print(message);
}
在这里把vUbidcvIg改成自己的Easy IoT的主题就行
const String topics[5] = {"vUbidcvIg","","","",""};
在这里把"AvPM-----"改为自己的lot_id,vvv"AvPGi-----"改为自己的lot_pwd
myIot.init("iot.dfrobot.com.cn","AvPM-----","","AvPGi-----",topics,1883);
3.在电脑上通过Easy Iot管理掌控板
登录Easy Iot平台查看Topic0接收到的信息,也可以在这里发送信息
在这里我们就可以看到开发板发送过来的信息
4.在手机上通过Easy Iot管理掌控板
在手机微信搜索“Easy Iot”小程序,用在电脑上注册的账号登录平台,界面和电脑有一定区别,但操作逻辑和功能是一样的,可以按照博主的步骤来做。
三、SIoT
SIoT为一个为教育定制的跨平台的开源MQTT服务器程序,S指科学(Science)、简单(simple)的意思。SIoT支持Win10、Win7、Mac、Linux等操作系统,一键启动,无需用户注册或者系统设置即可使用。
SIoT为“虚谷物联”项目的核心软件,是为了帮助中小学生理解物联网原理,并且能够基于物联网技术开发各种创意应用。因为其重点关注物联网数据的收集和导出,是采集科学数据的最好选择之一。
这里博主分享了SIoT的包,下载使用即可,也可以去官网下载
1.运行服务器
下载后打开我们的目录下的应用程序
在最下面找到127.0.0.1
然后在浏览器中复制改地址,在后面加上:8080(要注意这里是英文输入法才行)
这里的账号:siot,密码是:dfrobot
2.发送端代码
import siot
import time
SERVER = "127.0.0.1" #MQTT服务器IP
CLIENT_ID = "" #在SIoT上,CLIENT_ID可以留空
IOT_pubTopic = 'xzbot/001' #“topic”为“项目名称/设备名称”
IOT_UserName ='siot' #用户名
IOT_PassWord ='dfrobot' #密码
siot.init(CLIENT_ID, SERVER, user=IOT_UserName, password=IOT_PassWord)
siot.connect()
siot.loop()
a= ''
try:
while True:
a=str(input('请输入:'))
siot.publish(IOT_pubTopic, "value %s"%a)
print(a)
except:
siot.stop()
print("disconnect seccused")
3.接收端代码
import siot
import time
SERVER = "127.0.0.1" #MQTT服务器IP
CLIENT_ID = "" #在SIoT上,CLIENT_ID可以留空
IOT_pubTopic = 'xzbot/001' #“topic”为“项目名称/设备名称”
IOT_UserName ='siot' #用户名
IOT_PassWord ='dfrobot' #密码
def sub_cb(client, userdata, msg):
a=str(msg.payload)
#print("\nTopic:" + str(msg.topic) + " Message:" + a)
print(a[-2])
siot.init(CLIENT_ID, SERVER, user=IOT_UserName, password=IOT_PassWord)
siot.connect()
siot.subscribe(IOT_pubTopic, sub_cb)
siot.loop()
try:
while True:
pass
except:
siot.stop()
print("disconnect seccused")
4.查看我们的设备信息
打开我们的设备名称
在这里可以看到开发板端发送过来的信息