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