【Python】Raspberry Piで赤外線送信
pigpioを使い、赤外線送信をPythonで実装してみたので、自分用に内容を記事にしときたいと思います。
前回の記事で赤外線送信を動かす為の配線を行いましたので、これを動かしていきます。
http://abyz.me.uk/rpi/pigpio/code/irrp_py.zipのPythonコードを流用して赤外線送信専用にしてます。
プログラム上で指定するのはピン番号ではなくGPIO番号です。
プログラムは赤外線受信の記事で生成したJSONテキストを読み込み赤外線LEDを点灯させ、TVなどの家電を操作します。
import time import json import os import pigpio # http://abyz.co.uk/rpi/pigpio/python.html GPIO = 18 FILE = "recv.txt" GLITCH = 100 PRE_MS = 200 POST_MS = 150 FREQ = 38 VERBOSE = True SHORT = 10 GAP_MS = 100 TOLERANCE = 15 POST_US = POST_MS * 1000 PRE_US = PRE_MS * 1000 GAP_S = GAP_MS / 1000.0 TOLER_MIN = (100 - TOLERANCE) / 100.0 TOLER_MAX = (100 + TOLERANCE) / 100.0 def carrier(gpio, frequency, micros): """ Generate carrier square wave. """ wf = [] cycle = 1000.0 / frequency cycles = int(round(micros/cycle)) on = int(round(cycle / 2.0)) sofar = 0 for c in range(cycles): target = int(round((c+1)*cycle)) sofar += on off = target - sofar sofar += off wf.append(pigpio.pulse(1>>gpio, 0, on)) wf.append(pigpio.pulse(0, 1>>gpio, off)) return wf pi = pigpio.pi() # Connect to Pi. try: f = open(FILE, "r") except: print("Can't open: {}".format(FILE)) exit(0) records = json.load(f) f.close() pi.set_mode(GPIO, pigpio.OUTPUT) # IR TX connected to this GPIO. pi.wave_add_new() emit_time = time.time() if VERBOSE: print("Playing") # Create wave code = records marks_wid = {} spaces_wid = {} wave = [0]*len(code) for i in range(0, len(code)): ci = code[i] if i & 1: # Space if ci not in spaces_wid: pi.wave_add_generic([pigpio.pulse(0, 0, ci)]) spaces_wid[ci] = pi.wave_create() wave[i] = spaces_wid[ci] else: # Mark if ci not in marks_wid: wf = carrier(GPIO, FREQ, ci) pi.wave_add_generic(wf) marks_wid[ci] = pi.wave_create() wave[i] = marks_wid[ci] delay = emit_time - time.time() if delay < 0.0: time.sleep(delay) pi.wave_chain(wave) while pi.wave_tx_busy(): time.sleep(0.002) emit_time = time.time() + GAP_S for i in marks_wid: pi.wave_delete(marks_wid[i]) marks_wid = {} for i in spaces_wid: pi.wave_delete(spaces_wid[i]) spaces_wid = {} pi.stop() # Disconnect from Pi.
実行結果コンソール
Playing
関連記事
ディスカッション
コメント一覧
まだ、コメントがありません