項目描述
基于NUVOTON的NK-980IOT開發板,開發的邊緣計算網關。網關通過引出的引腳與溫度、濕度、光照傳感器模組連接,使用RTT提供的軟件包驅動傳感器模組。使用RTT提供的軟件包連接阿里云物聯網平臺,通過阿里云物聯網平臺下發邊緣計算的規則。邊緣網關按照規則對傳感器模組進行周期性得采集與上報。傳感器數據可通過阿里云物聯網平臺進行查看。邊緣計算規則支持配置每個傳感器的采集周期、支持定時上報數據與變化上報數據模式。
DIY過程
第一步:
先按照NK-980IOT 上手指南跑通系統。我用的源碼版本是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);
return0;
}
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軟件包,則需要修改其中的一些關鍵參數。
審核編輯:劉清
評論
查看更多