Почему NodeMCU отправляет данные с нежелательным номером?

Я пытаюсь отправить последовательные данные из NodeMCU в Arduino. Я использую MicroPython для программирования. Так же как Serial.read на Ардуино. Я могу отправить и получить успешно. Но проблема в том, что NodeMCU отправляет данные вместе с номером, который не нужен. И Arduino получает данные вместе с номером. Например, если я отправлюПривет«отправляет как»Hello5«. Я понял, что число — это не что иное, как количество алфавитов в строке. Как я могу удалить это?

MicroPython на NodeMCU:

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

Программа Arduino:

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;
}
}

0

Решение

Я только что проверил UART на микропитоне (http://docs.micropython.org/en/latest/wipy/library/machine.UART.html) и сериал Ардуино (https://www.arduino.cc/en/Reference/Serial
), и, кажется, вам не хватает одной строки инициализации для UART. В документе UART указано, что установленная по умолчанию скорость передачи данных составляет 9600, и вы ожидаете 115200 на последовательном приемнике. Я полагаю, что установка скорости передачи данных на каждой стороне будет иметь неопределенное поведение.

В своем коде Python, не могли бы вы попробовать uart.init (115200) после вызова uart = UART (0) (а остальные значения по умолчанию кажутся такими же, как ожидания Serial для получателя)?

Кроме того, в документе Serial говорится, что если он не может найти символ, который вы определили в readStringUntil (), он будет пытаться до истечения времени ожидания. Поэтому я предполагаю, что время ожидания вызова вашей функции истекло, потому что он не найдет конечную линию (‘\ 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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]