sIoT及安卓app实现mqtt

**

物联网——sIoT及安卓app实现mqtt

**

一、实验目的

【实验一】实现sIoT配置并实现sIoT上mqtt消息的通讯。
【实验二】通过AppInventor结合sIoT实现手机app控制掌控板的灯和显示内容。

二、实验原理

sIoT可以在局域网上实现mqtt消息的通讯。借助sIoT可以通过手机app实现局域网内的设备操控。

三、实验软硬件环境

  • 硬件:掌控板
  • 软件: Mind+图形化编程软件
  • 环境: AppInventor在线开发Android环境
    这里用到了 MIT App Inventor

四、实验过程

实验一 SIoT配置&SIoT上mqtt消息的通讯

1.SIoT配置:
SIoT是一个针对学校场景的开源免费的MQTT服务器软件,可一键创建本地物联网服务器,摆脱联网困扰。
与Mind+结合可以让小学生到高中生都可以轻松上手物联网。
下载SIoT地址
打开应用程序
在这里插入图片描述
打开siot控制界面并创建id
在这里插入图片描述
2.核心代码截图:

(1)模块化代码截图:
在这里插入图片描述MQTT参数配置:
在这里插入图片描述

(2)具体代码截图(c++):

/*!
 * MindPlus
 * mpython
 *
 */
#include <MPython.h>
#include <DFRobot_Iot.h>
// 函数声明
void obloqMqttEventT1(String& message);
// 静态常量
const String topics[5] = {"201*******","202*******","203*******","",""};
const MsgHandleCb msgHandles[5] = {NULL,obloqMqttEventT1,NULL,NULL,NULL};
// 创建对象
DFRobot_Iot myIot;


// 主程序开始
void setup() {
	mPython.begin();
	myIot.setMqttCallback(msgHandles);
	myIot.wifiConnect("orange", "12345678");
	while (!myIot.wifiStatus()) {yield();}
	display.setCursorLine(1);
	display.printLine(myIot.getWiFiLocalIP());
	myIot.init("192.168.43.***","602","","iot", topics, 1883);
	myIot.connect();
	while (!myIot.connected()) {yield();}
	display.setCursorLine(2);
	display.printLine("mqtt连接成功");
}
void loop() {
	if ((buttonA.isPressed())) {
		myIot.publish(topic_2, "203*******");
	}
}


// 事件回调函数
void obloqMqttEventT1(String& message) {
	display.setCursorLine(3);
	display.printLine(message);
}

3.实验效果图:
在这里插入图片描述

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

1.AppInventor截图:
在这里插入图片描述打包生成app:
在这里插入图片描述
2.核心代码截图:
(1)模块化代码截图:
在这里插入图片描述

(2)程序块代码截图:

/*!
 * 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 uint8_t imageMatrix[][350] = {
	{0x0,0x0,0x0,0x1f,0x80,0x0,0x0,0x0,0x0,0x0,0x30,0xc0,0x0,0x0,0x0,0x0,0x0,0x60,0x60,0x0,0x0,0x0,0x0,0x0,0x40,0x20,0x0,0x0,0x0,0x0,0x0,0x40,0x20,0x0,0x0,0x0,0x0,0x0,0x40,0x20,0x0,0x0,0x0,0x0,0x0,0x60,0x60,0x0,0x0,0x0,0x0,0x0,0x30,0xc0,0x0,0x0,0x0,0x0,0x0,0x33,0x80,0x0,0x0,0x0,0x1e,0x0,0x22,0x0,0x0,0x0,0x0,0x33,0x80,0x62,0x0,0x3c,0x0,0x0,0x60,0xc0,0x46,0x0,0xee,0x0,0x0,0x40,0xc0,0xc6,0x1,0x83,0x0,0x0,0xc0,0x40,0x86,0x1,0x1,0x80,0x0,0x40,0xc1,0x8c,0x1,0x1,0x80,0x0,0x7c,0x9f,0xff,0x1,0x1,0x80,0x0,0x37,0x98,0x3,0x81,0xa3,0x0,0x0,0x24,0x30,0x0,0x83,0x26,0x0,0x0,0x64,0x30,0x0,0xc6,0x7c,0x0,0x0,0xc7,0xff,0xff,0xf8,0x40,0x0,0x7f,0xff,0xff,0xff,0xff,0xfc,0x0,0xfe,0x0,0x0,0x0,0x1,0xff,0xc0,0xc0,0x0,0x0,0x0,0x0,0x1,0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,0x3f,0xff,0xff,0xe0,0x1,0x80,0xdc,0x0,0x0,0x0,0x3,0xf9,0x80,0xcf,0xff,0xff,0xff,0xfc,0x5,0x80,0xcb,0xff,0xff,0xff,0xff,0xf5,0x80,0xcb,0xf8,0xff,0xff,0x9f,0xf9,0x80,0xcb,0xf8,0x7f,0xff,0xf,0xf9,0x80,0xcb,0xf8,0x7f,0xff,0xf,0xe9,0x80,0xcb,0xf8,0x7f,0xff,0xf,0xe9,0x80,0x4b,0xf8,0x7f,0xff,0xf,0xe9,0x80,0x68,0x7c,0xff,0xff,0x1f,0xf1,0x80,0x63,0x87,0xff,0xff,0xff,0x93,0x0,0x60,0x38,0x7f,0xff,0xf0,0x33,0x0,0x60,0x3,0x8f,0xfe,0xf,0x83,0x0,0x60,0x0,0x38,0x3,0xe0,0x3,0x0,0x60,0x0,0x7,0xf8,0x0,0x3,0x0,0x60,0x0,0x0,0x0,0x0,0x3,0x0,0x60,0x0,0x0,0x0,0x0,0x3,0x0,0x60,0x0,0x0,0x0,0x0,0x3,0x0,0x60,0x0,0x0,0x0,0x0,0x6,0x0,0x60,0x0,0x0,0x0,0x0,0x6,0x0,0x60,0x0,0x0,0x0,0x0,0x6,0x0,0x7f,0xff,0xff,0xff,0xff,0xfe,0x0,0x7f,0xff,0xff,0xff,0xff,0xfe,0x0}
};
const String topics[5] = {"201******","","","",""};
const MsgHandleCb msgHandles[5] = {obloqMqttEventT0,NULL,NULL,NULL,NULL};
// 创建对象
DFRobot_Iot myIot;


// 主程序开始
void setup() {
	mPython.begin();
	myIot.setMqttCallback(msgHandles);
	display.fillScreen(0);
	display.drawImage(39, 7, 50, 50, imageMatrix[0]);
	myIot.wifiConnect("orange", "12345678");
	while (!myIot.wifiStatus()) {yield();}
	display.fillScreen(0);
	display.setCursor(0, 0);
	display.print("WIFI已连接");
	myIot.init("192.168.43.***","602","","iot", topics, 1883);
	myIot.connect();
	while (!myIot.connected()) {yield();}
	display.fillScreen(0);
	display.setCursor(0, 0);
	display.print(myIot.getWiFiLocalIP());
}
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);
}

3.实验效果图:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

五、测试/调试及实验结果分析

常见问题

  1. 掌控板连接不上,WIFI能连接,MQTT无法连接.

    查看siot的小黑窗口,如果显示“账号或密码错误”,说明当前安装的mind+为内测版本,请去官网下载最新版本重新安装即可。

    处理方法:
    首先查看掌控板和服务器所在电脑是否在一个WIFI网络中,如果不是需让两个连接同一个WIFI。
    WIFI没问题的情况下,查看SIOT服务器是否正常启动。通过网页访问http://IP:8080,如果不能正常访问则需查看IP地址是否错误,再次使用ipconfig查看是否IP地址有更新或者填错了。
    网页如果能正常访问,说明服务器正常启动并运行。
    接下来判断是否为服务器参数填写错误,切换到实时模式,填写同样的参数查看是否能连接服务器,如果不能连接请至Mind+官方交流群进行交流。
    如果可以访问,则说明服务器及软件协议没有问题,此时使用另外一台电脑访问服务器这台电脑的ip,通过实时模式访问此IP或者通过ping IP访问服务器。
    如果发现不能访问,那么是防火墙或杀毒软件问题,此时关闭防火墙或者杀毒软件,重启电脑再次连接。
    如果可以访问,则可能是主控板wifi模块有故障,可以尝试更换主控板测试。

  2. 如果出现在windows上SIOT服务器被防火墙拦截(表现为其他电脑无法访问),可以尝试在树莓派上如何搭建SIOT服务器:树莓派上搭建SIOT服务器的方法

六、实验结论与体会

实现sIoT配置并实现sIoT上mqtt消息的通讯。
SIoT是一个针对学校场景的开源免费的MQTT服务器软件,可一键创建本地物联网服务器,摆脱联网困扰。通过配置siot上的项目ID、名称,在同一局域网内与掌控板进行连接通过mqtt进行消息的通讯。
通过AppInventor结合sIoT实现手机app控制掌控板的灯和显示内容。
通过AppInventor即线上开发Android环境开发控制掌控板功能的手机app,结合siot在实验一的基础上实现手机app控制掌控板的灯和显示内容。

后言

因实验时传送的数据涉及个人隐私,故效果图展示略微修改但保证数据准确

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值