目录
一、实验目的及要求
【实验一】实现sIoT配置并实现sIoT上mqtt消息的通讯。
【实验二】通过AppInventor结合sIoT实现手机app控制掌控板的灯和显示内容。
二、实验原理与内容
sIoT可以在局域网上实现mqtt消息的通讯。借助sIoT可以通过手机app上的数值调整来实现局域网内的设备(掌控板)的灯光操控。
三、实验软硬件环境
硬件:掌控板
软件:Mind+
四、实验过程(实验步骤、记录、数据、分析)
1.Mind上的图块代码截图:
实验一:
连接WIFI热点和MQTT并验证连接成功;当触摸P键后MQTT发送信息“2018764210/肖显超”至Topic_1,并显示发送成功。
当mqtt接收到Topic_0的消息,屏幕显示MQTT消息并亮蓝灯,播放音乐。
实验二:
连接WIFI热点和MQTT并验证连接成功;
设置两个逗号,里面分隔有三组数字(字符串),(从左到右)依次是红光、绿光、蓝光的数值显示。当通过手机的app上数值拖动调整时,屏幕会显示对应的颜色数值变化。
2.主要代码显示
实验一:
/*!
* MindPlus
* mpython
*
*/
#include <MPython.h>
#include <DFRobot_Iot.h>
// 函数声明
void obloqMqttEventT0(String& message);
// 静态常量
const String topics[5] = {"2018764221/吴炳辉","2018764210/肖显超","","",""};
const MsgHandleCb msgHandles[5] = {obloqMqttEventT0,NULL,NULL,NULL,NULL};
// 创建对象
DFRobot_Iot myIot;
// 主程序开始
void setup() {
mPython.begin();
myIot.setMqttCallback(msgHandles);
display.setCursorLine(1);
display.printLine("连接中");
myIot.wifiConnect("gshh", "shwh2295");
while (!myIot.wifiStatus()) {yield();}
display.setCursorLine(1);
display.printLine(myIot.getWiFiLocalIP());
myIot.init("192.168.43.8","602","","iot", topics, 1883);
myIot.connect();
while (!myIot.connected()) {yield();}
display.setCursorLine(1);
display.printLine("mqtt ok");
}
void loop() {
if ((touchPadP.isTouched())) {
myIot.publish(topic_1, "2018764210/肖显超");
display.setCursorLine(1);
display.printLine("发送成功");
}
}
// 事件回调函数
void obloqMqttEventT0(String& message) {
display.setCursorLine(1);
display.printLine(message);
rgb.write(0, 0x0000FF);
buzz.play(ENTERTAINER, Once);
}
实验二:
// 主程序开始
void setup() {
mPython.begin();
myIot.setMqttCallback(msgHandles);
display.fillScreen(0);
display.drawImage(39, 7, 50, 50, imageMatrix[0]);
myIot.wifiConnect("HUAWEI nova 2 Plus", "987654321ab");
while (!myIot.wifiStatus()) {yield();}
display.fillScreen(0);
display.setCursor(0, 0);
display.print("WIFI已连接");
myIot.init("192.168.43.8","602","","iot", topics, 1883);
myIot.connect();
while (!myIot.connected()) {yield();}
display.fillScreen(0);
display.setCursor(0, 0);
display.print("连接成功");
}
void loop() {
}
// 事件回调函数
void obloqMqttEventT0(String& message) {
display.setCursor(0, 22);
display.print(" ");
display.setCursor(0, 22);
display.print(message);
mind_n_DouHao1 = (dfstring.indexOf(",",message));
mind_n_DouHao2 = (dfstring.lastIndexOf(",",message));
display.setCursor(0, 44);
display.print((dfstring.substring(message,0,1,0,mind_n_DouHao1)));
mind_n_R = (String((dfstring.substring(message,0,1,0,mind_n_DouHao1))).toInt());
display.setCursor(40, 44);
display.print((dfstring.substring(message,0,(mind_n_DouHao1 + 1),0,mind_n_DouHao2)));
mind_n_G = (String((dfstring.substring(message,0,(mind_n_DouHao1 + 1),0,mind_n_DouHao2))).toInt());
display.setCursor(80, 44);
display.print((dfstring.substring(message,0,(mind_n_DouHao2 + 1),0,(String(message).length()))));
mind_n_B = (String((dfstring.substring(message,0,(mind_n_DouHao2 + 1),0,(String(message).length())))).toInt());
rgb.write(-1, rgbToColor(round(mind_n_R), round(mind_n_G), round(mind_n_B)));
}
// 静态函数
uint32_t rgbToColor(uint8_t r, uint8_t g, uint8_t b)
{
return (uint32_t)((((uint32_t)r<<16) | ((uint32_t)g<<8)) | (uint32_t)b);
}
3.实验效果图
实验一:
(1)连接中——>连接成功(mqtt ok)
(2)触摸P键发送信息——>发送成功
此时sIoT网页也显示发送的信息
(3)当MQTT收到Topic_0的消息
掌控板也显示MQTT的消息并亮蓝灯,播放音乐。
实验二:
手机app上的数值显示,以及颜色调整
当掌控板连接成功,未调整颜色前,掌控板显示
调整灯光颜色值为红色,掌控板显示红灯
调整灯光颜色值为绿色,掌控板显示绿灯
调整灯光颜色值为蓝色,掌控板显示蓝灯
当绿色和蓝色调整数值为一样时,掌控板显示白灯
五、实验结论与体会
此次是运用掌控板和Mind+软件学会了实现sIoT配置和sIoT上mqtt消息的通讯,同时还有学习了通过AppInventor结合sIoT实现手机app控制掌控板的灯和显示内容。我们所要知道的就是这个实验的思路,这次实验就是和小组成员在同一个局域网内,每人负责一个topic,当触摸P键后,我的topic_0发送信息到他的topic_1上时,他的掌控板上会显示我发送的消息,同时反之他发送也是一样。同时,我们可以在同一个局域网下,通过sIoT上的连接配置,使手机app和掌控板都有了连接,就可以在手机app上的颜色调整来控制掌控板的灯光了。这样即可完成本次实验。