前言
之前在網上看到了很多類似的實踐,都蠻受大家歡迎的。那咱們就再來一個類似的實驗:基于RT-Thread的智慧路燈案例實驗。
實驗框圖
實驗說明:設備終端不斷采集光強數據并上傳至云端進行監控,同時也會把當前LED(路燈)的狀態上傳。LED的狀態會根據光照值進行打開、關閉。
比如當光照值低于(夜晚)我們設置的光照閾值時就會打開LED,當光照高于(白天)光照閾值時就會熄滅LED燈。除此之外,云端可以遠程控制LED的亮滅,達到一個遠程控制的作用。
創建RTT工程
軟件:基于RT-Thread操作系統的應用開發。
開發工具:RT-Thread Studio V1.1.0。
本實驗我們需要用到RT-Thread的BH1750軟件包、OneNet軟件包及at_device軟件包等。這些軟件包的使用已經在前兩篇筆記中有寫到:
【RT-Thread筆記】BH1750軟件包的使用
【RT-Thread筆記】OneNet軟件包的使用
本次實驗也只是把它們融合在一起來使用。
1、添加相關軟件包、配置:
添加完之后的RT-Thread Settings文件如:
添加軟件包及軟件包的一些詳細配置可查閱上兩篇筆記。這里也大概提一下要點:
(1)設置WiFi信息:
(2)設置OneNET信息
(3)配置I2C對接BH1750
這里我用的是RT-Thread Studio V1.1.0,這里的I2C的范例配置有點問題,其它版本的RT-Thread Studio應該可以按范例配置那么配,如果按范例配置編譯不通過的話可以按照I2C2那樣配置。
2、應用代碼
(1)測試函數
左右滑動查看全部代碼>>>
intonenet_upload_example(void) { rt_thread_ttid; /*onenet初始化*/ onenet_mqtt_init(); /*綁定led命令響應回調函數*/ onenet_set_cmd_rsp_cb(onenet_ledcmd_rsp_cb); /*創建onenet數據上傳任務*/ tid=rt_thread_create("onenet_upload", onenet_upload_entry, RT_NULL, 2048, 10, 5); if(tid) rt_thread_startup(tid); return0; } MSH_CMD_EXPORT(onenet_upload_example,senddatatoOneNETcloudcycle);
首先進行一個onenet初始化,這個初始化接口時onenet軟件包提供的。
接著進行一個led命令響應回調函數的綁定,回調函數onenet_ledcmd_rsp_cb里進行的就是接收到onenet下發的led命令之后進行地一些操作。最后就是創建一個onenet數據上傳的線程。
最后把這個函數以命令的形式導出,以便我們可以在命令行輸入onenet_upload_example命令進行測試。
(2)led命令響應回調函數
左右滑動查看全部代碼>>>
staticvoidonenet_ledcmd_rsp_cb(uint8_t*recv_data,size_trecv_size,uint8_t**resp_data,size_t*resp_size) { charres_buf[20]={0}; charrecv_buf[5]={0}; LOG_D("recvdatais%.*s ",recv_size,recv_data); if(!strncmp((char*)recv_data,"ledon",5)) { rt_pin_write(SC1_LED_PIN,SC1_LED_ON); rt_snprintf(res_buf,sizeof(res_buf),"ledison"); rt_kprintf("ledison "); } elseif(!strcmp((char*)recv_data,"ledoff",5)) { rt_pin_write(SC1_LED_PIN,SC1_LED_OFF); rt_snprintf(res_buf,sizeof(res_buf),"ledisoff"); rt_kprintf("ledisoff "); } else { rt_kprintf("ledcmdERROR! "); } /*userhavetomallocmemoryforresponsedata*/ *resp_data=(uint8_t*)rt_malloc(strlen(res_buf)); strncpy((char*)*resp_data,res_buf,strlen(res_buf)); *resp_size=strlen(res_buf); }
我們收到onenet下發的命令之后,所需要做的操作放在這里面。比如當我們的設備接收到ledon字符串時,打開led,并打印提示信息。最后再把led is on信息應答給onenet。
(3)上傳數據的任務
左右滑動查看全部代碼>>>
/*上傳數據至onenet*/ staticvoidonenet_upload_entry(void*parameter) { rt_device_tdev=RT_NULL; structrt_sensor_datadata; rt_size_tres; charled_status=SC1_LED_OFF; charsend_buf[32]={0}; /*設置高亮LED的引腳為輸出模式*/ rt_pin_mode(SC1_LED_PIN,PIN_MODE_OUTPUT); /*查找bh1750傳感器*/ dev=rt_device_find("li_bh1750"); if(dev==RT_NULL) { rt_kprintf("Can'tfinddevice:li_bh1750 "); return; } /*以只讀模式打開bh1750*/ if(rt_device_open(dev,RT_DEVICE_FLAG_RDONLY)!=RT_EOK) { rt_kprintf("opendevicefailed!"); return; } while(1) { /*從傳感器讀取一個數據*/ res=rt_device_read(dev,0,&data,1); if(1!=res) { rt_kprintf("readdatafailed!sizeis%d",res); } else { rt_kprintf("light:%4d.%dlux ",data.data.light/10,data.data.light%10); rt_sprintf(send_buf,"%4d.%d",data.data.light/10,data.data.light%10); } /*高亮LED燈根據光照值自動打開、熄滅*/ if(data.data.light/10<=?40) ????????{ ????????????rt_pin_write(SC1_LED_PIN,?SC1_LED_ON); ????????????led_status?=?SC1_LED_ON; ????????????rt_kprintf("led_status?=?ON "); ????????} ????????else ????????{ ????????????rt_pin_write(SC1_LED_PIN,?SC1_LED_OFF); ????????????led_status?=?SC1_LED_OFF; ????????????rt_kprintf("led_status?=?OFF "); ????????} ????????/*?上傳光照數據至onenet?*/ ????????if?(onenet_mqtt_upload_string("light",?(const?char*)send_buf)?0) ????????{ ????????????LOG_E("upload?has?an?error,?stop?uploading"); ????????????break; ????????} ????????/*?上傳高亮led燈的狀態至onenet?*/ ????????if?(onenet_mqtt_upload_string("led_status",?(const?char*)ledsta_str[led_status])?0) ????????{ ????????????LOG_E("upload?has?an?error,?stop?uploading"); ????????????break; ????????} ????????rt_thread_delay(rt_tick_from_millisecond(3?*?1000)); ????} ????rt_device_close(dev); }
這是我們的上傳任務:讀取BH1750傳感器采集的光照值,通過onenet軟件包給我們提供的onenet_mqtt_upload_string接口上傳至onenet。
同時,led的狀態根據光照值的結果自動打開/關閉,led的狀態也是通過onenet_mqtt_upload_string接口傳至onenet。
3、OneNET云端web應用
(1)創建一個web應用
為了能更好地、更直觀的展示我們的數據,我們創建一個web應用來管理:
onenet構建web應用的方式與之前我們分享的《智慧農業案例實驗分享》中華為云構建web應用的方式類似,都是通過拖控件的方式。我們創建好的應用如下:
實驗結果
-
RT-Thread
+關注
關注
31文章
1239瀏覽量
39438 -
智慧路燈
+關注
關注
2文章
705瀏覽量
16943
原文標題:基于RT-Thread的智慧路燈案例實驗分享
文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論