質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

1回答

2123閲覧

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

KRSugar

総合スコア16

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2019/08/13 16:39

前提・実現したいこと

Raspberry Pi と大宮技研さんのIRMagician を使って、赤外線リモコンを作っています。

赤外線の周波数などをjsonで記録するところまではいいたのですが、照射することができません。
以下のPython3コードで実行してみました。どのようにすればいいのでしょうか

(大宮技研様のサンプルコードを参考にさせていただきました http://www.omiya-giken.com/?page_id=1231)

発生している問題・エラーメッセージ

======================== RESTART: /home/pi/IRplay.py ======================== Usage: # python /home/pi/IRplay.py filename Traceback (most recent call last): File "/home/pi/IRplay.py", line 24, in <module> ser.write("n,%d\r\n" % recNumber) File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 518, in write d = to_bytes(data) File "/usr/lib/python3/dist-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: 'n,472\r\n'

該当のソースコード

python3

1import sys 2import serial 3import time 4import json 5import urllib3 6from time import sleep 7 8while True: 9 ser = serial.Serial("/dev/ttyACM0", 9600, timeout = 1) 10 #ser = serial.Serial("/dev/tty.usb0121", 9600, timeout = 1) 11 ser.readline() 12 13 argvs = sys.argv 14 argc = len(argvs) 15 if (argc != 2): 16 print ('Usage: # python %s filename' % argvs[0]) 17 18 json_data = {"postscale": 100, "freq": 38, "data": [112, 1, 49, 15, 4, 4, 5, 4, 5, 4, 9, 4, 5, 4, 5, 4, 9, 4, 4, 4, 8, 4, 5, 4, 5, 4, 9, 4, 8, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 4, 4, 4, 4, 5, 4, 9, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 8, 4, 9, 4, 5, 4, 5, 4, 72, 19, 110, 12, 33, 15, 4, 4, 4, 4, 4, 4, 8, 5, 4, 4, 5, 4, 9, 4, 4, 4, 8, 4, 5, 4, 5, 4, 9, 4, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 4, 4, 4, 4, 9, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 9, 4, 9, 4, 5, 4, 5, 4, 104, 15, 4, 4, 5, 4, 5, 4, 9, 4, 4, 4, 5, 4, 9, 4, 4, 4, 8, 4, 5, 4, 5, 4, 9, 4, 9, 4, 5, 4, 5, 4, 4, 4, 4, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 4, 4, 4, 4, 8, 4, 5, 4, 5, 4, 4, 4, 5, 4, 5, 4, 5, 4, 5, 4, 8, 4, 9, 4, 5, 4, 5, 4, 105, 15, 4, 4, 5, 4, 9, 4, 5, 4, 4, 4, 8, 4, 9, 4, 5, 4, 8, 4, 5, 4, 5, 4, 9, 4, 9, 4, 5, 4, 5, 4, 4, 4, 4, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 9, 4, 5, 4, 4, 4, 4, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 4, 4, 4, 4, 8, 4, 10, 22, 112, 9, 209, 15, 5, 4, 9, 4, 4, 4, 4, 4, 5, 4, 9, 4, 9, 4, 4, 4, 9, 4, 5, 4, 5, 4, 9, 4, 9, 4, 4, 4, 4, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 9, 4, 4, 4, 5, 4, 5, 4, 5, 4, 5, 4, 4, 4, 4, 4, 4, 4, 5, 4, 9, 4, 9, 4, 121, 74, 52, 66, 61, 61, 68, 45, 79, 37, 93, 17, 5, 4, 9, 4, 9, 4, 9, 4, 4, 4, 4, 4, 8, 4, 5, 4, 9, 4, 5, 4, 5, 4, 9, 4, 9, 4, 5, 4, 5, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 9, 4, 5, 4, 5, 4, 4, 4, 4, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 9, 4, 5, 4, 99, 72, 54, 67, 61, 56, 69, 48], "format": "raw"} 19 20 recNumber = len(json_data['data']) 21 rawX = json_data['data'] 22 23 ser.write("n,%d\r\n" % recNumber) 24 ser.readline() 25 26 postScale = json_data['postscale'] 27 ser.write("k,%d\r\n" % postScale) 28#time.sleep(1.0) 29 ser.readline() 30 31 for n in range(recNumber): 32 bank = n / 64 33 pos = n % 64 34 if (pos == 0): 35 ser.write("b,%d\r\n" % bank) 36 37 ser.write("w,%d,%d\n\r" % (pos, rawX[n])) 38 39 ser.write("p\r\n") 40 ser.readline() 41 42ser.close() 43

補足情報(FW/ツールのバージョンなど)

Raspberry Pi W です。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ser.write関数にはbyte型を渡す必要があります。
python3環境で実行している場合は"n,%d\r\n" % recNumberstr型なので提示エラーが発生しています。~.encode()byte型に変換するとよいでしょう。
参考:python3 pySerial TypeError: unicode strings are not supported, please encode to bytes:

投稿2019/08/13 16:57

can110

総合スコア38339

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問