esp8266+arduino IDE+阿里云IOT+萤石云=远程视频遥控车(四)

本文是该项目的难点:即设备到设备(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语言如下:
在这里插入图片描述

这样,小车与遥控器之间的通讯就畅通了。

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
arduino是一种电子积木,适合入门硬件开发。arduino的编程简单,IDE功能强大,支持的开发板和功能库文件丰富,还有全球无数的贡献者不停地完善整个软硬件生态,所以吸引了许多国家无数的开发群体。arduino能开发物联网吗?答案是“相当能”。本课程就以arduino体系中支持的一款价格便宜、开发简便的开发板---wemos d1为硬件平台,带您一步步入门物联网开发。物联网开发肯定需要一个云平台,本课程推荐您用阿里云物联网平台,它运行可靠,功能丰富,开发简便,非常适合物联网知识的学习。有许多同学愿意使用“一键式”“无代码式”的开发平台,在此本课程并不推荐,因为学习的知识越多,对大家应对未来挑战的能力越有帮助。从入门角度而言,以arduino的编程方式,链接高大上的阿里云物联网平台,就成为了一种有易学、有趣、专业的组合。通过本课程的学习,您将学习到arduino的基本操作、硬件资源介绍、阿里云物联网平台使用基础、mqtt通信基础、阿里云物联网平台库文件介绍、一个物联网小灯实例、以及IoT Studio的基本知识。学完本课程之后,您将学会使用ESP8266开发简单的物联网硬件。  而开发方式是非常简单的arduino方式,这种方式相比esp-idf等命令行方式要易学不少,但是对物联网学习的深刻程度比esp-idf一点不次。     本视频使用到的零件与淘宝上大致价格:   wemos d1开发板,大约20元或者esp8266小黑板  大约20元 
以下是一个简单的 Arduino ESP8266 连接阿里云的示例代码: #include <ESP8266WiFi.h> #include <PubSubClient.h> const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* mqtt_server = "your_MQTT_SERVER"; const char* mqtt_user = "your_MQTT_USER"; const char* mqtt_password = "your_MQTT_PASSWORD"; const char* mqtt_topic = "your_MQTT_TOPIC"; WiFiClient espClient; PubSubClient client(espClient); void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("WiFi connected"); client.setServer(mqtt_server, 1883); client.setCallback(callback); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message received ["); Serial.print(topic); Serial.print("]: "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); } void reconnect() { while (!client.connected()) { Serial.print("Connecting to MQTT..."); if (client.connect("ESP8266Client", mqtt_user, mqtt_password)) { Serial.println("connected"); client.subscribe(mqtt_topic); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); delay(5000); } } } void loop() { if (!client.connected()) { reconnect(); } client.loop(); } void sendData(float data) { char payload[10]; String dataString = String(data); dataString.toCharArray(payload, 10); client.publish(mqtt_topic, payload); } // 主函数 void loop() { float data = 123.456; sendData(data); delay(1000); } 注意:你需要替换代码中的 SSID、密码、MQTT服务器信息和主题信息,以适应你自己的环境。此外,还需要下载和安装 PubSubClient 库。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值