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