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)