/ / Python + Arduino con Mac OS X - python, macos, puerto serie, arduino

Python + Arduino con Mac OS X - Python, macos, puerto serie, arduino

Tengo problemas para comunicarme entre mi Arduino y Python. Tengo un par de preguntas que espero puedan ser respondidas, pero primero y más importante, necesito simplemente establecer una conexión.

Para Windows, aparentemente la solución es más bienconveniente, pero en Mac OS X, aparentemente necesito acceder a algunos archivos del sistema (con los que no estoy familiarizado). La documentación de Python me apunta a la publicación específica. Re: Python puede hacer cosas de puerto serie?, pero no creo que sirva para mis propósitos.

En este punto, tratando de ver simplemente la evidencia de la comunicación, he intentado esto.

Arduino:

void setup(){
Serial.begin(9600);
}

void loop()
{
int d = Serial.read();
Serial.println(d,BYTE);
}

Python: (casi desde el enlace mencionado ...)

 #!usr/bin/python
import os, fcntl, termios, sys

serialPath = "/dev/tty.usbmodemfa141"

ser= os.open(serialPath, 0)
[iflag, oflag, cflag, lflag, ispeed, ospeed, cc] = range(7)
settings = termios.tcgetattr(ser)
settings[ospeed] = termios.B9600
settings[ispeed] = termios.B0
print 2

Como se evidencia aquí, realmente no entiendo quéLos módulos que estoy importando están haciendo exactamente. Mientras leo la documentación, no veo una manera obvia de enviar datos a través de la serie. Entonces, ¿estoy en lo cierto al adivinar que sea cual sea la salida de este programa, se enviará automáticamente?

Respuestas

13 para la respuesta № 1

La forma más fácil de comunicarse en Python con el Arduino (o cualquier microcontrolador con serie) es usando pySerial.

Aquí hay un ejemplo:

import serial
s = serial.Serial(port="/dev/tty.usbmodemfa141", baudrate=9600)

s.write("text")
s.read()
s.readline()

PD: Si está usando Python 3, debería enviar bytes en lugar de cadenas (es decir, b"text")


1 para la respuesta № 2

Lo he hecho usando Perl en Linux, pero no tengo experiencia con Python o Mac. Te puedo dar algunos consejos para que busques.

Primero, en su programa Python, debe ingresar la dirección de dispositivo correcta para su puerto USB en serialPath De lo contrario sus datos no llegarán al Arduino. En Linux hice un lsusb después de conectar la placa y encontrar el nombre del dispositivo a partir de eso.

En tu código Arduino cámbialo para que sea

void loop()
{
if(Serial.available() > 0)
{
d = Serial.read();
Serial.println(d,BYTE);
}
}

de lo contrario, estarás tirando un montón de -1s si no hay datos.