日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

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

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

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

前言

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

實驗框圖


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

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

創(chuàng)建RTT工程

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

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

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

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

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

1、添加相關軟件包、配置:

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

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

(1)設置WiFi信息:

(2)設置OneNET信息

(3)配置I2C對接BH1750


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

2、應用代碼

(1)測試函數(shù)

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

int onenet_upload_example(void) { rt_thread_t tid; /* onenet初始化 */ onenet_mqtt_init(); /* 綁定led命令響應回調(diào)函數(shù) */ onenet_set_cmd_rsp_cb(onenet_ledcmd_rsp_cb); /* 創(chuàng)建onenet數(shù)據(jù)上傳任務 */ 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);


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

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

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

(2)led命令響應回調(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ā)的命令之后,所需要做的操作放在這里面。比如當我們的設備接收到ledon字符串時,打開led,并打印提示信息。最后再把led is on信息應答給onenet。

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

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

/* 上傳數(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}; /* 設置高亮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);
}


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

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

3、OneNET云端web應用

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

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


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

實驗結果

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

源碼下載

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

猜你喜歡

基于GUILite的簡易萬年歷

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

ARM編譯器那些事

串口打印知多少?

嵌入式百寶箱:第2期

最后

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

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


加好友,回暗號【嵌入式大雜燴】,進微信群

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

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

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅(qū)動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅(qū)動性能的關鍵。

關鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質(zhì)量和效率直接關系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅(qū)動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關鍵字: LED 驅(qū)動電源 開關電源

LED驅(qū)動電源是把電源供應轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅(qū)動電源
關閉