serial libreria leer graficar example encender descargar datos con adquisicion python arduino pyserial pythoncard

libreria - python y arduino pdf



Cómo enviar un valor de Arduino a Python y luego usar ese valor (3)

Básicamente, simplemente enviaría un comando adecuado al Arduino, al igual que ya lo hace, pero luego espere a que Arduino le envíe algo; el extremo de pitón podría parecerse a esto

ser.write(''foo'') retval = ser.readline() # read a complete line (/r/n or /n terminated), #or you could use read(n) where n is the number of bytes you want (default=1) ping_data = retval.strip() # strip out the newline, if you read an entire line

por supuesto, eso te dará una cadena, probablemente quieras convertirla en int o float para usarla en los cálculos posteriores (usa int (ping_data) o float (ping_data) para cadenas, o struct.unpack en caso de que se trate de una secuencia de bytes que necesita descomprimir algo sano primero, pero todo depende de cómo represente los datos del sensor).

Estoy en el proceso de construir un robot que se controla de forma remota usando Python para enviar mensajes de control a través de Internet a través de una GUI simple.

He conseguido que parte de mi código funcione bastante bien, la GUI y los sistemas de control, pero estoy atascado. Estoy tratando de usar un sensor de ping paralaje para obtener información de distancias de un Arduino Mega , y enviar ese valor a mi script de control de Python para que se muestre en la GUI remota.

El principal problema que tengo es cómo integrar el código Python que usará el puerto COM ya establecido con Arduino y enviar un mensaje para decirle al Arduino que sondee el sensor ping y luego lo envíe a un programa Python que recibirá el valor, y luego déjame insertar ese valor en mi GUI.

Ya tengo este código para controlar el Arduino, y funciona con mi GUI simple.

import serial ser = serial.Serial(''/dev/ttyUSB0'', 9600) from PythonCard import model class MainWindow(model.Background): def on_SpdBtn_mouseClick(self, event): spd = self.components.SpdSpin.value def on_FBtn_mouseClick(self, event): spd = self.components.SpdSpin.value ser.write(''@'') ser.write(''F'') ser.write(chr(spd)) def on_BBtn_mouseClick(self, event): spd = self.components.SpdSpin.value ser.write(''@'') ser.write(''B'') ser.write(chr(spd)) def on_LBtn_mouseClick(self, event): spd = self.components.SpdSpin.value ser.write(''@'') ser.write(''L'') ser.write(chr(spd)) def on_RBtn_mouseClick(self, event): spd = self.components.SpdSpin.value ser.write(''@'') ser.write(''R'') ser.write(chr(spd)) def on_SBtn_mouseClick(self, event): spd = self.components.SpdSpin.value ser.write(''@'') ser.write(''S'') ser.write(''0'') def on_PngDisBtn_mouseClick(self, event): ser.write(''~'') ser.write(''P1'') ser.write(''p2'') app = model.Application(MainWindow) app.MainLoop()

Lo que realmente me gustaría hacer es mejorar el código anterior y agregar un botón para hacer clic y decirle a Python que envíe un mensaje al Arduino para verificar el sensor de ping y devolver el valor. Estoy muy alfabetizado con el código Arduino, pero recién comencé a jugar con Python en las últimas dos semanas.


Tal vez revise el proyecto Pyduino :

pyduino es una biblioteca que le permite comunicarse con las placas Arduino cargadas con el protocolo Firmata desde dentro de Python. Actualmente es compatible con la versión 2 del protocolo Firmata.


Primero, permítanme decir que las respuestas anteriores son buenas, útiles y directamente relevantes. Mis comentarios son más generales y se aplican a cualquiera que implemente un flujo de datos bidireccional hacia y desde un Arduino. La idea básica es diseñar su flujo de datos de modo que sea de tipo humano para los datos que van al bosquejo Arudino y legibles para los datos provenientes del bosquejo Arduino. Esto no siempre será posible, pero con frecuencia lo es.

La idea clave es ejecutar su boceto Arduino con el Monitor serie unas pocas veces. Puede encontrar el Monitor de serie en Herramientas en el menú IDE. También puede escribir Ctrl-Shift-M para invocar el monitor serial.

El monitor serial muestra lo que el bosquejo de Arduino le devuelve. Sin embargo, también te permite ingresar los datos que se envían al bosquejo de Arduino. En otras palabras, prueba y elimina errores en ambos lados del flujo de datos en serie, simplemente usando el Monitor en serie.

Mira lo que aparece. Frecuentemente será bastante útil suponiendo que su boceto intente enviar datos a través de Serial.print (). Algunas notas Asegúrese de que la velocidad en baudios configurada en el Serial Monitor coincida exactamente con la velocidad en baudios de su boceto (9600 es una buena opción en casi todos los casos).

La segunda nota es crítica. Al abrir el Monitor serie, se restablece la placa Arduino. Su boceto comienza de nuevo (siempre). Esto es algo bueno porque te da una carrera nueva cada vez. Tenga en cuenta que puede forzar un restablecimiento, simplemente estableciendo la velocidad en baudios en 9600 (incluso si ya es 9600). Esto le permite ejecutar muchas pruebas dentro del monitor serie sin tener que reiniciar el monitor serie cada vez