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

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

新規登録して質問してみよう
ただいま回答率
86.12%
バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

M5Stack

M5Stackは、小型のマイコンモジュールです。拡張モジュールが豊富に用意されており、センサと組み合わせることで測定機能を自由に追加することができます。

Raspberry Pi

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

Python

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

解決済

M5stackからraspiへシリアル通信したバイナリデータをもとに計算したいがraspi側で処理ができない

ISO130
ISO130

総合スコア8

バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

M5Stack

M5Stackは、小型のマイコンモジュールです。拡張モジュールが豊富に用意されており、センサと組み合わせることで測定機能を自由に追加することができます。

Raspberry Pi

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

Python

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

1回答

0リアクション

0クリップ

918閲覧

投稿2021/08/18 04:55

###前提・実現したいこと

M5stackからシリアル通信(GPIO経由)でraspiにバイナリ値を送り、その値でraspi側で計算をしたいと思っています。
raspiの処理はPythonで行っています。

raspi側ではデータを受け取ってはいるものの、計算ができない状況です。おそらく受け取ったデータの型変換の処理などが悪いのではないかと思ってます。

###該当のソースコード
####送信側

M5stack

#include <M5Stack.h> void setup() { M5.begin(); M5.Power.begin(); // 画面初期設定 M5.Lcd.setCursor(10, 10); M5.Lcd.setTextSize(2); M5.Lcd.println("START"); // シリアル通信機能の設定 // Serial2.begin(unsigned long baud, uint32_t config, int8_t rxPin, int8_t txPin, bool invert) Serial2.begin(115200, SERIAL_8N1, 16, 17); } void loop() { M5.update(); // update button state // ボタンAが押された時の処理 if (M5.BtnA.wasPressed()) { M5.Lcd.setCursor(0, 10); M5.Lcd.print("Transmitted : ***"); // ラズパイへ送信する binary 1byte uint8_t tempdata =10; Serial2.write(tempdata); // // ラズパイへ送信する moji // Serial2.write("hello"); // ラズパイへ送信する binary 4byte // int32_t data = 305419896; // uint8_t dataHH = (uint8_t)((data & 0xFF000000) >> 24); // uint8_t dataHL = (uint8_t)((data & 0x00FF0000) >> 16); // uint8_t dataLH = (uint8_t)((data & 0x0000FF00) >> 8); // uint8_t dataLL = (uint8_t)((data & 0x000000FF) >> 0); // // Serial2.write(dataHH); // Serial2.write(dataHL); // Serial2.write(dataLH); // Serial2.write(dataLL); }else{ } }

####受信側

python

import serial import time import concurrent.futures ser = serial.Serial('/dev/serial0', 115200, timeout = 1.0) def func1(): while True: # binary 1byte receive ver1 # recv_data = ser.readline() # print(recv_data) # binary 1byte receive ver2 if ser.in_waiting>0: recv_data = ser.read(1) print (type(recv_data)) recv_data2 = struct.unpack_from("B",recv_data,0) print(recv_data2) cal_data = recv_data2+1 print(cal_data) # # moji receive # recv_data = ser.readline() # if(recv_data2.decode('utf-8') != ""): # # バイト型末端の改行文字を除外して、文字列変数に変換 # print(line.strip().decode('utf-8')) def func2(): while True: flag=bytes(input(),'utf-8') #シリアル通信で文字を送信する際は, byte文字列に変換する #input()する際の文字列はutf-8 ser.write(flag) #シリアル通信:送信 if(flag==bytes('z','utf-8')): break; time.sleep(1) ser.close() if __name__ == "__main__": executor = concurrent.futures.ThreadPoolExecutor(max_workers=2) executor.submit(func1) executor.submit(func2)

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

raspi側のコンソールは
・print (type(recv_data))は、<class'byte'>
・print(recv_data2)は、反応なし
・print(cal_data)は、反応なし

また、コメントアウトしている # binary 1byte receive ver1 を使うと
raspi側では b" が何度も出ます

なお、M5側を文字送信にして、raspi側も文字受信にする場合は問題なくできますので
配線などは間違っていないと思います。

##調べたこと
webなどを読む限り、おそらく当方は型の変換処理のことがわかっていないような気がしています。どなたかアドバイスを頂けると幸いです。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

thkana

2021/08/18 12:43

試しでやっているらしいことがいろいろで「結局どうなれば満足なのか」がわからないのですが。 今有効なプログラムで、print(recv_data2)やprint(cal_data)で「なにか」が出てくればよいのですか?
ISO130

2021/08/18 13:48

M5から10をraspiに送信して、raspiでその受信した値に1を足していますので、その結果のcal_data の値が11になるように出力を得たいと思っております。 ところが、cal_dataの結果が現在のコードだと何も出力されないので、どこが悪いのかを知りたいと思っております。

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

M5Stack

M5Stackは、小型のマイコンモジュールです。拡張モジュールが豊富に用意されており、センサと組み合わせることで測定機能を自由に追加することができます。

Raspberry Pi

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

Python

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