【RT-Thread作品秀】智能路燈
作者:楊滿意
概述 目前路燈大多采用定時(shí)功能,但由于四季交替變化,日出日落時(shí)間不一樣,如果采用統(tǒng)一時(shí)間定時(shí)開關(guān)燈,將會(huì)浪費(fèi)多余的電力資源,如果通過無線網(wǎng)控制和通過日出日落時(shí)間燈多種方式控制,將會(huì)靈活控制路燈,從而達(dá)到節(jié)能功能,是一個(gè)相當(dāng)實(shí)用的設(shè)計(jì)
開發(fā)環(huán)境
硬件:art-pi
RT-Thread版本:RT-Thread V 4.0.3
開發(fā)工具及版本:MDK 5.27
RT-Thread使用情況概述內(nèi)核部分:調(diào)度器,信號量,消息隊(duì)列。
調(diào)度器:創(chuàng)建多個(gè)線程來實(shí)現(xiàn)不同的工作。
信號量:用來同步線程。
消息隊(duì)列:用來實(shí)現(xiàn)線程之間傳遞的數(shù)據(jù)。
組件部分:SPI框架, Sensor框架,SAL 套接字抽象層
SPI框架:使用 SPI 框架來驅(qū)動(dòng)溫度傳感器,上層代碼可以提高代碼的可重用性。
Sensor框架:為上層提供統(tǒng)一的操作接口,提高上層代碼的可重用性;簡化底層驅(qū)動(dòng)開發(fā)的難度,只要實(shí)現(xiàn)簡單的 ops(operations: 操作命令) 就可以將傳感器注冊到系統(tǒng)上。
SAL 套接字抽象層:組件完成對不同網(wǎng)絡(luò)協(xié)議棧或網(wǎng)絡(luò)實(shí)現(xiàn)接口的抽象并對上層提供一組標(biāo)準(zhǔn)的 BSD Socket API,這樣開發(fā)者只需要關(guān)心和使用網(wǎng)絡(luò)應(yīng)用層提供的網(wǎng)絡(luò)接口,而無需關(guān)心底層具體網(wǎng)絡(luò)協(xié)議棧類型和實(shí)現(xiàn),極大的提高了系統(tǒng)的兼容性,方便開發(fā)者完成協(xié)議棧的適配和網(wǎng)絡(luò)相關(guān)的開發(fā)
軟件包部分:
Webclient:提供設(shè)備與 HTTP Server 的通訊的基本功能。
pahomqtt,:本軟件包是在 Eclipse paho-mqtt 源碼包的基礎(chǔ)上設(shè)計(jì)的一套 MQTT 客戶端程序。
Onenet:是 RT-Thread 針對 OneNET 平臺連接做的的適配,通過這個(gè)軟件包,可以讓設(shè)備在 RT-Thread 上非常方便的連接 OneNet 平臺,完成數(shù)據(jù)的發(fā)送、接收、設(shè)備的注冊和控制等功能。
cJSON:C語言實(shí)現(xiàn)的極簡的解析 JSON 格式的軟件包。
at_device:是由 RT-Thread AT 組件針對不同 AT 設(shè)備的移植文件和示例代碼組成,目前支持的 AT 設(shè)備有:ESP8266、M26、MC20、RW007、MW31、SIM800C 以及 SIM76XX 系列設(shè)備等。
wifi:是一個(gè) RT-Thread 的軟件包,該軟件包提供了 wifi 模塊的驅(qū)動(dòng)
硬件框架
軟件框架說明
軟件框架說明,首先初始化硬件,通過wifi連接路由器,連接onenet服務(wù)器,然后判斷工作模式是否為手動(dòng)模式,如果是手動(dòng)模式,通過onenet服務(wù)器下發(fā)開關(guān)燈指令,如果是自動(dòng)模式,則通過事先保存的經(jīng)緯度數(shù)據(jù),通過算法,計(jì)算當(dāng)?shù)厝绯跞章鋾r(shí)間,然后轉(zhuǎn)化為時(shí)間戳,,然后根據(jù)實(shí)時(shí)時(shí)鐘的時(shí)間轉(zhuǎn)化的時(shí)間戳進(jìn)行對比,判斷是否開關(guān)燈
軟件模塊說明
onenet_mqtt_init_entry:初始化 onenet_mqtt, mqtt初始化成功之后,釋放信號量告知onenet_upload_data_thread線程可以上傳數(shù)據(jù)了,這里會(huì)做循環(huán)處理,周期性的檢查onenet_mqtt的狀態(tài),如果已經(jīng)斷線,就進(jìn)行再次連接。
onenet_upload_data_entry: take信號量的方式,獲取到信號量之后,通過郵箱獲取到的內(nèi)存池首地址去拿到數(shù)據(jù),然后就可以發(fā)數(shù)據(jù)到 onenet云平臺和PC端上位機(jī)。
led _entry:讀取實(shí)時(shí)時(shí)鐘,轉(zhuǎn)化為時(shí)間戳,判斷工作模式,判斷是否開關(guān)燈
演示效果
代碼地址在附件。
比賽感悟
紙上得來終覺淺,絕知此事要躬行。陸游的這首詩,完美的詮釋了我在這次比賽中的收獲。
首次接觸 RT-Thread, 之前接觸的是freertos,多線程及其調(diào)度、信號量、郵箱、消息隊(duì)列、內(nèi)存管理、定時(shí)器等大致相同,值得贊賞的是rtthread官方生態(tài)真的好,各種插件,都已經(jīng)集成好,自己寫的代碼越來越少,更容易上手。
感謝主辦方給我這次機(jī)會(huì)接觸這么優(yōu)秀的平臺,為以后的開發(fā)者提供更大的便利,提供更多的選擇,