Temperatura con Arduino, DHT11 y python (II)

modulo-sensor-de-tempertura-y-humedad-dht11-para-arduino_MEC-O-3277967849_102012Una vez que ya hemos hecho que nuestro arduino nos «hable», ya solo nos queda «escuchar» lo que nos dice. Para ello vamos a utilizar Python para obtener la temperatura con Arduino.

Lo primero que tenemos que hacer es conectarnos con nuestro arduino (Arduino Uno R3), para ello, lo primero que haremos es descubrir en que puerto esta conectado nuestro arduino, este método esta explicado en un por anterior, así que no me detendré el ello.

Temperatura con Arduino

Una vez que ya sabemos en que puerto esta el arduino, pasamos a leer los datos que nos esta trasmitiendo. para la lectura de estos datos utilizaremos la librería PySerial. como con la búsqueda de puerto del arduino, ya esta explicado en otro post, por lo que tampoco me detendré en ello. Como siga así no explico nada :-).

Bueno, ahora es cuando llega la hora de saber lo que nos dice nuestro arduino. Como ya dije en la otra parte de este post, lo que nos envía el arduino es un registro formateado con los datos que nosotros queremos, por lo que solo tendremos que dividir el registro leído en los diferentes campos en que se compone el registro.

Cuando leamos el registro lo primero que hacemos es comprobar que el registro esta completo. Esto lo hago comprobando que los últimos caracteres del registros son los que establecimos como final de este «|f|» y que la longitud es la que definimos.

if sArduino.endswith("|f|") and len(sArduino) == cTamanoRegistro:

Si todo esta bien, pasamos a trocear el registro, si esta mal, pasamos de los datos leídos y volvemos a leer un nuevo registro. Si el sistema fuera para el control de sistemas críticos, este método no nos valdría, debido a la perdida de datos. Para mi caso me sobra, ya que esto va ha controlar la temperatura y humedad de un invernadero.

Para dividir el registro utilizamos el carácter que hemos utilizado en el arduino como separador de campos, en mi caso el carácter «|», y el numero de campos de que consta nuestro registro, en mi proyecto 2, uno para la temperatura y otro para la humedad (Módulo de Sensor de Humedad Módulo de Temperatura Digital). Y lo guardamos en sus correspondientes variables. El resto del registro lo podemos guardar en una variable temporal, pero hay que pasarle una variable, sino, nos daría error.

sHumedad, sTemp, sFin = sArduino.split("|", 2)

Con esto ya tenemos nuestro campos guardados en sus respectivas variables para poder procesarlas como queramos. Y ya esta, hemos escuchado al arduino y sabemos lo que nos esta diciendo.

Este es el proceso completo que he utilizado.

# Abrimos el puerto del arduino a 9600
    PuertoSerie = serial.Serial(str(self.pPuerto), 9600)
    PuertoSerie.timeout = 1 

    while not self.Terminar:
        sArduino = PuertoSerie.read(PuertoSerie.inWaiting())
	time.sleep(1)

	# leemos hasta que encontarmos el final de linea
	sArduino = PuertoSerie.readline()
	sArduino = sArduino.strip()

	if sArduino.endswith("|f|") and len(sArduino) == cTamanoRegistro:
	# Separamos los datos recibidos mediante el seprador "|"
	sHumedad, sTemp, sFin = sArduino.split("|", 2) 
	global tTempMax
	global tTempMin

	global tHumeMax
	global tHumeMin

	if int(sTemp) > tTempMax: 
            tTempMax = int(sTemp)
	if int(sTemp) < tTempMin:
	    tTempMin = int(sTemp)

	if int(sHumedad) > tHumeMax:
	    tHumeMax = int(sHumedad)
	if int(sHumedad) < tHumeMin:
	    tHumeMin = int(sHumedad)

    else:
        PuertoSerie.close()
        time.sleep(5)

Y esto es todo para obtener la temperatura con Arduino, si tienes alguna duda, o si ves que se puede mejorar, que se puede mejorar y mucho, no te cortes y deja tu comentario.