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

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

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

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

前言

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

實(shí)驗(yàn)框圖


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

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

創(chuàng)建RTT工程

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

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

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

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

本次實(shí)驗(yàn)也只是把它們?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)行一個(gè)onenet初始化,這個(gè)初始化接口時(shí)onenet軟件包提供的。

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

最后把這個(gè)函數(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字符串時(shí),打開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)
    { /* 從傳感器讀取一個(gè)數(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。

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

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

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

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


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

實(shí)驗(yàn)結(jié)果

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

源碼下載

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

猜你喜歡

基于GUILite的簡易萬年歷

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

ARM編譯器那些事

串口打印知多少?

嵌入式百寶箱:第2期

最后

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

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


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

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個(gè)人觀點(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)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

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

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

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

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

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

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

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

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動電源

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

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

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

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

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

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

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

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

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

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

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

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