Archivo de la categoría: Python

Como descubrir el puerto arduino con Python

[singlepic id=20 w=320 h=240 float=right]Cuando desconecto y vuelvo a conectar el Arduino (Arduino Uno R3), el Ubuntu dependiendo si se ha enterado o no que lo he desconectado, al volver a conectarlo me lo instala en otro puerto, con lo que tengo que decirle al programa cual es el nuevo puerto. Para solucionar esto y aprovechando la librería PySerial y la función «try», podemos descubrir donde esta instalado el puerto Arduino. Para ello solo tenemos que probar los puertos que posiblemente pueda estar utilizando el Arduino. Si al intentar abrir el puerto arduino nos da error, eso es que el Arduino no esta instalado en ese puerto. Gracias a la función «try», controlamos ese error que se ha producido y podemos seguir con el funcionamiento normal de nuestro programa. Cuando al abrir el puerto no nos da error, eso quiere decir que en ese puerto hay algún dispositivo instalado. si solo tenemos el Arduino instalado ya tendremos el puerto Arduino y podemos salir del bucle y guardar el puerto.

Descubrir el puerto arduino

Código de ejemplo en Python:

#! /usr/bin/env python

# Importamos la libreria PySerial
import serial

# Varialbe para saber si hemos encontrado el puerto o no
bEncontrado = False
# Hacemos un bulce para recorrer los puertos que queremos comprobar
for iPuerto in range(0, 4):
    try:
        # Puerto que vamos a probar
        PUERTO = '/dev/ttyACM' + str(iPuerto)
        # Velocidad 
        VELOCIDAD = '9600'
        # Probamos ha abrir el puerto
        Arduino = serial.Serial(PUERTO, VELOCIDAD)
        # si no se ha producido un error, cerramos el puerto
        Arduino.close()
        # cambiamos el estado del la variable para saber si lo hemos encontrado
        bEncontrado = True
        # Salimos del bucle
        break
    except:
        # Si hay error, no hacemos nada y continuamos con la busqueda
        pass

# Si encontramos el puerto?
if bEncontrado:
    # Mostramos el puerto donde esta el arduino
    print('el puerto del arduino es: ' + '/dev/ttyACM' + str(iPuerto))
else:
    # Si no lo encotramos mostramos el mensaje de no encontrado
    print('No se ha encontrado Ardunio')

Aunque este código es de Python, el portarlo a cualquier otro lenguaje es muy sencillo, por lo básico de su planteamiento, lo único que podrida complicar el código seria las funciones que se tengan que utilizar para la apertura del puerto serie, por lo demás, el resto de funciones están disponibles en cualquier lenguaje.

Conectarse a MySQL con Python

Siguiendo con el Python, he estado probando como funciona la conexión con bases de datos. Ya que tengo un servidor con MySQL instalado he probado con él.

Para poder conectar el Python con el servidor MySQL nos hace falta instalar la librería que hará de intermediario entre el MySQL y Python, por la red hay varias, pero me he decantado por la propia que distribuye Oracle. Elegimos el fichero para nuestro sistema y lo instalamos. Para Ubuntu / Debian podemos bajar el ficheros de la pagina o instalarlo a través del repositorio de Ubuntu, con el siguiente comando.

sudo apt-get install python-mysql.connector

Instalada la librería ya solo queda programar el código en Python, para ello importamos la librería.

import mysql.connector

Crearemos un variable que sera la encargada de manejar la conexión con el servidor de MySQL. Esto se puede hacer de dos maneras, poniendo toda los datos de la conexión en la función, o utilizar cuna variable con los datos como intermediaria.

1º Forma

conexion_mysql = mysql.connector.connect(user='usuario', password='contraseña', host='DireccionServidor', database='BaseDeDatos')

2º Forma, para decirle a la función que los datos están dentro de la variable hay que poner «**» (2 asteriscos) delante de la variable.

# Variable con la configuracion de la conexion
config_mysql = {
    'user': 'usuario',
    'password': 'contraseña',
    'host': 'DireccionServidor',
    'database': 'BaseDeDatos',
}

# conectamos al servidor MySql
conexion_mysql = mysql.connector.connect(**config_mysql)

Si esto no ha producido ningún error, ya estaremos conectados al servidor de MySQL. Ahora solo nos queda empezar ha trastear con las tablas. Para ello tendremos que crear otra variable que se encargara de realizar las consultas SQL y contendrá la información para esa consulta.

cursor = conexion_mysql.cursor()

Una vez creada esta variable, solo nos queda pasarle la sentencia de SQL que queramos ejecutar.

cursor.execute("SELECT Campo1, Campo2, Campo3 FROM Tabla1")

Ahora ya tenemos la información en la variable, y podremos hacer con ella lo que nos de la gana, para mostrar todos los datos de la consulta, por ejemplo, solo tendríamos que hacer lo siguiente:

for (Campo1, Campo2, Campo3) in cursor:
    print("Campo1: " + Campo1 + ", Campo2: " + Campo2 + ", Campo3: " + Campo3)

Una vez que ya hemos obtenido la información deseada, solo nos queda cerrar las conexiones, tanto de la variable que se encarga de procesar las consultas de SQL, como la encargada de la conexión con el servidor.

# Cerramos la variable encargada de las consultas
cursor.close()

# Cerramos la conexión
conexion_mysql.close()

Y con esto ya valdría para conectarnos ha una base de datos en MySQL y consultar la información de una tabla.

 

Código completo del ejemplo.

#! /usr/bin/env python

# Importamos el conector de MySQL
import mysql.connector

# Variable con la configuracion de la conexion
config_mysql = {
    'user': 'usuario',
    'password': 'pass',
    'host': 'localhost',
    'database': 'prueba',
}

# conectamos al servidor MySql
conector = mysql.connector.connect(**config_mysql)

# cursor, clase para el manejo del SQL ???
cursor = conector.cursor()

# Creamos la consulta SQL
query = ("SELECT Nombre, Telefono FROM prueba")

# Ejecutamos la consula SQL
cursor.execute(query)

# Mostramos todos los datos de la consulta
for (Nombre, Telefono) in cursor:
    print("Nombre: " + Nombre + ", Telefono: " + Telefono)

# Cerramos cursor
cursor.close()

# Cerramos la conexion
conector.close()

 

 

 

Leer el puerto serie de Arduino con Python y PySerial

[singlepic id=20 w=320 h=240 float=right]Desde hace ya un tiempo he hoy buenos comentarios sobre Python y lo «fácil» que es programar con él, su potabilidad entre sistemas, etc. Me he puesto ha ello, y la verdad es que es muy fácil programar con él, después de un rato, se le coge el tranquillo a esa forma tan peculiar de escribir el código que tiene, solo utilizando tabulación, sin puntos y comas, llaves o cualquier otra forma de indicar el inicio y el fin de las lineas,  a la declaración de las variables, mejor dicho a la no declaración, la formar de trabajar con las funciones, etc. En general es un lenguaje muy fácil de trabajar y encima puedes hacer verdaderas locuras con el. Me ha recordado mucho al Basic que aprendí ya hace muchas lunas.

Para empezar, que mejor que trabajar con Arduino. Lo primero que he hecho es leer del puerto serie la información que escribe el Arduino.

Para el Arduino solo le he metido un código muy simple, genera un numero aleatorio, de -100 a 100,  y lo escribe en el puerto serie.

Codigo para Arduino

int x = 0;    // variable

void setup() {
  Serial.begin(9600);      // abre el puerto serie a 9600 bps:    
}

void loop() {

  Serial.println(random(-100, 100)); // Escribe en el puerto un numero aleatorio de -100 a 100
  delay(2000);
}

Y en Python lo que he hecho es aprovechar la librería PySerial que hay para Python para leer el puerto y leer los datos que escribe el Arduino.  Para instalar la librería PySerial es muy fácil, solo tenemos que seguir los pasos que hay en la propia pagina de PySerial.

El código en Python es muy simple, este mismo código en Java, me llevo bastante tiempo pelearme con la librería RxTx, en cambio en Python es tan sencillo como escribir el siguiente código.

Código Pytho

#!/usr/bin/python

# Importamos la libreira de PySerial
import serial

# Abrimos el puerto del arduino a 9600
PuertoSerie = serial.Serial('/dev/ttyACM0', 9600)
# Creamos un buble sin fin
while True:
  # leemos hasta que encontarmos el final de linea
  sArduino = PuertoSerie.readline()
  # Mostramos el valor leido y eliminamos el salto de linea del final
  print "Valor Arduino: " + sArduino.rstrip('\n')

Después de este código tan simple, ya tenemos un programa que nos lee los datos del puerto serie y lo muestra en pantalla. Esto con cualquier otro lenguaje te lleva un buen rato. Esto no me ha llevado mas de media hora de buscar por internet como se programa en Python y como funciona la libreria PySerial.

Que opinas de ello???