Cuprins:

Server de date cu temperatură dublă IoT: 12 pași (cu imagini)
Server de date cu temperatură dublă IoT: 12 pași (cu imagini)

Video: Server de date cu temperatură dublă IoT: 12 pași (cu imagini)

Video: Server de date cu temperatură dublă IoT: 12 pași (cu imagini)
Video: ESP32 Tutorial 43 - IoT Internet Weather Station | SunFounder's ESP32 IoT Learnig kit 2024, Noiembrie
Anonim
Server de date cu temperatură dublă IoT
Server de date cu temperatură dublă IoT

Aceasta este prima mea încercare de a scrie un instructabil și așa că vă rog să vă lăsați ușor! Dacă credeți că acest lucru nu este prea rău, atunci vă rog să mă votați la Concursul de autor pentru prima dată.

Acesta este proiectul meu Lock-Down pentru a monitoriza de la distanță 2 temperaturi într-o seră, una la nivelul etajului și una chiar sub acoperiș. Deși am mai folosit Raspberry Pi (RPi) înainte, acest proiect a implicat mai multe elemente pe care nu le-am folosit și, pe parcurs, am găsit mai multe tutoriale care erau învechite sau pur și simplu greșite. Aceasta este colecția mea de cunoștințe pentru a realiza un monitor dual de temperatură la distanță de la un senzor digital de temperatură Pi Zero și 2 DS18B20 + One Wire, care a fost achiziționat pe parcurs.

Lucruri despre care am învățat:

  • Punerea la dispoziție a datelor de pe un dispozitiv ca parte a Internetului obiectelor (IoT)
  • Interfață cu 1 fir cu 2 dispozitive
  • Dataplicity
  • Date JSON
  • Configurarea paravanului de protecție UFW
  • Folosind Freeboard.io pentru a afișa datele
  • Configurarea RPi pentru executarea automată a programului

Există cantități uriașe de date care pot fi găsite cu o căutare simplă pe toate aceste subiecte, dar ceea ce nu este atât de clar este cum să combinați toate aceste elemente separate.

Provizii

  • Veți avea nevoie de un Raspberry Pi (cu un monitor, mouse și tastatură pentru configurare, dar nu atunci când rulați proiectul terminat)
  • O conexiune la internet funcțională.
  • Un alimentator cu un conector Micro USB
  • 2 din senzorii digitali de temperatură DS18B20 + One Wire. Am găsit că Amazon a fost cel mai ieftin
  • Rezistor 4K7 ohm sau am folosit 2 rezistențe 10K ohm.
  • Panou mic și câteva fire masculine / feminine pentru testare pe bancă
  • Bucată mică de panou pentru asamblarea finală
  • Unelte simple pentru lipire și decupare a firelor.
  • Cutie mică din plastic pentru a adăposti designul finit

Pasul 1: Hardware

Hardware
Hardware
Hardware
Hardware

Am avut deja un Raspberry Pi Zero W (cu wireless), dar sunt sigur că acest proiect simplu va funcționa bine pe oricare dintre RPIs. Cutia de biți electronici ciudați din atelierul meu avea orice altceva (panou, fir, PSU etc.) și așa că tot ce trebuia să cumpăr erau doi senzori DS18B20 de 2 x de la Amazon. Acestea sunt cipurile normale DS18B20 montate comod într-o carcasă rezistentă la apă și cablu de 3 m. Există 3 fire din cablu:

  • Roșu - alimentare - conectați la pinul 3,3v 1
  • Negru - retur - conectați la pinul de masă 6
  • Galben - date - conectați-vă la pinul 7 GPIO4

Senzorii folosesc interfața cu 1 fir și au fost foarte ușor de conectat și de obținut date. Există mai multe pagini pe Web cu detalii despre conectarea unui dispozitiv, dar foarte puțin despre conectarea a 2 (sau mai multe).

Pentru testarea pe bancă, circuitul a fost asamblat cu ajutorul unei plăci. Tutorialele pe care le-am găsit au declarat că folosesc un rezistor 4K7 pentru a influența linia de date, dar nu am putut găsi unul și așa am folosit 2 * 10K în paralel și a funcționat foarte bine. Există o mulțime de resurse pe Web pentru utilizarea unei panouri pentru a asambla circuite RPi și așa că nu le voi repeta aici.

Diagrama creată utilizând Diagrama circuitului

Pasul 2: Configurarea software-ului Raspberry Pi OS

Configurare software Raspberry Pi OS
Configurare software Raspberry Pi OS
Configurare software Raspberry Pi OS
Configurare software Raspberry Pi OS
Configurare software Raspberry Pi OS
Configurare software Raspberry Pi OS

Deoarece folosisem acest RPi înainte, am decis să încep cu o instalare curată a sistemului de operare, am reformatat cardul SD și am instalat o versiune curată de NOOBS. Apoi am instalat versiunea desktop completă a Raspian (opțiunea de sus), deoarece aceasta ar instala și PIP și GIT pe care nu le are versiunea lite. Chiar dacă nu aveam nevoie de interfața grafică pentru utilizator (GUI) pentru proiect, este o modalitate ușoară de a configura toate opțiunile și cu un card SD de 16 GB nu a lipsit spațiul.

Am configurat accesul WI-FI apoi am executat instalarea completă și apoi asistentul cu actualizări și upgrade-uri etc. Folosind GUI, am configurat RPI după cum este necesar doar pentru că utilizarea GUI este mai simplă decât interfața liniei de comandă (CLI). M-am dus la fereastra de configurare din meniu și apoi:

  • În fila sistem, am schimbat parola, am setat să pornească la CLI și am debifat Autentificare automată
  • În fila interfețe, am activat un fir
  • S-a făcut clic pe ok și s-a re-pornit

Dacă trebuie să reveniți la GUI în orice moment, tastați startx la CLI

startx

Pasul 3: Configurați aplicația de date pentru a permite accesul de la distanță

Configurați aplicația de date pentru a permite accesul la distanță
Configurați aplicația de date pentru a permite accesul la distanță
Configurați aplicația de date pentru a permite accesul la distanță
Configurați aplicația de date pentru a permite accesul la distanță
Configurați aplicația de date pentru a permite accesul la distanță
Configurați aplicația de date pentru a permite accesul la distanță

Am găsit o intrare de blog foarte utilă pe site-ul Dataplicity la https://blog.dataplicity.com/how-to-build-a-raspb… și am folosit câteva părți din acest lucru. Secțiunea 3 a blogului descrie configurarea Dataplicity pentru acces de la distanță la RPi. Nu am mai folosit Dataplicity până acum, dar trebuie să spun, îl recomand pe deplin ca instrument de acces la distanță foarte simplu. Deși capturile de ecran (în blogul de mai sus) sunt puțin depășite, principiul este în regulă.

Pe computer, accesați Dataplicity.com și creați un cont (puteți utiliza browserul în GUI, dar mai degrabă lent pe RPi Zero). Apoi faceți clic pe butonul „Adăugați un dispozitiv nou” și o linie de cod este afișată în fereastra pop-up. Apoi mergeți la CLI de pe RPi și tastați linia de text. Dacă totul este în regulă, se va afișa sigla Dataplicity și va rula programul de instalare.

Înapoi pe computer, noul dispozitiv ar trebui să apară acum pe site-ul Dataplicity. Faceți clic pe dispozitiv și ar trebui să vedeți un ecran terminal pentru RPi.

Există câteva lucruri de remarcat aici:

  • Pentru a vă conecta, tastați „su pi” (pentru acces la superutilizator) și vi se va solicita parola (așa cum a fost setată anterior)
  • Trebuie să activați Wormhole (pentru a fi utilizat mai târziu)
  • Veți avea nevoie de adresa Wormhole pentru a afișa datele ulterior (faceți clic dreapta pentru a copia când este necesar)

Puteți utiliza acest acces la distanță pentru toți pașii următori și este mult mai ușor pentru copierea datelor, programelor etc. decât direct pe RPi.

Pasul 4: Verificați senzorii

Acum puteți utiliza Dataplicity de la distanță acces la RPI pentru toate secțiunile următoare.

Dacă acum totul este conectat, ar trebui să puteți vedea temperaturile returnate de DS18B20. Am lucrat cu ajutorul tutorialului Pi Hut, dar majoritatea nu au fost necesare. Dacă doriți detaliile complete, acestea pot fi găsite aici: https://thepihut.com/blogs/raspberry-pi-tutorials …

Biții importanți sunt să accesați directorul dispozitivelor și să vă asigurați că sunt afișați 2 senzori diferiți.

cd / sys / bus / w1 / devices /

Aceasta ar trebui să afișeze 2 dispozitive începând cu 28 și magistrala magistrală. Spectacolele mele:

28-011453ebfdaa 28-0114543d5daa w1_bus_master1

Aceste 2 numere de identificare sunt importante și vor fi necesare mai târziu! Apoi treceți la unul dintre directorele senzorilor:

cd 28-011453ebfdaa

(de exemplu) și apoi pentru a citi valoarea din senzor

pisică w1_slave

Ar trebui să apară 2 rânduri de text:

53 01 4b 46 7f ff 0c 10 2d: crc = 2d DA

53 01 4b 46 7f ff 0c 10 2d t = 21187

DA arată că senzorul citește corect și 21187 arată temperatura în grade Celsius de 21.187 (împărțiți la 1000) Repetați acest lucru pentru a verifica al doilea senzor. Dacă ambele citesc ok atunci putem trece la citirea datelor cu Python3.

Am copiat și adaptat următorul cod pe care l-am găsit pe web, dar nu-mi amintesc de unde. Dacă acesta seamănă cu codul tău, atunci îmi cer scuze pentru că nu a fost intenționat niciun plagiat; vă rog să-mi spuneți și vă voi recunoaște munca.

Creați un director numit proiecte și treceți la acel director.

mkdir ~ / projects

cd ~ / proiecte

În acest director, utilizați editorul de text (nano) pentru a crea și edita un fișier numit thermo-test.py

sudo nano thermo-test.py

Acest lucru ar fi trebuit să deschidă editorul și, deoarece utilizați Dataplicity, puteți copia pur și simplu următorul cod de mai jos (thermo-test.py) și lipiți în editor. Va trebui să modificați cele 2 nume de dispozitive (începând cu 28-…) cu cele menționate mai sus. Când totul arată corect, apăsați ctrl + X pentru a termina, Y pentru a salva și a reveni pentru a utiliza numele existent. Dacă preferați să utilizați interfața grafică, Thonny va face același lucru.

Pentru a rula programul de testare:

sudo python3 thermo-test.py

Toate fiind bine, acesta ar trebui să execute fișierul folosind python 3 și să imprime pe ecran cele 2 temperaturi la fiecare 10 secunde. Puteți testa totul în regulă plasând 1 senzor în apă cu gheață sau încălzind ușor cu un uscător de păr. Dacă totul pare în regulă, atunci putem merge mai departe!

Pasul 5: Paravan de protecție UFW

Paravan de protecție UFW
Paravan de protecție UFW

Deoarece acest RPi urma să fie conectat permanent la internet, am decis că un paravan de protecție ar fi o idee bună și unul simplu de utilizat este Uncomplicated Firewall (ufw). Există un tutorial foarte simplu aici

Nu merg în profunzime, întrucât acesta nu este scopul acestui instructabil, dar pe scurt:

Instalați paravanul de protecție cu:

sudo apt-get install ufw

Setați regulile implicite:

sudo ufw implicit permite ieșirea

sudo ufw implicit refuză intrarea

Deschideți portul 80 pentru Dataplicity

sudo ufw permit 80

Activați paravanul de protecție

sudo ufw activate

Verificați starea și asigurați-vă că totul rulează

starea sudo ufw

Pasul 6: S încheie datele de temperatură ca JSON

S terminând datele de temperatură ca JSON
S terminând datele de temperatură ca JSON

Înapoi la blogul și secțiunea 5 a lui Tim Fernando.

Urmați pașii după cum sa menționat (cu excepția faptului că am creat deja directorul de proiecte) și toate ar trebui să funcționeze bine. Folosind GIT veți descărca fișierele aplicației lui Tim și PIP se va asigura că toate programele necesare sunt instalate pe RPi. Apoi am constatat că trebuie să re-boot pentru a mă asigura că pachetele sunt configurate corect.

Apoi rulați programul lui Tim și RPi ar trebui să furnizeze date JSON pentru primul senzor.

cd home / pi / projects / temperature-serve-pi

sudo gunicorn temperature: app -b 0.0.0.0:80

Puteți continua prin blog până la secțiunea 6, unde veți găsi date pentru unul dintre senzori.

De asemenea, puteți utiliza JSON Viewer pentru a vedea datele https://codebeautify.org/jsonviewer Faceți clic pe butonul „încărcați adresa URL” și lipiți în adresa Wormhole menționată anterior. În panoul din stânga, ar trebui să vedeți două intrări, una pentru Celsius și una pentru Fahrenheit.

Pasul 7: trimiteți date de la ambii senzori

Trimiteți date de la ambii senzori
Trimiteți date de la ambii senzori

Pe baza codului din temperatures.py și thermo-test.py, am creat 2temps.py Editat ca înainte în directorul / projects / temperature-serve-pi, lipit în cod și salvat. Am fugit apoi

sudo gunicorn 2temps: app -b 0.0.0.0:80

Acum, când am relansat JSON Viewer, am obținut valori pentru temp1 și temp2

Succes:)

Pasul 8: Pornire automată

Pornire automată
Pornire automată

Deoarece alimentarea cu efect de seră se oprește ocazional, am vrut ca RPi să încarce automat programul și să înceapă să demonstreze datele. Cea mai simplă cale pare să fie editarea fișierului rc.local și adăugarea codului necesar în partea de jos chiar deasupra liniei de ieșire 0.

cd etc.

sudo nan rc.local

apoi add-in

dorm 10

cd home / pi / projects / temperature-serve-pi sudo gunicorn temp04: app -b 0.0.0.0:80 &

  • & La sfârșit îi spune computerului să ruleze scriptul într-un sub shell, astfel încât computerul dvs. să nu aștepte funcția să se termine și va continua cu boot
  • Sleep 10 [secunde] asigură că toate operațiunile anterioare sunt finalizate înainte de a începe serviciul.

Ieșiți și salvați ca înainte. Apoi reporniți și rulați JSON Viewer pentru a verifica dacă totul este în regulă.

Dacă doriți mai multe informații despre programele care rulează automat, există un tutorial excelent aici

Pasul 9: Afișați datele pe Freeboard.io (1)

Afișați datele pe Freeboard.io (1)
Afișați datele pe Freeboard.io (1)

Pașii din blogul lui Tim funcționează bine, pe scurt; creați un cont la www.freeboard.io și apoi creați un nou Freeboard, l-am numit pe SHEDTEMPERATURES.

Mai întâi, adăugați o sursă de date, faceți clic pe ADĂUGARE în partea dreaptă sus și din fereastra pop-up selectați JSON ca tip, dați sursei de date un NOM, adăugați adresa găurii de vierme de mai devreme ca adresă URL și faceți clic pe NU pentru TRY THINGPROXY. Temperaturile se schimbă foarte încet și, prin urmare, ÎNREGĂTIȚI LA FIECARE 15 SECUNDE este bine. Faceți clic pe SALVARE.

Pasul 10: Afișați datele pe Freeboard.io (2)

Afișați datele pe Freeboard.io (2)
Afișați datele pe Freeboard.io (2)
Afișați datele pe Freeboard.io (2)
Afișați datele pe Freeboard.io (2)
Afișați datele pe Freeboard.io (2)
Afișați datele pe Freeboard.io (2)
Afișați datele pe Freeboard.io (2)
Afișați datele pe Freeboard.io (2)

Faceți clic pe ADĂUGARE PANE și apoi pe + pentru a adăuga primul widget. Puteți selecta și juca cu diferite TIPURI, dar am găsit că Gauge a fost foarte bine. Oferiți un TITLU, UNITĂȚI (C), MINIM și MAXIM adecvate pentru a se potrivi aplicației dvs. Pentru DATASOURCE, faceți clic pe + și va apărea sursa creată mai sus.

Meniul derulant ar trebui să afișeze acum cele 2 surse de date JSON (temp2 și temp2) construite mai devreme. Selectați sursa corespunzătoare și faceți clic pe salvare.

Repetați acest lucru pentru al doilea ecartament și suntem pregătiți.

Datele ar trebui să fie afișate acum pe cele 2 calibre și dacă aveți în continuare PRi conectat la un monitor, ar trebui să vedeți solicitările de la Freeboard.io pe măsură ce sosesc.

Pasul 11: Construiți proiectul într-o cutie

Construiți proiectul într-o cutie
Construiți proiectul într-o cutie
Construiți proiectul într-o cutie
Construiți proiectul într-o cutie
Construiți proiectul într-o cutie
Construiți proiectul într-o cutie
Construiți proiectul într-o cutie
Construiți proiectul într-o cutie

Până în acest moment, RPi și celelalte componente fuseseră asamblate pe bancă cu ajutorul unei plăci. O mică bucată de placă a fost apoi utilizată pentru a înlocui placa și panourile lipite toate la locul lor.

S-a găsit o cutie mică de stocare Lego roz roz, care avea mult spațiu și în care RPI nu ar fi prea cald. au fost găurite găuri în părțile laterale ale cutiei și au fost folosiți stâlpi de montare din nailon de 3 mm pentru a ține RPi și panoul de bandă în poziție.

Există doar 3 conexiuni necesare de la GPIO, 3.3v, GND și date.

  • Pinul 3,3vdc 1
  • Pinul GND 6
  • Pinul 7 (GPIO4) de date

Au fost adăugate, de asemenea, găuri în cutia de alimentare și cabluri USB la senzorii de temperatură. Odată ce totul a fost montat la locul său, s-a adăugat o cantitate mică de etanșant siliconic pentru a se asigura că păianjenii nu cred că este un loc frumos și cald pentru a petrece iarna!

Pasul 12: Finalizat

Terminat
Terminat
Terminat
Terminat

Cutia a fost plasată în seră și alimentată de la un încărcător USB. Cei doi senzori au fost așezați unul lângă vârful serii și celălalt pe un ghiveci pentru a verifica cât de frig se înmoaie răsadurile noaptea.

Acesta este primul meu instructabil și sper să credeți că este în regulă. Dacă găsiți erori, vă rugăm să ne anunțați și voi modifica unde este necesar. Următorul pas ar putea fi înregistrarea datelor la fiecare (să zicem) 60 de secunde, dar acest lucru va veni mai târziu.

Recomandat: