プログラム例
irMagicianは、ホストを限定しないマルチプラットフォームなので、プログラム例もマルチプラットフォーム対応で提示します。もちろん、各OSに特化したネイティブコードで利用することも可能です。基本的なコマンドの使い方をサンプルコードで提示します。コードはPythonを利用しますので、お試しになる場合は各ホスト環境に応じてインストールしてください。また、シリアルポートの扱いになるので、pyserialも併せて導入してください。これらのプログラムを利用することにより、screenコマンドなどのターミナルソフトを介さずに、赤外線リモコン信号の学習やネットワーク上にある、赤外線リモコン信号のデータを利用することが可能になります。
赤外線リモコン信号の学習(キャプチャ)
赤外線リモコン信号の学習は「c」コマンドで行うことは先に述べたとおりです。通信パラメータを設定して、irMagicianに「c」コマンドを送信して学習を行います。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import serial
import time
import json
#ser = serial.Serial("/dev/ttyACM0", 9600, timeout = 1)
ser = serial.Serial("/dev/tty.usbmodem01231", 9600, timeout = 1)
ser.write("c\r\n")
time.sleep(3.0)
print ser.readline()
ser.close()
赤外線リモコン信号の送信(プレイバック)
赤外線リモコン信号の送信も同様に、先に述べたとおり、「p」コマンドをirMagicianに送ることにより実行します。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import serial
import time
import json
#ser = serial.Serial("/dev/ttyACM0", 9600, timeout = 1)
ser = serial.Serial("/dev/tty.usbmodem01231", 9600, timeout = 1)
ser.write("p\r\n")
time.sleep(1.0)
print ser.readline()
ser.close()
赤外線リモコン信号のセーブ
赤外線リモコン信号は他のプロパティと共にjson形式のファイルでセーブされます。学習した赤外線リモコン信号のデータのバイト数やポストスケール値などをirMagicianから読み込みます。
赤外線リモコン信号は64バイトを1バンクとしたデータのブロックに書き込まれます。 このバンクの切り替えコマンドは「b」コマンドになります。バンク内のデータの読み出しコマンドは「d」コマンドになり、バンク内のポジションを設定することにより、そのポジションのデータを読み出します。
これを最初に読み出した学習した赤外線リモコン信号のデータのバイト数分行うことによりデータを読み出します。読み出したデータはjson形式でセーブします。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import serial
import time
import json
rawX = []
#ser = serial.Serial("/dev/ttyACM0", 9600, timeout = 1)
ser = serial.Serial("/dev/tty.usbmodem01231", 9600, timeout = 1)
ser.readline()
argvs = sys.argv
argc = len(argvs)
if (argc != 2):
print 'Usage: # python %s filename' % argvs[0]
quit()
print argvs[1]
f = open(argvs[1], 'w')
ser.write("I,1\r\n")
time.sleep(1.0)
recNumberStr = ser.readline()
recNumber = int(recNumberStr, 16)
ser.write("I,6\r\n")
time.sleep(1.0)
postScaleStr = ser.readline()
postScale = int(postScaleStr, 10)
#for n in range(640):
for n in range(recNumber):
bank = n / 64
pos = n % 64
if (pos == 0):
ser.write("b,%d\r\n" % bank)
ser.write("d,%d\n\r" % pos)
xStr = ser.read(3)
xData = int(xStr, 16)
rawX.append(xData)
json_data = {'format':'raw', 'freq':38, 'data':rawX, 'postscale':postScale}
json.dump(json_data, f)
f.close()
ser.close()
赤外線リモコン信号のロードと送信
先ほど、セーブした赤外線リモコン信号のデータファイルをirMagicianにロードして、送信するためのプログラム例です。赤外線リモコン信号のデータファイルはローカルにあるのも使えますし、URL/URIでアクセスできる場所であれば、インターネット上でもローカルでも利用可能です。Pythonではurllib2をimportすることにより簡単に利用できます。
赤外線リモコン信号が格納されたjsonデータを展開します。データのバイト数をカウントし、irMagicianに転送します。コマンドは「n」になります。同様にjsonファイルに格納されていたポストスケール値の設定も行います。コマンドは「k」になります。これらの設定が終わったら、データを「b」コマンドでバンクを切り替えながら、そのバンク内のポジションに格納していきます。すべての格納が終了したら、「p」コマンドにより、格納したデータを送信します。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import serial
import time
import json
import urllib2
#ser = serial.Serial("/dev/ttyACM0", 9600, timeout = 1)
ser = serial.Serial("/dev/tty.usbmodem01231", 9600, timeout = 1)
ser.readline()
argvs = sys.argv
argc = len(argvs)
if (argc != 2):
print 'Usage: # python %s filename' % argvs[0]
quit()
#f = open(argvs[1])
f = urllib2.urlopen(argvs[1])
json_data = json.load(f)
f.close()
recNumber = len(json_data['data'])
rawX = json_data['data']
ser.write("n,%d\r\n" % recNumber)
ser.readline()
postScale = json_data['postscale']
ser.write("k,%d\r\n" % postScale)
#time.sleep(1.0)
ser.readline()
for n in range(recNumber):
bank = n / 64
pos = n % 64
if (pos == 0):
ser.write("b,%d\r\n" % bank)
ser.write("w,%d,%d\n\r" % (pos, rawX[n]))
ser.write("p\r\n")
ser.readline()
ser.close()
