2017-05-12 12 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') 

아두 이노 프로그램 : 난 그냥 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)와 아두 이노의 시리얼 (https://www.arduino.cc/en/Reference/Serial )는, 그것을 당신이 하나를 놓치고있는 것 UART 용 초기화 라인. UART 문서는 그것이 설정하는 기본 전송 속도가 9600이고 직렬 수신기에 115200을 기대한다고 말합니다. 각 측면마다 다른 전송 속도를 설정하면 정의되지 않은 동작이 발생합니다.

파이썬 코드에서 uart = UART (0) 호출 후 uart.init (115200)를 시도해 볼 수 있습니까? (나머지는 기본값이 수신기의 Serial 예상과 동일하게 보입니다)?

또한 직렬 문서에서는 readStringUntil()에서 정의한 char을 찾을 수 없다면 시간 초과 될 때까지 시도 할 것이라고 말합니다. 그래서 당신이 아무것도 주입하지 않았기 때문에 스트림에서 endline ('\ 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

baudrate를 변경 한 후에도 문제가 해결되지 않습니다. 코드를 공유 할 수 있습니까? – nawas