Tecnologías IoT, Hands on y MVP (27/4/2019)
Contingut
27/4/2019
ESP8266
Conceptos básicos
Código ESP8266_06c_TestPins.ino para leer y escribir parámetros al Arduino desde el ordenador, usando el propio IDE de Arduino, GtkTerm (desde GNU/Linux) o putty (desde Windows).
Conexión a diversas redes WiFi
Conexión a diversas redes WiFi
Uso de UDP en el ESP8266
Código UDP para el ESP8266 pudiendo usar múltiples redes WiFi
Aplicación (.apk) para Android desarrollada en Qt5 para enviar y recibir datagramas UDP
Código de la aplicación para Android desarrollada en Qt5 para enviar y recibir datagramas UDP
Captura de pantalla de flujos NodeRED usando UDP para conectarse al ESP8266
Código para importar al NodeRED, usando UDP para conectarse al ESP8266
Uso de ModBus TCP en el ESP8266
Vídeo "Understanding Modbus Serial and TCP/IP"
Uso de ModBus TCP en Python comunicando con el ESP8266
Desde el terminal hemos de cargar la biblioteca pyModbusTCP usando pip:
sudo pip3 install pyModbusTCP
Simulación de servidor ModBus TCP desde Python. Para solucionar el problema de ejecutar en GNU/Linux un archivo de Python hecho en Windows.
Código ModBus TCP para ESP8266
Cliente ModBus TCP en Python para leer la LDR del ESP8266
Cliente ModBus TCP en Python para escribir y leer el color rojo del led tricolor del ESP8266
Uso de nodos ModBus TCP en el NodeRED comunicando con el ESP8266
La mayoría de contribuciones ModBusTCP en NodeRED preguntan cíclicamente al dispositivo servidor. La excepción es node-red-contrib-modbustcp-no-pooling. Debido a que no está actualizado desde hace más de dos años, estos nodos no funcionan correctamente en versiones modernas de NodeRED. Una solución es usar los códigos desarrollados en Python en el apartado anterior y hacerlos servir desde NodeRED.
Captura de pantalla de flujos NodeRED usando Python para ModBus TCP
Código para importar al NodeRED, usando Python para ModBus TCP
Grupo de códigos en Python adaptados para funcionar una sola vez cuando son llamados
Ejercicios de ModBus TCP con el ESP8266
- Modificar el código del ESP8266 para añadir los coils de control de los leds verde y azul del led tricolor del ESP8266
- Hacer un cliente ModbusTCP desde Python que haga una secuencia semafórica
- Añadir al tablero de control del NodeRED el control del led verde y azul
Uso de MQTT en el ESP8266
Código MQTT para ESP8266 usando el IDE de Arduino
Más información sobre el protocolo MQTT
Configuración de MQTT Dash en Android
Ejercicios de MQTT con el ESP8266
- Uso del panel de control del NodeRED y MQTT
Raspberry
ESP32
Código de prueba de los 4 botones y los 4 leds
I2C
Explicación del I2C (o TWI ) entre las páginas 57 y 68
Código para escanear las direcciones de todos los dispositivosus I2C conectados: esp32_i2cScanner_02.ino.
0x20 - 0x27 (b0: 3 b1: 2 b2: 1): PCF8574 (de un tipo) 0x38 - 0x3F (b0: 3 b1: 2 b2: 1): PCF8574 (de otro tipo) 0x3C: OLED 0x48: ADS1115 0x50 y 0x68: RTC 0x69: GY-521 (Cable verde entre AD0 y VCC. Para evitar que sea 0x68 y colisione con el RTC) 0x76: BME280
Puede haber conflicto de direcciones entre el PCF8574 y la pantalla OLED.
ADC - ADS1115
El chip ADS1115 tiene 4 canales de 16 bits. Las lecturas se hacen mediante el bus I2C.
En la placa lila PLB-IoT-I2C, cuando la placa ADS1115 está conectada, una entrada lee la tensión de la batería del RTC y las otras tres leen el valor de los potenciómetros conectados a la placa.
Código de pruebas para el ADC ADS115
OLED - SSD1306
Demostración básica de uso de la pantalla OLED
RTC - DS1307
RTC: Real Time Clock
Reloj usando RTC y pantalla OLED
BME280
Estación metereológica (temperatura, humedad y presión atmosférica)
Periféricos I2C integrados a la placa PLB-IoT-I2C
MQTTS
Configuració de MQTTS a un servidor remot basat en Debian 9
Código para conectar el ESP32 a MQTTS
Almacenaje y visualización de datos IoT
Vídeo #255 Node-Red, InfluxDB, and Grafana Tutorial on a Raspberry Pi de Andres Spiess
Visualización y control en NodeRed
Visualización de una generación de números aleatorios
Nodos para una generación de números aleatorios
Código para una generación de números aleatorios
Bases de datos de series temporales
Proceso de instalación de la base de datos de series temporales InfluxDB (en la metadistribución basada en Debian 9 no viene instalado):
curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add - source /etc/os-release test $VERSION_ID = "9" && echo "deb https://repos.influxdata.com/debian stretch stable" | sudo tee /etc/apt/sources.list.d/influxdb.list sudo apt-get update && sudo apt-get install influxdb influxdb-client sudo systemctl unmask influxdb.service sudo systemctl start influxdb
Fuente: Instalación de InfluxDB
Creación de base de datos, usuarios e inserción de valores:
influx > CREATE USER "admin" WITH PASSWORD 'internetcoses' WITH ALL PRIVILEGES > create database aula206 > show databases > use aula206 > insert Temperatura value=24.5 > insert Pressio value=1000.0 > insert Humitat value=50.0 > CREATE USER "iot" WITH PASSWORD 'iot' > GRANT ALL ON "aula206" TO "iot" > CREATE USER "convidat" WITH PASSWORD 'benvingut' > GRANT READ ON "aula206" TO "convidat" > show users > quit
Cambio de configuración para acceder siempre con usuario y contraseña:
sudo geany /etc/influxdb/influxdb.conf
en la líniea 259 quitar el símbolo # y cambiar false a true
auth-enabled = true
y una vez hechos los cambios, reiniciamos el servicio:
sudo systemctl stop influxdb sudo systemctl start influxdb
Acceso mediante usuario y contraseña:
influx -username iot -password iot > show databases > use aula206 > select * from Temperatura > select * from Humitat > insert Pressio value=1000.20 > select * from Pressio name: Pressio time value ---- ----- 1556103462149266855 1000 1556104229514255364 1000.2 > delete from Pressio where time=1556104229514255364 > select * from Pressio name: Pressio time value ---- ----- 1556103462149266855 1000 > quit
influx -username convidat -password benvingut > use aula206 > select * from Pressio > quit
Nodos InfluxDB en NodeRed
Instalación de los nodos InfluxDB para NodeRED (en la metadistribución basada en Debian 9 ya viene instalado)
Iniciar a un valor el campo nAleat de la base de datos local aula206 creada anteriormente con InfluxDB
influx -username iot -password iot > use aula206 > insert nAleat value=20.0 > quit
Visualización del flujo NodeRed con un nodo InfluxDB
Configuración del nodo InfluxDB de salida
Configuración del servidor InfluxDB para ser usado por el nodo de salida
Una vez puesto en marcha (botón ON apretado) los datos se almacenan a InfluxDB. Para parar la alimentación de la base de datos apretar el botón OFF. Paralelamente se pueden ver los datos introducidos al campo nAleat en tiempo real.
influx -username iot -password iot > use aula206 > select * from nAleat name: nAleat time value ---- ----- 1556191773053726623 20 1556192308275283453 24.5 1556192309269114244 15.5 1556192310275315326 19.2 1556192311278913648 15.8 1556192312279631340 20.2 1556192313281601350 18.2
Visualización en Grafana
Instalación de Grafana en Debian (en la metadistribución basada en Debian 9 ya viene instalado. Por defecto, al acceder a Grafana, el usuario admin tiene la contraseña admin y la primera vez que se accede pide cambiarla. La contraseña de admin en vuestra máquina virtual es iot1234).
Para saber si Grafana está activo:
systemctl status grafana-server
En caso de que no esté activo:
sudo systemctl start grafana-server
Para hacer que Grafana se inicie al arrancar la máquina virtual:
sudo systemctl daemon-reload sudo systemctl enable grafana-server.service
Para acceder al Grafana, introducir en un navegador de la máquina host la IP de la máquina virtual acabado por :3000. Por ejemplo http://174.105.0.59:3000
Al acceder hay un icono Add data source. Después de clicarlo seleccionar InfluxDB. Como URL escribir http://localhost:8086. Como database escribir aula206. Como User escribir iot y como Password escribir iot.
Apretar el botón Save & Test. Si todo ha ido bien aparecerá Data source is working.
El siguiente paso es añadir un panel de control. En Home hay el icono New dashboard. En New Panel seleccionar la opción Choose Visualization. Seleccionar Graph.
Opciones:
Visualization / Stacking & Null value -> Null value connected
Visualization / Axes / Left Y / Unit -> Celsius (ºC)
Visualization / legend / Values -> Seleccionar Min, Max, Avg y Current
Queries / select measurement -> nAleat
General / Title -> Números aleatorios
General / Transparent -> Seleccionado
Al finalizar seleccionar el icono Save dashboard
Ejercicios de supervisión de datos usando NodeRed, InfluxDB y Grafana
- Visualizar en Grafana el valor de la LDR de un módulo witty ESP8266. Publicación de datos cada dos segundos mediante MQTT, gestión en NodeRed capturándolos y enviándolos a una base de datos temporal InfluxDB. Visualizar en Grafana (gráfica y visualizador de tipo reloj) los valores de la LDR con un refresco cada 5 segundos.
- Visualizar en Grafana el valor de temperatura, humedad y presión atmosférica de un sensor BME280 conectado por el bus I2C a un ESP32. Publicación de datos cada 10 segundos mediante MQTTS, gestión en NodeRed capturándolos y enviándolos a una base de datos temporal InfluxDB. Visualizar en Grafana (gráfica y visualizador de tipo reloj) los valores de la temperatura, humedad y presión atmosférica con un refresco cada 30 segundos.
Pantalla táctil Nextion
Enlace a material para trabajar con la pantalla táctil Nextion