ラズパイ3で赤外線リモコンの操作

ラズパイ3で赤外線リモコンの操作

Raspberry Pi 3 で赤外線リモコン&温度センサーを試す

を参考に実践

まず
irMagician を ラズパイ3にUSB ケーブルで接続

使用するのはAndroid で使っているものでOK

irMagician の黄色LEDが点滅していれば認識している

また

ls -l /dev/ttyACM0

で
/dev 以下に ttyACM0 が存在していれば認識しているのを
確認できる

次に
ptyhon-pip と pyserial のインストール

curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
python get-pip.py
pip install pyserial

制御プログラムを git で取得

git clone https://github.com/netbuffalo/irmcli.git
cd irmcli/

で移動してから赤外線センサーの学習

udo python irmcli.py -c

を実行したけど

  File "irmcli.py", line 15
    print "Capturing IR..."
                          ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Capturing IR...")?

となる

SyntaxError: Missing parentheses in call to ‘print’.
で検索してみると
どうやら
python3 から print の構文が変わっていて

Python3 print でシンタックスエラーになった。

によれば

Python3からはprint()で実行しないとエラーになる

とのこと

15行目の
print “Capturing IR…”
を
print(“Capturing IR…”)
として
実行したら

  File "irmcli.py", line 19
    print msg
            ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(msg)?

となるので

さすがに毎回変更は面倒なので

vim irmcli.py

でファイルを開き

:%s/print msg/print(msg)/g

で一度に変更

vim の置き換えについては
vim置換

を参考に

いくつか修正するところがあるので
/print ”
で検索し
print() になるように修正

  File "irmcli.py", line 113
    print ir_serial.readline().rstrip()

については

print(ir_serial.readline().rstrip())

とすると

Traceback (most recent call last):
  File "irmcli.py", line 142, in <module>
    captureIR(args.file)
  File "irmcli.py", line 16, in captureIR
    ir_serial.write("c\r\n")
  File "/home/pi/.pyenv/versions/3.6.10/lib/python3.6/site-packages/serial/serialposix.py", line 532, in write
    d = to_bytes(data)
  File "/home/pi/.pyenv/versions/3.6.10/lib/python3.6/site-packages/serial/serialutil.py", line 63, in to_bytes
    raise TypeError('unicode strings are not supported, please encode to bytes: {!r}'.format(seq))
TypeError: unicode strings are not supported, please encode to bytes: 'c\r\n'

となってしまう

irmagician ラズパイ エラー
で検索し

JSONに保存した赤外線データを使って赤外線照射したいのですが、エラーが出てできません。

によれば
python3 だと
“n,%d\r\n” % recNumberはstr型なので提示エラーになる

~.encode()とbyte型に変換するとよい
とのこと
python3 pySerial TypeError: unicode strings are not supported, please encode to bytes:

も参考にするように書いてある

少しわかりにくかったので
ser.write
で検索し

Python3でpyserialを使う

をみると
write() で
文字列の前に
b
をつければOKらしい

:%s/write(“/write(b”/g
で置き換えて実行したが
リモコンの学習ができない

仕方ないので
コードを書き換えるより
ディレクトリ単位で python 環境を構築することに

pyenv-virtualenvでディレクトリ単位のpython環境構築

ラズパイにpyenv・Python3.7.0をインストールしてpyenv-virtualenvで仮想環境の構築!

を参考に

なお pyenv-virtualenv のインストールに関しては
pyenv と pyenv-virtualenv で環境構築

を参考に

 git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

でファイルを取得

sudo vim .bash_profile 

でファイルを開き

最終行に

eval "$(pyenv virtualenv-init -)"

を追記して保存

source ~/.bash_profile

でファイルをリロード

次に仮想環境の構築

cd irmcli/

で irmagician のディレクトリに移動

次に python 2.7.9 をインストール

pyenv install 2.7.9

しかし

ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

となる

エラーを検索

RaspberryPiにpyenvを入れて複数のPython動かすよ

を参考に

sudo apt install -y libssl1.0-dev

Debian 9 Stretchでは、libssl-devは
OpenSSL 1.1.xベースになっているので
あったlibsslを入れろとの事

再度

pyenv install 2.7.9

を実行しインストール成功

pyenv は
global なら全体のバージョンを設定

local なら
カレントディレクトリに反映となるので

pyenv local 2.7.9 

として
irmcli ディレクトリのみ
python を 2.7.9 にする

次に
仮想環境の保存と再構築のため

pyenv exec pip install wheel

で wheel をインストール

freeze コマンドで
requirements ファイルを作成し
wheel ファイルを出力

pyenv exec pip freeze > ~/pyp_list.txt
pyenv exec pip wheel --wheel-dir=~/wheelhouse -r ~/pyp_list.txt

としておく

次に

python --version

で ver 2.7.9 になっているのを確認

curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
python get-pip.py
pip install pyserial
[/shell
で必要なものをインストール

[shell]
vim irmcli.py

で変更した部分を元に戻しておく

元に戻したら

sudo python irmcli.py -c

で部屋のリモコンの全灯を押し学習させる

sudo python irmcli.py -s -f light_on.json

でファイルへ書き出し

リモコンの消灯を押して照明を消す

sudo python irmcli.py -p -f light_on.json

を実行すると全灯になって照明が点灯する

なお距離は2mでも動作するが
リモコンと異なり
赤外線センサーの向きなどがあっていないと
操作できないので注意

コメント

タイトルとURLをコピーしました