将设备接入阿里云并且能显示数据
协议
首先我们需要理解阿里云IOT的 ALINK JSON协议,其实这个协议很简单
{
"id":1,
"version":"1.0",
"params":
{
"Frequency":5000,
"direction":0,
"onoff":1
},
"method":"thing.event.property.post"
}
以上就是标准的Alink Json协议的范本,params的标签下面就是我们之前构建的设备模型的参数,只要将数据匹配进去云端就可以正确解析我们设备构建的数据了
我们来构建硬件程序(标准的arduino ESP8266 C++源码)
用到如下库:
https://github.com/MINI-Qiang/aliIotLink 【阿里云IOT链接】
https://github.com/bblanchon/ArduinoJson/tree/5.x 【arduinoJSON第5版,如果使用6版本注意自行修改】
#include <aliIotLink.h>
#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
const char* ssid = "OCROBOT";
const char* password = "12345678";
static const char ProductKey[] PROGMEM = "a15mLG9bUxt";
static const char DeviceName[] PROGMEM = "uJCypeOEunEP4R5MJEar";
static const char DeviceSecret[] PROGMEM = "YXlW9wW2EYtXweZfwCZcUFbYhnDgnVr7";
static const char postTopic[] PROGMEM = "/sys/a15mLG9bUxt/uJCypeOEunEP4R5MJEar/thing/event/property/post"; //上报消息topic
static const char setTopic[] PROGMEM = "/sys/a15mLG9bUxt/uJCypeOEunEP4R5MJEar/thing/service/property/set"; //服务器消息topic
WiFiClient espClient; //实例化 wifi网络
PubSubClient client(espClient); //将网络传入MQTT
AliIotLink aliLink(client); //将mqtt传入服务
void working(uint16_t delayTime, float temps);
//回调函数(本项不用)
//void Callbacks(char* topic, byte* payload, unsigned int length)
//{
//}
void setup()
{
Serial.begin(115200);
//初始化WIFI
WiFi.mode(WIFI_STA); // 接入端模式
WiFi.begin(ssid, password); //初始化并且链接wifi
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
//初始化阿里云
aliLink.subTopic(FPSTR(setTopic)); //订阅服务器下行消息
//aliLink.setCallback(Callbacks); //注册下发消息回调函数(本项目不使用)
aliLink.begin(FPSTR(DeviceName), FPSTR(ProductKey), FPSTR(DeviceSecret)); //完成初始化配置 三元素(DeviceName,ProductKey,DeviceSecret)
}
void loop()
{
//阿里云链接维持
aliLink.loop();
if (aliLink.state() != 0) //错误消息打印
{
Serial.println(aliLink.state()); //返回平台链接消息代码
}
working(10000); //上报业务,每10秒(10000ms)上报一次
}
// 构建Alink协议
String updateAlinkJson(uint16_t _id, JsonObject &_AliIotJson)
{
StaticJsonBuffer<256> jsonBuffer;
JsonObject& AlinkJson = jsonBuffer.createObject();
AlinkJson["id"] = _id;
AlinkJson["version"] = "1.0";
AlinkJson["params"] = _AliIotJson;
AlinkJson["method"] = "thing.event.property.post";
String JsonStr;
AlinkJson.printTo(JsonStr);
return JsonStr;
}
//定时上报数据与状态
void working(uint16_t delayTime)
{
uint32_t thisTime = millis();
if ((thisTime % delayTime) == 0)
{
StaticJsonBuffer<130> jsonBuffer; //定义json缓冲区
JsonObject& paramsJson = jsonBuffer.createObject(); //初始化对象
paramsJson["Frequency"] = 4999; //将频率数据填为5000
//paramsJson["direction"] = false; //
//paramsJson["onoff"] = true; //
String data = updateAlinkJson(random(1, 100), paramsJson); //提供一个随机ID,并且将负载消息加入
aliLink.publish(postTopic, data.c_str());
Serial.println(data); //串口同步输出消息
}
}
代码结构非常简单,填写自己的wifi帐号密码,然后按照之前我们创建设备的时候提供的链接参数进行修改
然后使用ArduinoJSON支持库构建一个阿里云ALINKJSON的标准框架提交数据即可完成数据数据上行
我们确认下,新设备是没有任何数据的
程序上传
打开IDE 上传我们的程序到控制器,注意,上传的时候不能堆叠485模块,因为上传程序也会使用串口,如果堆叠会造成信道冲突致使失败
注意确认选择板卡 速率和端口
然后点击上传,上传完成后,硬件会自动连接WIFI,然后开始向阿里云发送数据
从云端的设备运行状态就可以看出来,设备上报的数据已经在了。而且设备本身的状态也变成了在线,至此,我们的硬件与阿里云IOT的链接就完成了
内容总结:本章内容需仔细阅读源码,理解如何通过json和阿里云进行上报数据的
系列链接