ESP32接入腾讯云物联网开发平台
文章目录
- 前言
- 1 资料参考
- 2 对接总体思路
- 3 代码移植
- 3.1 component qcloud_iot
- 3.2 项目顶层处理
- 3.3 component main
- 4 移植问题备忘
- CMakeLists.txt 的定义语法
- mbedtls_ssl_conf_psk 编译错误
- 5 腾讯云物联网开发平台操作
- 5.1 腾讯云物联网开发平台创建WiFi产品
- 5.2 代码中修改设备三元组信息
- 5.3 配置添加 WiFi SSID 和 密码
- 5.4 ESP32 编译、烧写、monitor
- 6 最终结果
- END
前言
这篇笔记记录采用 ESP32 接入腾讯云物联网开发平台的流程,同时给出了我的移植示例,方便其他想接入腾讯云物联网的朋友。
毕竟腾讯云IoT现在是免费的,而且还有腾讯连连小程序加持,真香是肯定的。
先说下哈,问过腾讯云的朋友,ESP32接入腾讯云物联网开发平台的例程正在处理,预计后面会发布到 github 上。所以我这篇笔记只是小能手的试水,因为最近正在玩 ESP_Moonlight 开发板,想要做个小玩具玩玩,因此着急着先摸索出来了。后续当然建议是以腾讯云官方文档为主。
如果你还没看到官方文档,又急着玩,不妨看看我这篇笔记,也能加深下对ESP32开发的了解。
小能手在时隔4年后,再次玩起了乐鑫芯片,这次是带语音识别功能的ESP32。目前基于 ESP-Moonlight 开发板记录一系列笔记,详情请点击。
1 资料参考
目力所及的资料有两个,一个是腾讯云的,一个是乐鑫的,两家在19年有过合作。
首先是腾讯云的资料,Wi-Fi 智能灯接入指引,虽然demo是使用AT命令的模组,不过追进去,还是发现了非模组的版本:
https://github.com/tencentyun/qcloud-iot-esp-wifi/tree/master/qcloud-iot-esp8266-demo
名称 | 说明 |
---|---|
qcloud-iot-at-esp8266 | 腾讯云IoT AT指令ESP8266定制固件、说明及使用 |
qcloud-iot-esp8266-demo | 腾讯云IoT C-SDK 在ESP8266 RTOS SDK上的移植及demo和配网代码 |
乐鑫也根据腾讯云的CSDK,写了一个对接的工程,不过目前有点旧了,移植的CSDK也是老的版本:https://github.com/espressif/esp-qcloud,另外看了代码只支持 cert 方式,比较有局限性。
2 对接总体思路
所以我的对接思路是以腾讯云的 ESP SDK 为主,应该更容易对接到腾讯云。
对接的主要困难是在编译系统这块,腾讯云的 qcloud-iot-esp8266-demo 仍采用 GNU Make,而我手头的 ESP-Moonlight 都是基于 ESP-IDF V4.0 了,编译系统采用的是 CMake。这块一些文件需要自己处理下。
目前总体代码也已上传:https://github.com/twowinter/esp-moonlight/
3 代码移植
3.1 component qcloud_iot
复制 component 目录
将 腾讯云SDK中的 component 复制至 本项目的 component 目录,具体见 esp-moonlight/components/qcloud_iot
CMakeLists.txt
参考了乐鑫的文档,这里头有CMake的参考,https://github.com/espressif/esp-qcloud/blob/master/CMakeLists.txt
set(COMPONENT_ADD_INCLUDEDIRS "qcloud_iot_c_sdk/include""qcloud_iot_c_sdk/include/exports""qcloud_iot_c_sdk/sdk_src/internal_inc")# Edit following two lines to set component requirements (see docs)
set(COMPONENT_REQUIRES "mbedtls")
set(COMPONENT_PRIV_REQUIRES )set(COMPONENT_SRCS"qcloud_iot_c_sdk/sdk_src""qcloud_iot_c_sdk/platform")register_component()
3.2 项目顶层处理
项目顶层目录位于 esp-moonlight/examples/qcloud_sr,主要是修改 CMake 文件和配置文件。
CMakeLists.txt
里面记得增加新加的 component qcloud_iot。
set(EXTRA_COMPONENT_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../../components/moonlight_board${CMAKE_CURRENT_SOURCE_DIR}/../../components/led_rgb${CMAKE_CURRENT_SOURCE_DIR}/../../components/speech_recognition${CMAKE_CURRENT_SOURCE_DIR}/../../components/button${CMAKE_CURRENT_SOURCE_DIR}/../../components/qcloud_iot)
复制 项目 配置
#
# QCloud IoT demo Configuration
#
CONFIG_QCLOUD_IOT_EXPLORER_ENABLED=y
CONFIG_SMART_LIGHT_ENABLED=y
CONFIG_GATEWAY_ENABLED=
CONFIG_OTA_ENABLED=
CONFIG_RAW_DATA_ENABLED=
CONFIG_MQTT_ENABLED=
CONFIG_DEMO_EXAMPLE_SELECT=0
CONFIG_WIFI_CONFIG_ENABLED=y
CONFIG_DEMO_WIFI_SSID="Your_WiFi"
CONFIG_DEMO_WIFI_PASSWORD="12345678"
3.3 component main
component main 组件的调整也是两个文件,CMake 文件和配置文件。
CMakeLists.txt
idf_component_register(SRC_DIRS "./" "samples/data_template_light"INCLUDE_DIRS "./" "include")
配置菜单修改
qcloud-iot-esp-wifi/qcloud-iot-esp8266-demo/main/Kconfig.projbuild
里头涉及对 腾讯云DEMO 的参数配置菜单,需要移植过来。
4 移植问题备忘
移植过程中有两个典型问题,我这边做个记录。
CMakeLists.txt 的定义语法
对编译系统不熟,导致两次掉入这个坑里。
在指定原文件的时候,之前我采用 SRCS,应该是看某些文件里既可以指定文件,也可以指定目录,给我造成了误导。反正最新的CMake编译系统,原文件仅使用 SRCS,而如果是目录的话,就得使用 SRC_DIRS。
In the legacy Make-based build system, it is required to also set COMPONENT_SRCDIRS if COMPONENT_SRCS is set. In CMake, the equivalent is not necessary i.e. specifying SRC_DIRS to idf_component_register if SRCS is also specified (in fact, SRCS is ignored if SRC_DIRS is specified).
而且这里要注意,如果使用 SRC_DIRS 那么 SRCS 就会被忽略。
component qcloud_iot 处理:
set(src_dirs "qcloud_iot_c_sdk/sdk_src""qcloud_iot_c_sdk/platform")set(include_dirs "qcloud_iot_c_sdk/include""qcloud_iot_c_sdk/include/exports""qcloud_iot_c_sdk/sdk_src/internal_inc")idf_component_register(SRC_DIRS "${src_dirs}"INCLUDE_DIRS "${include_dirs}"REQUIRES mbedtls)
component main 处理:
idf_component_register(SRC_DIRS "./" "samples/data_template_light"INCLUDE_DIRS "./" "include")
mbedtls_ssl_conf_psk 编译错误
/Users/tt/esp/esp-moonlight/components/qcloud_iot/qcloud_iot_c_sdk/platform/HAL_TLS_mbedtls.c: In function '_mbedtls_client_init':
/Users/tt/esp/esp-moonlight/components/qcloud_iot/qcloud_iot_c_sdk/platform/HAL_TLS_mbedtls.c:153:15: error: implicit declaration of function 'mbedtls_ssl_conf_psk'; did you mean 'mbedtls_ssl_conf_sni'? [-Werror=implicit-function-declaration]ret = mbedtls_ssl_conf_psk(&(pDataParams->ssl_conf), (unsigned char *)pConnectParams->psk, pConnectParams->psk_length,^~~~~~~~~~~~~~~~~~~~mbedtls_ssl_conf_sni
cc1: some warnings being treated as errors
通过代码发现是相关的配置项需要启用。
#if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED)
int mbedtls_ssl_conf_psk( mbedtls_ssl_config *conf,const unsigned char *psk, size_t psk_len,const unsigned char *psk_identity, size_t psk_identity_len )
/* Key exchanges using a PSK */
#if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) || \defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) || \defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) || \defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED)
#define MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED
#endif
这是最终在项目配置中需要使能的参数。
CONFIG_MBEDTLS_PSK_MODES=y
5 腾讯云物联网开发平台操作
一旦SDK搞定,剩下的事情就好解决了。
5.1 腾讯云物联网开发平台创建WiFi产品
具体见 Wi-Fi 智能灯接入指引。
5.2 代码中修改设备三元组信息
到 components/qcloud_iot/qcloud_iot_c_sdk/platform/HAL_Device_freertos.c 里面修改在腾讯云物联网平台注册的设备信息(目前仅支持密钥设备):
/* Product Id */
static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID";
/* Device Name */
static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME";
/* Device Secret */
static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK";
5.3 配置添加 WiFi SSID 和 密码
图省事,先不折腾配网了,直接 idf.py menuconfig 来配置。
5.4 ESP32 编译、烧写、monitor
常规操作,忽略不表。
6 最终结果
最终可以在腾讯云 IoT Explorer 上看到设备的属性更新。
看代码描述,这个示例应该是每10秒上传一次亮度。
/*example for cycle report, you can delete this for your needs*/
static void cycle_report(Timer *reportTimer)
{int i;if (expired(reportTimer)) {for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) {DeviceProperty *pReportData = &(sg_DataTemplate[i].data_property);/* simulate brightness changes */if (0 == strcmp(pReportData->key, "brightness")) {int *brightness = (int *)pReportData->data;*brightness += 5;if (*brightness > 100)*brightness = 0;set_propery_state(pReportData->data, eCHANGED);} else {set_propery_state(&(sg_DataTemplate[i].data_property.data), eCHANGED);}countdown_ms(reportTimer, 10000);}}
}
END
That’s all
IoT小能手的其他精彩文章:
行业围观
深度报道 第1个从太空发回的LoRa信号(含视频)
从工信部发文解读政府对LoRa产业的态度技术分享
LoRaWAN介绍 - LoRa从业者读这篇就够了
干货 | LoRaWAN 协议中文版,你要的pdf来了
无线节点的空中唤醒技术解析玩玩硬件
自制一个 LoRa PM2.5 监测器
语音控制智能家居的抽风小仓鼠
一些有关电子的好玩东西心得分享
文档啊,最重要的还是层次感
技术管理入门课_先做个不讨厌的人
你没中过勒索病毒,不知道备份有多重要
ESP32接入腾讯云物联网开发平台相关推荐
- RAK7258 LoRaWAN 网关接入腾讯云物联网开发平台
文章目录 前言 1 控制台操作 LoRa 网关 2 RAK 7258 LoRa网关实物操作 连接配置 网络配置 LoRa参数配置 网关上线确认 END 前言 这篇笔记记录采用 RAK7258 LoRa ...
- 不改设备固件,直接让成品LoRaWAN门磁接入腾讯云物联网开发平台
前言 在此前的新闻方案中有看到,腾讯云利用其物联网开发平台的设备数据引擎,硬件厂商不用修改设备固件既可以快速对接物联网平台. 腾讯云之所以能快速对接多家设备厂商开发的LoRaWAN智能门磁产品,得益于 ...
- 腾讯云物联网开发平台 IoT Explorer 全面指引
文章目录 * 1 设备侧开发教程 * 1.1 [腾讯云](https://l.gushuji.site/tencent)端侧资源 1.2 LoRa 设备 * LoRaWAN 节点接入 LoRaWAN ...
- 【STM32+ESP-12S连接腾讯云物联网开发平台 1】云平台的创建和AT固件烧录
腾讯云物联网开发平台创建和ESP-12S的固件烧录 前言 一.腾讯云物联网开发平台的创建 1. 创建产品 2. 配置产品和创建设备 3. 设备三元组说明 二.ESP-12S固件烧录 1.固件获取 2. ...
- 腾讯云物联网开发平台 LoRaWAN 透传接入 更新版
前言 之前有一篇文章介绍LoRaWAN透传数据,不过还是用物模型+云端数据解析脚本,不是真正的透传.腾讯云物联网开发平台也支持对LoRaWAN原始数据的透传.转发.今天来介绍下. 腾讯云 IoT Ex ...
- STM32节点移植lorawan协议连接腾讯云物联网开发平台(IoT Explorer)
STM32移植lorawan协议栈连接腾讯云物联网开发平台(IoT Explorer) 前言 开发环境的准备 正文 初始化 入网 发送与接收 前言 在移植协议之前,先给大家科普一下Lora 和 lor ...
- 【STM32+ESP8266连接腾讯云物联网开发平台 2】STM32+ESP8266-01S连接腾讯云
文章目录 前言 一.硬件准备 1.ESP8266-01S 2. STM32F103C8T6核心板或者小开发板及其程序下载器 二.软件准备 1.STM32CubeMX 2. MDK (Keil v5) ...
- 腾讯云-物联网开发平台测试(联合mqtt.fx 1.7.1)
腾讯云-物联网开发平台测试(联合mqtt.fx 1.7.1) 文章目录 腾讯云-物联网开发平台测试(联合mqtt.fx 1.7.1) 环境介绍: 实验目的: 1.新建产品 2.新建功能 3.设备开发 ...
- 使用创思通信4G Cat1 DTU基于TencentOS-tiny对接腾讯云物联网开发平台
一.简介 本文档主要讲述如何使用创思通信4G Cat1 DTU开发板,基于TencentOS-tiny对接腾讯云物联网开发平台IoT Explorer,演示温度数据上报平台.平台下发控制指令控制继电器 ...
最新文章
- 神经网络中激活函数的真正意义?
- mysql查询活跃连接,mysql – 使用大量可能的连接进行查询的最佳方法
- python 爬取企业注册信息_python爬取企业名录
- css3中的渐变效果及花斑动画的实现
- 查看数值类型python_python里怎么查看数据类型
- Nginx中conf相关配置的简要说明
- 下面的程序可以从0....n-1中随机等概率的输出m个不重复的数。(假设nm)
- 程序员面试题100题第14题-圆圈中最后剩下的数字
- 基于Java+Springboot+mybatis+lyaui的学科竞赛管理系统设计和实现
- 营销数字化转型行业实践
- SDL游戏之路(十一)--按钮制作
- matlab矩阵排序sort,MATLAB数组元素的排序
- 牛顿法求函数零点和极值点
- 年薪50万的程序员_如何才能撩到年薪50万的程序员?
- 电脑重装系统蓝屏是什么原因
- 用Python算带有进度条的圆周率
- Mac键盘不起作用?苹果电脑键盘失灵解决教程
- 智能指针(一)—— 智能指针的底层原理(RAII特性)
- mats显存测试软件linux环境,显存检测软件Mats
- 8月第2周业务风控关注 |电商平台卖家自爆家丑 一天要刷2000单
热门文章
- 初链——区块链的安全和效率问题辨析
- java_excel导出带折线图饼图之类
- 高等数学:第十二章 微分方程(3)高阶线性微分方程、二阶常系数齐次线性微分方程
- 【渝粤教育】广东开放大学 电子支付与安全 形成性考核 (59)
- html图片上绘制网格线,使用CSS3绘制网格线 | Tencent AlloyTeam
- 经商必读的创业类书籍推荐
- linux中直接修改jar包内配置文件
- modelsim 仿真 毛刺 原因
- GAN之父Ian Goodfellow回归谷歌!将在DeepMind远程办公
- 【020】基于51单片机智能路灯系统Proteus仿真与实物设计