ESP32 web 对接华为云平台--MQTT协议

发布时间:2026/8/13 17:01:28

ESP32 web 对接华为云平台--MQTT协议
文章目录前言一、MQTT协议二、如何使用MQTT协议对接华为云1.注册华为云账号2.设备接入中创建资源空间3.如何连接4.通过MQTT.fx工具做初步对接4.1 设置连接信息4.2 连接平台5.查看平台设备信息三. 设备测对接平台1.ESP测引入MQTT库2.编码2.1前端编码修改2.2 后端接口修改3.MQTT编码4.添加编译文件5.正常编译烧写6. 结果展示总结前言今天这篇文章对于刚接触物联网协议或者刚接触ESP这款模组并且想对接云平台的人特别有帮助。还希望大家耐心的看完。在今天的实验里面你需要有三个概念。第一什么是MQTT协议第二 MQTT协议又是如何连接的第三点如何在官方的web demo上添加后端服务和前端页面的接口实验在线MQTT数据传输。一、MQTT协议MQTT协议是一个物联网协议简单来说就是设备和云平台之间的一种通信传输方式就好比在中国大家用中国话来交流在美国用美国话交流。这就对应着两种通信协议。具体的细节我的建议还是去百度看看。对于初学者有这个通信的概念即可。二、如何使用MQTT协议对接华为云1.注册华为云账号这个就不说了去百度找华为云的官方免费注册。2.设备接入中创建资源空间这个可以百度一下华为云设备接入MQTT设备注册3.如何连接首先我们要参考文档 。在这个文档里面我们可以看到我们连接的时候需要填写设备ID用户名和密码。其次怎么获取这一套数据是目前我们要思考的问题。好在官方直接给出了加密运算的方式。参数计算链接在下图中重点关注设备ID和密钥密钥是在你创建设备的时候就有的注意上图和下图的设备ID不一样这是因为我想要告诉大家这个密钥在什么地方单独创建了一下。通过下面的页面我们填入上述的设备ID和密钥获取新的三元素我们就可以对接设备。4.通过MQTT.fx工具做初步对接4.1 设置连接信息4.2 连接平台5.查看平台设备信息三. 设备测对接平台1.ESP测引入MQTT库官方的MQTT demo路径 /esp/esp-idf/examples/protocols/mqtt在上述的方案中我们已经完成了电脑模拟设备对接的过程。接下来我们要用我们的ESP模组完成云平台的对接。还是用之前的web demo。2.编码2.1前端编码修改注意我是将Chart.vue中的内容注释掉替换成了下面的内容templatev-containerv-layout text-xs-center wrapv-flex xs12 sm6 offset-sm3v-card hoverv-card-title stylefont-weight: 800; font-size: 18px阿里云平台数据发送测试/v-card-titlediv stylewidth: 90%; margin: 0 auto; padding: 20pxv-text-field v-modelmesdatalabel测试数据hint输入测试数据/v-text-fieldv-btn block colorsuccesssizelargetypesubmitclicksubmitdata提交/v-btn/div/v-card/v-flex/v-layout/v-container/templatescriptexportdefault{data(){return{mesdata:null,};},methods:{submitdata(){this.$ajax.post(/api/v1/mqtt/echo,{data:this.mesdata,}).then((data){console.log(data);}).catch((error){console.log(error);});this.mesdata;},},destroyed(){},mounted(){},};/script2.2 后端接口修改加入一个后端接口,方便前端界面传输数据// mqtt_send_data_toserver 是我自己封装的一个发送函数,代码都会给大家externvoidmqtt_send_data_toserver(char*message);staticesp_err_tmqtt_echo_handler(httpd_req_t*req){inttotal_lenreq-content_len;intcur_len0;charmessage[256]{0};char*buf((rest_server_context_t*)(req-user_ctx))-scratch;intreceived0;if(total_lenSCRATCH_BUFSIZE){/* Respond with 500 Internal Server Error */httpd_resp_send_err(req,HTTPD_500_INTERNAL_SERVER_ERROR,content too long);returnESP_FAIL;}while(cur_lentotal_len){receivedhttpd_req_recv(req,bufcur_len,total_len);if(received0){/* Respond with 500 Internal Server Error */httpd_resp_send_err(req,HTTPD_500_INTERNAL_SERVER_ERROR,Failed to post control value);returnESP_FAIL;}cur_lenreceived;}buf[total_len]\0;cJSON*rootcJSON_Parse(buf);//注意这里,这边是为了解析前端页面的数据strcpy(message,cJSON_GetObjectItem(root,data)-valuestring);cJSON_Delete(root);httpd_resp_sendstr(req,Post control value successfully);mqtt_send_data_toserver(message);returnESP_OK;}在start_rest_server 函数中添加下面的代码 (注册解析前端方法到系统中)httpd_uri_tmqtt_post_uri{.uri/api/v1/mqtt/echo,.methodHTTP_POST,.handlermqtt_echo_handler,.user_ctxrest_context};httpd_register_uri_handler(server,mqtt_post_uri);3.MQTT编码/* * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */#includestdio.h#includestdint.h#includestddef.h#includestring.h#includeesp_system.h#includenvs_flash.h#includeesp_event.h#includeesp_netif.h#includecJSON.h#includeesp_log.h#includemqtt_client.h#defineCLIENTID#defineUSERNAME#definePASSWORD#defineSERVERURLmqtt://121.36.42.100:1883#definePUSHTOPIC$oc/devices/你的设备ID/sys/properties/reportesp_mqtt_client_handle_tmqtt_client;staticconstchar*MQTTTAGMQTT;staticvoidlog_error_if_nonzero(constchar*message,interror_code){if(error_code!0){ESP_LOGE(MQTTTAG,Last error %s: 0x%x,message,error_code);}}voidmqtt_send_data_toserver(char*message){intmsg_id;charobj_name[10]{0};doublerounded0;cJSON*rootcJSON_CreateObject();// 创建数组对象cJSON*arraycJSON_CreateArray();// 创建对象cJSON*objcJSON_CreateObject();cJSON_AddStringToObject(obj,service_id,echo);cJSON*valuescJSON_CreateObject();cJSON_AddStringToObject(values,read,message);cJSON_AddItemToObject(obj,properties,values);// 将对象添加到数组中cJSON_AddItemToArray(array,obj);// 将数组添加到根节点中cJSON_AddItemToObject(root,services,array);constchar*sys_infocJSON_Print(root);ESP_LOGI(MQTTTAG,%s,sys_info);msg_idesp_mqtt_client_publish(mqtt_client,PUSHTOPIC,sys_info,0,1,1);free((void*)sys_info);cJSON_Delete(root);return;}staticvoidmqtt5_event_handler(void*handler_args,esp_event_base_tbase,int32_tevent_id,void*event_data){ESP_LOGD(MQTTTAG,Event dispatched from event loop base%s, event_id%PRIi32,base,event_id);esp_mqtt_event_handle_teventevent_data;esp_mqtt_client_handle_tclientevent-client;intmsg_id;switch((esp_mqtt_event_id_t)event_id){caseMQTT_EVENT_CONNECTED:ESP_LOGI(MQTTTAG,MQTT_EVENT_CONNECTED);mqtt_send_data_toserver(sadsadsadas);break;caseMQTT_EVENT_DISCONNECTED:ESP_LOGI(MQTTTAG,MQTT_EVENT_DISCONNECTED);esp_mqtt_client_reconnect(client);break;caseMQTT_EVENT_SUBSCRIBED:ESP_LOGI(MQTTTAG,MQTT_EVENT_SUBSCRIBED, msg_id%d,event-msg_id);break;caseMQTT_EVENT_UNSUBSCRIBED:/* 退订绑定的服务目前先不处理 */ESP_LOGI(MQTTTAG,MQTT_EVENT_UNSUBSCRIBED, msg_id%d,event-msg_id);break;caseMQTT_EVENT_PUBLISHED:/* 推送绑定的事件 */ESP_LOGI(MQTTTAG,MQTT_EVENT_PUBLISHED, msg_id%d,event-msg_id);break;caseMQTT_EVENT_DATA:/* 数据下发先不处理 */ESP_LOGI(MQTTTAG,MQTT_EVENT_DATA);break;caseMQTT_EVENT_ERROR:ESP_LOGI(MQTTTAG,MQTT_EVENT_ERROR return code %d,event-error_handle-connect_return_code);if(event-error_handle-error_typeMQTT_ERROR_TYPE_TCP_TRANSPORT){log_error_if_nonzero(reported from esp-tls,event-error_handle-esp_tls_last_esp_err);log_error_if_nonzero(reported from tls stack,event-error_handle-esp_tls_stack_err);log_error_if_nonzero(captured as transports socket errno,event-error_handle-esp_transport_sock_errno);ESP_LOGI(MQTTTAG,Last errno string (%s),strerror(event-error_handle-esp_transport_sock_errno));}break;default:ESP_LOGI(MQTTTAG,Other event id:%d,event-event_id);break;}}intmqtt5_app_start(void){esp_mqtt_client_config_tmqtt_cfg{.broker.address.uriSERVERURL,.credentials.client_idCLIENTID,.credentials.usernameUSERNAME,.credentials.authentication.passwordPASSWORD,.network.disable_auto_reconnecttrue};ESP_LOGI(MQTTTAG,MQTT Server url:%s Client Id %s,mqtt_cfg.broker.address.uri,mqtt_cfg.credentials.client_id);mqtt_clientesp_mqtt_client_init(mqtt_cfg);if(mqtt_clientNULL){return1;}/* The last argument may be used to pass data to the event handler, in this example mqtt_event_handler */esp_mqtt_client_register_event(mqtt_client,ESP_EVENT_ANY_ID,mqtt5_event_handler,NULL);esp_mqtt_client_start(mqtt_client);return0;}4.添加编译文件5.正常编译烧写这个就不再叙述了,查看以往的案例6. 结果展示平台端的显示网页端的发送 (注意 我是修改的Chart.vue 这个文件的内容)后台日志显示 (按照这个报文形势发送){services:[{service_id:echo,properties:{read:xxxxx}}]}总结今天完成了ESP 对接华为云的案例,里面还是有点弯弯绕的.有疑问就提出来,我都会回复.后面再有好玩的案例,再发出来看.

相关新闻

分布式锁详解-MySQL、ZooKeeper与Redis三种实现方案

分布式锁详解-MySQL、ZooKeeper与Redis三种实现方案

2026/8/13 17:01:28

在分布式系统中,多个进程/线程需要并发访问共享资源,为保证资源访问的互斥性与一致性,必须引入分布式锁进行控制。本文从锁的本质要求出发,系统梳理分布式锁的三种主流实现方式及其优缺点。一、锁的本质要求 无论什么锁&#xff0…

如何高效管理微信聊天记录:实用备份与分析方法指南

如何高效管理微信聊天记录:实用备份与分析方法指南

2026/8/13 17:01:28

如何高效管理微信聊天记录:实用备份与分析方法指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMs…

低正则弱解与实验流场的规范判定:无导数、抗噪声的工程奇点检测

低正则弱解与实验流场的规范判定:无导数、抗噪声的工程奇点检测

2026/8/13 16:51:28

低正则弱解与实验流场的规范判定:无导数、抗噪声的工程奇点检测 作者:方见华 单位:世毫九实验室 摘要 流体实验PIV/PTV测得流场天然带有测量噪声、截断误差,直接速度梯度求导(涡量、应变率、不变量、λ₂准则等&#x…

免费开源AI语音合成神器:EmotiVoice易魔声2000+音色快速上手指南

免费开源AI语音合成神器:EmotiVoice易魔声2000+音色快速上手指南

2026/8/13 19:11:33

免费开源AI语音合成神器:EmotiVoice易魔声2000音色快速上手指南 【免费下载链接】EmotiVoice EmotiVoice 😊: a Multi-Voice and Prompt-Controlled TTS Engine 项目地址: https://gitcode.com/gh_mirrors/em/EmotiVoice 你是否曾经为寻找完美的语…

Cloudflare OS高级配置:自定义域名、环境变量与资源限制全攻略

Cloudflare OS高级配置:自定义域名、环境变量与资源限制全攻略

2026/8/13 19:11:33

Cloudflare OS高级配置:自定义域名、环境变量与资源限制全攻略 【免费下载链接】cloudflare-os Agent workspace built on Cloudflare Workers for creating documents, building apps, and running agents with your company’s context and systems. 项目地址: …

Windows桌面硬件监控终极指南:如何用Sidebar Diagnostics实时掌握系统性能

Windows桌面硬件监控终极指南:如何用Sidebar Diagnostics实时掌握系统性能

2026/8/13 19:11:33

Windows桌面硬件监控终极指南:如何用Sidebar Diagnostics实时掌握系统性能 【免费下载链接】SidebarDiagnostics A simple sidebar for Windows desktop that displays hardware diagnostic information. 项目地址: https://gitcode.com/gh_mirrors/si/SidebarDia…

东莞长安网站建设:从草根创业到品牌跃升,一家中小企业的突围真相

东莞长安网站建设:从草根创业到品牌跃升,一家中小企业的突围真相

2026/8/13 19:11:33

在这个快节奏的时代,提到东莞,很多人的第一反应可能是“世界工厂”,是流水线上的机器轰鸣声,是堆积如山的集装箱。但在长安镇,这片被赋予了“电子信息名镇”和“机械五金重镇”双重头衔的土地上,另一种声音正在崛起——那是键盘敲击的声音,是代码在服务器上跳动的节奏,…

5分钟上手Trackr:Android任务管理新体验

5分钟上手Trackr:Android任务管理新体验

2026/8/13 19:11:33

5分钟上手Trackr:Android任务管理新体验 【免费下载链接】trackr 项目地址: https://gitcode.com/gh_mirrors/tr/trackr Trackr是一款专为Android用户打造的高效任务管理应用,帮助你轻松组织日常工作、学习和生活中的各类任务。无论是个人待办事…

BitcoinCoreBrute:终极比特币钱包密码恢复工具的完整指南

BitcoinCoreBrute:终极比特币钱包密码恢复工具的完整指南

2026/8/13 19:01:33

BitcoinCoreBrute:终极比特币钱包密码恢复工具的完整指南 【免费下载链接】BitcoinCoreBrute BitcoinCoreBrute BTC-Core-Brute-Force Bitcoin-Core-Cracker BTC-Key-Recovery Bitcoin-Core-Security Private-Key-Finder Crypto-Key-Recovery Cryptocurrency-Brute-…

比较好的亚太EMBA,问了6位校友师资差别真的挺大

比较好的亚太EMBA,问了6位校友师资差别真的挺大

2026/8/13 11:01:28

比较好的亚太EMBA核心差异先看什么?对于希望兼顾工作与系统管理能力提升的亚太区高管而言,筛选匹配度高的EMBA项目时,师资配置是决定学习体验与实际收获的核心要素之一。我们结合3-4个公开信息透明、办学历史较长的亚太区主流EMBA项目特点&am…

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

2026/8/11 8:44:43

备考海外游学的亚洲EMBA面试,核心要围绕项目国际化设计逻辑、个人跨文化管理经验匹配度两个维度准备,避免把游学模块等同于普通旅游参访的认知偏差。不少备考者花3个月对比6份资料,却容易忽略面试官对“国际视野落地能力”的考察——比如香港…

比较好的国内EMBA,问了二十位校友聊透人脉价值

比较好的国内EMBA,问了二十位校友聊透人脉价值

2026/8/13 17:17:06

比较好的国内EMBA核心差异体现在哪些方面?比较好的国内EMBA的核心长期价值,很大程度上依托于校友网络的连接质量与资源生态的活跃度,这也是不少高管在择校时优先考量的因素。我们结合3-4个市场关注度较高的项目公开信息,从课程、师…

电商毛利率别再手动算了!2026年3种自动分析工具实测对比

电商毛利率别再手动算了!2026年3种自动分析工具实测对比

2026/8/13 0:00:21

一、开篇:毛利率——电商运营最该盯但最难盯的指标 电商运营中有一个指标,几乎所有老板都会问,但几乎所有运营都回答得不够确定——毛利率。不是"店铺毛利率",而是"每条链接的毛利率""每个品类的毛利率…

15-SaaS系统灰度发布:滚动更新、金丝雀发布、不停机迭代

15-SaaS系统灰度发布:滚动更新、金丝雀发布、不停机迭代

2026/8/13 0:00:21

15-SaaS系统灰度发布:滚动更新、金丝雀发布、不停机迭代 一、为什么需要不停机发布? 传统发布方式:停服务 → 替换包 → 启服务。在内部系统里勉强能用,但在SaaS系统中是灾难。 我们的无人售货柜SaaS平台服务全国几千台设备&#…

17-线上Bug热修复流程:紧急分支、补丁合并、版本快速回退方案

17-线上Bug热修复流程:紧急分支、补丁合并、版本快速回退方案

2026/8/13 0:00:21

17-线上Bug热修复流程:紧急分支、补丁合并、版本快速回退方案 前言 大家好,我是黒漂技术佬。 线上出 Bug 这种事,就像你正吃着火锅唱着歌,突然接到电话说"柜子门打不开了"。炸不炸?慌不慌?别急&a…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/8 5:07:31

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/9 13:42:46

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/8 2:30:15

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…