Python - коммуникация Arduino не надежна

Я пытаюсь установить базовую связь между python и моим arduino. Мне удалось получить сообщение, отправленное на arduino и отправленное обратно, но код, который достигает этой задачи, не дает согласованных результатов. Я запускаю python 3.5 с pyserial 3.3.

Мой код Arduino:

String incoming;

void setup() {
        Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps
}

void loop() {

        // send data only when you receive data:
        if (Serial.available() > 0) {
                // read the incoming byte:
                incoming = Serial.readStringUntil('\n');

                // say what you got:
                Serial.print("I received: ");
                Serial.println(incoming);
        }
}

Мой код Python

import serial

arduinoSerialData = serial.Serial("COM5",9600,timeout=1)

print("Initial in waiting:")
print(arduinoSerialData.in_waiting)
print("Initial out waiting:")
print(arduinoSerialData.out_waiting)

while (arduinoSerialData.in_waiting>0):
    garbage = arduinoSerialData.readline()
    print(garbage)

nummessages =0

while (nummessages<5):
    if (arduinoSerialData.in_waiting>0):
        myData = arduinoSerialData.readline()
        myData = myData.decode('utf-8')
        myData = myData.strip()
        print("The Arduino says:")
        print(myData)
        nummessages=nummessages+1
    elif(arduinoSerialData.out_waiting>0):
        pass
    else: 
        arduinoSerialData.write(b'Hello Arduino!\n')

while (arduinoSerialData.in_waiting>0):
    garbage = arduinoSerialData.readline()
    print(garbage)

print("In Waiting: ")
print(arduinoSerialData.in_waiting)
print("Out Waiting: ")
print(arduinoSerialData.out_waiting)
arduinoSerialData.close()

Эти заявления печати в основном являются моей неудачной попыткой диагностировать проблему. Петли «мусор» были моей попыткой убедиться, что условия были как можно более идентичными при запуске кода python. Если я запустил программу arduino, а затем позвоню в эту программу python из моей командной строки, я получаю несогласованные результаты. Иногда мой первый вызов python «работает», а затем другие не будут, когда-то он работает несколько раз подряд, и этот вывод выводит первый вывод, в котором говорится: «Arduino Says: I» будет иметь различное количество " I Received: Hello Arduino "сообщение, которое должен был отправить ардуино. Любые идеи, которые могли бы вызвать это отсутствие согласованности? Если я сначала попытаюсь запустить код python, arduino даже не может запуститься.

введите описание изображения здесь>> </p></body></html>

2 голоса | спросил cpoole 19 J000000Wednesday17 2017, 21:07:39

1 ответ


3

Если другие люди столкнутся с подобными проблемами, я выложу то, что я нашел сегодня.

- Непоследовательный вывод был вызван тем, что при открытии последовательного соединения с python он сбрасывает Arduino, и поэтому python может отправлять сигналы без завершения работы arduino своей функции setup (). Если я поставлю задержку на 1 секунду на стороне python, несогласованность прекратится, и я больше не буду запускать ошибки байта. Я ищу альтернативные способы предотвращения этого сброса, так как временная задержка для меня является нарушителем транзакций.

UPDATE: Замена

arduinoSerialData("COM5",9600,timeout=1)

с

arduinoSerialData = serial.Serial()
arduinoSerialData.port = "COM5"
arduinoSerialData.baudrate = 9600
arduinoSerialData.timeout = 1
arduinoSerialData.setDTR(False)
#arduinoSerialData.setRTS(False)
arduinoSerialData.open()

, похоже, обходит сброс. Я включил функции setDTR и SetRTS, потому что, хотя setDTR работает для DUE, кажется, что некоторым другим платам Arduino требуется setRTS.

- Функция decode () имеет аргумент ключевого слова, называемый ошибками, который может быть установлен как «игнорировать», если вы хотите, чтобы код просто игнорировал вещи, которые не могут быть интерпретированы в желаемом формате. Только с этой настройкой ключевого слова я никогда не получал ошибок, но результат был несогласован из-за сброса.

ответил cpoole 20 J000000Thursday17 2017, 02:00:01

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132