一 前言
阿里云平台配置在这里不过多叙述。本文使用MQTT协议上传传感器信息,手机上位机显示传感器信息,并且能够发送指令控制硬件外围设备。
二 实现框图
三 ESP8266关键实现代码
3.1 MQTT协议连接参数
MQTT连接参数共有五个,可以在设备界面的‘MQTT连接参数’下找到。
3.2 实现代码
//在这里修改MQTT客户端信息
#define MQTT_HOST "iot-06z00fk3q0an6dd.mqtt.iothub.aliyuncs.com"
#define MQTT_PORT 1883
#define MQTT_USER "ESP32&k14i5jqUaww"
#define MQTT_PASSWD "3089e92bd8119d9241aaf8de6c8416b85635a8a5d72f35e7494e337cc5eb9488"
#define MQTT_CLIENTID "k14i5jqUaww.ESP32|securemode=2,signmethod=hmacsha256,timestamp=1713347523756|"
其中MQTT_HOST和MQTT_PORT。为MQTT服务器地址和端口。这两项内容可以固定。其余三项因人而异。根据自己实际的MQTT连接参数填入。
//MQTT订阅主题,下发消息接收函数
void callback(char* topic, byte* payload, unsigned int length) {
}
在该函数中解析手机上位机发送的命令。命令字符串格式为Json格式,需要用到ArduinoJson库。可以在官网找到相应例程。
StaticJsonDocument<200> jsonBuffer; //声明一个JsonDocument对象,长度200
// 对象嵌套
JsonObject root = jsonBuffer.createNestedObject("params"); //添加一个对象节点
root["tem"] = tem; //数据1
root["rain"] = rain; //数据2
root["light"] = light; //数据3
jsonBuffer["version"]="1.0";
jsonBuffer["method"]="thing.event.property.post";
String output;
serializeJson(jsonBuffer, output); // 序列化JSON数据并导出字符串
Serial.println(output); // 串口打印最后输出的字符串
client.publish(up_topic,output.c_str());//数据上传
上图为使用ArduinoJson库将上传的信息转化为Json字符串,如果上传信息不为Json格式将会报错!
四 手机上位机实现
简单开发一个手机上位机,用于观测数据及下发指令。开发环境为APP Inventor。使用了三方MQTT插件UrsAI2Paho。该插件的下载链接:
https://download.csdn.net/download/qq_53038430/89480544?spm=1001.2014.3001.5503
APP Inventor实现功能逻辑为代码块堆积,十分简单。APP如下所示:
主要部分代码块如下所示。
上面代码块为实现MQTT连接部分代码。总共就只有这点,是不是很简单呢。
上面代码块实现功能为,接收来自手机APP订阅主题的消息并将信息显示在屏幕上。
上面代码块是手机向硬件设备发送开灯命令,硬件收到命令流后,经解析Json数据即可获取下发的指令信息。
五 结语
想获取APP Inventor工程包的童鞋,请关注后,后台私信我,我把工程私发发给你。