У меня есть микроконтроллер Arduino, слушающий COM3. Использование arduino IDE и монитора Serial прекрасно работает для отправки и получения данных.
Я хотел бы отправлять и получать данные из Python, но не сразу понятно, как это сделать. (Я бы тоже хорошо делал это в C #, если бы это было существенно проще.)
Я нашел arduino_serial.py , но он работает только для Unix. К счастью, у меня есть Ubuntu 10.10 VBox. Однако я понятия не имею, может ли эта виртуальная машина получать доступ к последовательным портам или для этого требуются специальные действия.
Я также нашел pySerial , что выглядит вполне законно. Тем не менее, я также не уверен, как его использовать. Он хочет имена последовательного порта. Как я могу узнать, какие допустимые значения для них?
Например, pySerial
упоминает, что вы можете «Открыть именованный порт в« 19200,8, N, 1 », 1s timeout» с помощью следующей команды:
>>> ser = serial.Serial('/dev/ttyS1', 19200, timeout=1)
Но я понятия не имею, как вы узнали бы, что /dev/ttyS1
было допустимым именем порта.
Есть ли хорошая документация для начала работы с этим?
Обновление : Я использую Ubuntu с arduino_serial, но все еще возникают проблемы.
Эта программа работает на Arduino:
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
Serial.print((char)Serial.read());
}
}
Я вижу, что доступен порт с именем tty0
:
foo@bar:~/baz$ dmesg | grep tty
[ 0.000000] console [tty0] enabled
Я тогда пытаюсь соединиться с arduino_serial
:
foo@bar:~/baz$ sudo python
[sudo] password for foo:
Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import arduino_serial
>>> sp = arduino_serial.SerialPort("/dev/tty0", 9600)
>>> sp.write("foo")
>>> sp.read_until("\n")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "arduino_serial.py", line 107, in read_until
n = os.read(self.fd, 1)
OSError: [Errno 11] Resource temporarily unavailable
Почему я получаю эту ошибку? Что я делаю не так?