一、实验原理
SIoT是一个为中小学STEM教育定制的跨平台的开源MQTT服务器程序,S指科学(Science)、简单(Simple)的意思。SIoT重点关注物联网数据的收集和导出,是采集科学数据的最好选择之一。
本实验通过SIoT在局域网上实现mqtt消息的通讯。(局域网通过连接同一热点形成)
二、实验过程
1、先下载SIoT,点击如下程序,使它在后台运行
2、再打开config.json文件,修改配置如下:
3、在浏览器上打开网站http://127.0.0.1:8888/html/login.html,端口号可自行配置,并登陆账号
3、点击“发送消息”,添加两个项目ID
4、点击“设备列表”,可查看到两个ID
5、在Mind+中,在网络服务中添加MQTT和WIFI,
并添加代码块:
注:合作者需要连接同一热点,且服务器地址需相同
6、代码如下:
#include <MPython.h>
#include <DFRobot_Iot.h>
// 函数声明
void obloqMqttEventT0(String& message);
// 静态常量
const String topics[5] = {"2018764226/zyq","2018764227/dyj","","",""};
const MsgHandleCb msgHandles[5] = {obloqMqttEventT0,NULL,NULL,NULL,NULL};
// 创建对象
DFRobot_Iot myIot;
// 主程序开始
void setup() {
mPython.begin();
myIot.setMqttCallback(msgHandles);
myIot.wifiConnect("dyj", "12345678");
while (!myIot.wifiStatus()) {yield();}
display.setCursorLine(1);
display.printLine("WIFI连接成功");
myIot.init("192.168.43.234","2018764227","","dyj", topics, 1883);
myIot.connect();
while (!myIot.connected()) {yield();}
display.setCursorLine(2);
display.printLine("MQTT连接成功");
}
void loop() {
if ((touchPadP.isTouched())) {
myIot.publish(topic_1, "2018764227邓咏健");
}
}
// 事件回调函数
void obloqMqttEventT0(String& message) {
display.setCursorLine(3);
display.printLine(message);
}
三、实验结果
1.本人掌控版如下显示:
2.小伙伴掌控版如下显示:
四、实验中遇到的问题
1、一开始与小伙伴都以为登陆同一账号时,只要一方发出项目ID或者删除项目ID,另一方也能及时收到,事实是不会同步的;
2、MQTT一开始连接不上,原因是MQTT初始化参数时,服务器地址未填写与小伙伴一致,导致连接不上,因为用的是小伙伴的热点;
3、WIFI和MQTT连接上后,一直接收不到小伙伴发送的消息,原因是将WIFI的连接与MQTT的连接写在循环块里,导致一直进行初始化,使得无法进行下一步操作,需要进行初始化的操作不能写在循环块中。