Tabla de contenido:

ESP32 Scraper-parser-mailer y Live Mapper: 4 pasos (con imágenes)
ESP32 Scraper-parser-mailer y Live Mapper: 4 pasos (con imágenes)

Video: ESP32 Scraper-parser-mailer y Live Mapper: 4 pasos (con imágenes)

Video: ESP32 Scraper-parser-mailer y Live Mapper: 4 pasos (con imágenes)
Video: How to Solve CORS Error in 2 min [WATCH THIS] | CORS Explained in EASY Way 2024, Noviembre
Anonim
ESP32 Scraper-parser-mailer y Live Mapper
ESP32 Scraper-parser-mailer y Live Mapper
ESP32 Scraper-parser-mailer y Live Mapper
ESP32 Scraper-parser-mailer y Live Mapper
ESP32 Scraper-parser-mailer y Live Mapper
ESP32 Scraper-parser-mailer y Live Mapper

Hola Mundo! ¡Este es mi primer Instructable! Soy Marco de Grosseto Italia, no soy un desarrollador, no soy un ingeniero electrónico, pero soy un guía ambiental en nuestro parque natural local (parque natural de Maremma).

En mi cooperativa trabajamos mucho con recorridos en canoa, recorridos naturalistas y tranquilos en el río Ombrone para la observación de aves y un poco de relajación.

Pero el río Ombrone también es famoso por su tipo de caudal característico: desde el verano "cero" hasta el caudal otoño-invierno de varios miles de metros cúbicos de agua por hora.

Por esta razón, el río Ombrone es monitoreado constantemente por el excelente servicio hidrométrico regional (SIR), con un sitio fantástico que pone a disposición los datos recolectados.

Ahora estamos esperando el final de la temporada y las primeras inundaciones de otoño para retirar el muelle y las canoas …

Pero, ¿cuándo empezamos a hablar de scraping, parsing, esp32ing, etc.? un momento mas

Durante el bloqueo italiano, hice la primera lección de parpadeo de arduino, genial … y seguí jugando con sensores y arduino C. ¡Así que si encuentra mi código crudo o lleno de vacíos lógicos sin sentido, considere esto!

Hice muchas cosas solo para perder el tiempo, pero con este riesgo constante de inundaciones decidí hacer algo genial: gracias a un ESP32 con factor de forma arduino (Wemos d1 r32) que mantuve envuelto durante meses porque pensaba que era "difícil"., Realmente tuve muchas satisfacciones:

He hecho un scraper que trae y analiza datos de una página web SIR y muestra las variables obtenidas en una pantalla LCD i2c barata, y como brillo-frecuencia parpadeando en algunos leds en un mapa realista.

por lo que si viene una inundación desde la ladera de la montaña, seré advertido por el aumento de brillo (cambio de nivel) y por la frecuencia creciente (cambio de nivel en una hora) de los leds en el mapa … ¡pero el ESP32 también puede enviar correos electrónicos! Entonces, ¿por qué no hacer una función para esto?

¡Vamos a ver el código de abajo ahora!

Suministros

  • Placa basada en ESP32: he usado Wemos d1 r32 porque tiene pines hembra y es más fácil de manejar
  • leds, el rojo es más "alerta como"
  • I2C 16x2 LCD es solo uno azul, pero el verde es más elegante
  • tablero de corcho barato
  • noche (opcional)

Paso 1: el código

El código
El código
El código
El código

en línea solo he encontrado tutoriales vaporosos que utilizan sitios externos para analizar datos, así que intenté probar la potencia de los núcleos esp32 analizando los datos directamente en la placa … ¡sin problemas!

así que si ves la fuente de la página SIR puedes entender cómo funciona: afortunadamente usan valores "separados por comas como" para mostrar sus datos, así que con este código busco una estación hidrográfica (código TOSnumber) y cuento el número de comas (como separador) que contienen el valor que quiero (y almacenarlo como variable), luego reasignarlo como brillo del LED y tiempo en milisegundos para el "nivel de variación" parpadeando

El núcleo de este raspador está en la pestaña

ind = payload.indexOf ("TOSstation_number"); // obtener la posición (ind) desde donde empezar a contar las comas

String my_var = getValue_ind (carga útil, ',', 8); // donde 8 es la octava celda definida por comas (separador)

"carga útil" es lo que obtengo de la web previamente limpiado de "citas" y "& nbsp";

y la función getValue_ind que se encuentra en la pestaña principal

String getValue_ind (datos de cadena, separador de caracteres, índice int) {

int encontrado = 0; int strIndex = {0, -1}; int maxIndex = data.length () - 1; for (int i = ind; i <= maxIndex && found <= index; i ++) {// desde la posición ind if (data.charAt (i) == separator || i == maxIndex) {found ++; strIndex [0] = strIndex [1] + 1; strIndex [1] = (i == maxIndex)? i + 1: i; }} retorno encontrado> índice? data.substring (strIndex [0], strIndex [1]): ""; }

adaptado de

el código pide la página cada 15min, es de 44Kb, no creo que sea una gran carga para los servidores y para el ESP32.. Para evitar demasiados desplazamientos he dividido el programa en diferentes funciones, lee los comentarios

aquí el código de pegar es realmente un lío … puse los archivos.ino directamente

He utilizado la función de pestañas del IDE de arduino, por lo que tengo diferentes archivos.ino

esta es la última versión del código (?), hay muchos esfuerzos, ¡así que agradeceré cualquier sugerencia!

- para enderezar el brillo del led para valores bajos, - para la función "map" para variables de punto flotante - para el uso del segundo núcleo en el ESP32, - para entender cómo imprimir un correo html desde una cadena con sprintf Pasé mucho "tiempo de nerding" así que lea los comentarios en los archivos.ino o en github.

como configuración de carga, he usado Herramientas: Esquema de partición: NO OTA para tener más espacio para este enorme código

¡divertirse

haga clic aquí para obtener el código en github

Paso 2: el mapa

El mapa
El mapa
El mapa
El mapa
El mapa
El mapa

este tut está incentivado en el código ESP32, por lo que puedo darle solo algunas palabras clave, enlaces y herramientas utilizadas:

el excelente servicio para extraer áreas vectoriales de openstreetmap

  • el QG "ostico" para digerirlos
  • busque la tabla de atributos para simplificar su mapa
  • cree un diseño de impresión y exporte el mapa en formato svg en formato de papel A3
  • diviértete con el ilustrador "más suave"
  • Imprímelo

Paso 3: La fiesta del pegamento caliente

La fiesta del pegamento caliente
La fiesta del pegamento caliente
La fiesta del pegamento caliente
La fiesta del pegamento caliente
La fiesta del pegamento caliente
La fiesta del pegamento caliente
La fiesta del pegamento caliente
La fiesta del pegamento caliente

Así que puedo sugerir que corte los orificios para el LED y la pantalla en el papel antes de fijarlo en el tablero de corcho.

el cableado es realmente simple y mal hecho por mí: P

Mi nivel de soldadura: Paloma

como puede ver en el código, los leds van a los pines IO

#define LED_PIN0 14 // si # define LED_PIN1 27 // buon #define LED_PIN2 16 // sass #define LED_PIN3 17 // tur #define LED_PIN4 25 // ist #define LED_PIN5 26 // berr

busque el pinout ESP32 para entender

Paso 4: el producto terminado

El producto terminado
El producto terminado

así que esta foto no es la mejor, pero cuando tengamos una inundación en el río, ¡pondré un buen video!

Recomendado: