打印
[新唐博主]

【微处理器开发板 DIY 项目大挑战】边缘计算网关

[复制链接]
922|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
21ic小管家|  楼主 | 2023-6-1 11:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
NUC980 开发板 DIY 项目大挑战
边缘计算网关

作者:BabyKing

基于新唐的NuMaker-IIoT-NUC980开发板,开发的边缘计算网关。网关通过引出的引脚与温度、湿度、光照传感器模组连接,使用RTT提供的软件包驱动传感器模组。使用RTT提供的软件包连接阿里云物联网平台,通过阿里云物联网平台下发边缘计算的规则。边缘网关按照规则对传感器模组进行周期性得采集与上报。传感器数据可通过阿里云物联网平台进行查看。边缘计算规则支持配置每个传感器的采集周期、支持定时上报数据与变化上报数据模式。

在文章的最后放了源码与演示视频。

第一步
先按照NuMaker-IIoT-NUC980上手指南跑通系统。我用的源码版本是v4.0.5,因为尝试过v4.1.0,第一次编译没通过(可能有的地方没配置好),用v4.0.5的一次性编译通过。

第二步
安装ENV工具环境,参考Env 用户手册。

第三步
在上一步跑通的代码的基础上增加ali-iotkit、dht11、bh1750软件包。

menuconfig配置:
① 选上sensor drivers选项,因为我们用到的传感器数据采集依赖于RTT的SENSOR组件。


② 选上dht11与bh1750。


③ 选上ali-iotkit,注意ali-iotkit里边的选项不要选Sample,否则编译会出错,后续我们会参考Sample自己添加文件。


④ 保存,退出menuconfig。

⑤ 更新软件包。
pkgs --update

⑥ 生成keil工程
scons --target=mdk5



第四步
① 修改dht11代码,以适配我们的板子与传感器。参考源码放在文章的最后。

文件:dht11_sample.c。修改数据引脚,这里我们用PB1。

/* 获取板子PB1的引脚号 */

#define DHT11_DATA_PIN   NU_GET_PININDEX(NU_PB, 1)

将实例代码中的线程创建与线程入口函数删掉,读取传感器数据的实现我们自己写。

② 修改bh1750代码,以适配我们的板子与传感器。参考源码放在文章的最后。

文件:sensor_rohm_bh1750.c。将I2C设备改为i2c2,我们用板子上的i2c2连接传感器。

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,太小的话会采集失败。

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;
}


第五步
硬件连接,按照下图将传感器用杜邦线连接至板子上。


第六步
在阿里云物联网平台创建产品与设备,参考公共实例快速入门 (aliyun.com)。

我在创建了一个名为“边缘网关”的产品,基于产品添加了一个名为“gateway1”的设备,在产品上添加了三个属性:



第七步
增加edge.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”要替换为阿里云提供的真实的参数。

边缘计算规则

{
    "sensors":[
        {
            "name":"temperature",        //传感器名称
            "collect_cycle":1,            //采集周期,秒
            "up_type":1,                //1:定时上报,2:变化上报
            "up_cycle":5                //上报周期,秒,up_type为1时有效
        }
    ]
}

本项目中用的规则为:
{
    "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

使用特权

评论回复
沙发
xixi2017| | 2023-6-13 21:58 | 只看该作者
这个操作一看就不是普通的MCU开发。

使用特权

评论回复
板凳
两只袜子| | 2023-6-20 15:13 | 只看该作者
马爸爸真的是无所不能,物联网也有他的产业

使用特权

评论回复
地板
643757107| | 2023-9-24 18:27 | 只看该作者
这个开发界面如何加载里面没有的硬件模块

使用特权

评论回复
5
mintspring| | 2023-9-24 20:24 | 只看该作者
什么是边缘计算,单片机本身就可以啊。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:祝大家天天开❤ ///w/// 有问题咨询联系QQ:3326242524

2555

主题

6230

帖子

228

粉丝