admin管理员组

文章数量:1794759

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

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

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

创作缘由

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

实验目的及要求

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

实验原理与内容

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

实验软硬件环境

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

实验过程(实验步骤、记录、数据、分析)
  • 实验步骤 ① 打开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初始化后,手机上的控制灯光颜色软件上调整按钮,改变掌控板灯光颜色。

  • 核心代码
  • /*! * 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); }
  • 实验效果图
  • 测试、调试及结果分析

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

    实验结论与体会

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

    本文标签: 内容手机AppInventorsIoTapp