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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

3483閲覧

pythonでarduinoからシリアル通信で送られた情報を処理したい。

meJ15

総合スコア55

Python 3.x

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2018/09/02 01:38

前提・実現したいこと

arduinoからのシリアル通信した情報をpythonで読み取る。

ここに質問の内容を詳しく書いてください。
pythonのjupter notebookを利用してCOM3からの情報を受け取りたい。
しかし、次のようなメッセージがでてうまくいかない。
どこを変えればよいのでしょうか?

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

ValueError Traceback (most recent call last) <ipython-input-1-d6ee45546a66> in <module>() 62 63 if __name__ == '__main__': ---> 64 main() <ipython-input-1-d6ee45546a66> in main() 28 29 ---> 30 xdeg = float(xdeg) 31 ydeg = float(ydeg) 32 # 温度データのリスト更新 ValueError: could not convert string to float: "'55"

該当のソースコード

python

1import numpy as np 2import matplotlib.pyplot as plt 3import pygame 4from pygame.locals import * 5import serial 6import sys 7 8def main(): 9 ser = serial.Serial("COM3") # COMポート(Arduino接続) 10 xdegs = [0]*100 # 温度格納 11 ydegs = [0]*100 # 温度格納 12 t = np.arange(0,100,1) 13 plt.ion() 14 # Pygameの設定 15 pygame.init() # 初期化 16 screen = pygame.display.set_mode((200, 200)) # 画面作成(100×100) 17 pygame.display.set_caption("傾斜角度") # タイトルバー 18 font = pygame.font.Font(None, 30) 19 20 while True: 21 22 data = ser.readline().rstrip() # \nまで読み込む(\nは削除 23 data = str(data).replace('"', '') 24 (xdeg, ydeg) =data.split(",") 25 26 xdeg = xdeg.replace('b','') 27 ydeg = ydeg.replace('b','') 28 29 30 xdeg = float(xdeg) 31 ydeg = float(ydeg) 32 # 温度データのリスト更新 33 xdegs.pop(99) 34 xdegs.insert(0,float(xdeg)) 35 ydegs.pop(99) 36 ydegs.insert(0,float(ydeg)) 37 # グラフ表示設定 38 line, = plt.plot(t, xdegs, 'r-',label="X-axis[deg]") # Y軸更新 39 line, = plt.plot(t, ydegs, 'b-',label="Y-axis[deg]") # Y軸更新 40 line.set_ydata(xdegs) 41 line.set_ydata(ydegs) 42 plt.title("Real-time inclination angle") 43 plt.xlabel("Time [s]") 44 plt.ylabel("Inclination angle [deg]") 45 plt.legend();plt.grid() 46 plt.xlim([1,100]); plt.ylim([-90,90]) 47 plt.draw(); plt.clf() 48 # Pygameの処理 49 screen.fill((0,0,0)) # 画面のクリア 50 text = font.render("(X, Y) = ("+xdeg+", "+ydeg+")", False, (255,255,255)) 51 screen.blit(text, (10, 10)) # レンダ,表示位置 52 pygame.display.flip() # 画面を更新して、変更を反映 53 # Pygameのイベント処理 54 for event in pygame.event.get(): 55 # 終了ボタンが押されたら終了処理 56 if event.type == QUIT: 57 pygame.quit() 58 ser.close() 59 plt.close() 60 sys.exit() 61 62 63if __name__ == '__main__': 64 main()

試したこと

python3だとbという文字が入ってします?そのbという文字をreplace関数で取り除いたところ、'という記号が残ってしまう。
この'55という数字はarudinoからシリアル通信して送られた情報だと思います。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

b'***'という表記はデータがbytes型であることを示すREPL(対話環境)やデバッグ用の表記です。

python

1data = str(data).replace('"', '')

が間違いで、str(data)datastr型に変換してくれたりはしません。動作の詳細については以下を参照してください。

4. 組み込み型 — Python 3.6.5 ドキュメント #str

意図している変換はdata.decode()で得られるかと。

投稿2018/09/02 02:15

hayataka2049

総合スコア30933

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

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

meJ15

2018/09/02 02:44

素早い回答ありがとうございます。 おかげで意図した動作をしました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問