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

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

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

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

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Python

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

Arduino

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

Q&A

0回答

1093閲覧

Arduinoとサーバプログラム

hirokitrain13

総合スコア0

Python 3.x

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

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Python

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

Arduino

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

0グッド

0クリップ

投稿2021/12/20 06:03

編集2021/12/20 11:06

正しい値をサーバーに送りたい

Arduinoからシリアル通信をした後にサーバーに送るプログラムを書いています。
そこで、正しい値が取れない、または正しい値は取れているけど、出力がうまくいかないという点で困っています。

###値の送信はうまくいっているが、正しい値を送れていないコード

Pyserial1

1import asyncio 2import serial 3import time 4import datetime 5import json 6import urllib.request 7import concurrent.futures 8import re 9from serial.tools import list_ports 10#import splite3 11 12ser=serial.Serial('/dev/cu.usbmodem14401',115200,timeout=None) 13 14 15def upload_data(json_data): 16 #url="http://192.168.0.11:3000" #home 17 method = "POST" 18 headers = {"Content-Type" : "application/json"} 19 20 request = urllib.request.Request(url, data=json_data, method=method, headers=headers) 21 try: 22 with urllib.request.urlopen(request) as response: 23 response_body = response.read().decode("utf-8") 24 print(response_body) 25 except urllib.error.URLError as e: 26 print(e.reason) 27 28def func1(): 29 while True: 30 line=ser.readline() 31 #line.strip('b','\r\n') 32 print(line) 33 34seq=[] 35 36async def run(): 37 for line in ser.readline().rstrip(): 38 ut=time.time() 39 dt = datetime.datetime.fromtimestamp(ut) 40 joined_seq=seq.append(chr(line)) 41 joined_seq = ''.join(str(v)for v in seq) 42 #dev=[info.device for info in list_ports.comports()] 43 if chr(line)=='\n': 44 obj = {"time" : str(dt), "ID" : 12345,"Data":joined_seq} # Send Data 45 json_data = json.dumps(obj).encode("utf-8") 46 upload_data(json_data) 47 #time.sleep(1) 48 49if __name__=='__main__': 50 while 1: 51 #executor=concurrent.futures.ThreadPoolExecutor(max_workers=2) 52 #executor.submit(func1) 53 loop = asyncio.get_event_loop() 54 loop.run_until_complete(run())

実行結果

Successfully Received > {"time": "2021-12-20 19:49:55.907691", "ID": 12345, "Data": "0"} Successfully Received > {"time": "2021-12-20 19:49:56.915803", "ID": 12345, "Data": "\r"} Successfully Received > {"time": "2021-12-20 19:49:57.920313", "ID": 12345, "Data": "\n"} Successfully Received > {"time": "2021-12-20 19:49:58.927146", "ID": 12345, "Data": "4"} Successfully Received > {"time": "2021-12-20 19:49:59.933469", "ID": 12345, "Data": "0"} Successfully Received > {"time": "2021-12-20 19:50:00.940842", "ID": 12345, "Data": "0"} Successfully Received > {"time": "2021-12-20 19:50:01.948506", "ID": 12345, "Data": "\r"} Successfully Received > {"time": "2021-12-20 19:50:02.966437", "ID": 12345, "Data": "\n"} Successfully Received > {"time": "2021-12-20 19:50:03.971292", "ID": 12345, "Data": "4"} Successfully Received > {"time": "2021-12-20 19:50:04.978614", "ID": 12345, "Data": "0"} Successfully Received > {"time": "2021-12-20 19:50:05.983044", "ID": 12345, "Data": "0"} Successfully Received > {"time": "2021-12-20 19:50:06.987425", "ID": 12345, "Data": "\r"} Successfully Received > {"time": "2021-12-20 19:50:07.989914", "ID": 12345, "Data": "\n"}

正しい値は出ているが、値の送信がうまくっていないコード

Pyserial2

1import asyncio 2import serial 3import time 4import datetime 5import json 6import urllib.request 7import concurrent.futures 8import re 9from serial.tools import list_ports 10#import splite3 11 12ser=serial.Serial('/dev/cu.usbmodem14401',115200,timeout=None) 13 14 15def upload_data(json_data): 16 #url="http://192.168.0.11:3000" #home 17 method = "POST" 18 headers = {"Content-Type" : "application/json"} 19 20 request = urllib.request.Request(url, data=json_data, method=method, headers=headers) 21 try: 22 with urllib.request.urlopen(request) as response: 23 response_body = response.read().decode("utf-8") 24 print(response_body) 25 except urllib.error.URLError as e: 26 print(e.reason) 27 28def func1(): 29 while True: 30 line=ser.readline() 31 #line.strip('b','\r\n') 32 print(line) 33 34seq=[] 35 36async def run(): 37 for line in ser.readline().rstrip(): 38 ut=time.time() 39 dt = datetime.datetime.fromtimestamp(ut) 40 joined_seq=seq.append(chr(line)) 41 joined_seq = ''.join(str(v)for v in seq) 42 #dev=[info.device for info in list_ports.comports()] 43 if chr(line)=='\n': 44 obj = {"time" : str(dt), "ID" : 12345,"Data":joined_seq} # Send Data 45 json_data = json.dumps(obj).encode("utf-8") 46 upload_data(json_data) 47 #time.sleep(1) 48 49if __name__=='__main__': 50 while 1: 51 #executor=concurrent.futures.ThreadPoolExecutor(max_workers=2) 52 #executor.submit(func1) 53 loop = asyncio.get_event_loop() 54 loop.run_until_complete(run()) 55

実行結果

Successfully Received > {"time": "2021-12-20 19:53:00.254192", "ID": 12345, "Data": "0\r\n"} Successfully Received > {"time": "2021-12-20 19:53:01.258051", "ID": 12345, "Data": "0\r\n0\r\n"} Successfully Received > {"time": "2021-12-20 19:53:02.257321", "ID": 12345, "Data": "0\r\n0\r\n0\r\n"} Successfully Received > {"time": "2021-12-20 19:53:03.256606", "ID": 12345, "Data": "0\r\n0\r\n0\r\n0\r\n"} Successfully Received > {"time": "2021-12-20 19:53:04.260266", "ID": 12345, "Data": "0\r\n0\r\n0\r\n0\r\n400\r\n"} Successfully Received > {"time": "2021-12-20 19:53:05.263327", "ID": 12345, "Data": "0\r\n0\r\n0\r\n0\r\n400\r\n400\r\n"} Successfully Received > {"time": "2021-12-20 19:53:06.262898", "ID": 12345, "Data": "0\r\n0\r\n0\r\n0\r\n400\r\n400\r\n402\r\n"} Successfully Received > {"time": "2021-12-20 19:53:07.266468", "ID": 12345, "Data": "0\r\n0\r\n0\r\n0\r\n400\r\n400\r\n402\r\n409\r\n"} Successfully Received > {"time": "2021-12-20 19:53:08.270060", "ID": 12345, "Data": "0\r\n0\r\n0\r\n0\r\n400\r\n400\r\n402\r\n409\r\n402\r\n"} Successfully Received > {"time": "2021-12-20 19:53:09.269093", "ID": 12345, "Data": "0\r\n0\r\n0\r\n0\r\n400\r\n400\r\n402\r\n409\r\n402\r\n402\r\n"} Successfully Received > {"time": "2021-12-20 19:53:10.272321", "ID": 12345, "Data": "0\r\n0\r\n0\r\n0\r\n400\r\n400\r\n402\r\n409\r\n402\r\n402\r\n411\r\n"}

これは配列だからかなと感じています

下のようになればいいなという風に考えています。
(受信側プログラムはHttp.jsというプログラムで受信しています。)

理想のプログラム完成の実行例

Successfully Received > {"time": "2021-12-20 19:53:00.254192", "ID": 12345, "Data": "0"} Successfully Received > {"time": "2021-12-20 19:53:01.258051", "ID": 12345, "Data": "0"} Successfully Received > {"time": "2021-12-20 19:53:02.257321", "ID": 12345, "Data": "0"} Successfully Received > {"time": "2021-12-20 19:53:03.256606", "ID": 12345, "Data": "0"} Successfully Received > {"time": "2021-12-20 19:53:04.260266", "ID": 12345, "Data": "400"} Successfully Received > {"time": "2021-12-20 19:53:05.263327", "ID": 12345, "Data": "400"} Successfully Received > {"time": "2021-12-20 19:53:06.262898", "ID": 12345, "Data": "402"} Successfully Received > {"time": "2021-12-20 19:53:07.266468", "ID": 12345, "Data": "409"} Successfully Received > {"time": "2021-12-20 19:53:08.270060", "ID": 12345, "Data": "402"} Successfully Received > {"time": "2021-12-20 19:53:09.269093", "ID": 12345, "Data": "402"} Successfully Received > {"time": "2021-12-20 19:53:10.272321", "ID": 12345, "Data": "411"} Successfully Received > {"time": "2021-12-20 19:53:11.271874", "ID": 12345, "Data": "409"} Successfully Received > {"time": "2021-12-20 19:53:12.275307", "ID": 12345, "Data": "409"}

Arduinoのプログラムについて

CCS811

1#include <Wire.h> 2 3#include "SparkFunCCS811.h" //Click here to get the library: http://librarymanager/All#SparkFun_CCS811 4 5 6int count = 0; 7 8 9int list_num =3; 10int co2_list[3] = {0,0,0}; 11 12 13#define CCS811_ADDR 0x5B //Default I2C Address 14//#define CCS811_ADDR 0x5A //Alternate I2C Address 15 16CCS811 mySensor(CCS811_ADDR); 17 18void setup() 19{ 20 Serial.begin(115200); 21 //Serial.println("CCS811 Basic Example"); 22 23 Wire.begin(); //Inialize I2C Hardware 24 25 26 if (mySensor.begin() == false) 27 { 28 Serial.print("CCS811 error. Please check wiring. Freezing..."); 29 while (1); 30 } 31} 32 33void loop() 34{ 35 //Check to see if data is ready with .dataAvailable() 36 if (mySensor.dataAvailable()) 37 { 38 //If so, have the sensor read and calculate the results. 39 //Get them later 40 mySensor.readAlgorithmResults(); 41 42 } 43 for(int i =list_num;i > 1;i--){ 44 co2_list[i-1] = co2_list[i-2]; 45 } 46 co2_list[0] = mySensor.getCO2(); 47 int co2_ave; 48 co2_ave = (co2_list[0] + co2_list[1] +co2_list[2])/3.0; 49 Serial.println(co2_list[0]); 50 //Serial.print(","); 51 //Serial.println(co2_ave); 52 53 54 delay(1000); //Don't spam the I2C bus 55}

二酸化炭素センサーを使用しています。配線は間違えておらず、Arduino付帯のシリアルモニタでは正しく出力されることを確認しています。

ご回答いただけると嬉しいです。よろしくお願いします。

受信側のプログラム(Node.js)

recive

1 2var http = require('http'); 3 4 5var server = http.createServer(); 6 7 8server.on('request', function(req,res){ 9 10 if(req.method == 'POST'){ 11 12 res.writeHead(200, {'Content-Type' : req.headers['content-type']}); 13 14 15 req.on('data', function(data){ 16 17 var text = data.toString('utf8'); 18 19 res.write('Successfully Received > ' + text); 20 21 22 console.log(req.method + ' "' + req.headers['user-agent'] + '"'); 23 console.log('Client Request > ' + data); 24 }); 25 26 27 req.on('end', function(){ 28 // スマートフォンへのデータの返信を終了 29 res.end(); 30 }); 31 } 32 33 else { 34 res.writeHead(200, {'Content-Type': 'text/plain'}); 35 res.write('Hello World\n'); 36 res.end(); 37 } 38}); 39 40 41server.listen(3000); 42 43

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

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

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

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

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

y_waiwai

2021/12/20 06:16

そのそれぞれについて、どういう値が送られてるんでしょうか
hirokitrain13

2021/12/20 11:07

CO2センサーで取得した値(二酸化炭素濃度)を送信しています。
thkana

2021/12/21 23:18

1. プログラムの違う場所を何らかの方法で比較して示していただけませんか? 私にはどうにも「同じプログラム」に見えてしまうのですが。 2.「値の送信はうまくいっているが、正しい値を送れていない」 前半と後半が矛盾しているように思います。「送信がうまくいく」とは「正しい値が送られる」ことをいうのではないのですか? つまり、なにが正しくて、なにが間違っているのですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問