- Instalación del AWS IOT Device SDK para Python en Raspberry Pi:
- Diagrama de circuito:
- Programando su Raspberry Pi:
- Probando el programa Python a través de la ventana Shell:
- Trabajando:
Raspberry Pi siempre ha sido la primera opción para desarrollar aplicaciones basadas en IoT si se involucra algún nivel de computación. Con la flexibilidad de Python y la sólida comunidad de desarrolladores, es muy fácil recopilar, registrar, analizar o informar un conjunto de datos utilizando Pi. En este tutorial aprenderemos cómo combinar el poder de Raspberry Pi con el servicio Amazon AWS para publicar datos en línea en Internet.
En este tutorial, usaremos el sensor DHT11 para leer el valor de temperatura y humedad, luego nos conectaremos al servicio AWS IOT y actualizaremos los valores del sensor usando AWS IOT SDK. Luego, estos datos se pueden visualizar en la consola de Amazon IOT para asegurarse de que estamos publicando los datos en Internet.
También puede usar AWS Elastic Search Service para buscar estos valores de sensor y almacenarlos en una base de datos y luego usar el servicio Kibana Dashboard para visualizar los datos del sensor como un gráfico bien trazado. Interesante suficiente? !!! Entonces, comencemos…
Prerrequisitos:
Este tutorial asume que ya ha creado su cuenta gratuita de AWS y conoce los conceptos básicos sobre el servicio AWS IoT, como crear una cosa, un certificado, una política y publicar valores con ella. De lo contrario, lea el siguiente tutorial.
- Introducción a Amazon AWS IOT con MQTT.fx
También asume que sabe cómo conectar un sensor LCD y DHT11 a Raspberry Pi y que las bibliotecas para hacer lo mismo ya están instaladas en su Pi. De lo contrario, continúe con el siguiente tutorial.
- Interfaz DHT11 con Raspberry Pi
Al final del tutorial anterior, habría creado una cosa en AWS-IOT y también debería tener la dirección del agente junto con los certificados necesarios para acceder a su cosa. También asumimos que su Raspberry pi ya está configurada con un sistema operativo y está conectada a Internet. Con esto en su lugar, procedamos con el tutorial. Si es nuevo en Raspberry Pi, primero consulte Introducción a Raspberry Pi.
Instalación del AWS IOT Device SDK para Python en Raspberry Pi:
Para utilizar el servicio AWS en Pi, podemos instalar cualquiera de los dos SDK. Uno es el SDK de JavaScript que usa JavaScript como lenguaje de programación y el otro es el SDK de Python, que obviamente usa Python como lenguaje de programación. Aquí estamos eligiendo Python como nuestro SDK ya que estamos un poco más cómodos con Python que con JavaScript.
La información completa sobre AWS IOT SDK está disponible en su página de GitHub.
Paso 1: Para instalar el SDK en su Pi, abra el terminal y escriba el siguiente comando
clon de git
Paso 2: Esto debería haber instalado el directorio aws en su Pi, ahora navegue hacia él usando el siguiente comando.
cd aws - iot -dispositivo- sdk -python
Paso 3: dentro del directorio, instale el archivo de instalación usando la línea a continuación
instalación de python setup.py
Diagrama de circuito:
En el lado del hardware tenemos una Raspberry Pi conectada a un Sensor DHT11 y una pantalla LCD. El DHT11 se usa para obtener el valor de temperatura y humedad y la pantalla LCD se usa para mostrar los valores y la información de eliminación de errores. El diagrama de circuito para el mismo se muestra a continuación.
Tanto el sensor LCD como el DHT11 funcionan con un suministro de + 5V, por lo que usamos los pines de 5V en la Raspberry Pi para alimentar ambos. Se usa una resistencia pull up de valor 1k en el pin de salida del sensor DHT11, si está usando un módulo, puede evitar esta resistencia.
Se agrega un potenciómetro de 10k al pin Vee de la pantalla LCD para controlar el nivel de contraste de la pantalla LCD. Aparte de eso, todas las conexiones son bastante sencillas. Pero tome nota de qué pines GPIO está utilizando para conectar los pines, ya que los necesitaremos en nuestro programa. La siguiente tabla debería permitirle averiguar los números de pin GPIO.
Utilice la tabla y realice las conexiones de acuerdo con el diagrama del circuito. Usé una placa de pruebas y cables de puente para hacer mis conexiones. Como usé un módulo, lo conecté directamente a Raspberry Pi. Mi hardware se ve así a continuación
Programando su Raspberry Pi:
En nuestro programa de Python tenemos que leer el valor de temperatura y humedad, mostrarlo en la pantalla LCD y también publicar ambos valores en el IOT de Amazon que ya hemos creado en el tutorial anterior. Así que asegúrese de haber creado la cosa y de tener los tres archivos clave y la dirección del corredor de la cosa que ha creado.
En nuestro programa python tenemos que vincular los tres archivos clave para que Raspberry Pi pueda acceder a publicar valores en lo nuestro. Así que copie los tres archivos clave y péguelos en el escritorio de su Raspberry pi, ya que necesitaremos su dirección de ruta en nuestro programa.
El programa de Python completo se puede encontrar en la parte inferior de esta página, puede usar el programa después de editar la dirección del corredor y los directorios de ruta de acuerdo con lo que creó. Más abajo, he explicado el código en pequeños fragmentos.
Comenzamos importando las bibliotecas necesarias para nuestro proyecto. Las tres bibliotecas principales son AWS SDK, la biblioteca LCD y la biblioteca DHT, asegúrese de haber instalado las tres su Pi. El tiempo y la fecha y hora de la biblioteca se instalan de forma predeterminada.
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient #Import from AWS-IoT Library import time # Para crear un retraso desde la fecha y hora de importación, datetime #Para obtener la fecha y la hora, importe Adafruit_CharLCD como LCD #Import LCD library import Adafruit_DHT #Import DHT Library for sensor
En la siguiente línea, debemos proporcionar los detalles de la cosa, como la dirección del corredor, el nombre del cliente y la ruta al certificado y los archivos clave. Aquí he usado el nombre del cliente como new_Client , puede usar el mismo nombre o el que elija. La dirección del corredor debe cambiarse a la dirección de la cosa que creó y el directorio de la ruta también debe cambiarse de acuerdo con su cosa. Aparte de estas 2 cosas, no tiene que cambiar nada en las siguientes líneas.
myMQTTClient = AWSIoTMQTTClient ("new_Client") myMQTTClient.configureEndpoint ("qwert1234567yuio89.iot.us-east-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/ home / pi / Desktop certificados / CA32_pemhing certificados "/ home / pi / Desktop / ESP32_Thing certificados / private.pem.key", "/ home / pi / Desktop / ESP32_Thing certificados / certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (-1) # Cola de publicación sin conexión infinita myMQTTClient. configureDrainingFrequency (2) # Drenaje: 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 seg myMQTTClient.configureMQTTOperationTimeout (5) # 5 seg
A continuación, tenemos que especificar los detalles del pin de nuestra conexión. El número de pin GPIO de cada pin se asigna a su nombre respectivo. Aquí hemos utilizado el sensor DHT en el pin 17 y la pantalla LCD en modo de 4 bits. El código para el mismo se muestra a continuación.
sensor_name = Adafruit_DHT.DHT11 # estamos usando el sensor DHT11 sensor_pin = 17 # El sensor está conectado a GPIO17 en Pi lcd_rs = 7 #RS de LCD está conectado a GPIO 7 en PI lcd_en = 8 #EN de LCD está conectado a GPIO 8 en PI lcd_d4 = 25 # D4 de LCD está conectado a GPIO 25 en PI lcd_d5 = 24 # D5 de LCD está conectado a GPIO 24 en PI lcd_d6 = 23 # D6 de LCD está conectado a GPIO 23 en PI lcd_d7 = 18 # D7 de La pantalla LCD está conectada a GPIO 18 en PI lcd_backlight = 0 #LED no está conectado, así que asignamos a 0
Luego inicializamos la pantalla LCD y mostramos un pequeño mensaje de introducción en la pantalla LCD. Después de eso, intentaremos conectarnos con AWS utilizando la dirección del agente y los archivos clave ingresados anteriormente. Si la conexión es exitosa, la pantalla LCD mostrará " Conectado a AWS " o lo intentará durante 10 segundos y, si falla, mostrará un mensaje de error. Si recibe un mensaje de error, asegúrese de haber creado la cosa correctamente y haberla vinculado correctamente con el código. Siempre puede volver al tutorial anterior para ver si ha creado la cosa correctamente en AWS.
if time.time () <connection_time: #intente conectarse a AWS durante 10 segundos myMQTTClient.connect () myMQTTClient.publish ("DHT11 / info", "connected", 0) print "MQTT Client connection success!" lcd.message ('Conectado a \ n cosa de AWS') #si está conectado de otro modo: imprimir "Error: Verifique los detalles de AWS en el programa" lcd.message ('Error: \ nDetalles no válidos') #si no está conectado
Una vez establecida la conexión, entramos en el infinito , mientras que bucle para publicar el valor del tiempo, la temperatura y la humedad como una carga útil. La carga útil aquí siempre debe ser una cadena en formato JSON. Entonces, primero estamos leyendo la fecha y hora actual y guardándola en una variable usando las siguientes líneas
now = datetime.utcnow () #obtener fecha y hora current_time = now.strftime ('% Y-% m-% dT% H:% M:% SZ') #obtener la hora actual en formato de cadena
Luego leemos los valores de humedad y temperatura del sensor DHT11 y lo mostramos en una pantalla LCD. La humedad y temperatura variables mantendrán el valor de humedad y temperatura respectivamente
humedad, temperatura = Adafruit_DHT.read_retry (sensor_name, sensor_pin) #read from sensor
y guardar los valores respectivos en temperatura y humedad varibale
lcd.clear () #Borrar la pantalla LCD lcd.message ('Temp =%.1f C'% temperature) # Mostrar el valor de la temperatura lcd.message ('\ nHum =%.1f %%'% humedad) #Display el valor de Humedad time.sleep (2) #Espere 2 segundos y luego actualice los valores
Como se dijo anteriormente, la carga útil debe tener la forma de una cadena con llaves alrededor. Agregamos el valor de fecha, hora, temperatura y humedad después de convertir la variable en cadenas como se muestra a continuación.
#prepare la carga útil en formato de cadena payload = '{"marca de tiempo": "' + hora_actual + '", "temperatura":' + str (temperatura) + ', "humedad":' + str (humedad) + '}'
Finalmente, una vez que la carga útil esté lista, tenemos que publicarla en el cliente MQTT. Esto se puede hacer usando el comando myMQTTclient.publish . Mientras publicamos algo, también deberíamos darle un nombre, aquí lo he llamado DHT11 / data pero puedes nombrarlo como quieras. Pero asegúrate de recordar el nombre, ya que tendremos que suscribirnos desde lo nuestro para ver los datos.
Probando el programa Python a través de la ventana Shell:
Una vez que el programa esté listo, ejecútelo con la opción que elija. He usado Python IDE para iniciar el programa en la ventana del shell. Si todo está bien, debería obtener una conexión de mensaje exitosa y toda la carga útil debería mostrarse en la ventana. Puede comprobar si los valores de temperatura y humedad se leen correctamente. La carga útil se actualizará cada 5 segundos. La ventana de shell se verá más abajo
Si tiene algún problema, asegúrese de haber proporcionado los detalles clave correctos y la dirección del corredor, también verifique si la cosa se puede conectar usando el software MQTT.fx. Si el shell muestra el éxito de la conexión del cliente MQTT y se cuelga allí, significa que el sensor DHT11 no responde, compruebe si se ha conectado al pin correcto y el sensor funciona.
Trabajando:
Una vez que inicie el programa y obtenga los detalles anteriores en la ventana del shell, significa que el programa está respondiendo correctamente y los valores se están cargando en el servidor de Amazon AWS. También puede observar la pantalla LCD para verificar si dice Publicado en AWS-IoT cada 5 segundos, como se muestra a continuación.
Podemos ingresar a la aplicación MQTT.fx y suscribirnos al tema DHT11 / data . Entonces deberíamos poder obtener todos los datos que está publicando la Raspberry Pi. Estos datos también se actualizarán cada 5 segundos; su pantalla MQTT se verá así a continuación
Como puede ver, la carga útil se recibe en el software MQTT como se resalta en azul. También puede ver el video a continuación para saber cómo funciona el proyecto. Dado que ahora tenemos nuestros datos en Internet, podemos usarlos con otras herramientas proporcionadas por Amazon como Elastic Search y Lambda para guardar los datos en una base de datos o visualizarlos luego en un gráfico. Hay muchas más aplicaciones, en función de cómo tenemos que beneficiarnos de los datos.
Espero que haya entendido el tutorial y haya disfrutado construyendo algo similar, si tiene algún problema para hacerlo, publíquelo en la sección de comentarios a continuación o use los foros para obtener ayuda técnica.