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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

2回答

1383閲覧

datatimeを利用して時間を連続記録したい

hiiiro

総合スコア3

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2021/08/16 15:44

編集2021/08/16 16:54

前提・実現したいこと

python/Arduinoを利用して、熱電対で温度を連続記録するプログラミングを組んでいます。
また、データはcsvファイルに保存できるようにしたいです。

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

問題は2点です。
1つ目は作成したファイルの中の項目(時,分,秒,温度)が文字化けしている。
2つ目はループで行っている実際の記録時間の部分がエラーが出てしまっている。

エラーメッセージ File "C:\Users\sawad\python\thermocouple\thermocouple.py", line 29, in <module> writer.writerows((date.hour,date.minute,date.second,ser)) _csv.Error: iterable expected, not int```

該当のソースコード

python

import datetime
import csv
import time
import serial

ser = serial.Serial()
ser.baudrate = 9600
ser.timeout = 0.5
ser.port = "COM5"

with open("thermocouple.csv",mode="a",encoding="utf-8")as f:
writer = csv.writer(f)
writer.writerow(("時","分","秒","温度"))

duration = int(input("計測時間を入力してください")) start = time.time() end = start + duration while time.time() <= end: date = datetime.datetime.now() writer.writerows((date.hour,date.minute,date.second,ser)) print(date.hour,date.minute,date.second) time.sleep(0.5)

f.close()

### 試したこと print文でcmd上に計測結果を示した結果、問題なく計測できていました。 ### 補足情報(FW/ツールのバージョンなど) python3.9 ここにより詳細な情報を記載してください。 ### 前提・実現したいこと ここに質問の内容を詳しく書いてください。 (例)PHP(CakePHP)で●●なシステムを作っています。 ■■な機能を実装中に以下のエラーメッセージが発生しました。

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

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

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

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

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

mather

2021/08/16 16:13

エラーコード ``` (ここにエラーコードを書く) ``` Python ソースコード ``` (ここにPythonコード) ``` のように囲みましょう。プレビューを確認しながら編集してみてください。
hiiiro

2021/08/16 16:55

ソースコード1行目に```入ってますが、これを消すとインデントなくなるので付けます。実際のコードには```ありません
guest

回答2

0

ベストアンサー

文字化けについて

文字化けに関しては文字コードを合わせましょう。 thkana さんのおっしゃっている通りExcelなどで開くためにShiftJISで保存するか、UTF-8で保存したファイルはテキストエディタなどで開いてみてください。

エラーについて

Serial から値を取得するときは read() を使いましょう。返り値が bytes になっているのにも注意してください。
Serial.read()のリファレンス

また、CSVへの書き込みの関数も間違っています。
writerow : 一行書き出す
writerows : 複数行書き出す
なので、一行ずつ書き込みたいのであれば writerow を使いましょう。

投稿2021/08/17 02:22

mather

総合スコア6762

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

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

0

1つ目は作成したファイルの中の項目(時,分,秒,温度)が文字化けしている。

「文字コード」について調べてみてください。Windows上のExcelは通常の表示にはShift JISを使いますが、あなたはプログラムでutf-8を指定しています。

2つ目はループで行っている実際の記録時間の部分がエラーが出てしまっている。

serはSerialクラスそのものですね。これの「値」を書き込めと言われて困ってしまっているのでしょう。
シリアルポートで適切な値を受信し、数値や文字列に変換してから書き込みの関数に与えてください。

なお、シリアル(UART)の通信の単位は1バイトです。1234、という文字列を送信したとしても受信側では"1"と"23"にばらばらに受信されるかもしれず、さらには次に5678が送信されたら"45678"と受信されてしまうかもしれません。送信側と受信側で何らかの取り決め(プロトコル)をして"1234""5678"を再現するのはプログラマの責任です。
しばしば行われるのは一連の数字の間に数字以外のデータ(改行コード等)を挟むとか...

投稿2021/08/16 22:50

thkana

総合スコア7733

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問