ESP32 Scraper-parser-mailer și Live Mapper: 4 pași (cu imagini)
ESP32 Scraper-parser-mailer și Live Mapper: 4 pași (cu imagini)
Anonim
ESP32 Scraper-parser-mailer și Live Mapper
ESP32 Scraper-parser-mailer și Live Mapper
ESP32 Scraper-parser-mailer și Live Mapper
ESP32 Scraper-parser-mailer și Live Mapper
ESP32 Scraper-parser-mailer și Live Mapper
ESP32 Scraper-parser-mailer și Live Mapper

Salut Lume! Acesta este primul meu instructabil! Sunt Marco din Grosseto Italia, nu sunt dezvoltator, nu sunt inginer electronic, ci sunt ghid de mediu în parcul nostru natural local (parcul natural Maremma).

În cooperativa mea lucrăm mult cu tururi cu canoe, excursii naturaliste și calme pe râul Ombrone pentru observarea păsărilor și relaxare.

Dar râul Ombrone este renumit și pentru tipul său de debit caracteristic: de la vara „zero” la toamna-iarna debit de câteva mii de metri cubi de apă pe oră.

Din acest motiv, râul Ombrone este monitorizat constant de serviciul hidrometric regional excelent (SIR), cu un site fantastic care pune la dispoziție datele colectate.

Acum așteptăm sfârșitul sezonului și primele inundații de toamnă pentru îndepărtarea docului și a canoanelor …

Dar când începem să vorbim despre scraping parsing esp32ing etc? încă o clipă

În timpul blocării italiene, am făcut prima lecție de clipire arduino, mișto … și am continuat să mă joc cu senzori și arduino C. Deci, dacă găsiți codul meu grosolan sau plin de goluri logice fără sens, luați în considerare acest lucru!

Am făcut o mulțime de lucruri doar pentru a pierde timpul, dar cu acest risc constant de inundații am decis să fac ceva mișto: datorită unui ESP32 cu un factor de formă arduino (Wemos d1 r32) pe care l-am ținut înfășurat luni de zile pentru că mi s-a părut „dificil”, Chiar am avut o mulțime de satisfacții:

Am realizat un răzuitor care aduce și analizează date de pe o pagină web SIR și afișează variabilele obținute pe un LCD i2c ieftin și ca lumină-frecvență clipind pe unele led-uri pe o hartă realistă.

deci, dacă vine o inundație din partea munte, voi fi avertizat de luminozitatea crescândă (schimbarea nivelului) și de frecvența crescătoare (schimbarea nivelului într-o oră) a ledurilor de pe hartă … dar ESP32 poate trimite și e-mailuri! Deci, de ce să nu faci o funcție pentru asta?

să mergem să vedem codul de mai jos acum!

Provizii

  • Placă bazată pe ESP32: am folosit Wemos d1 r32 deoarece au pini de sex feminin și este mai ușor de manevrat
  • leduri, roșu este mai „alert ca”
  • I2C 16x2 LCD are doar un albastru, dar culoarea verde este mai elegantă
  • placa de pluta ieftina
  • noaptea (opțional)

Pasul 1: Codul

Codul
Codul
Codul
Codul

online am găsit doar tutoriale vaporoase care folosesc site-uri externe pentru a analiza datele, așa că am încercat să testez puterea nucleelor esp32 analizând datele direct pe tablă … fără probleme!

deci, dacă vizualizați sursa paginii SIR, puteți înțelege cum funcționează: din fericire, aceștia folosesc valori „separate prin virgulă” pentru a-și afișa datele, așa că cu acest cod caut o stație hidrografică (cod TOSnumber) și număr numărul de virgule (ca separator) care conțin valoarea pe care o doresc (și o stochează ca variabilă), apoi reasfălați-o ca luminozitate și timp led în milis pentru „nivelul de variație” intermitent

Nucleul acestui răzuitor se află în fila

ind = payload.indexOf ("TOSstation_number"); // obțineți poziția (ind) de unde începeți să numărați virgule

String my_var = getValue_ind (sarcină utilă, ',', 8); // unde 8 este a opta celulă definită prin virgule (separator)

„sarcină utilă” este ceea ce primesc de pe web curățat anterior de „cotații” și „& nbsp”;

și funcția getValue_ind care se află în fila principală

String getValue_ind (Date șir, separator de caractere, index int) {

int găsit = 0; int strIndex = {0, -1}; int maxIndex = data.length () - 1; for (int i = ind; i <= maxIndex && found <= index; i ++) {// from ind position if (data.charAt (i) == separator || i == maxIndex) {found ++; strIndex [0] = strIndex [1] + 1; strIndex [1] = (i == maxIndex)? i + 1: i; }} returnare găsită> index? data.substring (strIndex [0], strIndex [1]): ""; }

adaptat de la

codul cere pagina la fiecare 15min, este de aproximativ 44Kb, nu cred că este o încărcătură mare pentru servere și pentru ESP32.. Pentru a evita defilarea prea mare am împărțit programul în diferite funcții, citiți comentariile

aici lipirea codului este într-adevăr o mizerie … am pus fișierele.ino direct

Am folosit caracteristica filelor IDE-ului arduino, așa că am fișiere.ino diferite

aceasta este cea mai recentă versiune a codului (?), sunt multe eforturi, așa că voi aprecia orice sugestie!

- pentru redresarea luminozității ledului pentru valori scăzute, - pentru funcția "hartă" pentru variabilele în virgulă mobilă - pentru utilizarea celui de-al doilea nucleu pe ESP32, - pentru a înțelege cum să tipăriți un mail html dintr-un șir cu sprintf Am petrecut o mulțime de „timp de tocilare” adevărat, așa că citiți comentariile de pe fișierele.ino sau pe github!

ca setări de încărcare, am folosit Instrumente: Schemă de partiție: NU OTA pentru a avea mai mult spațiu pentru acest cod imens

a se distra

faceți clic aici pentru codul de pe github

Pasul 2: Harta

Harta
Harta
Harta
Harta
Harta
Harta

acest tut este încredințat codului ESP32, astfel încât să vă pot oferi doar câteva cuvinte cheie, link-uri și instrumente utilizate:

serviciul excelent pentru extragerea zonelor vectoriale din openstreetmap

  • QGis-urile „ostice” pentru a le digera
  • căutați tabelul cu atribute pentru a vă simplifica harta
  • creați un aspect de imprimare și exportați harta în format svg pe format de hârtie A3
  • distrează-te cu ilustratorul „mai neted”
  • printeaza-l

Pasul 3: Hot Glue Party

Hot Glue Party
Hot Glue Party
Hot Glue Party
Hot Glue Party
Hot Glue Party
Hot Glue Party
Hot Glue Party
Hot Glue Party

așa că pot sugera să tăiați găurile pentru led și afișajul de pe hârtie înainte de a le fixa pe placa de plută

cablajul este foarte simplu și prost făcut de mine: P

Nivelul meu de lipire: Porumbel

după cum puteți vedea din cod, ledurile merg la pinii 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

căutați ESP32 pinout pentru a înțelege

Pasul 4: Produsul finit

Produsul finit
Produsul finit

așa că această fotografie nu este cea mai bună, dar când vom avea o inundație de râu voi pune un videoclip frumos!