Отправить строку из Python на Arduino LCD
Я хочу отобразить строку на Arduino LCD 16x2, используя python, но у меня возникли проблемы с последовательной связью.
Вот код, работающий в Arduino:
Arduino Code
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
String stringa;
const unsigned long TimeOut = 10; // timeout 10 ms
String stringa1;
String stringa2;
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);
}
void loop() {
stringa = "";
unsigned long T = 0; // timer
T = millis(); // timer running
while (millis() - T < TimeOut) {
// waiting timeout
while (Serial.available() > 0) {
// receiving Serial
stringa += char(Serial.read()); // add char
T = millis(); // reset timer
}
}
if (stringa.length() > 32) {
lcd.setCursor(0, 1);
lcd.print("stringa length: " + stringa.length());
delay(2000);
lcd.print(" ");
} else {
stringa1 = stringa.substring(0 , 16);
stringa2 = stringa.substring(16);
lcd.setCursor(0, 0);
lcd.print(stringa1);
lcd.setCursor(0, 1);
lcd.print(stringa2);
delay(5000);
}
}
Он отлично работает с последовательной связью от клавиатуры, предоставленной в Arduino IDE. Но это не работает, когда я пытаюсь отправить строку, используя скрипт Python ниже:
Код Python
import serial
import sys
import time
arduino = serial.Serial('COM3', 9600, timeout=0)
stringa = 'hello'
arduino.write(bytes(stringa,'utf-8'))
arduino.close()
В чем проблема? Я не могу найти решение! Благодарю.
1 ответ
Посмотрите на разницу между таймаутами в C-файле выше и скриптом Python ниже.
Тайм-аут составляет 10 миллисекунд в вашем C-файле, в то время как он равен 0 в вашем скрипте Python. Также проверьте результат arduino.write(), чтобы убедиться, что он был успешным.
Возможно реализовать что-то вроде следующего:
import serial
import sys
import time
arduino = serial.Serial('COM3', 9600, timeout=10)
stringa = 'hello'
try:
arduino.write(stringa.encode())
except OsError:
print "Write failed!"
arduino.close()
Если это не работает, попробуйте проверить последовательные порты между файлом C и скриптом Python. Убедитесь, что они одинаковы. Надеюсь это поможет!