SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

小型/軽量/安価/オープンソース対応の赤外線リモコン「irMagician 」ファーストステップガイド

USB接続型汎用赤外線リモコンアダプタ「irMagician」を使ったシステム構築の方法

小型/軽量/安価/オープンソース対応の赤外線リモコン「irMagician 」ファーストステップガイド 後編

プログラム例

 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()

次のページ
実際の運用例

この記事は参考になりましたか?

小型/軽量/安価/オープンソース対応の赤外線リモコン「irMagician 」ファーストステップガイド連載記事一覧
この記事の著者

大橋 修(大宮技研合同会社)(オオハシ オサム)

大宮技研 エグゼクティブ・エンジニア。都立高専電気工学科卒業後、日本精工(株)でエアバッグの制御ソフトウェア開発、ボッシュ(株)にてエンジンマネージメントシステム開発、適合ツールの開発、プロジェクトマネージメント、ノキアにてシンビアンOS用ミドルウェアS60の開発などをおこなう。インテルを経て、首都大学東京...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7829 2014/06/27 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー