プログラム例
irMagician本体に保持できる赤外線リモコンのデータは一つだけです。複数のデータを使う場合は、その都度irMagican にダウンロードする必要があります。リモコンのUIはプラットフォームやアプリケーションに依存することですので、ここでは最も基本的なユースケースについて述べます。
- 赤外線リモコンデータの取得 (Capture)
- 取得したデータが正しいかどうかの確認 (Play)
- 取得したデータの保存 (Save)
- 取得したデータのロードと再生 (Load & Play)
ここではプラットフォームに依存させない為に pythonを使います。irMagicianはCDC-ACM 、つまりシリアル通信を行うので、pyserialも利用します。シリアルポートは適宜、読み替えて下さい。エラーハンドリングもないので、アプリとして実装する場合はそのあたりのケアも必要になります。
- 赤外線リモコンデータの取得 (Capture)
赤外線リモコンデータの取得は ‘c’ コマンドを使うので、スクリプトは以下のとおりになります。123456789101112131415# -*- coding: utf-8 -*-import sysimport serialimport timeimport jsonser = serial.Serial("/dev/ttyACM0", 9600, timeout = 1)ser.write("c\r\n")time.sleep(1.0)print ser.readline()ser.close() - 取得したデータが正しいかどうかの確認 (Play)
実際にコントロールされる機器に向かって、リモコンデータを試射します。’c’ コマンドが ‘p’ コマンドに置き換わっただけです。1234567891011121314# -*- coding: utf-8 -*-import sysimport serialimport timeimport jsonser = serial.Serial("/dev/ttyACM0", 9600, timeout = 1)ser.write("p\r\n")time.sleep(1.0)print ser.readline()ser.close() - 取得したデータの保存 (Save)
取得したデータを json 形式で保存します。ここでのポイントはいくつの変化点を捉えたかの問い合わせや内部メモリのバンクを使ったアクセスです。赤外線リモコン信号は他のプロパティと共にjson形式のファイルでセーブされます。学習した赤外線リモコン信号のデータのバイト数やポストスケール値などをirMagicianから読み込みます。赤外線リモコン信号は64バイトを1バンクとしたデータのブロックに書き込まれます。 このバンクの切替えコマンドは「b」コマンドになります.バンク内のデータの読み出しコマンドは「d」コマンドになり、バンク内のポジションを設定することにより、そのポジションのデータを読み出します。これを最初に読み出した学習した赤外線リモコン信号のデータのバイト数分行うことによりデータを読み出します。- saveIrMagician.py (linux)
- 使い方
コマンドラインより、saveIrMagician.py filenameを実行
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051# -*- coding: utf-8 -*-import sysimport serialimport timeimport jsonrawX = []ser = serial.Serial("/dev/ttyACM0", 9600, timeout = 1)#ser = serial.Serial("/dev/tty.usb0121", 9600, timeout = 1)ser.readline()argvs = sys.argvargc = 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 / 64pos = n % 64if (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() - 取得したデータのロードと再生 (Load & Play)
先ほど、セーブした赤外線リモコン信号のデータファイルをirMagicianにロードして、送信するためのプログラム例です。赤外線リモコン信号のデータファイルはローカルにあるのも使えますし、URL/URIでアクセスできる場所であれば、インターネット上でもローカルでも利用可能です。pythonではurllib2をimportすることにより簡単に利用することが可能です。赤外線リモコン信号が格納されたjsonデータを展開します。データのバイト数をカウントし、irMagicianに転送します。コマンドは「n」になります。同様にjsonファイルに格納されていたポストスケール値の設定も行います。コマンドは「k」になります。これらの設定が終わったら、データを「b」コマンドでバンクを切替えながら、そのバンク内のポジションに格納していきます。全ての格納が終了したら、「p」コマンドにより、格納したデータを送信します。- 使い方(ネットワーク)
コマンドラインより、saveIrMagician.py URIを実行
playIrMagician.py (linux)
- 使い方(ローカル)
コマンドラインより、saveIrMagicianLocal.py filenameを実行
playIrMagicianLocal.py (linux)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748# -*- coding: utf-8 -*-import sysimport serialimport timeimport jsonimport urllib2ser = serial.Serial("/dev/ttyACM0", 9600, timeout = 1)#ser = serial.Serial("/dev/tty.usb0121", 9600, timeout = 1)ser.readline()argvs = sys.argvargc = 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 / 64pos = n % 64if (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() - 使い方(ネットワーク)