[教學] 自製 irplus 手機紅外線遙控設定檔

本帖最後由 C_Law 於 2018-3-3 18:08 編輯

更新:
2018-03-03
2#
加入 space 和 fillColor 說明
7#
加入 NEC 和 RAW 格式設定檔藍本

2018-02-25
2#
設定檔基本格式說明




剛換手機,部機可以發射紅外線做遙控器。網上搵到好多遙控發射 App,有些只得預設的一堆電器的遙控設定檔,如果本身無提供到想要的電器設定檔就無得用。有些可以學習,但要部手機本身有紅外線接收器、或者要另外買接收器才可以學習。

最終我揀了 irplus:
https://play.google.com/store/apps/details?id=net.binarymode.android.irplus
揀它是因為它可以任意設定發射的訊號,由於我以前玩開遙控器訊號,已經知道我日常用開的遙控器的訊號,irplus 無需要另外買接收器去學習,只要有訊號的資料,就可以自製設定檔。

以下係我做出來的有線電視 FanHUB 遙控器設定檔:
  1. <irplus>
  2.         <device manufacturer="CableTV" model="FanHUB" columns="12" format="WINLIRC_NEC1">
  3.                 <button label="&#1044974;" alt="Env" labelSize="25.0" span="4" backgroundColor="FF424242">0x80BF 0xCA35</button>
  4.                 <button label="&#1045541;" alt="Power" labelSize="25.0" span="4" labelColor="FFFF0707" backgroundColor="FF424242">0x80BF 0xAA55</button>
  5.                 <button label="&#1045212;" alt="Home" labelSize="25.0" span="4">0x80BF 0xE817</button>
  6.                
  7.                 <button label="News" labelSize="12.0" span="3" macro="true">2;0;9</button>
  8.                 <button label="1" labelSize="18.0" span="3">0x80BF 0x8A75</button>
  9.                 <button label="2" labelSize="18.0" span="3">0x80BF 0x48B7</button>
  10.                 <button label="3" labelSize="18.0" span="3">0x80BF 0xC837</button>
  11.                
  12.                 <button label="AXN" labelSize="12.0" span="3" macro="true">0;2;2</button>
  13.                 <button label="4" labelSize="18.0" span="3">0x80BF 0xB24D</button>
  14.                 <button label="5" labelSize="18.0" span="3">0x80BF 0x708F</button>
  15.                 <button label="6" labelSize="18.0" span="3">0x80BF 0xF00F</button>
  16.                
  17.                 <button label="NGC" labelSize="12.0" span="3" macro="true">2;5;2</button>
  18.                 <button label="7" labelSize="18.0" span="3">0x80BF 0x926D</button>
  19.                 <button label="8" labelSize="18.0" span="3">0x80BF 0x50AF</button>
  20.                 <button label="9" labelSize="18.0" span="3">0x80BF 0xD02F</button>
  21.                
  22.                 <button label="DisCh" labelSize="12.0" span="3" macro="true">2;5;3</button>
  23.                 <button label="&#1045260;" alt="KB" labelSize="25.0" span="3">0x80BF 0x10EF</button>
  24.                 <button label="0" labelSize="18.0" span="3">0x80BF 0x609F</button>
  25.                 <button label="&#1045201;" alt="Fav" labelSize="25.0" span="3">0x80BF 0x40BF</button>
  26.                
  27.                 <button label="Red" labelSize="18.0" span="3" backgroundColor="FFFF4242" labelColor="FFFF4242">0x80BF 0xF20D</button>
  28.                 <button label="Green" labelSize="18.0" span="3" backgroundColor="FF42FF42" labelColor="FF42FF42">0x80BF 0x728D</button>
  29.                 <button label="Yellow" labelSize="18.0" span="3" backgroundColor="FFFFFF42" labelColor="FFFFFF42">0x80BF 0xB04F</button>
  30.                 <button label="D-TV" labelSize="18.0" span="3" backgroundColor="FF4242FF" >0x80BF 0x30CF</button>
  31.                
  32.                 <button label="Guide" labelSize="18.0" span="4">0x80BF 0xB847</button>
  33.                 <button label="&#1046326;" alt="Up" labelSize="25.0" span="4">0x80BF 0x9867</button>
  34.                 <button label="Menu" labelSize="18.0" span="4">0x80BF 0xEA15</button>
  35.                
  36.                 <button label="&#1046320;" alt="Right" labelSize="25.0" span="4">0x80BF 0xDA25</button>
  37.                 <button label="OK" labelSize="18.0" span="4">0x80BF 0x7A85</button>
  38.                 <button label="&#1046323;" alt="Left" labelSize="25.0" span="4">0x80BF 0x18E7</button>
  39.                
  40.                 <button label="&#1045593;" alt="Return" labelSize="25.0" span="4">0x80BF 0x28D7</button>
  41.                 <button label="&#1046317;" alt="Down" labelSize="25.0" span="4">0x80BF 0x5AA5</button>
  42.                 <button label="Exit" labelSize="18.0" span="4">0x80BF 0x38C7</button>
  43.                
  44.                 <button label="Sub" labelSize="18.0" span="4">0x80BF 0x4AB5</button>
  45.                 <button label="Audio" labelSize="18.0" span="4">0x80BF 0x8877</button>
  46.                 <button label="&#1045326;" alt="Rem" labelSize="25.0" span="4">0x80BF 0x08F7</button>
  47.                
  48.                 <button label="&#1046364;" alt="Vol+" labelSize="25.0" span="4">0x80BF 0xE01F</button>
  49.                 <button label="VOD" labelSize="18.0" span="4">0x80BF 0x6A95</button>
  50.                 <button label="Page+" labelSize="18.0" span="4">0x80BF 0xA25D</button>
  51.                
  52.                 <button label="&#1046365;" alt="Vol-" labelSize="25.0" span="4">0x80BF 0xC03F</button>
  53.                 <button label="&#1046094;" alt="Info" labelSize="25.0" span="4">0x80BF 0xFA05</button>
  54.                 <button label="Page-" labelSize="18.0" span="4">0x80BF 0x827D</button>
  55.                
  56.                 <button label="&#1045579;" alt="Rec" labelSize="25.0" span="4" labelColor="FFFF0000">0x80BF 0xC23D</button>
  57.                 <button label="&#1045514;" alt="Play" labelSize="25.0" span="4">0x80BF 0x42BD</button>
  58.                 <button label="&#1045723;" alt="Stop" labelSize="25.0" span="4">0x80BF 0x807F</button>
  59.                
  60.                 <button label="&#1045599;" alt="Rew" labelSize="25.0" span="4">0x80BF 0xE21D</button>
  61.                 <button label="&#1045476;" alt="Pause" labelSize="25.0" span="4">0x80BF 0x00FF</button>
  62.                 <button label="&#1045009;" alt="FF" labelSize="25.0" span="4">0x80BF 0x629D</button>
  63.                
  64.                 <button label="&#1045675;" alt="Previous" labelSize="25.0" span="4">0x80BF 0xA05F</button>
  65.                 <button label="Apps" labelSize="18.0" span="4">0x80BF 0x06F9</button>
  66.                 <button label="&#1045676;" alt="Next" labelSize="25.0" span="4">0x80BF 0x20DF</button>
  67.         </device>
  68. </irplus>
複製代碼
將以上代碼抄入記事本,以 UTF-8 存檔做 *.irplus,放入手機,用 irplus 去 Import 就用得到。

有線電視的遙控器係用 NEC Protocol,係好常見的遙控 Protocol,如果需要舊款有線的遙控器、或者在 MagicTV 高清機頂盒遙控器的設定檔,以下 rar 檔內的 Excel 檔可搵到有關遙控器的 NEC code,用上面的代碼做藍本,修改一下就可以做得到。
https://sites.google.com/site/chineseinput/electronics/winlirc/IRTx.rar

舊版有線遙控器:
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

本帖最後由 C_Law 於 2018-3-4 22:45 編輯

詳細小小講下設定檔的格式,以下是一個最基本的設定檔:
  1. <irplus>
  2.   <device manufacturer="A" model="B" columns="C" format="D">
  3.     <button label="E" alt="F" labelSize="G" span="H" labelColor="I" backgroundColor="J">K</button>
  4.     <space multiple="L" />
  5.     <button label="E" alt="F" labelSize="G" span="H" fillColor="M">K</button>   
  6.   </device>
  7. </irplus>
複製代碼
<device> 內有幾個必需的參數:
A:文字,遙控器牌子名,其實可以任意文字
B:文字,遙控器型號,同樣可以係任意文字
C:十進制數字,介面無一個橫行分割的份數(詳情請睇 H)
D:文字,遙控訊號 Protocol 名,例如 NEC 是 WINLIRC_NEC1(有時間會再講),其它 Protocol 可能再需要在這裡加入更多參數(有時間會再講)

<device> 與 </device> 之內是每個遙控制的設定,每個掣的代碼用<button> 與 </button> 包圍:
E:文字,一個掣上面顯示的文字;也可以係 Icon 的代碼"&#xxxxxx" 格式)
F:文字,非必要,如果 Label(E) 是文字,這裡可加入文字說明,但 Import 後會被刪除
G:十進制數字,這個制的字體大小,我發現,在同一數值下,文字會比 Icon 大,如果想做到一致的大小,Icon 的 Labelsize 應該用較大數值
H:十進制數字,一個制的橫向大細,columns(C) 和 span(H) 是有關連,C 設定每一橫行分開多小格,而 H 就是一個掣的格數,例如 C=12,H=4,這個掣的闊度就是全行的 4/12 =1/3。
I:16進制數字,掣面上文字/Icon 的顏色,格式是 AARRGGBB,AA=Alpha值,一般是 FF,R/G/B 係紅綠黃的雙位數值,例如純藍色是:FF0000FF
J:16進制數字,掣面的底色,格式同上
K:16進制數字,格式是 0xHHHHHHHH,至於有幾多個位就視乎發射訊號的種類,例如 NEC protocol 係 32 bits,一個 HEX 數值有 4 bits,即係需要 8 位 16 進制數值,例如有線個 Power 掣,數值是 0x80BFAA55,要將這 8 位分成 2 組 4 位的寫成 0x80BF 0xAA55。如果 format(D) 是(WINLIRC_RAW) 就是十進制的時脈長度(單位是μs)(有時間會再講)。也可以是 macro 的按掣。
L:十進制數字,空格的闊度。一個掣同一個掣之間放入空格。例如 1# 代碼的紅/綠/黃/藍四色掣,如果將綠色掣的一行(由 <button....> 至 </button>) 改為 <space multiple="3" />,就會變成:紅/空格/黃/藍。
M:十六進制數字,填滿顏色,格式同 I、J。如果文字顏色和底色相同,可以用 fillColor 代替 labelColor 和 backgroundColor,例如 1# 代碼的紅色掣,可以將原本的  backgroundColor="FFFF4242" labelColor="FFFF4242" 改寫為 fillColor="FFFF4242"。

一個掣的代碼內,可使用 Macro,用一個掣依次序發射多個訊號,例如 1# 幅相左上的 News、AXN、NGC、DisCh,以 DisCh 來講,高清 Discovery Channel 的台號是 253,可用以下代碼:
  1. <button label="DisCh" labelSize="12.0" span="3" macro="true">2;5;3</button>
複製代碼
在 <button....>之內加入 macro="true",然後將要按的掣的 label(E) 用分號 ; 分隔寫入 K,例如 2;5;3 就是先發射 2、再發射 5、最後發射 3。

如果 irplus 已載入多個遙控器設定檔,更可以用 macro 加入其它設定檔的掣,例如在有線的設定檔加入電視機的 Power/Vol+/Vol-/Input……等等,就可以用有線的遙控版面內直接控制電視機,無需要先將 irplus 轉去電視機的版面。格式是:
[A - B];E

例如我部電視機是:<device manufacturer="SHARP" model="GA538WJSA" ......以下省略>
而電視機轉 Input 個掣是:<button label="Inputs" ……以下省略>
在有線電視個設定檔可加入:
  1. <button label="TV-Inputs" labelSize="12.0" span="3" macro="true">[SHARP - GA538WJSA];Inputs</button
複製代碼
注意,macro 的 manufacturer(A) 尾和 model(B) 頭各有一個空格,即是 A空格-空格B。

不過,如果button label 是個 Icon,代碼不能照抄,例如 Power 掣 Icon 的代碼本應是 &#1045541;,但如果將 macro 寫成 [SHARP - GA538WJSA];&#1045541;卻又無法正常控制到電視機,要將後面 1045541 改為 61457才能正常用得到。我暫時還未搞清楚為何要轉數值,也不清楚要跟據什麼準則去轉。

TOP

好詳細,多謝師兄!

via HKEPC Reader for Android

TOP

我反而想問下,如果本身無遙控器相關資料,有冇啲咩方法可以查到遙控器訊號?

即係類似嗰啲Learning Remote咁,可以取得各按鍵資料並複制。

TOP

我反而想問下,如果本身無遙控器相關資料,有冇啲咩方法可以查到遙控器訊號?

即係類似嗰啲Learning Remot ...
mdws2002 發表於 2018/2/28 01:30


有些手機本身有紅外線接收功能,如果手機的遙控 Apps 支援學習的話,就可以直接用手機去學。

如果手機無接收功能,就唯有靠自己啦!搵個可以自己寫設定檔的遙控 App(這也是我揀 irplus 的主要原因)。

識電子又有玩開 Arduino 的話,可以睇下我個 Arduino Infrared Remote Control(AIRC),駁個紅外線接收器去塊 Arduino UNO 就可以解讀多種遙控 Protocol。例如遙控器係用 NEC protocol 的話,用 AIRC 讀到個 Hex code,就可以跟 1# 個代碼做藍本去做自己的設定檔。
Arduino Infrared Remote Control(AIRC):
https://www.hkepc.com/forum/viewthread.php?tid=2266565

識小小電子焊接或者識玩 Breadboard 的話,可以整個 WinLIRC audio receiver,用電腦以錄音方式將遙控器訊號錄成 8-bit mono 格式的 Wav 檔,然後用我個 ExcelAIRC 內的 Wave2Pulse 將個 Wave 檔解讀成遙控訊號串的時脈長度,做個 WINLIRC_RAW 格式的 irplus 設定檔。
WinLIRC audio receiver 製作:
https://www.hkepc.com/forum/viewthread.php?tid=1645734

ExcelAIRC 下載:
https://sites.google.com/site/chineseinput/electronics/airc/ExcelAIRC.rar

有關用 ExcelAIRC 將 Wave 轉做時脈的用法,上面個 AIRC post 的 15# 有粗略講下。

至於 irplus 的 WINLIRC_RAW 格式設定檔,暫時無時間寫說明,但你可以在 irplus 隨意 Import 一個 Sharp 牌子的設定檔(例如 Sharp 的 Generic TV),Export 返出去電腦開來睇下,有電子底/Programming 底的話,應該好易睇得明。基本上係將每個掣的一大串時脈訊號長度以 Space 分隔,填入去每個掣的 <button......>XXX</button> 的 XXX 位置。

TOP

高質share. Thanks c hing!

TOP

本帖最後由 C_Law 於 2018-3-6 16:52 編輯

NEC 遙控訊號格式設定檔藍本
遙控訊號有好多種格式,NEC 是常見的一種,例如有線電視、MagicTV 機頂盒、Ei8ht 機頂盒、還有好多大陸製的 Media Player、山寨 DVD 機……等等都是用 NEC 格式的遙控訊號。以下網址有 NEC 遙控訊號格式的詳細說明:
https://www.sbprojects.net/knowledge/ir/nec.php

以下是 irplus 的 NEC 格式設定檔藍本:
  1. <irplus>
  2.     <device manufacturer="NEC" model="Template" columns="12" format="WINLIRC_NEC1">
  3.         <button label="Test" labelSize="18.0" span="4">0x1234 0x5678</button>
  4.     </device>
  5. </irplus>
複製代碼
修改 manufacturer 和 model,再在 <device...> 與 </device> 之間加入所需的 <space> 和 <button...>...</button> 就用得。

註:NEC 格式的訊號長度是 32bits,所以每個掣的 NEC code 都是 8 位的 16 進制數字(一位 16 進制數字等如 4 bits),要分開為 2 組 4 位 16 進制數字,以空格分開寫入設定檔內,例如 12345678 要寫成 0x1234 0x5678(之前試過一組過寫成 0x12345678,但如果最頭的 1 bit 甚至幾 bit 係 0,開頭的 0 將不會發射,發射出來不足 32 bit,有關的電器將無法解讀)。




RAW 格式設定檔藍本
簡單來講,遙控訊號是一連串紅外線 LED 閃動的 On 和 Off,接收的電器會根據 On 和 Off 的時間長度去判斷那一個遙控制被按下。RAW 格式就係寫入每個掣的 On 和 Off 時間長度(以 μs 作單位),所以 RAW 格式可以話係萬能的格式,可以發射任意設計的訊號。

以下是 RAW 格式設定檔藍本:
  1. <irplus>
  2.     <device manufacturer="RAW" model="Template" columns="12" format="WINLIRC_RAW">
  3.         <button label="Test" labelSize="12.0" span="4">一堆數字</button>
  4.     </device>
  5. </irplus>
複製代碼
上面「一堆數字」是十進制,是由最頭的 On 到最尾的 On,以空白分隔,每一個 On 和 Off 的時間長度,例如寫成:
<button label="Test" labelSize="12.0" span="4">500 600 700 800 900</button>
發射出來的訊號會變成:

(上圖是用電腦經 WinLIRC audio receiver 以 Audacity 錄音)

錄出來的波形長度(深綠色字)和寫入設定檔的數值(紅色字)有分別,這是因為接收器本身的偏差(通常讀取到的 On 會比實際訊號長大約 1xx μs、Off 會短 1xx μs),但一般家電的設計已預算有這誤差,所以通常可以不理)。

由於「一堆數字」是由最頭的 On 到最尾的 On,所以這堆數字的數量必定是單數。
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

TOP