基于ARM-Linux和GPRS的家庭智能控制終端設(shè)計與實(shí)現(xiàn)
1 引言
本文引用地址:http://m.butianyuan.cn/article/149767.htm隨著科技的不斷進(jìn)步,智能家居逐漸成為可能,而智能家居網(wǎng)絡(luò)終端則是智能家居的關(guān)鍵。本文介紹采用RS485工業(yè)總線,設(shè)計實(shí)現(xiàn)了一種基于嵌入式系統(tǒng)的家庭智能控制器。用戶可以通過短信及互聯(lián)網(wǎng)等方式現(xiàn)遠(yuǎn)程無線監(jiān)控,在手機(jī)和互聯(lián)網(wǎng)相當(dāng)普及的今天,為用戶提供了更簡單、方便的選擇。同時由于該控制器RS485接口的特殊設(shè)計,外掛節(jié)點(diǎn)可以由原來的32個擴(kuò)展到64個,解決了家用設(shè)備的布線組網(wǎng)以及控制等問題。
2 系統(tǒng)設(shè)計
從結(jié)構(gòu)上看主要分為用戶,控制器,和RS485總線的家用設(shè)備控制三個部分。用戶通過手機(jī)短信或網(wǎng)絡(luò)方式向控制器的GPRS模塊發(fā)送命令,而控制器也通過GPRS模塊向用戶反饋信息或發(fā)出報警通知。從而實(shí)現(xiàn)了用戶和控制器無線互聯(lián),實(shí)現(xiàn)遠(yuǎn)程控制。
3 硬件設(shè)計
硬件部分的結(jié)構(gòu)框圖如圖1所示,控制器是整個系統(tǒng)的核心部分,經(jīng)過串口擴(kuò)展與GPRS模塊相連;通過電平轉(zhuǎn)換芯片提供RS485總線接口與家用設(shè)備相連接;同時還提供LCD,鍵盤等交互接口。控制器的主控芯片采用三星S3C44B0,使用ARM7TDMI核,工作頻率在66MHz.處理器外接 4MFlash(用于存儲控制器的啟動代碼和系統(tǒng)代碼以及當(dāng)天事件的文本日志)分配到存儲器Bank0空間和4M×16的SDRAM,分配到存儲器的 Bank6空間。
GPRS 模塊外圍電路:GPRS模塊采用西門子公司的MC35模塊,支持?jǐn)?shù)據(jù)、語音、短消息和傳真等多種通信方式可以通過AT命令對其實(shí)現(xiàn)控制。串行線通過 MAX3238電平轉(zhuǎn)換后可直接和RS232串口相連。串口擴(kuò)展:44B0通過外接雙通道的通用異步收發(fā)器ST16C2550為GPRS modem撥號上網(wǎng)提供完整的9線串口。其主要特點(diǎn)是接收p發(fā)送各有16字節(jié)的FIFO(先入先出) 緩沖區(qū),獨(dú)立的波特率產(chǎn)生器可提供50bps到4Mbps的收發(fā)時鐘。用戶可方便地通過芯片的狀態(tài)寄存器來進(jìn)行錯誤定位和對操作狀態(tài)進(jìn)行判斷。該芯片內(nèi)存空間使用保留的存儲空間bank4.采用總線方式控制。RS485接口設(shè)計:采用TI公司的RS485接口芯片75L BC184,可實(shí)現(xiàn)了44B0串行口的TTL電平與RS485電平之間的轉(zhuǎn)換,該芯片的輸入阻抗為RS485標(biāo)準(zhǔn)輸入阻抗的2倍(≥24KΩ),故可以在總線上連接64個節(jié)點(diǎn)(相當(dāng)于原來的兩倍)。且它有一個獨(dú)特的設(shè)計,當(dāng)輸入端開路時,其輸出為高電平,這樣可保證接收器輸入端電纜有開路故障時,不影響系統(tǒng)的正常工作。
4 RS485總線協(xié)議設(shè)計
用RS-485總線進(jìn)行系統(tǒng)通訊需要對其傳輸協(xié)議做規(guī)定,最重要的就是幀結(jié)構(gòu)的設(shè)計。本系統(tǒng)數(shù)據(jù)幀的構(gòu)造包括:起始,地址,類型,數(shù)據(jù)長度,數(shù)據(jù),校驗和及結(jié)束幀七個部分,除數(shù)據(jù)幀為N字節(jié)外(根據(jù)從機(jī)傳送的數(shù)據(jù)而定),其余均占1個字節(jié)。類型字定義如表1所示, 類型幀中的SEN DDATA幀為數(shù)據(jù)幀,用于存放從機(jī)設(shè)備的狀態(tài)信息,其它4種為指令幀,用于存放主機(jī)發(fā)送給從機(jī)的命令字。
主機(jī)發(fā)查詢請求 主機(jī)發(fā)讀請求 從機(jī)準(zhǔn)備好接收 從機(jī)處于忙碌 主/從機(jī)發(fā)送數(shù)據(jù)
本系統(tǒng)采用LRC幀校驗的方法。LRC值由傳輸設(shè)備來計算并放到消息幀中,接收設(shè)備在接收消息的過程中計算LRC,并將它和接收到消息中LRC域中的值比較,如果兩值不等,說明有傳輸錯誤。除了幀結(jié)構(gòu)的定義以外,整個系統(tǒng)的通信還需要遵守下面的規(guī)則:(a)主機(jī)查詢方式:由主機(jī)輪詢各從機(jī),并要求從機(jī)提交狀態(tài)信息,從機(jī)不能主動發(fā)出請求。(b)當(dāng)主機(jī)發(fā)出ASK命令后,若從機(jī)反饋BUSY幀,則主機(jī)啟動計時和計數(shù),超時3次,則任務(wù)執(zhí)行失敗。(c)主機(jī)接收到從機(jī)發(fā)回的READY信號后,向從機(jī)發(fā)送GETDATA指令,進(jìn)入接收狀態(tài),同時開啟超時控制。若在規(guī)定時間未接收到從機(jī)發(fā)回的數(shù)據(jù),則計數(shù)器加1,并繼續(xù)發(fā)出GETDATA信號。如果超時3次,則取消這次查詢。(d)從機(jī)等待主機(jī)發(fā)送指令,并根據(jù)具體指令作相應(yīng)操作。如果接受到的指令幀錯誤,則會直接丟棄該幀。
5 軟件設(shè)計
5.1 RS485總線控制
基于上一部分RS485的總線協(xié)議,主從控制主要分為:輪詢、查詢、控制三部分。(1)輪詢:主機(jī)定時對各從機(jī)進(jìn)行查詢,如果發(fā)現(xiàn)報警信息,保存后及時觸發(fā)報警并反饋給用戶。如果出現(xiàn)超時或幀錯誤等狀態(tài)時主機(jī)放棄此次查詢,并將該事件存儲在主機(jī)中。(2)查詢:查詢的工作流程和輪詢大致相同,但是只對指定的從機(jī)和指定狀態(tài)進(jìn)行查詢。(3)控制:把控制指令發(fā)到指定從機(jī),并要求從機(jī)反饋執(zhí)行結(jié)果。
5.2 GPRS的無線數(shù)據(jù)傳輸
5.2.1接收和發(fā)送SMS短信
(1)編碼轉(zhuǎn)換:要發(fā)送中文短信就需要使用PDU模式的16-bit編碼。在Linux系統(tǒng)中默認(rèn)用GB2312保存中文字符。發(fā)送短信前,要先進(jìn)行編碼轉(zhuǎn)換,要將GB2312轉(zhuǎn)換為Unicode編碼,再將Unicode編碼轉(zhuǎn)換為 PDU 的16-bit 編碼。這里使用Linux中的iconv () 函數(shù),該函數(shù)可以實(shí)現(xiàn)Linux支持的任意的兩種編碼之間的轉(zhuǎn)換。實(shí)現(xiàn)的方法:首先用iconv_open(),打開一個轉(zhuǎn)換句柄,指定兩種轉(zhuǎn)換前的編碼和轉(zhuǎn)換后的編碼。然后用 icnov() 作轉(zhuǎn)換。最后用 iconv_close()關(guān)閉句柄,釋放資源。完成轉(zhuǎn)換后,即可以正確的發(fā)送。
(2)發(fā)送:向MC35模塊發(fā)送一條AT指令,得到OK響應(yīng),則表示控制器與GPRS模塊通訊正常,通過AT+CSCA=***及AT+CSCA=0命令設(shè)置設(shè)置短信中心號碼及短信格式(PDU)。然后發(fā)送 AT+CMGS = 電話號碼,得到提示符號>,此時可以向MC35模塊發(fā)送編輯好的PDU編碼并以CTRL+Z結(jié)束。得到響應(yīng)OK,則發(fā)送成功;如果收到 ERROR則表示發(fā)送失敗,重新初始化MC35模塊,發(fā)送信息。
(3)接收:當(dāng)收到短信時,發(fā)送AT+CMGR=X從SIM卡讀取短消息并調(diào)用短信處理程序作相應(yīng)轉(zhuǎn)換。
5.2.2 GPRS聯(lián)網(wǎng)在Linux下的實(shí)現(xiàn)
GPRS聯(lián)網(wǎng)是Linux的PPP協(xié)議實(shí)現(xiàn)的。因此在編譯內(nèi)核時需要增加Linux內(nèi)核的PPP支持。然后根據(jù)程序中提供的配置信息,包括移動的APN*/為CMNET,通訊協(xié)議IP,撥號號碼 *99***1#,串口設(shè)備號/dev/ttyS2,波特率9600,用戶名,密碼等信息配置PPP協(xié)議需要的5個腳本和配置文件:ppp-on、 ppp-off、options.gprs、dialer.gprs、pap-secrets.完成設(shè)置后,運(yùn)行ppp-on,就可以進(jìn)行GPRS撥號;運(yùn)行ppp-off斷開連接。
GPRS聯(lián)網(wǎng)流程(控制器作為客戶端):(a)當(dāng)用戶希望通過網(wǎng)絡(luò)訪問GPRS模塊時可以通過短信方式向主機(jī) GPRS模塊發(fā)送聯(lián)網(wǎng)命令,包括用戶的IP地址和相關(guān)配置信息。(b)主機(jī)根據(jù)用戶短信獲得GPRS上網(wǎng)連接的配置信息,并生成對應(yīng)的撥號腳本文和配置文件。調(diào)用ppp-on腳本進(jìn)行PPP撥號。(c)判斷PPPD是否撥號成功,標(biāo)志是能否生成ppp0網(wǎng)絡(luò)設(shè)備。(d)在數(shù)據(jù)傳輸過程中通過看門狗實(shí)時觀測網(wǎng)絡(luò)連接狀態(tài),網(wǎng)絡(luò)掉線時,主機(jī)保存當(dāng)前數(shù)據(jù)狀態(tài),重新啟動GPRS模塊并恢復(fù)連接。(e)結(jié)束本次任務(wù)時,用戶在網(wǎng)上發(fā)送命令,讓控制器調(diào)用ppp- off,斷開連接。
5.3系統(tǒng)軟件流程
軟件流程如圖2所示,系統(tǒng)上電啟動后,首先對包括串口,LCD,鍵盤, GPRS模塊以及網(wǎng)絡(luò)配置文件等做相應(yīng)的初始化。并檢測GPRS模塊和主機(jī)是否通訊正常。然后開始對從機(jī)進(jìn)行輪詢,發(fā)現(xiàn)警情時,讀取并存儲報警信息,啟動報警器并將相應(yīng)的報警信息通過撥號和短信的方式通知用戶。當(dāng)收到用戶命令時,先判斷用戶的控制方式,再做出做出回應(yīng)。
6 結(jié)語
本文介紹了一種基于ARM-Linux和GPRS技術(shù)的家庭智能控制終端,文中從軟、硬件兩方面給出了詳細(xì)的設(shè)計思路和實(shí)現(xiàn)方法。對家庭智能控制器系統(tǒng)實(shí)現(xiàn)中存在的主要問題提出詳細(xì)的解決方案,并且在實(shí)踐中證明了其可實(shí)施性。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論