Innholdsfortegnelse:

IoT datatjener med dobbel temperatur: 12 trinn (med bilder)
IoT datatjener med dobbel temperatur: 12 trinn (med bilder)

Video: IoT datatjener med dobbel temperatur: 12 trinn (med bilder)

Video: IoT datatjener med dobbel temperatur: 12 trinn (med bilder)
Video: Полный курс Redux Toolkit + RTK Query для начинающих | Редакс за 2 часа! 2024, Juni
Anonim
IoT -datatjener med dobbel temperatur
IoT -datatjener med dobbel temperatur

Dette er mitt første forsøk på å skrive en Instructable, så vær så snill å gå på meg! Hvis du synes dette ikke er så ille, så vær så snill å stemme på meg i First Time Author Contest.

Dette er mitt Lock-Down-prosjekt for å fjernovervåke 2 temperaturer i et drivhus, en på gulvnivå og en like under taket. Selv om jeg hadde brukt Raspberry Pi (RPi) før, involverte dette prosjektet flere elementer jeg ikke hadde brukt, og underveis fant jeg flere opplæringsprogrammer som var utdaterte eller bare feil. Dette er min kunnskapssamling for å lage en fungerende dobbel ekstern temperaturmonitor fra en Pi Zero & 2 DS18B20+ One Wire Digital Temperature Sensors som ble anskaffet underveis.

Ting jeg lærte om:

  • Gjør data tilgjengelig fra en enhet som en del av tingenes internett (IoT)
  • 1-leder grensesnitt med 2 enheter
  • Dataplicity
  • JSON -data
  • Sette opp UFW -brannmuren
  • Bruk Freeboard.io til å vise dataene
  • Konfigurere RPi til å kjøre programmet automatisk

Det er enorme mengder data som kan bli funnet med et enkelt søk på alle disse emnene, men det som ikke er så klart, er hvordan du kombinerer alle disse separate elementene.

Rekvisita

  • Du trenger en Raspberry Pi (med skjerm, mus og tastatur for å sette opp, men ikke når du kjører det ferdige prosjektet)
  • En fungerende internettforbindelse.
  • En PSU med en Micro USB -kontakt
  • 2 av DS18B20+ One Wire digitale temperatursensorer. Jeg fant Amazon var den billigste
  • 4K7 ohm motstand eller jeg brukte 2 10K ohm motstander.
  • Lite brødbrett og noen få hann-/hunntråder for testing på benken
  • Lite stykke stripboard for den siste monteringen
  • Enkle verktøy for lodding og wire stripping.
  • Liten plastboks for den ferdige designen

Trinn 1: Maskinvare

Maskinvare
Maskinvare
Maskinvare
Maskinvare

Jeg hadde allerede en Raspberry Pi Zero W (med trådløs), men jeg er sikker på at dette enkle prosjektet vil fungere fint på noen av RPI -ene. Boksen med merkelige elektroniske biter i verkstedet mitt hadde alt annet (brødbrett, wire, PSU osv.), Så alt jeg måtte kjøpe var to 2 x DS18B20 -sensorer fra Amazon. Dette er de vanlige DS18B20 -brikkene som bare er praktisk montert i et vanntett hus og 3 m kabel. Det er 3 ledninger fra kabelen:

  • Rød - strøm - koble til 3.3v pin 1
  • Svart - retur - koble til jordpinnen 6
  • Gul - data - koble til GPIO4 -pinnen 7

Sensorene bruker 1-Wire-grensesnittet og var veldig enkle å koble til og hente data fra. Det er flere sider på nettet med detaljer for tilkobling av 1 enhet, men veldig lite om tilkobling av 2 (eller flere).

For testing på benken ble kretsen satt sammen ved hjelp av et brødbrett. Opplæringsprogrammene jeg fant uttalte å bruke en 4K7 -motstand for å forspenne datalinjen, men jeg kunne ikke finne en og brukte derfor 2* 10K parallelt, og det fungerte helt fint. Det er mange ressurser på nettet for å bruke et brødbrett til å sette sammen RPi -kretser, så jeg vil ikke gjenta dem her.

Diagram opprettet ved hjelp av kretsdiagram

Trinn 2: Programvareoppsett for Raspberry Pi OS

Raspberry Pi OS -programvareoppsett
Raspberry Pi OS -programvareoppsett
Raspberry Pi OS -programvareoppsett
Raspberry Pi OS -programvareoppsett
Raspberry Pi OS -programvareoppsett
Raspberry Pi OS -programvareoppsett

Siden jeg hadde brukt denne RPi før, bestemte jeg meg for å starte med en ren installasjon av operativsystemet, jeg formaterte SD -kortet på nytt og installerte en ren versjon av NOOBS. Jeg installerte deretter hele skrivebordsversjonen av Raspian (det øverste alternativet), da dette også ville installere PIP & GIT som lite -versjonen ikke gjør. Selv om jeg ikke trengte det grafiske brukergrensesnittet (GUI) for prosjektet, er det en enkel måte å sette opp alle alternativene på, og med et 16 GB SD -kort var det ikke mangel på plass.

Jeg konfigurerte WI-FI-tilgang og kjørte deretter hele installasjonen og deretter veiviseren med oppdateringer og oppgraderinger etc. Ved å bruke GUI, konfigurerte jeg RPI etter behov bare fordi det er enklere å bruke GUI enn Command Line Interface (CLI). Jeg gikk til konfigurasjonsvinduet fra menyen og deretter:

  • På systemfanen endret jeg passordet, satt til å starte opp til CLI og fjernet avmerkingen for automatisk pålogging
  • På grensesnittfanen aktiverte jeg 1-leder
  • Klikkte ok og startet på nytt

Hvis du trenger å komme tilbake til GUI når som helst, skriver du bare startx på CLI

startx

Trinn 3: Konfigurer Dataplicity for å tillate ekstern tilgang

Konfigurer Dataplicity for å tillate ekstern tilgang
Konfigurer Dataplicity for å tillate ekstern tilgang
Konfigurer Dataplicity for å tillate ekstern tilgang
Konfigurer Dataplicity for å tillate ekstern tilgang
Konfigurer Dataplicity for å tillate ekstern tilgang
Konfigurer Dataplicity for å tillate ekstern tilgang

Jeg fant en veldig nyttig bloggoppføring på Dataplicity-nettstedet på https://blog.dataplicity.com/how-to-build-a-raspb… og brukte noen få deler av dette. Del 3 i bloggen beskriver konfigurering av Dataplicity for ekstern tilgang til RPi. Jeg har aldri brukt Dataplicity før, men må si at jeg anbefaler det grundig som et veldig enkelt verktøy for ekstern tilgang. Selv om skjermbildene (i bloggen ovenfor) er litt utdatert, er prinsippet greit.

Gå til Dataplicity.com på din PC og opprett en konto (du kan bruke nettleseren i GUI, men heller treg på RPi Zero). Klikk deretter på knappen "legg til ny enhet", og en linje med kode vises i popup-vinduet. Gå deretter til CLI på RPi og skriv inn tekstlinjen. Hvis alt er i orden, vil Dataplicity -logoen vises og installasjonsprogrammet vil kjøre.

Tilbake på PC -en skal den nye enheten nå vises på Dataplicity -nettstedet. Klikk på enheten, og du bør se en terminalskjerm for din RPi.

Det er et par ting å merke seg her:

  • For å logge inn, skriv "su pi" (for tilgang til superbrukere), og du blir bedt om å angi passordet (som angitt tidligere)
  • Du må aktivere Wormhole (for å bli brukt senere)
  • Du trenger Wormhole-adressen for å vise dataene senere (høyreklikk for å kopiere når det er nødvendig)

Du kan bruke denne eksterne tilgangen til alle de følgende trinnene og er mye lettere for kopiering av data, programmer osv. Enn direkte på RPi.

Trinn 4: Kontroller sensorene

Du kan nå bruke Dataplicity ekstern tilgang til RPI for alle de neste seksjonene.

Hvis alt er i orden nå, bør du kunne se temperaturene som returneres fra DS18B20. Jeg jobbet gjennom Pi Hut -opplæringen, men det meste av dette var ikke nødvendig. Hvis du vil ha alle detaljene, kan du finne dem her:

De viktige bitene er å gå til enhetskatalogen og sørge for at to forskjellige sensorer vises.

cd/sys/buss/w1/enheter/

Dette skal vise 2 enheter som starter med 28- og bussmasteren. Mine viser:

28-011453ebfdaa 28-0114543d5daa w1_bus_master1

Disse 2 ID -numrene er viktige og vil være nødvendige senere! Bytt deretter til en av sensorkatalogene:

cd 28-011453ebfdaa

(for eksempel) og deretter for å lese verdien fra sensoren

katt w1_slave

Det skal vises 2 tekstlinjer:

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

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

JA viser at sensoren leser riktig og 21187 viser temperaturen i Celsius på 21.187 (divider med 1000) Gjenta dette for å kontrollere den andre sensoren. Hvis begge leser ok, kan vi gå videre til å lese dataene med Python3.

Jeg kopierte og tilpasset følgende kode som jeg fant på nettet, men jeg kan ikke huske hvorfra. Hvis dette ser ut som koden din, så beklager jeg, ettersom ingen plagiat var ment; vennligst gi meg beskjed, og jeg vil anerkjenne arbeidet ditt.

Lag en katalog kalt prosjekter og bytt til den katalogen.

mkdir ~/projects

cd ~/prosjekter

I denne katalogen bruker du tekstredigereren (nano) til å opprette og redigere en fil som heter thermo-test.py

sudo nano thermo-test.py

Dette burde ha åpnet redaktøren, og mens du bruker Dataplicity, kan du ganske enkelt kopiere følgende kode nedenfor (thermo-test.py) og lime inn i editoren. Du må endre de to enhetsnavnene (fra 28-…) til de som er nevnt ovenfor. Når alt ser riktig ut, trykker du på ctrl+X for å fullføre, Y for å lagre og gå tilbake for å bruke det eksisterende navnet. Hvis du foretrekker å bruke GUI, vil Thonny gjøre det samme.

Slik kjører du testprogrammet:

sudo python3 thermo-test.py

Alt dette er bra, dette bør kjøre filen ved hjelp av python 3 og skrive ut på skjermen de 2 temperaturene hvert 10. sekund. Du kan teste at alt er ok ved å plassere en sensor i isvann eller varme den forsiktig med en hårføner. Hvis alt virker greit, kan vi gå videre!

Trinn 5: UFW -brannmur

UFW -brannmur
UFW -brannmur

Siden denne RPi skulle bli permanent koblet til internett bestemte jeg meg for at en brannmur ville være en god idé, og en enkel å bruke er ukomplisert brannmur (ufw). Det er en veldig enkel opplæring her

Jeg skal ikke gå i dybden siden dette ikke er hensikten med denne instruksjonsboken, men kort sagt:

Installer brannmuren med:

sudo apt-get install ufw

Sett standardreglene:

sudo ufw standard tillate utgående

sudo ufw standard nekte innkommende

Åpen port 80 for Dataplicity

sudo ufw tillate 80

Aktiver brannmuren

sudo ufw aktivere

Sjekk statusen og kontroller at alt kjører

sudo ufw status

Trinn 6: S avslutter temperaturdataene som JSON

S avslutter temperaturdataene som JSON
S avslutter temperaturdataene som JSON

Tilbake til Tim Fernandos blogg og seksjon 5.

Følg trinnene som angitt (bortsett fra at vi allerede har opprettet prosjektkatalogen), og alt skal fungere fint. Ved å bruke GIT vil du laste ned Tims applikasjonsfiler, og PIP vil sørge for at alle nødvendige programmer er installert på RPi -en din. Da fant jeg ut at jeg måtte starte på nytt for å sikre at alle pakkene var riktig konfigurert.

Kjør deretter Tims program, og RPi -en din skal da gi JSON -data for den første sensoren.

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

sudo gunicorn temperatur: app -b 0.0.0.0:80

Du kan fortsette gjennom bloggen til seksjon 6, hvor du finner data tilgjengelig for 1 av sensorene.

Du kan også bruke JSON Viewer til å se dataene https://codebeautify.org/jsonviewer Klikk på knappen "last inn URL" og lim inn Wormhole -adressen som ble nevnt tidligere. I venstre rute bør du se to oppføringer, en for Celsius og en for Fahrenheit.

Trinn 7: Send data fra begge sensorer

Send data fra begge sensorer
Send data fra begge sensorer

Basert på koden i temperature.py og thermo-test.py, opprettet jeg 2temps.py Redigert som før i katalogen /projects /temperature-serve-pi, limt inn koden og lagret. Jeg løp da

sudo gunicorn 2temps: app -b 0.0.0.0:80

Når jeg kjørte JSON Viewer på nytt, fikk jeg verdier for temp1 og temp2

Suksess:)

Trinn 8: Autostart

Auto Start
Auto Start

Siden strømmen til drivhuset av og til blir slått av, ønsket jeg at RPi automatisk skulle laste inn programmet og begynne å bevise dataene. Den enkleste måten ser ut til å være å redigere rc.local -filen og legge til nødvendig kode nederst like over exit 0 -linjen.

cd osv

sudo nan rc.local

deretter tillegg

sove 10

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

  • & På slutten forteller datamaskinen å kjøre skriptet i et undershell, slik at datamaskinen ikke venter på at funksjonen skal slutte og fortsetter med oppstart
  • Søvn 10 [sekunder] sørger for at alle tidligere operasjoner er fullført før du starter tjenesten.

Avslutt og lagre som før. Start deretter på nytt og kjør JSON Viewer for å kontrollere at alt er bra.

Hvis du vil ha mer informasjon om programmer som kjører automatisk, er det en flott opplæring her

Trinn 9: Vis dataene på Freeboard.io (1)

Vis dataene på Freeboard.io (1)
Vis dataene på Freeboard.io (1)

Trinnene i Tims blogg fungerer fint, oppsummert; opprett en konto på www.freeboard.io og opprett deretter et nytt fribord, jeg kalte min SHEDTEMPERATURES.

Legg først til en datakilde, klikk på ADD øverst til høyre, og velg JSON som popup-vindu, gi datakilden et NAVN, legg til ormhullsadressen fra tidligere som URL og klikk NEI for å PRØVE THINGPROXY. Temperaturene endrer seg bare veldig sakte, og så FORFRISK HVER 15 SECONDS er greit. Klikk på LAGRE.

Trinn 10: Vis dataene på Freeboard.io (2)

Vis dataene på Freeboard.io (2)
Vis dataene på Freeboard.io (2)
Vis dataene på Freeboard.io (2)
Vis dataene på Freeboard.io (2)
Vis dataene på Freeboard.io (2)
Vis dataene på Freeboard.io (2)
Vis dataene på Freeboard.io (2)
Vis dataene på Freeboard.io (2)

Klikk på ADD PANE og deretter på + for å legge til den første widgeten. Du kan velge og spille med forskjellige typer, men jeg syntes at Gauge var helt ok. Gi en passende TITLE, ENHETER (C), MINIMUM og MAKSIMUM som passer din søknad. For DATASOURCE, klikk på + og kilden som er opprettet ovenfor, vises.

Nedtrekksmenyen skal nå vise de 2 JSON -datakildene (temp2 og temp2) som ble bygget tidligere. Velg riktig kilde og klikk på lagre.

Gjenta dette for den andre måleren, og vi er klare.

Dataene skal nå vises på de 2 målerne, og hvis du fortsatt har PRi koblet til en skjerm, bør du se forespørslene fra Freeboard.io når de kommer.

Trinn 11: Bygg prosjektet inn i en eske

Bygg prosjektet i en eske
Bygg prosjektet i en eske
Bygg prosjektet i en eske
Bygg prosjektet i en eske
Bygg prosjektet i en eske
Bygg prosjektet i en eske
Bygg prosjektet i en eske
Bygg prosjektet i en eske

Frem til dette tidspunktet hadde RPi og de andre komponentene blitt samlet på benken ved hjelp av et brødbrett. Et lite stykke stripboard ble deretter brukt til å erstatte brødbrettet og ledningene alle loddet på plass.

Det ble funnet en lys rosa liten Lego -oppbevaringsboks som hadde god plass og hvor RPI -en ikke ville bli for varm. hull ble boret i sidene av esken og 3 mm nylon monteringssøyler ble brukt til å holde RPi og stripboard på plass.

Det er bare 3 tilkoblinger som kreves fra GPIO, 3.3v, GND og data.

  • 3.3vdc pin 1
  • GND -pinne 6
  • Data (GPIO4) pin 7

Det ble også lagt hull i esken for USB -strøm og kabler til temperatursensorene. Når alt var montert på plass, ble en liten mengde silikonforsegling tilsatt for å sikre at edderkopper ikke syntes det var et fint varmt sted å tilbringe vinteren!

Trinn 12: Ferdig

Ferdig
Ferdig
Ferdig
Ferdig

Boksen ble plassert i drivhuset og drevet fra en USB -lader. De to sensorene ble plassert en nær toppen av drivhuset og den andre på en plantepotte for å sjekke hvor kalde plantene ble om natten.

Dette er min første instruks, og jeg håper du synes det er greit. Gi meg beskjed hvis du finner feil, og jeg vil endre der det er nødvendig. Det neste trinnet kan være å logge dataene hver (si) 60 sekunder, men dette kommer senere.

Anbefalt: