基於 Realtek RTL8723DS 的“萬能遙控器殺手”方案

前言
遙控器是每個家庭中的必備電子產品之一,一直以來佔據著家庭裡很重要的位置,但是隨著越來越多的電子產品進入家庭普通生活,每一個電子產品都有自己的遙控器,這樣就不可避免產生大量重複的應用,而且他們之間互不相容,大多的遙控器會給人帶來很多的困擾,尤其是中老年的生活增加諸多的不便。因此開發一種新型的萬能遙控器非常的必要,它們能夠相容所有的電器控制協議,這樣使用者就不必擔心電器之間的互不相容的問題,“一鍵在手,快樂無憂”新型萬能遙控器逐步成為家庭所有電器的統領者,我們的萬能遙控器殺手就是在這樣的背景下產生的!

項目概述
本項目基於Realtek 半導體RTL8723DS 的新型應用,RTL8723DS 系列產品是一顆單晶片的Bluetooth藍牙/WIFI無線晶片,它們的出現結束了以往諸侯混戰的市場格局,因此成為終結傳統遙控器的殺手級產品,也被稱為當代“遙控器殺手”。本專案是一種小型且便宜的多設備可以通過遙控器控制的遙控器智慧手機應用程式。 它允許用戶控制家庭可以訪問互聯網的任何地方的電器通過智慧手機。 它適用於所有類型和通過品牌的紅外線控制電器保留編碼和自學。另外具備語音辨識功能。 以下詳細介紹一種不同于傳統遙控器。 這是朝著真正的智慧家居應用的發展方向。

特點:
1、僅用一個即可替換所有傳統遙控器。您的智慧手機將成為所有人的控制器電器
2、即使您身處家中,也要控制家用電器離開家。 當你在辦公室時,你可以使用您的智慧手機安排預錄在幾英里外的家裡的電視上播放。
3、幫助您的家人經營您的房屋電器,無論您身在何處。 當你是外出旅行,你的父母或小孩在家中使用高科技設備時遇到麻煩,您可以幫助他們從以下位置操作設備您的智慧手機。
系統組成部分

一、硬體
•包含一個Wi-Fi/BT模組,該模組是連接到家用無線路由器。 這允許用於智慧手機和該設備互聯互通且遠端可控。
•包含紅外接收器和發射機以學習和發送紅外線信號。
•使用前,請帶好遙控器然後按不同的鍵讓xRemote學習和在您的設備中記錄設備的代碼序列家,從而控制他們。
•然後將代碼發送並存儲在您的手機。
•在智慧手機上使用應用程式進行控制時電器,您的手機會發送命令通過網路或Wi-Fi,xRemote設備。 然後,xRemote將回應並通過紅外發送代碼序列發射器,因此可以被設備接收。

1.硬體設計
我們的項目是建立一個可以連接和控制傳統的家用電器以及新型智慧設備的智慧遠端控制中心。要打造這個很酷的產品,我們必須非常重視硬體電路設計,這是整個開發過程硬體設計中最重要的部分之一。硬體電路設計分為幾個關鍵過程,包括頂層設計,選擇合適的電子元件,設計電子電路和測試程式。

1.1系統結構
要創建此智慧遙控器,我們首先需要構建一個硬體系統來完成功能。 微處理器是整個平臺的核心,它是所有處理必需的處理部分。 遙控器包含一個Wi-Fi/BT模組,該模組已連接到家庭無線路由器,因此可以通過移動應用程式進行訪問。 控制器還包含六個紅外發射器和一個紅外接收器,因此可以學習傳統遙控器的控制信號控制,然後代之以工作。 此外,該設備還包含兩個感測器溫度和照度。 另外,需要穩壓器來產生穩定的3.3v電源輸出。 下面是系統簡化結構圖。

SYS
1.2 主控晶片的選擇
定義系統結構後,我們需要找到合適的主控晶片及Wi-Fi/BT晶片或者模組。由於我們正在構建一個可以在未來可持續擁有長生命週期的產品,因此我們做出選擇時需要考慮幾個關鍵標準,包括性能,品質,價格和易於開發。如上圖所示,我們使用瑞芯微RK3266及Realtek製造的wifi/BT Combo 無線晶片RTL8723DS作為我們的核心微處理器及Wi-Fi/BT通訊晶片或者模組。我們最終選擇此晶片組的主要原因是它完美平衡了價格和性能。該晶片組不僅僅功能強大,還完美的結合了Wi-Fi/BT模組(符合IEEE 802.11n),因此它減少了系統的複雜化和解決2.4GHz RF信號傳輸的工作。以至於更少使用器件來實現2.4G Wi-Fi/BT應用需要的外部元件。由於我們的MCU是採用了高性能RK3266,它是為個人平板電腦和智慧音訊設備設計的高性能四核應用程式處理器。 提供了許多嵌入式強大的硬體引擎來優化高端應用程式的性能。RK3326支援幾乎全格式的H.264解碼器,支持1080 p@60 fps,H.265解碼器支持1080 p@60 fps,通過1080 p@30 fps支持H.264編碼器,高品質的JPEG編碼器/解碼器。嵌入式3D GPU使RK 3326完全相容OpenGL ES 1.1/2.0/3.2、DirectX 11 FL9_3、OpenCL 2.0和Vulkan 1.0。特殊的2D硬體引擎將最大限度地提高顯示性能,並提供運行非常順利。RK3326具有高性能的外部記憶體介面(DDR 3/DDR3L/DDR 4/LPDDR 2/LPDDR 3),能夠維持需要的記憶體頻寬。該晶片的選擇能夠遠遠的滿足了我們系統未來的擴展及靈活的新功能增加問題,下面的圖表顯示了基本的框圖:
RK3326

因此我們可以在其上運行定制的Linux,從而簡化了高級開發Wi-Fi/BT資料處理之類的應用程式,並避免可能很容易的超載問題。嵌入式Linux系統還大大增加了功能,並且我們設備的可擴展性。我們選擇RK3266晶片組的另一個原因是它提供了多種硬體介面,例如作為SPI,I2C和USB。這些介面可用於連接週邊設備的負載和因此將支援更多的應用程式。我們在系統期間發現在互聯網上的資料與認同了23ds晶片的組合較少。所以整個開發過程變得頗具挑戰性。

1.3 硬體基本電路設計
1.3.1 wifi/BT 晶片或者模組(RTL8723DS)
下 圖是Realtek 的 RTL8723DS的系統方框圖,RTL8723DS的SDIO/UART硬體介面以及GPIO外部介面用於外部控制。所以我們在原理圖設計中連接所有可 用的GPIO埠,SDIO埠及其他埠。內部序列傳輸和接收埠TXD和RXD已連接以測試固件升級功能。該晶片由3.3V直流電源供電,可以通過將 RST埠設置為高電平來復位。下面是功能框圖官方資料表中提供的RTL8723DS SoC的原理框圖:
8723ds
1)RTL8723DS 使用關鍵點注意事項:
a.RTL8723DS module PIN38支援兩種供電方式,3.3V直接供電方式和Vbat(3.3V-5.5V)供電方式,需要根據客戶設計嚴格搭配使用。Vbat供電方式必須通過 Module 的PIN39(VBAT_EN)來開啟和關斷VBAT LDO輸出3.3V,若如果原本8723DS模組的PIN39(CHIP_EN)沒有拉出來,則需上在module上使用R6與R7電阻分壓,來使 VBAT Enable,相比若VBAT_IN無法off的platform,能有VBAT_EN控制的話相對會更省電
b.RTL8723DS/RTL8703CS的模組是有拉出PIN39(VBAT_EN),
*對3.3V供電方式VBAT_EN無法reset整個IC,需要將WL_DIS#與BT_DIS#同時拉low,才能夠reset整個IC;
*對Vbat供電方式可以關斷Vbat LDO輸出,相當於給IC斷電以達到reset整個IC的目的。
*再次強調,使用Vbat供電方式,VBAT_EN必須外接host的GPIO來控制
c.RTL8723DS/RTL8703CS 模組的VBAT_EN的電壓域為1.6V~3.3V,只要在這個範圍之內的,VBAT就會輸出3.3V;同樣的模組的 Pin12(WL_DIS#)Pin34(BT_DIS#)可以支援1.8V與3.3V,只要在1.6V~3.3V之間,均可認為high
d.RTL8723DS/RTL8703CS Module的PIN13的電壓也是由Module的PIN22(VDDIO)來決定,可以支持1.8V與3.3V
e.RTL8723DS/RTL8703CS Module的PIN7的電壓是由Module的PIN22(VDDIO)來決定,可以支持1.8V與3.3V。不過另外需要注意的是該Pin也是我們 IC TEST_MOD_SEL pin,需要在IC 上電的時候拉low,我們IC內部有pull low 電阻,因此需要確認外部host端是否有pull high電阻,若是則拿去該電阻,另外也需
要確認Host端在我們WIFI on的時候為low!

1.3.2 系統計時器
在這個專案中,需要一個精確的計時器才能生成38 kHz的載波紅外信號。也可以使用TLC555計時器晶片由德州儀器(TI)提供。我們選擇一個外接的TLC555作為計時器晶片的原因是它提供了三個操作模式:單穩態模式,非穩態模式和雙穩態模式(施密特觸發器),因此可以實現不同的功能,例如PWM或LED閃爍。所有這些模式都易於實現。 計時器晶片可以在2 MHz的最大頻率下運行,因此能夠處理紅外傳輸所需的頻率。 TLC555支援開/關調製機制在其輸出波形上。 RESET埠決定計時器輸出的開/關,這樣我們就可以通過將此埠連接到MCU的GPIO埠來調製資料。觸發電平約為電源電壓的三分之一和閾值電平約 為電源電壓的三分之二。對於應用電路,我們使用官方介紹的Astable操作模式包含時序元件R7,R8和C5的數據手冊。二極體D1用於減小輸出波形的占空比,以便可以限制功耗為最小。經過測試後,振盪可在輸出接近 38 kHz,因此IR LED以此頻率發射脈衝IR射線,輸出週期接近1:3,從而將功耗降低了三倍。

1.3.3紅外線發射器
在本項目中,產生的紅外信號由多個紅外LED發出以進行遠端控制家用電器。在這裡,我們使用TSAL7600大功率紅外發光二極體由Vishay Semiconductors製造。我們選擇這種紅外LED的原因是它的高可靠性和高輻射強度。該IR LED的半強度角約為±30度,因此我們決定使用6個此IR LED覆蓋所有方向。從系統設計的角度來看,這些IR LED的開/關將由TLC555計時器輸出控制。根據資料表,TSAL7600 LED的典型正向電壓為1.35V。正向電流為100mA。因此,很難以5V的功率連續支援兩個LED計時器的輸出電壓可以達到3V高。所以我們決定連接 這些並行排列的IR LED。每個IR LED都連接到一個雙極電晶體和一個小電阻。電晶體起到開關的作用,小電阻器提供紅外LED具有足夠的電流(實際測試中最大為150mA恒定電流)。我們 使用的電晶體這是2N2222型BJT,可驅動高達1A的電流。

1.3.4紅外線接收器
在此專案中,需要紅外接收器以接收發射的38 KHz紅外信號來自傳統的遙控器。 在這裡,我們使用TSOP39338紅外接收器模組由Vishay Semiconductors製造。 它是專為紅外線設計的小型接收器一個PIN二極體和一個前置放大器組裝在一個引線框架上的遠端控制系統。 解調後的輸出信號可以直接由微處理器進行解碼,這是主要的我們選擇此紅外接收器模組的原因。該模組的應用電路設計參見資料手冊。

1.3.5模數轉換
在該專案中,需要使用模數轉換器以轉換來自將感測器轉換成數位信號,然後可由MCU讀取和處理。 在這裡我們用ADS1015超小型,低功耗,12位模數轉換器,由德州儀器(TI)。 我們之所以選擇該晶片作為ADC,是因為它具有四個輸入通道,因此我們將來可能會在不更換ADC晶片的情況下將其他感測器集成到系統中。ADS1015使 用與I2C相容的序列介面來傳輸資料,並且該介面也是RK3266 SoC支援。 與SPI介面相比,I2C僅使用兩根線,並且易於實行。 該介面非常適合低頻資料傳輸,例如感測器資料。 應用電路設計請參見datasheet。

1.3.6感測器
1.3.6.1溫度感測器
在 該專案中,使用溫度感測器來收集環境溫度資料。 我們在這裡使用的溫度感測器是LM35,這個精密攝氏度溫度感測器由德州儀器(TI)製造。 我們選擇LM35作為溫度感測器的原因是在實際應用中不需要任何外部校準。 另一個原因是精度:室溫下的典型精度為±0.25°C,並且覆蓋整個檢測範圍-40°C至+ 110°C 。應用電路設計請參見datasheet。
1.3.6.2照度感測器
在該專案中,照明感測器用於收集環境光強度資料。 我們在這裡使用的照明感測器是PDV-P1803,CdS光電導光電管由Advanced Photonix Inc.設計。它可以感應400至700nm的光。 這取決於電阻的照明電阻範圍為16kΩ至33kΩ。 應用電路設計有關該感測器的資訊,請參見datasheet。

1.4硬體驅動
要遙控所有紅外線裝置,關鍵是要瞭解基本的紅外協議。 我們在驅動程式中實現了一個通用協議,即NEC紅外協議。 即使從接收器中學到的電波不屬於這兩個,我們仍然有記錄發送從設備中學習的機制。
1.4.1 NEC協議
NEC協定具有在38 kHz頻率載波的收發器上運行。 NEC IR傳輸協定使用消息位元的脈衝距離編碼。 每個脈衝突發為562.5µs,邏輯位元的發送方式如下:
邏輯'0'– 562.5µs的脈衝突發,後跟562.5µs的間隔,總發送時間為1.125毫秒;邏輯“ 1” – 562.5µs的脈衝突發,後跟1.6875ms的空間,總發送時間為2.25毫秒,當按遙控器上的一個鍵時,傳輸的消息包括以下,按順序:
1)9ms脈衝突發
2)4.5ms空間
3)接收設備的8位元位址
4)位址的8位元邏輯逆
5)8位命令
6)命令的8位元邏輯逆
7)最後的562.5µs脈衝突發,表示消息傳輸結束。
1.4.2 NEC協議的實現
紅外感測器驅動程式的設計或多或少地通過切換來類比紅外協議板上的I / O引腳。有三個寄存器負責對I / O進行操作:
RALINK_REG_PIORENA是I / O的啟用寄存器,我們需要在初始化時將其設置為高;
RALINK_REG_PIODIR是控制此引腳是輸入還是輸出的寄存器。
RALINK_REG_PIODATA是資料寄存器,因此我們需要在寫入時設置寄存器的值並從該寄存器複製(如果已讀取)。
一 個問題是如何實現高精度延遲。 Linux內核提供了睡眠功能直到幾微秒後才能釋放CPU。實現高解析度延遲的一種更好的方法是使用高解析度計時器結構。基本用法情況如下所示:
1)執行hrrtimer_init,包括使用ktime_set來設置計時器到期時間,以及使用hrtimer_init函數初始化hrtimer,並設置回呼函數指標。
2)在需要延遲的地方,調用hrtimer_start函數,然後調用wait_event函數直到event_queue被喚醒。
3)在回呼函數中,執行所需的操作,喚醒事件佇列,然後返回HRTIMER_NORESTART。
另 外,實現小延遲的一種更容易的方法是在LINUX內核中設置函數延遲。它是系統繁忙的等待功能,系統在延遲時常常會被鎖定,因此只能用於較少的延遲超過2毫秒。對於接收器,主要問題是如何檢測接收器何時收到正確的波形。一種方法是使用高解析度計時器並每隔一次掃描輸入引腳。我們之所以不採用這種想法,是因為它占 用了系統資源,不夠準確(毫秒錯誤)。 Linux內核支持中斷。實施接收器喚醒功能的正確方法。內核的中斷處理資料結構由設備驅動程式根據需要設置控制系統的中斷。為此,設備驅動程式使用一組 Linux內核服務用於請求中斷,啟用和禁用它的中斷。各個設備驅動程式調用這些常式以註冊其中斷處理常式位址。 request_irq函數説明紅外線驅動程式註冊I / O中斷。Linux中斷處理子系統的主要任務之一是將中斷路由到正確的中斷處理代碼。 Linux使用一組指向資料結構的指標包含處理系統中斷的常式的位址每次IR接收器接收到資料時; 它將產生低邏輯電平,因此系統將被中斷喚醒。 驅動程式中的Handler函數被調用,觸發的函數被調用記錄波形。

二、軟體發展
對 于liunx及安卓系統的軟體發展相對比其他的系統開發更為複雜,但是Realtek已經全部考慮到這些開發者的困擾問題,Realtek提供了一籃子的晶片驅動程式,使用者只需要將這些驅動push到指定的路徑即可輕鬆建立好完整的應用系統。完全不必擔心驅動程式的複雜羞澀難懂,只剩下安心編寫上層應用層程式了。
2.1 嵌入式伺服器
2.1.1詳細結構
伺服器由三部分組成-調度器,伺服器,udp廣播模組。當系統開機或伺服器崩潰時,控制器將運行伺服器。 還可以負責連接智慧手機命令指定或存儲在其中Wi-Fi熱點快閃記憶體。伺服器運行協議以與智慧手機進行通信,並將調用介面。udp廣播模組將向Wi-Fi網路廣播伺服器的IP和MAC位址。然後,智慧手機可以捕獲套裝軟體並使用該資訊連接伺服器,RTL8723DS系統提供了軟AP和STA。軟AP是指接入點。 在此模式下,系統將配置為Wi-Fi熱點。 其他附近的設備可以找到我們指定的SSID,並使用正確的金鑰來訪問我們的系統。 我們用當我們需要使用者指定Wi-Fi網路或連接到主機丟失。STA是指網站。 在這種模式下,系統可以通過以下方式連接到其他熱點:我們指定的資訊。 連接到主機後,系統將切換到此模式並且連接穩定。Wi-Fi伺服器中使用了許多Linux工具,例如網路工具,記憶體工具。 最多常用的是ifconfig,iwconfig,nvram_set和nvram_get。 不同工具的組合構成伺服器的工具集。
2.1.2 調度器
調度器將首先檢測記憶體中是否存儲有一對SSID和金鑰。如果有此類資訊,它將嘗試切換到STA模式並連接指定的熱點。如果成功,它將直接啟動伺服器應用程式並等待直到伺服器關閉。 如果沒有的話將切換到AP模式並啟動伺服器應用程式。如果沒有此類資訊,將確保它處於AP模式並啟動伺服器應用。在執行任何操作之前,伺服器將檢查系統模式寄存器以找出哪些內容的模式。調度器的存在將減少伺服器應用程式失敗的機會。當伺服器由於某種原因關閉時,它將重新啟動。
2.1.3伺服器
伺服器應用程式負責運行協定,調用介面並檢查連接狀態。它運行TCP通訊端伺服器,並連續接受Wi-Fi中的任何連接請求網路或乙太網。連接到通訊端用戶端時,它將根據資料做出回應以及協定中的規則。伺服器支援四個請求–初始化Wi-Fi連接(iniWi-Fi),連接測試 (iniConnection),學習新的IR代碼(iniLearn),然後通過IR發送IR代碼收發器(iniControl)。使用者必須連接到我們系統建立的AP並設置正確的SSID和密碼,在以下情況下的本地網路:現有Wi-Fi的SSID或密碼網路已更改,系統設置為預設值或系統無法連接至舊主機由於未知原因。 iniWi-Fi請求旨在將SSID /密碼傳輸到裝置。當我們的設備收到此資訊時,它將首先將其存儲到記憶體的快閃記憶體中,然後嘗試連接到指定的Wi-Fi熱點。iniConnection請求用於測試連接。伺服器將簡單地向用戶端打招呼。如果成功,則可以應用其他請求。當使用者想要將新按鈕從他或她的IR控制器錄製到智慧手機時應用程式,他或她應發送iniLearn請求並按一下指向我們設備的按鈕。伺服器將調用IR介面,IR收發器將自動記錄代碼。最後,將代碼返回給發送請求的智能手機。 iniControl請求將首先觸發從智慧手機接收IR代碼,並且然後通過紅外收發器將其發送出去。通訊端連接接受超時設置為15秒,通訊端收發超時設置為5秒。當連接接受超時發生時,伺服器將檢查連接狀態。如果連接仍然有效,則將不會執行任何操作。如果連接是丟失時,如果記憶體中沒有保存SSID或密碼, 它將切換到AP模式,並且當有SSID和密碼時,會返回並嘗試重新連接。這些設定確保伺服器將定期檢查連接並確保可訪問。
2.1.4 UDP廣播
UDP 廣播將不斷從系統讀取IP和MAC位址,並且將此資訊廣播到本地Wi-Fi網路中每個主機上的多個埠。在這裡,我們只想廣播到某些特定的埠,以便我們不使用廣播IP在路由器上。我們分析IP位址和子網路遮罩,並在本地手動廣播網路。此方法的另一個優點是,並非所有路由器都支持廣播,因此此方法更具適應性。模組將每10秒鐘廣播一次資訊。換句話說,如果是智慧手機要連接到該設備,它應該在本地網路上監聽10秒多一點。如果無法聽到來自伺服器的任何消息,則表明該伺服器不在此網路中。如果能夠接收UDP套裝程式,伺服器必須在此網路中。該模組的結構非常直觀。首先,模組讀取並分析IP和MAC伺服器本身的地址。如果不存在IP位址,則模組將等待一小段時間然後重試,直到讀出正確的IP位址為止。分析將給出本地網路並準備構造UDP包。然後將包裹發送到每個主機上指 定的埠一一對應,這與埠掃描策略非常相似。每次我們將埠或IP位址加1直至到達每個IP位址。之後,我們再次讀取伺服器本身的IP和MAC地址。
2.1.5伺服器實用程式
為Wi-Fi伺服器構建了一些實用程式,以使開發更加容易。所有實用程式都是基於Linux工具。這是列表和簡要說明。
1. change_to_STA:將系統切換到STA模式;
2. change_to_AP:將系統切換到AP模式;
3. cmdCall:通過管道(popen())調用應用程式,使調用者能夠準備好應用程式的輸出被調用;
4. FLASH_read:從記憶體中讀取資料;
5. Conn_Wi-Fi:連接到指定的Wi-Fi熱點。它能夠檢測到Wi-Fi網路自動並連接到它。此外,這將確保伺服器獲得IP使用udhcpc工具從DHCP伺服器獲得的位址;
6. device_ap_reset:在伺服器上設置AP – SSID,密碼,模式等。
7. iniServerSocket:初始化通訊端伺服器;
8. LOCAL_Wi-Fi_connection_test:測試當前連接狀態;
9. broadcast_ip_selfadder:幫助計算UDP廣播的下一個IP位址;
10. broadcast_ip_comparator:幫助計算下一個UDP廣播的IP位址;

2.2 .Smart Phone Software
在 Wi-Fi模式下,RTL8723DS充當接入點,並等待智能手機通知Wi-Fi SSID和密碼。 首先,智慧手機正在連接到主機。 Wi-Fi協定啟動後,智慧手機會將“ hello:iniWi-Fi”發送到主機板上,並且應該會收到“ ryd:iniWi-Fi”。 然後智慧手機發送SSID和密碼登上例如:“ LINGNET / 1234567890”,連接到用戶的家用路由器。在連接模式下,智慧手機會向主機板發送消息“ hello:iniConnect”,以檢查是否連接仍然良好,它應該會收到一條包括“ rdy:iniConnect”的消息以確認連接,然後智慧手機將在螢幕上顯示Toast以顯示連接成功。
2.2.1 學習模式
在學習模式下,使用者希望智慧手機從遙控器上學習按鈕控制器。 使用者按下智慧手機上的學習按鈕。 智慧手機和平板使用標準協定“ hello:iniLearn”和“ rdy:iniLearn”以確認連接。 然後他們等待用戶按下他想在遙控器上學習的按鈕。 接收方收到控制資訊後通過控制器,開發板將紅外資料解析為二進位資料,然後將其發送到智慧手機。智慧手機會將資料和相應控制按鈕的ID存儲到資料庫中。
2.2.2 控制模式
在控制模式下,使用者希望通過智慧設備控制設備(電視,揚聲器)電話。 使用者按下控制按鈕後,智慧手機和主機板使用該協定“ hello:iniControl:1”和“ rdy:iniControl:1”以確認連接並準備進行控制。智慧手機從資料庫中查詢已存儲的資料,然後發送到主機板。
2.3 SQLite資料庫
智慧手機實現了Android SQLite資料庫介面來存儲學習到的資料來自使用者的遙控器。 我們使用的資料庫表包含兩列。ID列存儲所有控制按鈕。這些ID可以在Android的“ R.java.id”中找到。 controlInfolizi列存儲學習資料,通常為10000位元長。在學習模式執行緒中,在我們設置了初始過程之後,用戶端將獲得來自伺服器的資料,其結尾修飾符 為“ xend”。我們消除了end修飾符並存儲其餘的修飾符資料導入我們的資料庫。資料庫中的ID列是相應的控制按鈕的ID。對於例如,“ Learn_4”按鈕會將其學到的信息放入“ Control_4” ID按鈕進入資料庫。
2.4. 固件設計
對於嵌入式軟體部分,我們需要學習和使用嵌入式Linux程式設計。整個系統是基於Linux 2.6.32版本。瑞芯微的SDK提供了具有我們想要的所有新功能。 例如Wi-Fi和乙太網模組,Linux核心,協定棧。通過所有這些模組和服務,我們能夠連接到有線乙太網和Wi-Fi,使用TCP / IP協定傳輸資料,並構建多進程軟體。另外Realtek RTL8723DS也提供了基於Liunx,安卓,win三種驅動程式的許多模組和服務有助於開發的實施,伺服器基於瑞芯微提供的官方SDK。我們需要編寫GPIO驅動程式來控制IR收發器。 Wi-Fi連接常式和感測器例行程式也是必需的,首先應從Linux內核開始進行裁剪定制到驅動編寫。紅外程式解碼IR波形並將IR代碼存儲到SDRAM中。
2.4.1嵌入式伺服器
伺服器的基本結構隨著Wi-Fi服務的發展而增長。 Wi-Fi伺服器負責以確保連接的穩定性並運行我們的協議。然後伺服器將能夠發送並接收收集的資料。下圖顯示了嵌入式伺服器系統的高層結構如下所示:
22
可以看出模組化可由不同人員開發的模組可以在一起運行,逐步整合以運行整個系統。伺服器的所有軟體都是用C編寫的,並由mips-linux cross編譯編譯器。介面被編寫為應用程式,可以稱為新進程。這裡對於此項目,伺服器在接收到某些命令時將使用紅外介面從智慧手機。該協議在Wi-Fi/BT伺服器內部實現,並且將為了確保靈活性,將來將其移至單個文件中。智慧手機將運行與伺服器通信的相同協定。為了確保連接的穩定性,伺服器能夠連接到任何Wi-Fi在智能手機的命令下啟動熱點,並在失去連接時嘗試重新連接。由於R開266系統提供了基本的Wi-Fi服務,因此伺服器會定期檢查連接狀態。此處使用的所有網路工具都是Linux核心。在某些情況下,伺服器將調用介面來完成不同的工作。
2.4.2 移動軟體設計

目前,Android是最受歡迎的移動作業系統。靈活多平臺支援的。此外,我們的專案依賴於TCP通訊,而Java是進行TCP的理想平臺,因此我們選擇Android作為我們的用戶端平臺。我們使用的Android開發人員工具包括Eclipse平臺,JDT,CDT,EMF,GEF和WTP,開發我們的Android應用程式。我們的Android應用程式具有與伺服器程式相對應的四種模式:Wi-Fi模式,連接模式,學習模式和控制模式。它們每個都在一個實施的執行緒中。另外還有一個守護程式的執行緒定期運行以檢測來自伺服器其他的服務。我們解析UDP資料包中的內容,並獲取伺服器的IP位址。此外,我們的應用需要有一個有助於存儲和維護所學習資料的資料庫。智慧手機與硬體板之間的通信具有四種模式:Wi-Fi,Connect,控制和學習。它們都具有相似的協議,但是實現不同的功能。每一個模式具有相應的按鈕。連接模式是用戶端和伺服器之間最簡單的通信。要檢查智慧手機與伺服器主機板之間的連接是否良好。它通過發送一個TCP / IP消息“ hello:iniConnect”,如果得到有效結果(“ rdy:iniConnect”),則該應用將生成一個在螢幕上告知連接是否良好。否則,該應用將告訴用戶連接失敗。Wi-Fi按鈕包含使用者的家庭或本地無線路由器的資訊,例如SSID和密碼,以使伺服器主機板連接到本地路由器。下圖是智慧手機應用程的基本使用者介面:

222
它顯示了Android模擬器的螢幕截圖。 Wi-Fi按鈕執行Wi-Fi模式。連接按鈕實現連接模式,檢查連接狀態。 Learn_ *按鈕動作學習模式,並將學習到的資料通過Control_ *按鈕ID存儲到資料庫中。 控制_*按鈕可查詢資料庫中的資料並發送至電路板。每個學習按鈕都有一個對應的控制按鈕。 一旦學習協議完成後,它將從伺服器獲取的資料存儲到本地Android資料庫中:SQLite。

2.4.3 Linux驅動程式
該專案的目標之一是實現Linux紅外收發器。我們還實施I2C介面驅動程式,以便我們可以收集溫度,光線和其他感測器的資料。您可以通過手機遠端控制電視,空調和揚聲器,還可以通過互聯網撥打電話,並通過感測器獲取回饋,以查看其是否工作正常。要瞭解這個系統是如何工作的,我們首先應該瞭解Linux系統的一些基本概念。
*用戶空間和內核空間
Linux程式設計最重要的概念是用戶和內核空間。內核空間是作業系統的核心,它是用於執行進程並提供其服務的地方,特別是其設備驅動程式,構成了最終使用者/程式師之間的橋樑或介面和硬體。由於我們試圖操縱紅外發射和接收器,必須編寫在內核中運行的程式。在Linux中,進程是一個正在運行的實例程式。我們需要在使用者空間中實現了一個間接控制硬體的應用程式。
*Linux驅動
Linux將設備作為檔進行操作。在Linux上,每個硬體都由一個檔表示位於/ dev的設備檔。因此,我們可以使用fopen打開設備,使用read和使用write函數設置和獲取資料,使用ioctl函數進行輸入和輸出控制。所有Linuix系統下的設備主要有兩種,字元設備和塊設備。字元設備是不執行緩衝的字元設備,塊設備是那些不執行緩衝的設備通過緩存訪問。由於字元設備更易於實現,紅外感測器不需要大量資料,我決定將紅外驅動器實現為字元設備。每個字元設備驅動程式都有一個檔操作結構,該結構聲明了支援的功能。
 struct file_operations {
 loff_t(* llseek)(結構檔*,loff_t,int);
 ssize_t(* read)(結構檔*,char *,size_t,loff_t *);
 ssize_t(* write)(結構檔*,const char *,size_t,loff_t *);
 int(* ioctl)(結構索引節點*,結構檔*,不帶正負號的整數,無符號長整數);
 int(* open)(結構索引節點*,結構檔*);
 int(* release)(結構索引節點*,結構檔*);
 };
每個功能的說明:
llseek:重新定位讀寫檔的偏移量。
read:從檔描述符讀取。我們使用此功能從內核空間中的緩衝區複製使用者空間資料。
write:寫入檔描述符。我們使用此函數編寫內核空間緩衝區,因此它可以由紅外發射器發送。
ioctl:處理特殊檔的基礎設備參數。我們用它來通知收發器何時應該收集資料,它使用哪種發送模式。
open:當我們使用fopen獲取檔描述符時,將調用此函數。一些初始化是在這裡完成。
release:當我們使用fclose時會調用此函數。動態分配的緩衝區需要在這裡實現。
2.5 嵌入式伺服器
嵌入式伺服器是硬體系統上的中央控制邏輯模組。它具有兩個主要功能-提供網路服務和控制硬體介面。網路服務旨在與智慧手機進行通信並交換命令和其他資訊。伺服器能夠調用其他模組的介面並發送或收集資訊。然後可以將該資訊發送到智慧手機。
2.5.1 TCP / IP協議
在我們的項目中,智慧手機和硬體之間的通信主要是通過TCP / IP (傳輸控制協定/ Internet協定)。這是最基本的協定互聯網,並定義電子設備如何訪問互聯網以及資料如何可以實現傳播。它具有四級層次結構,其中每個級別調用子級網路來完成其任務。簡而言之,TCP的責任是找到傳輸過程中出現問題,並請求重新傳輸,直到所有資料到達目的地安全,而IP為每台電腦提供一個位址。TCP / IP具有四個級別的模型,其中包含:網路介面層,網路層,傳輸層和應用程式層。還有另一種TCP / IP模型可以劃分網路介面層分為兩層:資料連結層和實體層。
*網路介面層
網路介面層的實體層定義了物理介質的特徵,例如如:機械性能,電子性能,功能性能和程式特徵。這個資料連結層負責接收IP資料包並發送它們通過網路,常見的介面協定是:乙太網802.3,權杖環802.5,X.25,框架轉送,HDLC等
*網路層
它與電腦之間的通信有關,具有三個功能。
(a)處理來自傳輸層的RTS(請求發送)並將其載入到IP資料包中,填寫報頭,選擇通往目標目的地的路徑並將其發送到適當的介面。
(b)佈置輸入資料包並檢查其有效性,然後路由該資料包。
(c)處理路線,流體控制和卡塞問題。
*傳輸層
它提供了應用程式及其功能之間的通信,包括:格式化資訊流並提供可靠的傳輸。 該層的主要協議是TCP和UDP(使用者資料包通訊協定)。
*應用層
它為使用者提供一些常見的應用程式,例如電子郵件,檔案傳輸,檔訪問和Telnet。 這一層的主要協議是:FTP,TELNET,DNS,SMTP,NFS,HTTP。

三、測試
3.1 硬體電路測試
對於這個專案,我們的測試策略是首先確保每個單獨的模組都能正常工作。然後我們將它們放在一起設計完整的電路圖和PCB之後,再測試最終的硬體系統。
3.1.1單個模組測試
首先,我們必須確保Wi-Fi模組可以正常運行。由於Wi-Fi模組是現有的板,效果很好,無需太多測試。然後我們測試計時器模組以查看其輸出頻率是否正確。我們通過連接進行了測試用示波器觀察電路並觀察輸出波形。結果是頻率保持在38 kHz的穩定水準,誤差約為±0.5 kHz。所以精度是約98.6%。將頻率和占空比調整為更好的值後,我們嘗試連接計時器輸入到信號發生器以查看輸出是否跟隨。然後,我們專注於測試紅外發送和接收模組。測試最大紅外傳輸的範圍和覆蓋範圍,我們逐漸移動傳輸模組,分離接收器模組,直到接收器側的信號消失。 ADC和感測器一起測試以查看感測器是否工作並且轉換是否正確。圖片下面顯示了我們如何使用單個IR測試計時器和紅外傳輸模組LED和一個BJT。另外,我們嘗試與伺服器連接並通過Android控制遙控器的揚聲器電話。 在5米的距離內都能正常工作。紅外驅動器實現了兩種模式,即檢波測模式和記錄波模式。 檢波模式將檢測紅外信號是否為NEC,並將其解碼。 如果信號不是NEC,驅動程式記錄波形並將原始資料發送回伺服器。 兩種模式經示波器驗證並集成到系統中。 它已經成功控制了電視和Speaker。
4.2 嵌入式伺服器測試
伺服器的測試分為兩個級別。第一級是通過乙太網電纜使用Fedora Linux進行的自測。 全部四個基本函數具有自己的測試用例,我們可以在終端上看到正確的響應。 設備的控制通過Windows上的telnet完成。 我們可以監控並發送一些必要的命令對其進行說明。從理論上講,我們可以使用任何路由器作為熱點。 並且設備已經已成功測試以連接TP-LINK路由器(TL-WR841N)和電腦熱點(通過WiFi設置)Share Spirit)和智慧手機熱點(HTC ONE)。為了簡化測試,我們使用HTC ONE作為熱點。
3.2.1自檢
以下是對每個請求的自檢:
IniWi-Fi:
iniConnection:
iniLearn:由於自檢不包括IR硬體,因此設備返回了第一個回應
rdy:ini學習,然後等待IR信號。
iniControl:
3.2.2 UDP廣播測試
我們應用ARP的應用協定來查找同一網路中的主機。 找到主機後,它將發送資料。
3.3 智慧手機軟體測試
為了確保Android應用程式能夠按預期工作,我們創建了一些Linux伺服器測試情況對應四種模式。所有測試用例都以相同的方式工作。我們運行本地電腦上的伺服器並訪問該電腦的IP位址,然後更改採用Android代碼的SERVERIP。以WIFI模式為例,首先我們讓智慧手機連接與伺服器相同的無線網路,然後運行我們的應用程式。在測試期間,我們輸出每個I / O操作。我們按下了WIFI按鈕,伺服器收到了“ hello:iniWIFI”,回復“ rdy:iniWIFI”。 Android收到“ rdy”消息後,便發送了預先輸入的消息SSID和密碼。伺服器輸出獲得的SSID和密碼,然後我們檢查結果。我們測試四個模式,所有這些模式都會立即產生正確的結果,這意味著Android應用可以立即與伺服器通信。為了測試學習模式,我們創建了一個伺服器測試用例,一旦接收到“ hello:iniLearn”,它就會會將內容存儲庫發送到本地“ learn.ir”文件中。然後智慧手機將資料存儲在資料庫,然後輸出存儲在資料庫中的內容,以檢查“ lean.ir”中的內容是否相同測試控制模式與學習模式相同,我們按一下控制按鈕以查看是否伺服器在“ learn.ir”中獲得相同的內容
3.4 系統測試
對於完整的系統測試,我們只需要將所有內容連接在一起並測試通過與團隊成員合作完成專案的其他功能,例如移動應用程式和硬體固件開發。 他們可能只是將硬體系統視為運行其功能的較低層平臺。
4.5硬體驅動測試
我們使用學習指令,並將原始代碼寫入二進位檔案。 然後我們讀取檔重新發送信號。

四、結束語
4.1小結
總之,我們將構建一個多設備智慧遙控器。由此專案,我們將對Wi-Fi模組的開發過程有深入的瞭解,也熟悉了嵌入式Linux系統設計的命令。
4.2未來改進
4.2.1藍牙和ZigBee模組
將來,我們可能會集成藍牙4.0(BLE)模組和ZigBee 2.4GHz RF模組進入我們當前的硬體系統。這些模組將大大增強功能,並且產品的通用性,因為市場上有許多支持以下功能之一的智慧設備這兩個協定。另外,這兩個協定都支援建立自組織網路網格,為將來實現一些新功能(如室內)提供了可能性定位和跨平臺通信。
4.2.2跑馬LED和呼吸燈
將來,我們可能還會在系統中添加跑馬LED模組以顯示一些LED動畫和特殊的LED效果。這可以表明我們設備的不同狀況,例如Wi-Fi連接,硬體匹配過程,學習模式等待等。也使產品看起來更好。也可以添加呼吸燈。我們相信該產品將成功成為並引入新的智慧家居生活方式新世界。 它將成為進入下一代物聯網智慧家庭技術重要的里程碑。
•集成藍牙模組和Zigbee模組。
•完善最終的商業智慧手機應用程式發展。
•啟動最終原型的Beta測試。
•改善PCB設計。
•完整的可靠性和壓力測試。
•廣告和行銷。
•安全認證。
•完成包裝設計和訂購的提籃子打包項目。
•將產品投放市場。

►場景應用圖

►產品實體圖

►展示板照片

►方案方塊圖

►应用场景

►智能手机应用程序用户界面

►核心技術優勢

功能: •開/關控制:您可以打開或關閉任何智慧型手機的紅外線控制裝置。 •任何傳統遙控器的全部功能控制:您可以調高/調低音量,更改通道,模式,靜音,所有功能集成在通過智慧手機進行遠端控制。 •長途控制:您可以使用智慧手機甚至可以控制您的家用電器當您離家千里之外。 •多設備控制:您不再需要看為特定的控制器操作某些器具; 您現在可以控制所有設備只需一個遙控器:您的智能手機。 •環境監控:溫度感測器,濕度感測器和光感測器集成在xRemote,因此您隨時可以輕鬆檢查房屋的溫度,濕度和照明您的智能手機。 •長距離和廣角:七個紅外發射器實現覆蓋所有方向並確保紅外信號很強。 •使用簡單:只需幾個步驟即可輕鬆設置。電話應用程式的使用者介面簡潔明瞭。

►方案規格

•原型Android應用程式 •尺寸:僅為79.9釐米* 54.3釐米 •wifi/BT雙模

技術文檔

類型標題檔案
硬件Datasheet
硬件Schematics
硬件BOM
軟件RK