www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 嵌入式大雜燴
[導(dǎo)讀]點(diǎn)擊上方「嵌入式大雜燴」,選擇「置頂公眾號」第一時間查看嵌入式筆記! 進(jìn)入文章正題之前先說一個事:昨天分享的那本Linux書籍是去嵌入式Linux公眾號回復(fù)呀,不是在本公眾號回復(fù)哈。 前言 之前分享了基于LiteOS的智慧農(nóng)業(yè)案例實(shí)驗分享《基于LiteOS的智慧農(nóng)

點(diǎn)擊上方「嵌入式大雜燴」,選擇「置頂公眾號」第一時間查看嵌入式筆記!

進(jìn)入文章正題之前先說一個事:昨天分享的那本Linux書籍是去嵌入式Linux公眾號回復(fù)呀,不是在本公眾號回復(fù)哈。

前言

之前分享了基于LiteOS的智慧農(nóng)業(yè)案例實(shí)驗分享《基于LiteOS的智慧農(nóng)業(yè)案例實(shí)驗分享》,閱讀量挺不錯,看樣子大家都挺喜歡這種實(shí)驗。那咱們就再來一個類似的實(shí)驗:基于RT-Thread智慧路燈案例實(shí)驗。

實(shí)驗框圖


實(shí)驗說明:設(shè)備終端不斷采集光強(qiáng)數(shù)據(jù)并上傳至云端進(jìn)行監(jiān)控,同時也會把當(dāng)前LED(路燈)的狀態(tài)上傳。LED的狀態(tài)會根據(jù)光照值進(jìn)行打開、關(guān)閉。

比如當(dāng)光照值低于(夜晚)我們設(shè)置的光照閾值時就會打開LED,當(dāng)光照高于(白天)光照閾值時就會熄滅LED燈。除此之外,云端可以遠(yuǎn)程控制LED的亮滅,達(dá)到一個遠(yuǎn)程控制的作用。

創(chuàng)建RTT工程

  • 硬件:小熊派開發(fā)板。
  • 軟件:基于RT-Thread操作系統(tǒng)的應(yīng)用開發(fā)。
  • 開發(fā)工具:RT-Thread Studio V1.1.0。

本實(shí)驗我們需要用到RT-Thread的BH1750軟件包、OneNet軟件包及at_device軟件包等。這些軟件包的使用已經(jīng)在前兩篇筆記中有寫到:

【RT-Thread筆記】BH1750軟件包的使用

【RT-Thread筆記】OneNet軟件包的使用

本次實(shí)驗也只是把它們?nèi)诤显谝黄饋硎褂谩?/span>

1、添加相關(guān)軟件包、配置:

添加完之后的RT-Thread Settings文件如:

添加軟件包及軟件包的一些詳細(xì)配置可查閱上兩篇筆記。這里也大概提一下要點(diǎn):

(1)設(shè)置WiFi信息:

(2)設(shè)置OneNET信息

(3)配置I2C對接BH1750


這里我用的是RT-Thread Studio V1.1.0,這里的I2C的范例配置有點(diǎn)問題,其它版本的RT-Thread Studio應(yīng)該可以按范例配置那么配,如果按范例配置編譯不通過的話可以按照I2C2那樣配置。

2、應(yīng)用代碼

(1)測試函數(shù)

左右滑動查看全部代碼>>>

int onenet_upload_example(void) { rt_thread_t tid; /* onenet初始化 */ onenet_mqtt_init(); /* 綁定led命令響應(yīng)回調(diào)函數(shù) */ onenet_set_cmd_rsp_cb(onenet_ledcmd_rsp_cb); /* 創(chuàng)建onenet數(shù)據(jù)上傳任務(wù) */ tid = rt_thread_create("onenet_upload",
                      onenet_upload_entry,
                           RT_NULL, 2048, 10, 5); if (tid)
        rt_thread_startup(tid); return 0;
}
MSH_CMD_EXPORT(onenet_upload_example, send data to OneNET cloud cycle);


首先進(jìn)行一個onenet初始化,這個初始化接口時onenet軟件包提供的。

接著進(jìn)行一個led命令響應(yīng)回調(diào)函數(shù)的綁定,回調(diào)函數(shù)onenet_ledcmd_rsp_cb里進(jìn)行的就是接收到onenet下發(fā)的led命令之后進(jìn)行地一些操作。最后就是創(chuàng)建一個onenet數(shù)據(jù)上傳的線程。

最后把這個函數(shù)以命令的形式導(dǎo)出,以便我們可以在命令行輸入onenet_upload_example命令進(jìn)行測試。

(2)led命令響應(yīng)回調(diào)函數(shù)

左右滑動查看全部代碼>>>

static void onenet_ledcmd_rsp_cb(uint8_t *recv_data, size_t recv_size, uint8_t **resp_data, size_t *resp_size) { char res_buf[20] = {0}; char recv_buf[5] = {0};

    LOG_D("recv data is %.*s\n", 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), "led is on");
        rt_kprintf("led is on\n");
    } else if(!strcmp((char*)recv_data, "ledoff", 5))
    {
        rt_pin_write(SC1_LED_PIN, SC1_LED_OFF);
        rt_snprintf(res_buf, sizeof(res_buf), "led is off");
        rt_kprintf("led is off\n");
    } else {
        rt_kprintf("ledcmd ERROR!\n");
    } /* user have to malloc memory for response data */ *resp_data = (uint8_t *) rt_malloc(strlen(res_buf)); strncpy((char *)*resp_data, res_buf, strlen(res_buf));

    *resp_size = strlen(res_buf);
}


我們收到onenet下發(fā)的命令之后,所需要做的操作放在這里面。比如當(dāng)我們的設(shè)備接收到ledon字符串時,打開led,并打印提示信息。最后再把led is on信息應(yīng)答給onenet。

(3)上傳數(shù)據(jù)的任務(wù)

左右滑動查看全部代碼>>>

/* 上傳數(shù)據(jù)至onenet */ static void onenet_upload_entry(void *parameter) { rt_device_t dev = RT_NULL; struct rt_sensor_data data; rt_size_t res; char led_status = SC1_LED_OFF; char send_buf[32] = {0}; /* 設(shè)置高亮LED的引腳為輸出模式 */ rt_pin_mode(SC1_LED_PIN, PIN_MODE_OUTPUT); /* 查找bh1750傳感器  */ dev = rt_device_find("li_bh1750"); if (dev == RT_NULL)
    {
        rt_kprintf("Can't find device:li_bh1750\n"); return;
    } /* 以只讀模式打開bh1750 */ if (rt_device_open(dev, RT_DEVICE_FLAG_RDONLY) != RT_EOK)
    {
        rt_kprintf("open device failed!"); return;
    } while (1)
    { /* 從傳感器讀取一個數(shù)據(jù) */ res = rt_device_read(dev, 0, &data, 1); if (1 != res)
        {
            rt_kprintf("read data failed!size is %d", res);
        } else {
            rt_kprintf("light:%4d.%d lux\n", data.data.light / 10, data.data.light % 10);
            rt_sprintf(send_buf,"%4d.%d", data.data.light / 10, data.data.light % 10);
        } /* 高亮LED燈根據(jù)光照值自動打開、熄滅 */ 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\n");
        } else {
            rt_pin_write(SC1_LED_PIN, SC1_LED_OFF);
            led_status = SC1_LED_OFF;
            rt_kprintf("led_status = OFF\n");
        } /* 上傳光照數(shù)據(jù)至onenet */ if (onenet_mqtt_upload_string("light", (const char*)send_buf) < 0)
        {
            LOG_E("upload has an error, stop uploading"); break;
        } /* 上傳高亮led燈的狀態(tài)至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);
}


這是我們的上傳任務(wù):讀取BH1750傳感器采集的光照值,通過onenet軟件包給我們提供的onenet_mqtt_upload_string接口上傳至onenet。

同時,led的狀態(tài)根據(jù)光照值的結(jié)果自動打開/關(guān)閉,led的狀態(tài)也是通過onenet_mqtt_upload_string接口傳至onenet。

3、OneNET云端web應(yīng)用

(1)創(chuàng)建一個web應(yīng)用

為了能更好地、更直觀的展示我們的數(shù)據(jù),我們創(chuàng)建一個web應(yīng)用來管理:


onenet構(gòu)建web應(yīng)用的方式與之前我們分享的《基于LiteOS的智慧農(nóng)業(yè)案例實(shí)驗分享》中華為云構(gòu)建web應(yīng)用的方式類似,都是通過拖控件的方式。我們創(chuàng)建好的應(yīng)用如下:

實(shí)驗結(jié)果

因為Onenet數(shù)據(jù)最快是3秒刷新一次,所以存在一點(diǎn)延遲。

源碼下載

本實(shí)驗的RT-Thread Studio工程將上傳至本公眾號粉絲qq群,如有興趣,可自行獲取。qq群號: 696658660 同時,本篇筆記將會同步至我的個人博客: www.lizhengnian.cn ,歡迎來訪。 據(jù)說現(xiàn)在微信公號文章推送規(guī)則有點(diǎn)變化,如果覺得本公眾號文章有用,不妨星標(biāo)置頂本公眾號。

猜你喜歡

基于GUILite的簡易萬年歷

十年經(jīng)驗工程師為何被裁?

ARM編譯器那些事

串口打印知多少?

嵌入式百寶箱:第2期

最后

若覺得文章不錯,轉(zhuǎn)發(fā)分享、在看,也是我們繼續(xù)更新的動力。

在公眾號內(nèi)回復(fù)更多資源,可免費(fèi)獲取嵌入式資料。期待你的關(guān)注~


加好友,回暗號【嵌入式大雜燴】,進(jìn)微信群

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉