Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
物联网
【NUC980开发板DIY项目大挑战】边缘计算网关
发布于 2022-05-28 18:41:46 浏览:843
订阅该版
[tocm] ## 项目描述 基于NUVOTON的NK-980IOT开发板,开发的边缘计算网关。网关通过引出的引脚与温度、湿度、光照传感器模组连接,使用RTT提供的软件包驱动传感器模组。使用RTT提供的软件包连接阿里云物联网平台,通过阿里云物联网平台下发边缘计算的规则。边缘网关按照规则对传感器模组进行周期性得采集与上报。传感器数据可通过阿里云物联网平台进行查看。边缘计算规则支持配置每个传感器的采集周期、支持定时上报数据与变化上报数据模式。 在文章的最后放了源码与演示视频。 ## DIY过程 ### 第一步: 先按照[NK-980IOT 上手指南](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/quick-start/nk-980iot/quick-start)跑通系统。我用的源码版本是v4.0.5,因为尝试过v4.1.0,第一次编译没通过(可能有的地方没配置好),用v4.0.5的一次性编译通过。 ### 第二步: 安装ENV工具环境,参考[Env 用户手册](https://www.rt-thread.org/document/site/#/development-tools/env/env)。 ### 第三步: 在上一步跑通的代码的基础上增加ali-iotkit、dht11、bh1750软件包。 menuconfig配置: ① 选上sensor drivers选项,因为我们用到的传感器数据采集依赖于RTT的SENSOR组件。 ![image-20220528155112420.png](https://oss-club.rt-thread.org/uploads/20220528/7144653b099a5328c8d9d1f4b58eaeaf.png.webp) ② 选上dht11与bh1750。 ![image-20220528155345623.png](https://oss-club.rt-thread.org/uploads/20220528/80a35b42addca4cf1a5a50de511a8820.png.webp) ③ 选上ali-iotkit,注意ali-iotkit里边的选项不要选Sample,否则编译会出错,后续我们会参考Sample自己添加文件。 ![image-20220528162217192.png](https://oss-club.rt-thread.org/uploads/20220528/1e6b17a076578fd9abe257092ef36681.png.webp) ④ 保存,退出menuconfig。 ⑤ 更新软件包。 ```shell pkgs --update ``` ⑥ 生成keil工程 ```shell scons --target=mdk5 ``` ### 第四步: ① 修改dht11代码,以适配我们的板子与传感器。参考源码放在文章的最后。 文件:dht11_sample.c。修改数据引脚,这里我们用PB1。 ```c /* 获取板子PB1的引脚号 */ #define DHT11_DATA_PIN NU_GET_PININDEX(NU_PB, 1) ``` 将实例代码中的线程创建与线程入口函数删掉,读取传感器数据的实现我们自己写。 ② 修改bh1750代码,以适配我们的板子与传感器。参考源码放在文章的最后。 文件:sensor_rohm_bh1750.c。将I2C设备改为i2c2,我们用板子上的i2c2连接传感器。 ```c int bh1750_port(void) { struct rt_sensor_config cfg; cfg.intf.dev_name = "i2c2"; cfg.intf.user_data = (void *)BH1750_ADDR; cfg.irq_pin.pin = RT_PIN_NONE; rt_hw_bh1750_init("bh1750", &cfg); return 0; } INIT_COMPONENT_EXPORT(bh1750_port); ``` 文件:bh1750.c,bh1750_set_measure_mode的最后一个参数改为200,太小的话会采集失败。 ```c float bh1750_read_light(bh1750_device_t hdev) { rt_uint8_t temp[2]; float current_light = 0; RT_ASSERT(hdev); bh1750_set_measure_mode(hdev, BH1750_CON_H_RES_MODE, 200); bh1750_read_regs(hdev->bus, 2, temp); current_light = ((float)((temp[0] << 8) + temp[1]) / 1.2); return current_light; } ``` ### 第五步: 硬件连接,按照下图将传感器用杜邦线连接至板子上。 ![image-20220528163642841.png](https://oss-club.rt-thread.org/uploads/20220528/8b9d0dec95fc35b98ce4bc8192de457d.png.webp) ### 第六步: 在阿里云物联网平台创建产品与设备,参考[公共实例快速入门 (aliyun.com)](https://help.aliyun.com/document_detail/130816.html)。 我在创建了一个名为“边缘网关”的产品,基于产品添加了一个名为“gateway1”的设备,在产品上添加了三个属性: ![image-20220528164415535.png](https://oss-club.rt-thread.org/uploads/20220528/d583498b660ceafcb4e4b25e56a0351c.png.webp) ### 第七步: 增加edge.c文件,主要功能是连接阿里云物联网平台、解析云端下发的边缘计算规则并存储、采集数据并上报至阿里云物联网平台。将以下参数替换为我们在阿里云物联网平台增加的产品与设备的真实参数。参考源码放在文章的最后。 ```c #define PKG_USING_ALI_IOTKIT_PRODUCT_KEY "a1LEPYmKptP" #define PKG_USING_ALI_IOTKIT_PRODUCT_SECRET "XObSHBABkXzxmgYm" #define PKG_USING_ALI_IOTKIT_DEVICE_NAME "gateway1" #define PKG_USING_ALI_IOTKIT_DEVICE_SECRET "857b78c5a8fc79aa2703379ef9666eb2" ``` ### 第八步: ① 编译工程,将固件下载至板子上运行。 ② 在阿里云物联网平台通过/ProductKey/DeviceName/user/get主题下发边缘计算规则,网关就可以按照规则周期性采集数据与上报数据了。其中“ProductKey”与“DeviceName”要替换为阿里云提供的真实的参数。 ## 边缘计算规则 ```json { "sensors":[ { "name":"temperature", //传感器名称 "collect_cycle":1, //采集周期,秒 "up_type":1, //1:定时上报,2:变化上报 "up_cycle":5 //上报周期,秒,up_type为1时有效 } ] } ``` 本项目中用的规则为: ```json { "sensors":[ { "name":"temperature", "collect_cycle":5, "up_type":1, "up_cycle":30 }, { "name":"Humidity", "collect_cycle":5, "up_type":1, "up_cycle":30 }, { "name":"LightLux", "collect_cycle":1, "up_type":2 } ] } ``` ## 心得体会 rtt为我们提供了丰富的设备驱动、组件、软件包,使用rtt进行工程的创建、项目的开发是比较快速方便的,但同时有很多组件或者软件包还不是特别的完善,例如本项目中用到的dht11与bh1750软件包,则需要修改其中的一些关键参数(如bh1750_set_measure_mode中的时间参数)才能正常采集数据。再如rt_sprintf不能格式化输出%lld的long long型数据。相信通过我们共同的努力,rtt会变得越来越强大,越来越好用。 源码地址:https://gitee.com/mojie_baby/rt-thread-nk-980iot-v4.0.5.git 视频地址:https://b23.tv/gZ5CdYb
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
BabyKing
这个人不懒,只是不想写。
文章
1
回答
0
被采纳
0
关注TA
发私信
相关文章
1
用N58 4G模组连接阿里云在解析域名指令不对
2
使用正点原子的探索者,可以ping通,提示getaddrinfo error。
3
AT_DEVICE中BC26各项BUG反馈
4
为什么HAL_TCP_Read中select总会返回0的一个结果
5
有没有人想要移植Blynk库
6
stm32 上如何实现rtmp,该如何入手
7
物联网刚入坑,想了解下lwip和at连接物联网平台的区别?
8
想问个问题,通过ESP8266接入网络后,如何上传数据和接入物联网平台??
9
除了BC26,还有其他比较好用的NB模块吗?
10
ESp8266的几个socket API函数
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
本月文章贡献
程序员阿伟
5
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部