完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
智能家居 DIY 教程连载(4)
云乃万物互联之本Hi,各位小伙伴,DIY 活动已经来到了尾声,第四周的任务是整个项目中最有趣也是最重要的部分——物联网。本周的任务完成之后,也就意味着整个项目就完全做完啦,是不是迫不及待先把整个 DIY 做出来打造一个属于自己的智能家居温度监控系统呢?那就赶紧来看看最后的任务是如何完成的吧~ 1. 第四周任务概览 我们来回顾一下第四周的任务:
本篇文章取消了对上位机使用的讲解,因为上位机的使用过于简单,大家私底下自行尝试即可。 2. 准备工作 请务必先学习以下内容,再继续看本篇文章:
3. 配置工程 首先,要想清楚第四周的整个工程需要依赖什么工具才能正常工作,简单来说,我们需要将 ESP8266 对接到 OneNet 云,而 ESP8266 通过 AT Device 控制的,所以现在目标是明确的:开启 AT 和 ESP8266,并配置 OneNet 软件包中的相关参数。 开启 AT 和 ESP8266,ESP8266 的 WIFI 账号和密码需要写对,不然连不上网,自然就对接不上 OneNet 了: RT-Thread online packages ---> IoT - internet of things ---> (testwifi) WIFI ssid (12345678) WIFI password (uart2) AT client device name (512) The maximum length of receive line buffer 开启 OneNet,完成相关参数配置,其中 device id、auth info、api key、product id、master/product apikey 这些参数如何配置请查看 OneNet 的产品创建与设备接入视频教程:点此处跳转 RT-Thread online packages ---> IoT - internet of things ---> IoT Cloud ---> [ ] Enable OneNET sample [ ] Enable OneNET automatic register device (534342011) device id (201907091115) auth info (IFzqRGOjq530YSyFY6EMda45Xdw=) api key (258302) product id (FV=ssEvYvHcKqN0=ZdTjM6NrGv0=) master/product apikey 值得一提的是,OneNet 软件包是需要依赖 paho-mqtt、webclient、cJSON 的,选中 OneNet 后,以上三个选项也会被自动选中,如下图: 注意自己手上的 ESP8266 接板子的哪个串口,需要将这个串口打开: Hardware Drivers Config ---> On-chip Peripheral Drivers ---> Enable UART ---> Enable UARTx
使用邮箱和内存池是为了解决一下问题: 其实就是典型的流控问题,或者说是供求关系问题。 在 onenet_upload_data_thread 线程入口函数中利用 onenet_mqtt_upload_digit 上传数据给 OneNet: static void onenet_upload_data_entry(void *parameter) { struct recvdata *buf_mp; /* 永久等待方式接收信号量,若收不到,该线程会一直挂起 */ rt_sem_take(mqttinit_sem, RT_WAITING_FOREVER); /* 后面用不到这个信号量了,把它删除了,回收资源 */ rt_sem_delete(mqttinit_sem); while (1) { if (rt_mb_recv(tmp_msg_mb, (rt_ubase_t*)&buf_mp, RT_WAITING_FOREVER) == RT_EOK) { /* 500ms上传一次数据 */ rt_thread_delay(rt_tick_from_millisecond(500)); /* 上传发送节点1的数据到OneNet服务器,数据流名字是temperature_p0 */ if (onenet_mqtt_upload_digit("temperature_p0", buf_mp->temperature_p0) != RT_EOK) rt_kprintf("upload temperature_p0 has an error, try againn"); else printf("onenet upload OK >>> temp_p0:%fn", buf_mp->temperature_p0); rt_mp_free(buf_mp); /* 释放内存块 */ buf_mp = RT_NULL; /* 请务必要做 */ } } } 就是这么简单。 如果说,我们底下有多个发送节点采集温度,接收节点会收到多个发送节点的温度数据,而只有 一个 ESP8266,怎么在上传数据给 OneNet 的时候区分这些不同节点的数据?这里其实只需要建立不同的数据流就好了,每一个节点的数据为一个数据流,rt_err_t onenet_mqtt_upload_digit(const char *ds_name, const double digit) 函数的第一个参数就是数据流的名称,起不同名字就是不用的数据流了,如: /* 上传发送节点1的数据到OneNet服务器,数据流名字是temperature_p0 */ onenet_mqtt_upload_digit("temperature_p0", buf_mp->temperature_p0); /* 上传发送节点2的数据到OneNet服务器,数据流名字是temperature_p1 */ onenet_mqtt_upload_digit("temperature_p1", buf_mp->temperature_p1); 5. OneNet 应用开发 我们关把数据上传给 OneNet 后,如何才能看到这些数据呢?OneNet 给开发者提供了一些简单应用开发的工具,我们利用这些工具在 OneNet 上创建一些简单的小应用,即可实现对数据的远程监控了。 由于文章篇幅有限,这里就不详细展示如何制作应用了 7. 结果展示 8. 注意事项
4.3 上传数据至云端 在 ESP8266 已经正常连上 WIFI 的前提下,MQTT 初始化成功后,就可以放心大胆的上传数据给 OneNet 了。OneNet 软件包给用户提供了几个上传数据的接口,详情请查看 OneNet 软件包的 API 说明文档:点此处跳转。这个 DIY 项目中需要上传的数据是温度数据,属于数字数据,可以使用下面这个 API: rt_err_t onenet_mqtt_upload_digit(const char *ds_name, const double digit); 利用 mqtt 向 OneNET 平台发送字符串数据。 [tr]参数描述[/tr]
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1561 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1501 浏览 1 评论
933 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
665 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1555 浏览 2 评论
1848浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
610浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
504浏览 3评论
508浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
489浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 17:40 , Processed in 1.148813 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号