文章目录

  • 创作缘由
  • 实验目的及要求
  • 实验原理与内容
  • 实验软硬件环境
  • 实验过程(实验步骤、记录、数据、分析)
  • 测试、调试及结果分析
  • 实验结论与体会

创作缘由

大三上学期,我们的专业开设了一门物联网的课程,用到的教材是由刘伟善编著的《Arduino创客之路(智能感知技术基础)》以及使用的软件是国产青少年编程软件Mind+。为了记录和分享我的学习成果,我将编写且分享本学期此课程的全部实验作业。

实验目的及要求

通过AppInventor结合sIoT实现手机app控制掌控板的灯和显示内容

实验原理与内容

原理:sIoT可以在局域网上实现mqtt消息的通讯。通过AppInventor上开发的软件结合SIoT可以实现控制掌控板的灯的颜色。(借助sIoT可以通过手机app实现局域网内的设备操控)。
内容:把在AppInventor上开发的可以连接mqtt服务器程序且用途是控制掌控板的灯光颜色的Android 软件安装在个人手机上,在Mind+上实现与掌控板的连接,创建局域网环境和一个SIoT设备。利用Mind+网络服务中的WiFi和MQTT等功能编写图形程序实现Android 软件控制掌控板灯光颜色。

实验软硬件环境

硬件:掌控板
软件:Mind+、SIoT_windows1.2

实验过程(实验步骤、记录、数据、分析)

  1. 实验步骤
    ① 打开Mind+与掌控板设备连接。
    ② 切换到上传模式,在扩展中主控板选项中选择掌控板,在网络服务选项中选择WiFi和MQTT

③ 运行SIol_windows1.2.exe,实验中途不得关闭,将自己的计算机作为MQTT服务器。

④ 在浏览器中用SIol_windows1.2的Web服务器地址打开自己的服务器,输入用户名和密码登录后创建一个项目。

⑤ 设置Android 控制掌控板灯光软件相关连接参数。

⑥ 个人电脑和手机都连接到同一个WIFI热点,步骤⑤的服务器地址与个人电脑网络IP地址一致
⑦编写代码:连接WIFI热点→MQTT初始化参数→MQTT发起连接
编写代码:当接收到Topic_0的MQTT消息→屏幕显示文字MQTT消息→设置调整灯光代码(以下是代码及MQTT初始化参数,MQTT初始化参数中的服务器地址与个人电脑网络IP地址一致)



⑧ 把代码上传到设备、等待WIFI连接后及MQTT初始化后,手机上的控制灯光颜色软件上调整按钮,改变掌控板灯光颜色。

  1. 核心代码
/*!
 * MindPlus
 * mpython
 *
 */
#include <MPython.h>
#include <DFString.h>
#include <DFRobot_Iot.h>

// 动态变量
volatile float mind_n_DouHao1, mind_n_DouHao2, mind_n_R, mind_n_G, mind_n_B;
// 函数声明
void     obloqMqttEventT0(String& message);
uint32_t rgbToColor(uint8_t r, uint8_t g, uint8_t b);
// 静态常量
const String topics[5] = {"xxxxxxxx/xxx","","","",""};
const MsgHandleCb msgHandles[5] = {obloqMqttEventT0,NULL,NULL,NULL,NULL};
// 创建对象
DFRobot_Iot myIot;


// 主程序开始
void setup() {
	mPython.begin();
	myIot.setMqttCallback(msgHandles);
	myIot.wifiConnect("Not", "12345678");
	while (!myIot.wifiStatus()) {yield();}
	display.setCursorLine(1);
	display.printLine(myIot.getWiFiLocalIP());
	myIot.init("192.168.xx.xx","602","","iot", topics, 1883);
	myIot.connect();
	while (!myIot.connected()) {yield();}
	display.setCursorLine(2);
	display.printLine("MQTT连接成功");
}
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,0,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);
}

  1. 实验效果图


测试、调试及结果分析

设置热点时,应该连接个人热点,且在班级与其他同学一个做实验时,应该备注比较容易区分的热点名称,防止不在同一局域网导致实验失败。

实验结论与体会

AppInventor是一个完全在线开发的Android编程环境,抛弃复杂的程式代码而使用积木式的堆叠法来完成Android程式。

更多推荐

物联网:通过AppInventor结合sIoT实现手机app控制掌控板的灯和显示内容