LoginSignup
non_nicochan91
@non_nicochan91 (のん)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Pythonにおける変数定義(write()関数)について

Xbee通信におけるPythonの変数定義(write()関数)について

Xbeeを用いてRaspberry pi-PC間の通信を試みています。
また、Raspberry pi側にはUSBタイプのXbeeポートを使用しています。
現在Raspberry piから文字を送信して受信するというところまではできており、今後はRaspberry piで気圧、加速度センサーの値を取得してRaspberry piからPCに送信することを目指しています。
PCに送信されたデータはTeratermにて表示しております。

発生している問題・エラー

現在「x」「y」「z」を変数として定義し、list()関数を用いてシリアル通信ができないかと試みています。
x,y,zの変数には、センサの値をインポートするつもりですが、今は一旦「x=1」のように簡単な変数で試しています。
以下は今回作成して試したコードです。
(文字の間にカンマがある理由としては、Teratermに表示した文字列を保存し、csvファイルとして出力するためです。)

import serial
import time

# Enable USB Communication
ser = serial.Serial("/dev/ttyUSB0", 9600,timeout=.5)

while True:
    x=1
    y=2
    z=3
    lines=['x,','y,','z\n']
    ser.writelines(lines.encode("utf_8"))

    # write a Data
    time.sleep(0.5)

しかし、以下のようなエラーが出てしまい、対応に困っております。
改行はおろか配列定義ができていないため文字列を表示できない状態です。
他のサイト等で調べてみましたが、依然として解決につながっておりません。。

該当するソースコード(エラー部分)↓
python12.jpg

該当するソースコード(エラー部分)

Traceback (most recent call last):
  File "/home/pi/xbee_sensordatatest1.py", line 12, in <module>
    ser.writelines(lines.encode("utf_8"))
AttributeError: 'list' object has no attribute 'encode'

このコードの間違っている点、エラーの処理方法、改善点など、ご指摘、ご教示いただきたく存じます。
初歩の初歩の質問で申し訳ございませんが、何卒よろしくお願いいたします。

0

2Answer

.encode()string が持つメソッドです。 list に対しては呼べないので 'list' object has no attribute 'encode' エラーが出ています。

また、 ['x,','y,','z\n'] を writelines すると各変数の値ではなく文字通りの x,y,z (+改行)が書き込まれます。

正しく書き込むには以下のようにしてください。

ser.write(f'{x},{y},{z}\n'.encode('utf-8'))
0

Comments

  1. @non_nicochan91

    Questioner
    @usai様

    ご回答誠にありがとうございます!
    エラー原因の部分納得いたしました!
    また、先程ご教授いただいたコードをもとに修正しましたところ、無事出力できました!
    初歩的な質問にもかかわらず丁寧に教えていただき大変助かりました。
    重ね重ね御礼申し上げます。ありがとうございました😊
    また何か不明点がある際にはお伺いすることもあるかもしれませんがその際は何卒よろしくお願いいたします。
This answer has been deleted for violation of our Terms of Service.

Your answer might help someone💌