Отправить строку из 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. Убедитесь, что они одинаковы. Надеюсь это поможет!

Другие вопросы по тегам