經(jīng)過(guò)3個(gè)月的不斷摸索,終于把91arm學(xué)堂階段二的項(xiàng)目實(shí)踐內(nèi)容基本上做了出來(lái)(視頻教程中的代碼并不全),在此把相關(guān)心得和代碼保存下來(lái),供自己和學(xué)友們參考
系統(tǒng)硬件:
主控模塊:nanopi s2(cortex-A9 四核s5p4418)、5v轉(zhuǎn)3.3v模塊、光感、聲感、5v繼電器、面包板及LED燈、串口轉(zhuǎn)USB調(diào)試接口等
無(wú)線網(wǎng)絡(luò)模塊:tiny6410(ARM11 三星S3C6410)、紅外傳感、繼電器、面包板及LED燈
先看整體效果,主控程序的為znkg2018,網(wǎng)絡(luò)端程序?yàn)閚et_light
主控及網(wǎng)絡(luò)端程序如下:
web瀏覽器界面如下:
該項(xiàng)目的主要思路:
(1)主控程序znkg2018(交叉編譯移植到nanopi s2上)包含四個(gè)線程:
線程一:(用于進(jìn)程間通信)循環(huán)查看共享內(nèi)存、消息隊(duì)列數(shù)據(jù),根據(jù)消息隊(duì)列的消息類型將實(shí)時(shí)將共享內(nèi)存數(shù)據(jù)更新到主數(shù)據(jù)結(jié)構(gòu)內(nèi)存,或者將主數(shù)據(jù)結(jié)構(gòu)內(nèi)存更新至共享內(nèi)存;
線程二:(用于檢測(cè)設(shè)備上下線)循環(huán)讀取5v轉(zhuǎn)3.3v模塊連接的開發(fā)板gpio口數(shù)據(jù),高電平則代表相應(yīng)的感應(yīng)設(shè)備連接上了系統(tǒng),可以讀取該設(shè)備數(shù)據(jù)線連接的gpio口電平狀態(tài)了(5v轉(zhuǎn)3.3v模塊、感應(yīng)設(shè)備的電源線二合一連接在一起,實(shí)現(xiàn)同時(shí)插拔,從而通過(guò)該線程檢測(cè)相應(yīng)感應(yīng)設(shè)備的插拔);
線程三:(用于偵聽網(wǎng)絡(luò)設(shè)備的連接)該線程為網(wǎng)絡(luò)服務(wù)端,首先建立TCP數(shù)據(jù)流(socket~bind~listen~accetp)循環(huán)偵聽網(wǎng)絡(luò)客戶端的連接請(qǐng)求,收到情求后自己再開辟新的線程用于同該客戶端通信,根據(jù)客戶端數(shù)據(jù)更新主數(shù)據(jù)結(jié)構(gòu)中的網(wǎng)絡(luò)設(shè)備狀態(tài),根據(jù)主數(shù)據(jù)結(jié)構(gòu)中的網(wǎng)絡(luò)設(shè)備狀態(tài)向網(wǎng)絡(luò)設(shè)備發(fā)送相應(yīng)的命令。網(wǎng)絡(luò)通信是基于協(xié)議的,便于命令分類和傳輸校驗(yàn)。
線程四:(用于燈光設(shè)備開關(guān)控制)本項(xiàng)目共三個(gè)小燈,分別為主控端的兩個(gè)、網(wǎng)絡(luò)端的一個(gè),開關(guān)均由繼電器控制,模擬了220v的客廳、書房燈及辦公室(遠(yuǎn)端)的大燈。循環(huán)查詢主數(shù)據(jù)結(jié)構(gòu)中的燈光設(shè)備的開關(guān)狀態(tài),向?qū)?yīng)的繼電器發(fā)送寫數(shù)據(jù)命令從而控制燈光開關(guān)。若感應(yīng)設(shè)備綁定了燈光設(shè)備,則讀取感應(yīng)設(shè)備gpio口數(shù)據(jù),并將該數(shù)據(jù)寫入繼電器gpio口中。網(wǎng)絡(luò)設(shè)備則只更新網(wǎng)絡(luò)命令狀態(tài)值,由進(jìn)程三發(fā)送出去,再由網(wǎng)絡(luò)端程序處理并控制其繼電器gpio,從而控制相應(yīng)的燈光開關(guān)。
(2)網(wǎng)絡(luò)客戶端程序net_light(交叉編譯移植到tiny 6410上)就一個(gè)主程序:
該程序通過(guò)ip和端口號(hào)連接nanopi上的主控程序的網(wǎng)絡(luò)線程,根據(jù)主控程序傳來(lái)的網(wǎng)絡(luò)命令更新相應(yīng)的設(shè)備狀態(tài)。
(3)nanopi上的boa服務(wù)器運(yùn)行的cgi程序:
在nanopi上安裝了boa服務(wù)器后,就可以通過(guò)瀏覽器來(lái)訪問(wèn)nanopi中的cgi程序了,在boa的www文件夾中放上index.html文件,其為歡迎界面,其中的選項(xiàng)分別連接了不同的cgi程序,這些程序都打開了主控程序管理的共享內(nèi)存和消息隊(duì)列,通過(guò)修改表單并提取表單中的數(shù)據(jù),更新共享內(nèi)存數(shù)據(jù),并通過(guò)消息隊(duì)列通知主控設(shè)備更新共享內(nèi)存或?qū)⒐蚕韮?nèi)存中的數(shù)據(jù)更新到主數(shù)據(jù)結(jié)構(gòu)內(nèi)存。主數(shù)據(jù)結(jié)構(gòu)內(nèi)存修改后,則主控設(shè)備的四個(gè)線程會(huì)做出相應(yīng)的動(dòng)作的。
編輯器采用推薦的source insight,可以自動(dòng)推導(dǎo)出變量、函數(shù)的聲明及相互間的引用,方便編寫及分析程序(但我采用的軟件其編碼格式為Ascill,不是utf-8,在編譯時(shí)為亂碼,用notepad++轉(zhuǎn)換編碼格式就OK了)
-
ARM
+關(guān)注
關(guān)注
134文章
9105瀏覽量
367895 -
控制系統(tǒng)
+關(guān)注
關(guān)注
41文章
6630瀏覽量
110665
原文標(biāo)題:基于ARM的智能燈光控制系統(tǒng)經(jīng)驗(yàn)總結(jié)分享
文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論