完结篇:STM32F767igt6 + RT 您所在的位置:网站首页 stm32f767igt6中文资料 完结篇:STM32F767igt6 + RT

完结篇:STM32F767igt6 + RT

#完结篇:STM32F767igt6 + RT| 来源: 网络整理| 查看: 265

概述:

前两篇章已经把esp8266通信部分调试完成,此篇章着力于通过MQTT协议连接阿里云物联网平台。

开篇:STM32F767igt6 + RT-Thread + ESP8266

第二篇:STM32F767igt6 + RT-Thread + ESP8266

本篇张代码:代码地址

1.阿里云平台:

1.1 初识阿里云物联网平台:

阿里云物联网平台提供了一站式的设备接入、设备管理、监控运维、数据流转、数据存储等服务。常见的物联网平台有腾讯云、中国移动的OneNET、原子云等。

        初次使用阿里云平台时,首先需要注册一个自己的账号,可以直接使用某宝账号登录;

1.2 创建产品实例:

        登录后,进入到物联网控制台创建实例产品和设备,具体操作步骤请移步到产品文档中,里面有详细的介绍;

        创建好产品设备之后,MQTT连接参数是我们后面软件开发需要用到的信息;

                自定义topic主题,权限为订阅、发布,软件测试需用到。

        以上的步骤处理完后,由于还没有写测试软件,可以先使用MQTT.fx测试接入,按操作文档指引操作,说的很详细。按照自己创建的产品设备信息填好即可连接上,连接上后,设备状态会跳变成在线状态。 

   

1.3 定义物模型:

        产品创建完成后,可以自定义一个物模型,用于建立设备与物模型的通信连接,物模型创建步骤;这里我创建了一个数据上报的物模型,其中温度的属性,标识符后面需要用到。

1.4 设备模拟器调试:

        使用设备模拟器进行上、下行数据的调试,使用模拟器的前提是 产品创建时设置的数据格式是ICA 标准数据格式(Alink JSON),透传格式不可以使用模拟器调试。

        模块选择自定义创建的“数据上报”,然后设置发布卧室温度的值,发布成功后跳转查看云端日志,查看发布的具体内容,后面编写软件使用AT+MQTTPUB发布数据时就按照该内容的格式发送即可。

2.esp8266模块:

2.1 烧录MQTT固件:

        这里使用的是ESP8266系列,到安信可固件下载对应的AT固件即可,我们需要的是带MQTT协议的固件,相应的固件版本有使用说明,方便查看AT指令,一定要看说明,不同版本有些指令参数是不同的。

        详细烧录步骤不做说明,烧录完成之后,可以先使用串口调试助手测试AT指令是否正常,以确保固件烧录成功。

        特别说明下,开发中完成的每一个步骤都去测试一下正确性、可行性,别全部问题堆到一起最后再测试,到时一头雾水,很难找到问题点。

2.2 MQTT协议初识:

        目前,MQTT协议最新版本为5.0版,MQTT协议广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等领域;由于esp模块烧录了MQTT协议固件,所以对MQTT协议细节部分可以不用特别去了解,会使用AT指令就行;作为常用通信协议多去熟悉也是不亏的,这里附上MQTT协议中文链接。

2.3 编写软件连接阿里云:

        由于之前调通了esp8266通信部分,现在直接使用AT指令配置即可。

①AT+CWMODE 配置模块的工作模式,不要配置成AP模式即可,需要能连接WiFi上网;

②AT+RST  配置模式后一般需要重启模块;

③AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"  开启SNTP服务器,8时域,SNTP服务器为阿里云域名;

④AT+CWJAP 连接WiFi;

⑤AT+MQTTUSERCFG  配置用户参数,指令参数如下

AT+MQTTUSERCFG=,,,,, ,,    ;

⑥AT+MQTTCONNCFG 配置连接参数,参数如下

AT+MQTTCONNCFG=,,,, ,,    ; ⑦AT+MQTTCONN 连接阿里云,参数如下 AT+MQTTCONN=,,,   ;

⑧连接上后即可进行发布、订阅了。

/************************************************ * Fuction:MQTT取消订阅topic * *********************************************/ void mqtt_unsub_topic(char * Topic) { char *pt = (char *)rt_malloc(100); sprintf(pt, "AT+MQTTUNSUB=0,\"%s\"",Topic); esp8266_at_cmd_send(pt, "OK" , 100); if(pt != RT_NULL){ rt_free((void *)pt); } } /************************************************ * Fuction:MQTT发布topic * *********************************************/ void mqtt_publish_topic(char * Topic ,char * Data) { char *pt = (char *)rt_malloc(164); sprintf(pt,"AT+MQTTPUB=0,\"%s\",\"{\\\"id\\\":135789\\,\\\"params\\\":{\\\"aliyun_qmttdata:RoomTemp\\\":%s}\\,%s\\,%s}\",1,0",Topic,Data,VERSION,METHOD); esp8266_at_cmd_send(pt, "OK" , 300); if(pt != RT_NULL){ rt_free((void *)pt); } }

3. 编译测试: 3.1 测试概述:

        f7水星版中有三个按键,这里创建一个按键线程,控制KEY_UP进行MQTT的连接与断开,KEY_0进行发布Topic数据,KEY_1进行订阅Topic。

        如下代码为按键处理函数逻辑:

#ifdef MQTT_THREAD if(key_pin == KEY_UP){ if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) == GPIO_PIN_SET){ mqtt_connect_aliyun(HOST_URL,PORT,CLIENT_ID,USER_NAME,PASSWORD); LED_0(0); } else{ mqtt_close_connect(); LED_0(1); } } else if(key_pin == KEY_0){ mqtt_publish_topic(PUB_TOPIC,"21.7"); } else if(key_pin == KEY_1){ mqtt_sub_topic(SUB_TOPIC); } key_pin = 0 ; #endif

3.2 测试结果:

        阿里云中开启在线调试,设备端按KEY_UP按键连接上阿里云后,按KEY_0键发布数据,然后使用在线调试功能获取相应模块的数据,验证成功。

结束语:

        本系列篇章,重在记录从0到1实现设备与云端的通信的过程,其中还有很多细节的问题不够完善,希望这些能给新手读者带来帮助。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有