ESP32基础应用之使用两个ESP32通过阿里云物联网平台实现相互通信
创始人
2024-02-08 07:59:09

文章目录

  • 1 阿里云物联网平台
  • 2 程序编写
    • 2.1 ESP32-COM4 设备
    • 2.1 ESP32-COM5 设备
  • 3 实验现象分析

1 阿里云物联网平台

  1. 在设备管理下创建两个设备,参考ESP32基础应用之ESP32与阿里云物联网平台实现数据互传(MQTT协议)
    在这里插入图片描述

  2. 在规则引擎下创建云产品流转,包括数据源、数据目的、解析器,参考云产品流转概述
    在这里插入图片描述创建数据源
    在这里插入图片描述

    创建数据目的
    在这里插入图片描述创建解析器
    在这里插入图片描述依次关联数据源、数据目的、解析脚本,解析脚本较为复杂,这里只实现简单的数据转发到另一Topic
    在这里插入图片描述

    //通过payload函数,获取设备上报的消息内容,并按照JSON格式转换。
    var data = payload("json");
    //直接流转物模型上报数据。
    writeIotTopic(1000, "/a1Buwr73pUI/dev-esp32-com5/user/get", data)
    

    这里只实现了设备1将数据流转到设备2,还需要使用同样的方法创建另一个解析器将设备2的数据流转到设备1。

  3. 云产品流转有许多复杂的规则与应用,这里只实现简单的数据转发到另一Topic
    在这里插入图片描述
    在这里插入图片描述

2 程序编写

程序逻辑:

  1. ESP32-COM4 设备按键按下,上传数据到阿里云物联网平台并流传到ESP32-COM5设备,将数据打印出来;
  2. ESP32-COM5 设备按键按下,上传数据到阿里云物联网平台并流传到ESP32-COM4设备,将数据打印出来;

2.1 ESP32-COM4 设备

  1. 本地数据上传
static void mqtt_test_task(void *pvParameters)
{int  msg_id;char key_flag = 0;//构造JSON格式数据,该数据用于反馈给阿里云物联网平台,cJSON *Wroot =	cJSON_CreateObject();cJSON_AddItemToObject(Wroot, "DeviceSource", cJSON_CreateString("ESP32-COM4"));cJSON_AddItemToObject(Wroot, "DevicePurpose", cJSON_CreateString("ESP32-COM5"));cJSON_AddItemToObject(Wroot, "Data", cJSON_CreateString("hello ,I am COM4"));cJSON_AddItemToObject(Wroot, "Date", cJSON_CreateString("444444"));memset(local_data_tx,0x0,LOCAL_DATA_SIZE);		int len = strlen(cJSON_Print(Wroot));			memcpy(local_data_tx, cJSON_Print(Wroot),len); //将JSON格式数据复制到数组中,将以数组的形式传递给发布函数while(1){if(0 == gpio_get_level(USER_KEY_PIN)){vTaskDelay(10 / portTICK_RATE_MS);while(0 == gpio_get_level(USER_KEY_PIN)){if(key_flag == 0){key_flag = 1;printf("key press  \n");msg_id = esp_mqtt_client_publish(client, AliyunPublishTopic_user_update, local_data_tx, strlen(local_data_tx), 0, 0);ESP_LOGI(TAG, "esp32 com4 send data successful, msg_id=%d", msg_id);	}}}else{key_flag = 0;}}vTaskDelete(NULL);
}
  1. 打印收到的数据
static int user_parse_json(char *json_data)
{cJSON *root = NULL;root = cJSON_Parse(json_data);   printf("%s\n\n", cJSON_Print(root));   /*将完整的数据以JSON格式打印出来*/return 0;
}
static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event)
{esp_mqtt_client_handle_t client = event->client;int  msg_id;switch (event->event_id) {case MQTT_EVENT_DATA:ESP_LOGI(TAG, "MQTT_EVENT_DATA");printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);printf("DATA=%.*s\r\n", event->data_len, event->data);memset(local_data_rx,0x0,LOCAL_DATA_SIZE);strncpy(local_data_rx, event->data, event->data_len); //将指针类型的数据复制到一个数组中msg_id = user_parse_json(local_data_rx);break;default:ESP_LOGI(TAG, "Other event id:%d", event->event_id);break;}return ESP_OK;
}

2.1 ESP32-COM5 设备

  1. 本地数据上传
static void mqtt_test_task(void *pvParameters)
{int  msg_id;char key_flag = 0;//构造JSON格式数据,该数据用于反馈给阿里云物联网平台,cJSON *Wroot =	cJSON_CreateObject();cJSON_AddItemToObject(Wroot, "DeviceSource", cJSON_CreateString("ESP32-COM5"));cJSON_AddItemToObject(Wroot, "DevicePurpose", cJSON_CreateString("ESP32-COM4"));cJSON_AddItemToObject(Wroot, "Data", cJSON_CreateString("hello ,I am COM5"));cJSON_AddItemToObject(Wroot, "Date", cJSON_CreateString("555555"));memset(local_data_tx,0x0,LOCAL_DATA_SIZE);		int len = strlen(cJSON_Print(Wroot));			memcpy(local_data_tx, cJSON_Print(Wroot),len); //将JSON格式数据复制到数组中,将以数组的形式传递给发布函数for(;;){if(0 == gpio_get_level(USER_KEY_PIN)){vTaskDelay(10 / portTICK_RATE_MS);while(0 == gpio_get_level(USER_KEY_PIN)){if(key_flag == 0){key_flag = 1;printf("key press  \n");msg_id = esp_mqtt_client_publish(client, AliyunPublishTopic_user_update, local_data_tx, strlen(local_data_tx), 0, 0);ESP_LOGI(TAG, "esp32 com4 send data successful, msg_id=%d", msg_id);	}}}else{key_flag = 0;}}vTaskDelete(NULL);
}
  1. 打印收到的数据
static int user_parse_json(char *json_data)
{cJSON *root = NULL;root = cJSON_Parse(json_data);   printf("%s\n\n", cJSON_Print(root));   /*将完整的数据以JSON格式打印出来*/return 0;
}
static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event)
{esp_mqtt_client_handle_t client = event->client;int  msg_id;switch (event->event_id) {case MQTT_EVENT_DATA:ESP_LOGI(TAG, "MQTT_EVENT_DATA");printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);printf("DATA=%.*s\r\n", event->data_len, event->data);memset(local_data_rx,0x0,LOCAL_DATA_SIZE);strncpy(local_data_rx, event->data, event->data_len); //将指针类型的数据复制到一个数组中msg_id = user_parse_json(local_data_rx);break;default:ESP_LOGI(TAG, "Other event id:%d", event->event_id);break;}return ESP_OK;
}

3 实验现象分析

在这里插入图片描述

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...