Задать вопрос

Обмен данными между arduino и pyserial. Что не так?

Помогите пожалуйста разобраться, почему нижеследующий код на python, работает только если задержка (time.sleep(1)) больше 1 секунды?

import time
import serial

ser = serial.Serial(port='/dev/ttyUSB0',baudrate=115200)
ser.write(b'1')
while 1:
    ser.write(b'test\n')
    time.sleep(1)
    while ser.inWaiting() > 0:
        line = ser.readline()
        if line:
            print(line.decode().strip())


Код скетча для Arduino UNO:

void setup() {
  Serial.begin(115200);
}

void loop() {

String incomingData;

if (Serial.available() > 0) {  //если есть доступные данные

       incomingData = Serial.readString();
       Serial.println("123456789");
    }
}
  • Вопрос задан
  • 5770 просмотров
Подписаться 3 Простой Комментировать
Решения вопроса 1
chukov
@chukov Автор вопроса
После долгих экспирементов, удалось достигнуть приемлемого быстродействия, 100 сообщений ушло за 0:00:00.601094:
#include <Arduino.h>

void setup() {
  Serial.begin(115200);
  Serial.println("Booting");
}

void loop() {


  while(Serial.available()){
    Serial.write(Serial.read());
  }
  delay(10);


}


тестовый код на python:
import time
import serial
import datetime

ser = serial.Serial(port='/dev/ttyUSB0', baudrate=115200)
received = []

ser.write(b'begin\n')
time.sleep(5)

start = datetime.datetime.now()
for i in range(1, 100):
    ser.write(b'test%i\r\n' % i)
    time.sleep(0.005)
    while ser.inWaiting() > 0:
        line = ser.readline()
        if line:
            received.append(line.decode().strip())

print(datetime.datetime.now() - start)
print(received)


ser.write(b'begin\n')
time.sleep(5)

Даннй кусок нужен, что-бы ардуина (esp32 тоже) успел перзагрузиться, т.к. dtr связан с software reset.
Подробнее тут
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
NeiroNx
@NeiroNx
Программист
Это нормально для последовательных портов. Пока данные отправятся, пока ардуина ответ отправит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
SpectrumData Екатеринбург
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
19 янв. 2025, в 10:23
5000 руб./за проект
19 янв. 2025, в 07:48
500 руб./за проект