本文是该项目的难点:即设备到设备(M2M)信息交换问题。
在前文中,我完成了遥控端esp8266把按键信号上报给阿里云,以及阿里云把命令发送给小车esp32.
相关命令如下:
遥控端esp8266把按键信号上报给阿里云(以上报数据“4”为例):
`void mqttIntervalPost_4()
{
char param[32];
char jsonBuf[128];
sprintf(param, "{\"my_command\":%d}",4);
sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
Serial.println(jsonBuf);
boolean d = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
}`
本代码发送给云端的内容:
{“id”:“123”,“version”:“1.0”,“method”:“thing.event.property.post”,“params”:{“my_command”:4}}
而小车接收端接收云端的命令:
void callback(char * topic, byte * payload, unsigned int len){
/* Serial.print("Recevice [");
Serial.print(topic);
// Serial.print("] ");
for (int i = 0; i < len; i++){
Serial.print((char)payload[i]);
}
Serial.println();*/
StaticJsonBuffer<400> jsonBuffer;
JsonObject& root = jsonBuffer.parseObject((const char *)payload);
if(!root.success()){
Serial.println("parseObject() failed");
return;
}
CarStatus = root["items"][Identifier]["value"];
//Serial.print("readCarStatus=");
//Serial.print(CarStatus);
//Serial.println();
}
如何能让遥控器esp8266发送的数据“4”被小车上的esp32接收到,并解析出来,赋给变量CarStatus?这个问题耗费了我数小时。一位网友的帖子给了我方向。
解决方法是利用阿里云的“规则引擎”中的“云产品流转”。“云产品流转”能让两台机器的数据进行交换(m2m).
步骤见下图:
创建规则,我的规则为“info_trans"
找到小车端自定义Topic中的订阅行的内容(功能为接收云端下发的信息)
找到遥控端自定义Topic中的发布行(update)的内容(功能为把esp8266的内容上传给云端)
在”云产品流转“中编写SQL
首先编写接收信息的SQL
效果如下
再编写将接收到的信息转发给谁:
完整的产品流转SQL语言如下:
这样,小车与遥控器之间的通讯就畅通了。