介绍
本节我们使用ESP8266 RTOS连接阿里云 并实现数据上报的功能
参考资料:https://www.alibabacloud.com/help/zh/iot/developer-reference/port-the-sdk-to-esp8266
代码获取:完整工程代码获取
下载资料
阿里云给的 LinkSDK下载 LinkSDK
适配ESP8266的接口文件 posix_port.c 接口文件
阿里云给的连接例程 连接实例
下载好的资料如下所示
适配LinkSDK
将LinkSDK解压并移动至 ESP8266_RTOS_SDK/components 目录下
在LinkSDK目录下新建 component.mk 文件 并填入以下内容,这个主要是将用到的额库模块 注册成组件 以便阿里云的程序调用
COMPONENT_ADD_INCLUDEDIRS := core core/sysdep core/utils components/ota components/data-model
COMPONENT_SRCDIRS := core core/utils core/sysdep components/ota portfiles/aiot_port/ components/data-model external
替换适配文件
替换LinkSDK/portfiles/aiot_port/posix_port.c 文件 将其替换成上面我们下载的适配文件
新建工程并修改
在ESP8266_RTOS/My_Project下新建工程 并命名为mqtt-ali 这里我们直接复制标准例程hello_esp 并做一些修改 首先是适配工程
将上面下载的simple-wifi.c 中的内容复制到mqtt_ali_main.c 也可以复制替换mqtt_main.c
填入三元组
本项目从阿里云上获取的三元组为 将其填入到 代码中
product_key = "a1sDC7hX4Ju";
device_name = "esp8266";
device_secret = "07b28f3e509d9cd5a29789f20e856987";
再做一下小设置 在posix_port.c 中前几行取消对CORE_SYSDEP_MBEDTLS_ENABLED 的定义 也就是使用ESP8266的MBEDTLS库
修改wifi密码
在代码中 连接的WiFi密码使用menuconfig得到 如果不想使用menuconfig直接自己宏定义wifi ssid 和 passwd 替换以下字段即可
如果想使用menuconfig 配置wifi信息 则在当前目录下执行menuconfig
编译测试
执行make编译 make flash 下载进板子
可以看到设备在线
上报数据
创建一个任务用于上报数据
任务如下
/* 演示了获取属性LightSwitch的期望值, 用户可将此函数加入到main函数中运行演示 */
void demo_send_get_desred_requset(void *arg)
{
int temper = 10;
int humi = 0;
uint8_t ret=0;
/* MQTT 发布消息功能示例, 请根据自己的业务需求进行使用 */
char *pub_topic = "/sys/a12KlB1v1CT/esp8266/thing/event/property/post";
char pub_payload[256];
while(1){
temper+=1;
humi+=2;
if(temper == 152){
temper = -120;
}
if(humi == 100){
humi = 2;
}
memset(pub_payload,0x0,sizeof(pub_payload));
sprintf(pub_payload,"{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"env_temp\":%d,\"env_humi\":%d}}",temper,humi);
printf("pay_msg:%s\n",pub_payload);
ret = aiot_mqtt_pub(arg, pub_topic, (uint8_t *)pub_payload, (uint32_t)strlen(pub_payload), 0);
if (ret < 0) {
printf("aiot_mqtt_sub failed, res: -0x%04X\n", -ret);
return -1;
}
delay_ms(8000);
}
vTaskDelete(NULL);
}
在定时上报的任务重 首先我们声明了需要上报的topic 为属性上报 上报的内容定义了两个一个是环境温度env_humi 一个是环境湿度env_temp 设定了每一次上报增加或者减少,现在看到的是修改过的,上报数据类型为整数 由于ESP8266 RTOS代码比较low不支持浮点数 所以在调试的时候怎么也生成不了浮点数 经过查询得到了以下的结果
尝试着打开对浮点数的支持
报错 堆栈满了
堆栈满了 索性去掉浮点数 统一使用整形数据 上报的数据如下所示
可以看到上报的物理模型数据
代码获取
https://download.csdn.net/download/ciqujinnian_/88736221?spm=1001.2014.3001.5503