Wio TerminalはIRリモコンとして使えるように、IR送信デバイスがあるので、それを使ってリモコン相当の信号を送ってみる。
ArduinoのIRコントローラ用ライブラリがあるのだが、Panasonic用ライブラリはOLDと書かれていて、どうもAV機器用に作られているようである。確実に動かすため、RAWモードで、波形の0/1を直接指定する方法で送信してみる。
波形の0/1は配列にして、H/Lのそれぞれの時間をusecで指定するようである。そこで、前回解析したデータをフォーマットに整えて、H/Lのタイミングに変換する
冒頭の3400,1700はLeader部と呼ばれる同期化用のヘッダと思われ、425から続く部分がH/Lのタイミングとなる。仕様より、TはTypical 425usecらしいので、それに合わせてタイミングを指定する
送信したいデータ LはLeader, T はTrailer
344Aはメーカコード、90はParityとパディング、ACがch2を使った点灯コマンド、3Cはパリティ、Tは終了を表すTrailer
"L 34 4A 90 AC 3C T"
これをH/Lの波形とするために、usecでどれぐらいの時間H/Lを出すのかを指定する形式に変換(変換ソフトは後半に記載)
# [3400, 1700, 425, 425, 425, 425, 425, 1275, 425, 1275, 425, 425, 425, 1275, 425, 425, 425, 425, 425, 425, 425, 1275, 425, 425, 425, 425, 425, 1275, 425, 425, 425, 1275, 425, 425, 425, 1275, 425, 425, 425, 425, 425, 1275, 425, 425, 425, 425, 425, 425, 425, 425, 425, 1275, 425, 425, 425, 1275, 425, 425, 425, 1275, 425, 1275, 425, 425, 425, 425, 425, 425, 425, 425, 425, 1275, 425, 1275, 425, 1275, 425, 1275, 425, 425, 425, 425, 425, 8000]
消灯コマンドは以下 ("L 34 4A 90 EC 7C T" )
[3400, 1700, 425, 425, 425, 425, 425, 1275, 425, 1275, 425, 425, 425, 1275, 425, 425, 425, 425, 425, 425, 425, 1275, 425, 425, 425, 425, 425, 1275, 425, 425, 425, 1275, 425, 425, 425, 1275, 425, 425, 425, 425, 425, 1275, 425, 425, 425, 425, 425, 425, 425, 425, 425, 1275, 425, 1275, 425, 1275, 425, 425, 425, 1275, 425, 1275, 425, 425, 425, 425, 425, 425, 425, 1275, 425, 1275, 425, 1275, 425, 1275, 425, 1275, 425, 425, 425, 425, 425, 8000]
#!/usr/bin/python3 # # # Wave Pattern Generator for IR Controller # # DULATION_T = 425 # T = 425us WAVE_LEADER = [DULATION_T * 8, DULATION_T * 4] WAVE_TRAILER = [DULATION_T , 8000] WAVE_ONE = [DULATION_T, DULATION_T * 3] WAVE_ZERO = [DULATION_T, DULATION_T] # IR command for turn on Room Light CMD_CTRL_ON = "L 34 4A 90 AC 3C T" #L:Leader , T:Trailer # notation of wave # T.... H 425us # t.... L 425us def int2wave(nibble): wave_timing = [] for _ in range(4): mask = 0b1000 if nibble & mask: wave_timing.extend(WAVE_ONE) else: wave_timing.extend(WAVE_ZERO) nibble <<= 1 return wave_timing def encoder(cmd): wave_timing = [] for chr in cmd: if chr == ' ': # space pass elif chr == 'L': # Leader wave_timing.extend(WAVE_LEADER) elif chr == 'T': # Trailer wave_timing.extend(WAVE_TRAILER) else: #print(f"chr: {chr}") nibble = int(chr,16) print(f"nibble: {nibble}") wave_timing.extend(int2wave(nibble)) return wave_timing value = encoder(CMD_CTRL_ON) print(value) #value = wave2wait(value) #print(value)