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

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

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

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

Raspberry Pi

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

Q&A

解決済

1回答

2582閲覧

Arduinoで取得した複数のデータを格納する方法

arumon

総合スコア20

Python 3.x

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

Raspberry Pi

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

0グッド

1クリップ

投稿2018/06/28 02:18

Arduinoで温度・湿度のデータを取得し、
PCにデータを送り、
変化を図でリアルタイムに表示したい。

その際にデータをどう取り扱えばいいのか分からない

■開発環境
・Arduino
・python3.6
・windows10

①Arduino側からデータ取得
まず、下記コードで温度と湿度のデータを取得

#include <DHT.h> #include <LiquidCrystal.h> const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); const int PIN_DHT = 8; DHT dht(PIN_DHT,DHT11); void setup() { Serial.begin(9600); dht.begin(); } void loop() { delay(3000); float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); Serial.print(humidity); Serial.print(temperature); }

取得データは下記のようになる
23.6、40
23.5、40
23.6、41

②ArduinoとPCの通信
次に下記のようにArduinoからデータを取得。

import serial import time def main(): ser = serial.Serial('COM4', 9600) time.sleep(5) while True: str = ser.read(10) print(str.decode()) time.sleep(0.01) if __name__ == '__main__': main()

取得データは下記のようになる
23.6、40.2
23.5、40
23.6、41.1

③PC側で取得データの処理
温度と湿度のデータをグラフにプロットしたい。
しかし、データの格納の仕方が分かりません。
例えば、

x.strip() for x in str.decode().split(',')

でデータを分割すればいいと思いましたが、
改行をうまく処理できずに下記のようになります。
["40.2\r\n23.5"]

ご指摘頂けないでしょうか?
何卒宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ser.readline()で1行づつ読んで、そこからsplitさせればいいかと思います
そこから、各要素を10倍にして、整数の2要素の配列のリストにするなりすればよろしいかと


んで、さらにいうと、Arduino側で、各要素をfloatにしないで、最初から10倍として整数(int)として持たせ、シリアルの出力も整数として出すほうがいいかと思います。
最終的にPCで出力するときに1/10すればいいです

投稿2018/06/28 02:52

編集2018/06/28 03:06
y_waiwai

総合スコア87719

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

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

arumon

2018/06/28 06:49

y_waiwaiさん、ご回答ありがとうございます。 >ser.readline()で1行づつ読んで、そこからsplitさせればいいかと思います ありがとうございます。うまくできました。 またfloatにしない理由としては、処理が軽くなるからでしょうか?
y_waiwai

2018/06/28 06:52

> またfloatにしない理由としては、処理が軽くなるからでしょうか? そう。floatを使うと、処理が重くなり、コードサイズも格段に増えます。 また、通信電文にしろ、小数点の処理もしなければいけない(まあ、ここらはpythonで一発だけど)などなど、整数で扱ったほうがいろいろとやりやすいですね
arumon

2018/06/28 06:57

勉強になります! ご丁寧にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問