2017-01-22 10 views
0

Я хочу отправить серийные данные ('a') в мой arduino с помощью python.Последовательный python to arduino

Принимающий код на Arduino является следующее:

char inChar = (char)Serial.read(); 
if(inChar=='a'){ 
    //do stuff 
} 

При отправке charachter «а» от Arduino последовательного терминала, он работает. Однако при отправке с python 2.7 (код см. Ниже) мигает rx led, но to stuff не выполняется (т. Е. inChar=='a' является ложным). Я пробовал все, но я не могу решить эту проблему.

Pyhton код:

import serial 
ser = serial.Serial('/dev/ttyUSB0',9600) 
ser.write('a') 

EDIT: ser.write(b'a') не работает ни

+0

аналогичный вопрос [здесь] (http://stackoverflow.com/questions/19143360/python-writing-to-and-reading-from-serial-port) см., если это помогает – warl0ck

+0

@ warl0ck Я прочитал сообщение уже, но это не помогло – black

+1

добавить 'ser.flush()' в конце или 'ser.close()' ссылка из [link] (http: // pyserial.readthedocs.io/en/latest/shortintro.html), чтобы убедиться, что данные отправлены – warl0ck

ответ

0

Благодарим за ответы. Однако это не решило мою проблему.

Попробовав почти все мыслимые решения, я исправлю это. Между открытие порт и отправка/чтение, требуется отсрочка - по крайней мере, с моей малиной.

Так это работает:

import serial 
import time 

ser = serial.Serial('/dev/ttyUSB0',9600) #opening the port 
time.sleep(1) #wait 1s 
ser.write('a') #write to the port 
-1

Вы можете увидеть мое решение здесь =>https://github.com/thisroot/firebox

import firebox as fb 

serPort = fb.findDevice('stimulator') 
if(serPort): 
    data = [] 
    data.append("<fire,200,5>") 
    fb.sendMessage(serPort,data) 
+2

Как бы то ни было, это похоже на * спам * и, похоже, не отвечает на вопрос в этой теме, а также четко не определяет и не разрешает проблему в вопросе. Измените свой ответ, чтобы предоставить более подробную информацию о том, как это может решить проблему ОП и как он может использовать его в своем конкретном случае. –

+0

У меня нет времени, чтобы написать более подробно –

2

Когда вы видите Rx свет мигает, но arduino, похоже, не получает данных, я бы проверил две вещи:

1) Убедитесь, что у ардуино достаточно времени, чтобы настроить и начать последовательную связь перед отправкой данных с хоста python. Вы можете включить код, который заставит встроенный светодиод мигать с отличительным рисунком после оператора Serial.begin, а затем запустить код python после этого. (Информация о светодиодах: how to make the LED blink)

2) Убедитесь, что настройки связи правильные. Вы можете явно указать все параметры, чтобы вы знали, что они собой представляют, и убедитесь, что они одинаковы на обоих концах кабеля. Например, на Arduino:

// set up Serial comm with standard settings 
Serial.begin(9600,SERIAL_8N1); 
Serial.flush(); 

А потом в коде Python:

bytesize=8 
parity='N' 
stopbits=1 
timeout=3 

ser = serial.Serial(port_name, baudrate=9600, bytesize=bytesize, parity=parity, stopbits=stopbits, timeout=timeout) 

Кроме того, если вы можете отправить данные из Arduino в питона хоста, то вы знаете, что ваш набор связи вверх правильно.

+0

Я ценю ваш комментарий. Рассмотрев мой ответ через 24 часа, это не очень хорошо :(У меня нет ссылки на поведение символа прекращения и просмотра моих заметок для аналогичной проблемы, с которой я столкнулся, я не использовал python, я использовал Java. отредактируйте мой ответ – mhopeng

+0

в порядке, я удалил свой комментарий, поскольку он больше не применяется. Были ли у вас возможность воспроизвести проблему OP? –

1

добавить

ser.flush()

в конце после ser.write('a')

или

ser.close()

ссылки из link, чтобы убедиться, что данные передаются в порт.

 Смежные вопросы

  • Нет связанных вопросов^_^