我是靠谱客的博主 深情玫瑰,最近开发中收集的这篇文章主要介绍AliyunIoTSDK库使用问题和阿里云错误码解决一、遇到的问题及解决方法二、总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

AliyunIoTSDK库使用问题和阿里云错误编码解决

  • 一、遇到的问题及解决方法
    • 1. 提示未使用json格式
    • 2. 阿里云5096错误
    • 3. 阿里云6304错误
  • 二、总结

本例TSL物模型:

{
"schema": "https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json",
"profile": {
"version": "1.0",
"productKey": "a10rLI27mdn"
},
"properties": [],
"events": [
{
"identifier": "testid",
"name": "test",
"type": "info",
"required": false,
"desc": "事件测试",
"method": "thing.event.testid.post",
"outputData": [
{
"identifier": "outputid",
"name": "output",
"dataType": {
"type": "bool",
"specs": {
"0": "关",
"1": "开"
}
}
}
]
}
],
"services": [],
"functionBlockId": "001",
"functionBlockName": "事件01"
}

本例应用的代码:

#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
#include <AliyunIoTSDK.h>
AliyunIoTSDK iot;
static WiFiClient espClient;
#define PRODUCT_KEY "xxxxxxx"
#define DEVICE_NAME "xxxxxxx"
#define DEVICE_SECRET "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
#define REGION_ID "cn-shanghai"
#define WIFI_SSID "xxxxxxx"
#define WIFI_PASSWD "xxxxxxx"
void wifiInit(const char *ssid, const char *passphrase)
{
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, passphrase);
WiFi.setAutoConnect (true);
WiFi.setAutoReconnect (true);
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println("WiFi not Connect");
}
Serial.println("Connected to AP");
}
void setup()
{
Serial.begin(115200);
wifiInit(WIFI_SSID, WIFI_PASSWD);
AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
// 绑定属性回调
AliyunIoTSDK::bindData("testid", powerCallback);
}
unsigned long lastMsMain = 0;
void loop()
{
AliyunIoTSDK::loop();
if (millis() - lastMsMain >= 5000)
{
lastMsMain = millis();
// 发送事件到阿里云平台
AliyunIoTSDK::sendEvent(“testid",a);
}
}

一、遇到的问题及解决方法

1. 提示未使用json格式

  • 用<arduinojson.h>库捏一个json数据后,把生成的变量a传递到AliyunIoTSDK::sendEvent();这个函数的第二个参数中,方法如下:

StaticJsonDocument<200> doc;//创建一个名字叫doc的隐藏json文档(因为不需要传递到最终函数中)
StaticJsonDocument<200> doc1;//再创建一个json文档,因为json数据需要多层嵌套
doc1["id"] = "123";
doc1["version"] = "1.0";
doc1["method"] = "thing.event.testid.post";
JsonObject myO = doc.createNestedObject("Power"); //添加一个对象节点
myO["value"] = "on";
JsonObject myO1 = doc.createNestedObject("Power1"); //添加一个对象节点
myO1["value1"] = "23.6";
JsonObject myO2 = doc1.createNestedObject("params");//添加一个对象节点
myO2["power"] = myO;
myO2["wf"] = myO1;
void a ;
serializeJsonPretty(doc1, a);

结果编译结果提示数据类型错误

  • 于是查阅<AliyunIoTSDK.h>文件内对函数中变量类型的定义,发现函数的第二个参数的数据类型为字符类型:
 /*
* 发送事件到云平台(附带数据)
* @param eventId 事件名,在阿里云物模型中定义好的
* @param param 字符串形式的json 数据,例如 {"${key}":"${value}"}
*/
static void sendEvent(const char *eventId, const char *param);
  • 于是定义一个 char a
    AliyunIoTSDK::sendEvent("testid",a);——不成功
  • 定义一个 const char *a
    AliyunIoTSDK::sendEvent("testid",a);——不成功
  • 参数直接换doc1
    AliyunIoTSDK::sendEvent("testid",doc1);——不成功
  • 考虑使用esp官方SDK,太复杂——暂时放弃json数据类型的研究(以后再研究)
  • 第二天决定不用变量传递了,将函数的第二个参数直接转义为字符串
    AliyunIoTSDK::sendEvent("testid",""output":"0"");

2. 阿里云5096错误

阿里云官方文档给出的错误原因:

物模型中未定义事件,或事件入参与定义不符。
注意: 如果是自定义物模型模块中的事件,需拼接自定义模块标识符,格式为{tsl.functionBlockId}:{tsl.event.identifier}。

  • 所以拼接模块id和事件id
    AliyunIoTSDK::sendEvent(“001:testid",""output":“0"");——5096问题解决

3. 阿里云6304错误

阿里云官方文档给出的错误原因:

TSL校验时,传入的参数在结构体中不存在。

  • 添加value(提示output参数不存在)
    AliyunIoTSDK::sendEvent(“001:testid","001:testid","value":{"output":"0"}}");——不成功

  • 添加空格
    AliyunIoTSDK::sendEvent(“001:testid","001:testid","value": {"output": "0"}}");——不成功

  • 把“0”字符串改为数值
    AliyunIoTSDK::sendEvent(“001:testid","001:testid","value":{"output":}}");——不成功

  • 改输出参数名称为输出参数标识符
    AliyunIoTSDK::sendEvent(“001:testid","001:testid","value":{"outputid":"0"}}");

    成功!

二、总结

  • 学会查阅头文件
  • 学会查看官方文档,逐逐字逐句斟酌文档含义
  • 上报的json数据中要键值对应,key是TSL物模型中的标识符,value要对应设置好的数据类型
  • 可以不用加value键,有真实参数键值就可以
  • 第二个函数参数不用加{“id”: “123”,“version”:“1.0”,“params”:“method”:“thing.event.001:testid.post”},AliyunIoTSDK库会自动加(6304提示method不存在的可能所在)
     
     
     
    如果有其他问题可以评论我们一起交流讨论

最后

以上就是深情玫瑰为你收集整理的AliyunIoTSDK库使用问题和阿里云错误码解决一、遇到的问题及解决方法二、总结的全部内容,希望文章能够帮你解决AliyunIoTSDK库使用问题和阿里云错误码解决一、遇到的问题及解决方法二、总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(81)

评论列表共有 0 条评论

立即
投稿
返回
顶部