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