Последовательная связь всегда выполняется в байтах. Поэтому все, что вы отправляете через интерфейс, будет получено в виде последовательности байтов. Поскольку вы закодировали свое «3» как UTF-8, оно будет отправлено как 0x33 (51). Ваше «2» равно 0x32 (50) соответственно.
Увеличение скорости передачи данных, как указано в комментарии, не поможет вам, поскольку только увеличит скорость передачи / получения данных. Без измерения вы не заметите разницу между отправкой одного байта с 9600 или 115200 бод.
Пока оба устройства работают на одной и той же скорости передачи, и вы не превышаете максимальную скорость передачи данных любого устройства (где-тооколо 2 миллионов бод для Arduino Uno) вы не можете отправить на быстрый. (с учетом подходящего кабеля и расстояния)
Вы можете столкнуться с проблемами из-за слишком длинных кабелей, но это несколько метров для 9600 бод, даже в шумной промышленной среде.
Обычно вы ждете, когда будут доступны данныев буфере приема до того, как вы прочитаете.
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}
}
Возможно, это не приведет к некоторой задержке. Я не могу сказать наверняка, поскольку вы не указали длину наблюдаемой задержки.
Если Arduino уже работает, когда вы выполняете свой код Python, я не вижу никаких других проблем с вашим кодом. Если он загружается во время отправки, вы можете наблюдать некоторую задержку из-за загрузчика Arduino. Некоторое время он будет ждать возможных обновлений прошивки, прежде чем запустит фактический код приложения.