2017-05-12 7 views
0

NodeMCUからArduinoにシリアルデータを送信しようとしています。私はプログラムのためにMicroPythonを使用します。 ArduinoのSerial.readも同様です。私はうまく送受信できます。しかし、問題は、NodeMCUが必要でない番号とともにデータを送信することです。 Arduinoは数字と共にデータを受信します。たとえば、「Hello」を送信すると、「Hello5」と送信されます。数字は文字列内のアルファベットの数だけであることを理解しました。これをどうやって削除できますか?NodeMCUが不要な番号でデータを送信するのはなぜですか?

NodeMCU上MicroPython:

import os 
import machine 
from machine import UART 
uart = UART(0) 
import time 
while True: 
    uart.write('1') 

Arduinoのプログラム:私はちょうどmicroPythonのUARTを確認

String received; 
String msg; 
void setup() { 
    Serial.begin(115200); 
    attachInterrupt(0, light, FALLING);//When arduino Pin 2 is FALLING from HIGH to LOW, run light procedure! 
} 

void light() { 
    Serial.println(msg); 
} 

void loop() 
{ 
    if (Serial.available() > 0){ 
    received = Serial.readStringUntil('\n'); 
    msg = received; 
    } 
} 
+1

'uart.write( '1')'が改行文字を送信することは確かですか?いいえ、私はそれを使用しようとしませんでした。 – KIIV

+0

私はそれを削除できますか? – nawas

+0

@ KIIV私は1を送るようにしようとすれば11のように送る。 – nawas

答えて

0

http://docs.micropython.org/en/latest/wipy/library/machine.UART.html)とのArduinoのシリアル(https://www.arduino.cc/en/Reference/Serial )は、あなたが1を逃しているようですUARTの初期化ライン。 UARTドキュメントは、それが設定するデフォルトのボーレートは9600であり、シリアルレシーバでは115200と予想しています。私は、それぞれの側で異なるボーレートを設定することは、未定義の動作を持つと信じています。

あなたのPythonコードでは、uart = UART(0)コール後にuart.init(115200)を試してみることができますか?そして、残りのデフォルト値はReceiverのSerialの期待値と同じですか?

また、シリアル文書では、readStringUntil()で定義したcharが見つからない場合は、タイムアウトするまで試行します。だから私はあなたが何も注入しなかったので、ストリームでエンドライン( '\ n')を見つけられないので、あなたの関数呼び出しがタイムアウトしたと思います。

また、使用している機能のヘルプドキュメントには、そのようなことは記載されていませんが、受信者の最初の文字として実際に文字数を取得すると、それはあなたにとって有利です。あなたが最初にその番号を取得しようとすることができますし、その後、多くの文字を(Arduino受信サイトで)読むことができますか?

#include <string.h> 
char buffer[256]; // buffer to use while reading the Serial 
memset(buffer, (char)0, 256); // reset the buffer area to all zeros 

void loop() 
{ 
    if (Serial.available() > 0){ 
    int count = Serial.read(); // the first byte that shows the num of chars to read after, assuming that this is a 'byte' - which means we can have max 256 chars in the stream 
    Serial.readBytes(buffer, count); 
    msg = String(buffer); 
    } 
} 
+0

私はあなたの提案を試みた。私はuart(1)を使うと、メッセージにアルファベットの数だけを送ります。 – nawas

+0

ボーレートを変更しても、問題は解決しません。コードを共有してもらえますか? – nawas

関連する問題