[ESP8266 RTOS] 使用MQTT连接阿里云

介绍

本节我们使用ESP8266 RTOS连接阿里云 并实现数据上报的功能
参考资料:https://www.alibabacloud.com/help/zh/iot/developer-reference/port-the-sdk-to-esp8266
代码获取:完整工程代码获取

下载资料

阿里云给的 LinkSDK下载 LinkSDK
适配ESP8266的接口文件 posix_port.c 接口文件
阿里云给的连接例程 连接实例
下载好的资料如下所示
截图_选择区域_20240108231401.png

适配LinkSDK

将LinkSDK解压并移动至 ESP8266_RTOS_SDK/components 目录下
image.png
在LinkSDK目录下新建 component.mk 文件 并填入以下内容,这个主要是将用到的额库模块 注册成组件 以便阿里云的程序调用
image.png

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 文件 将其替换成上面我们下载的适配文件
image.png

新建工程并修改

在ESP8266_RTOS/My_Project下新建工程 并命名为mqtt-ali 这里我们直接复制标准例程hello_esp 并做一些修改 首先是适配工程
适配.png

将上面下载的simple-wifi.c 中的内容复制到mqtt_ali_main.c 也可以复制替换mqtt_main.c
填入三元组
本项目从阿里云上获取的三元组为 将其填入到 代码中

product_key       = "a1sDC7hX4Ju";
device_name       = "esp8266";
device_secret     = "07b28f3e509d9cd5a29789f20e856987";

image.png
再做一下小设置 在posix_port.c 中前几行取消对CORE_SYSDEP_MBEDTLS_ENABLED 的定义 也就是使用ESP8266的MBEDTLS库
image.png

修改wifi密码

在代码中 连接的WiFi密码使用menuconfig得到 如果不想使用menuconfig直接自己宏定义wifi ssid 和 passwd 替换以下字段即可
image.png
如果想使用menuconfig 配置wifi信息 则在当前目录下执行menuconfig
wifi.png

编译测试

执行make编译 make flash 下载进板子
image.png
可以看到设备在线
image.png

image.png
image.png

上报数据

创建一个任务用于上报数据
image.png
任务如下

/* 演示了获取属性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不支持浮点数 所以在调试的时候怎么也生成不了浮点数 经过查询得到了以下的结果

image.png
尝试着打开对浮点数的支持
image.png
报错 堆栈满了
image.png

堆栈满了 索性去掉浮点数 统一使用整形数据 上报的数据如下所示
可以看到上报的物理模型数据
image.png

代码获取

https://download.csdn.net/download/ciqujinnian_/88736221?spm=1001.2014.3001.5503

其他资料

数据流转
https://www.bilibili.com/video/BV1We411V7HU/?spm_id_from=333.337.search-card.all.click&vd_source=d0ed829689ffa9e88e24752ccd7494fb

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值