Inhoudsopgave:

IoT Dual Temperature Data Server: 12 stappen (met afbeeldingen)
IoT Dual Temperature Data Server: 12 stappen (met afbeeldingen)

Video: IoT Dual Temperature Data Server: 12 stappen (met afbeeldingen)

Video: IoT Dual Temperature Data Server: 12 stappen (met afbeeldingen)
Video: Мини ПК на Intel N100 - AC8-N, мощная безвентиляторная платформа, установка Home Assistant OS 2024, Juni-
Anonim
IoT-gegevensserver met dubbele temperatuur
IoT-gegevensserver met dubbele temperatuur

Dit is mijn eerste poging om een Instructable te schrijven en dus doe het alsjeblieft rustig aan! Als je dit niet erg vindt, stem dan alsjeblieft op mij in de First Time Author Contest.

Dit is mijn Lock-Down-project om op afstand 2 temperaturen in een kas te bewaken, één op vloerniveau en één net onder het dak. Hoewel ik eerder Raspberry Pi's (RPi) had gebruikt, omvatte dit project verschillende elementen die ik niet had gebruikt en onderweg vond ik verschillende tutorials die verouderd of gewoon verkeerd waren. Dit is mijn verzameling kennis om een werkende dubbele externe temperatuurmonitor te maken van een Pi Zero & 2 DS18B20+ One Wire digitale temperatuursensoren die onderweg zijn verworven.

Dingen waar ik over heb geleerd:

  • Data beschikbaar stellen vanaf een device als onderdeel van het Internet of Things (IoT)
  • 1-draads interface met 2 apparaten
  • Datapliciteit
  • JSON-gegevens
  • De UFW-firewall instellen
  • Freeboard.io gebruiken om de gegevens weer te geven
  • De RPi configureren om het programma automatisch uit te voeren

Er zijn enorme hoeveelheden data te vinden met een simpele zoekopdracht over al deze onderwerpen, maar wat niet zo duidelijk is, is hoe al deze afzonderlijke elementen te combineren.

Benodigdheden

  • Je hebt een Raspberry Pi nodig (met een monitor, muis en toetsenbord voor het instellen, maar niet voor het uitvoeren van het voltooide project)
  • Een werkende internetverbinding.
  • Een PSU met een Micro USB-connector
  • 2 van de DS18B20+ eendraads digitale temperatuursensoren. Ik ontdekte dat Amazon de goedkoopste was
  • 4K7 ohm weerstand of ik gebruikte 2 10K ohm weerstanden.
  • Klein breadboard en een paar mannelijke/vrouwelijke draden voor testen op de bank
  • Klein stukje stripboard voor de eindmontage
  • Eenvoudig gereedschap voor solderen en strippen van draden.
  • Kleine plastic doos om het voltooide ontwerp te huisvesten

Stap 1: Hardware

Hardware
Hardware
Hardware
Hardware

Ik had al een Raspberry Pi Zero W (met draadloos) maar ik weet zeker dat dit eenvoudige project prima zal werken op een van de RPI's. De doos met vreemde elektronische bits in mijn werkplaats had al het andere (broodbord, draad, PSU enz.) En dus hoefde ik alleen maar twee 2 x DS18B20-sensoren van Amazon te kopen. Dit zijn de normale DS18B20-chips, gewoon handig gemonteerd in een waterdichte behuizing en 3 meter lange kabel. Er zijn 3 draden van de kabel:

  • Rood – voeding – aansluiten op de 3.3v pin 1
  • Zwart – retour – aansluiten op de grondpen 6
  • Geel – data – aansluiten op de GPIO4 pin 7

De sensoren gebruiken de 1-Wire-interface en waren zeer eenvoudig aan te sluiten en gegevens te verkrijgen. Er zijn verschillende pagina's op het web met details voor het aansluiten van 1 apparaat, maar heel weinig voor het aansluiten van 2 (of meer).

Voor het testen op de bank werd het circuit samengesteld met behulp van een breadboard. De tutorials die ik vond, zeiden dat ze een 4K7-weerstand gebruikten om de datalijn te beïnvloeden, maar ik kon er geen vinden en gebruikte dus 2 * 10K parallel en het werkte prima. Er zijn tal van bronnen op het web om een breadboard te gebruiken om RPi-circuits samen te stellen en daarom zal ik ze hier niet herhalen.

Diagram gemaakt met behulp van Circuit Diagram

Stap 2: Raspberry Pi OS-software instellen

Raspberry Pi OS-software instellen
Raspberry Pi OS-software instellen
Raspberry Pi OS-software instellen
Raspberry Pi OS-software instellen
Raspberry Pi OS-software instellen
Raspberry Pi OS-software instellen

Omdat ik deze RPi eerder had gebruikt, besloot ik te beginnen met een schone installatie van het besturingssysteem, ik heb de SD-kaart opnieuw geformatteerd en een schone versie van NOOBS geïnstalleerd. Ik installeerde toen de volledige desktopversie van Raspian (de bovenste optie), omdat dit ook PIP & GIT zou installeren die de lite-versie niet doet. Hoewel ik de grafische gebruikersinterface (GUI) niet nodig had voor het project, is het een gemakkelijke manier om alle opties in te stellen en met een SD-kaart van 16 GB was er geen gebrek aan ruimte.

Ik heb wifi-toegang ingesteld en vervolgens de volledige installatie uitgevoerd en vervolgens de wizard met updates en upgrades enz. Met behulp van de GUI heb ik de RPI naar behoefte ingesteld, alleen omdat het gebruik van de GUI eenvoudiger is dan de Command Line Interface (CLI). Ik ging vanuit het menu naar het configuratievenster en toen:

  • Op het systeemtabblad heb ik het wachtwoord gewijzigd, ingesteld om op te starten naar CLI en Automatisch inloggen uitgeschakeld
  • Op het tabblad interfaces heb ik 1-draads ingeschakeld
  • Op ok geklikt en opnieuw opgestart

Als u op enig moment terug moet naar de GUI, typt u gewoon startx in de CLI

startx

Stap 3: Stel datapliciteit in om toegang op afstand toe te staan

Stel datapliciteit in om toegang op afstand toe te staan
Stel datapliciteit in om toegang op afstand toe te staan
Stel datapliciteit in om toegang op afstand toe te staan
Stel datapliciteit in om toegang op afstand toe te staan
Stel datapliciteit in om toegang op afstand toe te staan
Stel datapliciteit in om toegang op afstand toe te staan

Ik vond een heel nuttig blogbericht op de Dataplicity-site op https://blog.dataplicity.com/how-to-build-a-raspb… en gebruikte een paar delen hiervan. Hoofdstuk 3 van de blog beschrijft het instellen van Dataplicity voor toegang op afstand tot de RPi. Ik heb Dataplicity nog nooit eerder gebruikt, maar moet zeggen dat ik het ten zeerste aanbeveel als een zeer eenvoudige tool voor externe toegang. Hoewel de screenshots (in de blog hierboven) een beetje verouderd zijn, is het principe prima.

Ga op uw pc naar Dataplicity.com en maak een account aan (u kunt de browser in de GUI gebruiken, maar eerder traag op de RPi Zero). Klik vervolgens op de knop "Nieuw apparaat toevoegen" en een regel code wordt weergegeven in het pop-upvenster. Ga vervolgens naar de CLI op de RPi en typ de tekstregel in. Als alles in orde is, wordt het Datplicity-logo weergegeven en wordt het installatieprogramma uitgevoerd.

Terug op uw pc zou het nieuwe apparaat nu op de Dataplicity-website moeten verschijnen. Klik op het apparaat en u zou een terminalscherm voor uw RPi moeten zien.

Er zijn een paar dingen om hier op te letten:

  • Om in te loggen, typt u "su pi" (voor superuser-toegang) en u wordt gevraagd om het wachtwoord (zoals eerder ingesteld)
  • U moet Wormhole inschakelen (later te gebruiken)
  • U hebt het Wormhole-adres nodig om de gegevens later weer te geven (klik met de rechtermuisknop om te kopiëren indien nodig)

U kunt deze toegang op afstand gebruiken voor alle volgende stappen en is veel gemakkelijker voor het kopiëren van gegevens, programma's enz. dan rechtstreeks op de RPi.

Stap 4: Controleer de sensoren

U kunt nu Dataplicity externe toegang tot RPI gebruiken voor alle volgende secties.

Als alles nu goed is aangesloten, zou je de temperaturen moeten kunnen zien die worden geretourneerd door de DS18B20's. Ik heb de Pi Hut-tutorial doorlopen, maar het meeste hiervan was niet vereist. Als je de volledige details wilt, kun je ze hier vinden:

De belangrijke bits zijn om naar de apparatenmap te gaan en ervoor te zorgen dat 2 verschillende sensoren worden weergegeven.

cd /sys/bus/w1/devices/

Dit zou 2 apparaten moeten tonen die beginnen met 28- en de busmaster. De mijne toont:

28-011453ebfdaa 28-0114543d5daa w1_bus_master1

Deze 2 ID-nummers zijn belangrijk en zullen later nodig zijn! Ga dan naar een van de sensordirectories:

cd 28-011453ebfdaa

(bijvoorbeeld) en vervolgens om de waarde van de sensor af te lezen

kat w1_slave

Er moeten 2 regels tekst worden weergegeven:

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

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

De JA geeft aan dat de sensor correct leest en de 21187 toont de temperatuur in Celsius van 21,187 (delen door 1000). Herhaal dit om de tweede sensor te controleren. Als beide goed lezen, kunnen we doorgaan met het lezen van de gegevens met Python3.

Ik heb de volgende code gekopieerd en aangepast die ik op internet vond, maar ik weet niet meer waar vandaan. Als dit lijkt op jouw code, dan bied ik mijn excuses aan omdat het niet de bedoeling was om plagiaat te plegen; laat het me weten en ik zal je werk erkennen.

Maak een map met de naam projecten en ga naar die map.

mkdir ~/projecten

cd ~/projecten

Gebruik in deze map de teksteditor (nano) om een bestand met de naam thermo-test.py te maken en te bewerken

sudo nano thermo-test.py

Dit had de editor moeten openen en aangezien u Dataplicity gebruikt, kunt u eenvoudig de volgende code hieronder (thermo-test.py) kopiëren en in de editor plakken. U moet de 2 apparaatnamen (vanaf 28-…) wijzigen in degene die hierboven zijn vermeld. Als alles er goed uitziet, drukt u op ctrl+X om te voltooien, Y om op te slaan en terug om de bestaande naam te gebruiken. Als u liever de GUI gebruikt, zal Thonny hetzelfde doen.

Om het testprogramma uit te voeren:

sudo python3 thermo-test.py

Als het goed is, zou dit het bestand moeten uitvoeren met python 3 en elke 10 seconden de 2 temperaturen op het scherm moeten afdrukken. Je kunt testen of alles in orde is door 1 sensor in ijswater te leggen of zachtjes op te warmen met een föhn. Als alles goed lijkt, kunnen we verder!

Stap 5: UFW Firewall

UFW-firewall
UFW-firewall

Omdat deze RPi permanent verbonden zou zijn met internet, besloot ik dat een firewall een goed idee zou zijn en een eenvoudige om te gebruiken is de ongecompliceerde firewall (ufw). Er is een heel eenvoudige tutorial hier

Ik ga niet in de diepte, want dit is niet het doel van deze Instructable, maar in het kort:

Installeer de firewall met:

sudo apt-get install ufw

Stel de standaardregels in:

sudo ufw standaard uitgaand toestaan

sudo ufw standaard inkomende weigeren

Open poort 80 voor Dataplicity

sudo ufw 80. toestaan

Schakel de firewall in

sudo ufw inschakelen

Controleer de status en zorg ervoor dat alles draait

sudo ufw-status

Stap 6: De temperatuurgegevens verzenden als JSON

De temperatuurgegevens verzenden als JSON
De temperatuurgegevens verzenden als JSON

Terug naar de blog van Tim Fernando en sectie 5.

Volg de stappen zoals vermeld (behalve dat we de projectenmap al hebben gemaakt) en alles zou goed moeten werken. Met GIT download je de applicatiebestanden van Tim en de PIP zorgt ervoor dat alle vereiste programma's op je RPi worden geïnstalleerd. Ik ontdekte toen dat ik opnieuw moest opstarten om er zeker van te zijn dat alle pakketten correct waren ingesteld.

Voer vervolgens het programma van Tim uit en uw RPi zou dan JSON-gegevens voor de eerste sensor moeten leveren.

cd home/pi/projecten/ temperatuur-serve-pi

sudo gunicorn temperatuur: app -b 0.0.0.0:80

U kunt via de blog doorgaan naar sectie 6 waar u gegevens vindt voor 1 van de sensoren.

U kunt ook JSON Viewer gebruiken om de gegevens te bekijken https://codebeautify.org/jsonviewer Klik op de knop "URL laden" en plak het eerder vermelde Wormhole-adres. In het linkerdeelvenster ziet u twee vermeldingen, één voor Celsius en één voor Fahrenheit.

Stap 7: Gegevens van beide sensoren verzenden

Gegevens van beide sensoren verzenden
Gegevens van beide sensoren verzenden

Op basis van de code in Temperaturen.py en thermo-test.py heb ik 2temps.py gemaakt, zoals eerder bewerkt in de directory /projects/temperature-serve-pi, in de code geplakt en opgeslagen. Ik rende toen

sudo gunicorn 2temps:app -b 0.0.0.0:80

Toen ik JSON Viewer opnieuw uitvoerde, kreeg ik waarden voor temp1 & temp2

Succes:)

Stap 8: Automatisch starten

Automatische start
Automatische start

Omdat de stroom naar de kas af en toe wordt uitgeschakeld, wilde ik dat de RPi het programma automatisch laadde en de gegevens begon te bewijzen. De eenvoudigste manier lijkt te zijn om het rc.local-bestand te bewerken en de vereiste code onderaan toe te voegen, net boven de exit 0-regel.

cd enz

sudo nan rc.local

voeg dan toe

slaap 10

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

  • De & aan het einde vertelt de computer om het script in een sub-shell uit te voeren, zodat uw computer niet wacht tot de functie eindigt en doorgaat met opstarten
  • Slaap 10 [seconden] zorgt ervoor dat alle voorgaande bewerkingen zijn voltooid voordat de service wordt gestart.

Sluit af en sla op zoals eerder. Start vervolgens opnieuw op en voer JSON Viewer opnieuw uit om te controleren of alles in orde is.

Als je meer informatie wilt over automatisch draaiende programma's, vind je hier een geweldige tutorial

Stap 9: Geef de gegevens weer op Freeboard.io (1)

Toon de gegevens op Freeboard.io (1)
Toon de gegevens op Freeboard.io (1)

De stappen in de blog van Tim werken prima, samengevat; maak een account aan op www.freeboard.io en maak vervolgens een nieuw vrijboord aan, ik noemde de mijne SHEDTEMPERATURES.

Voeg eerst een gegevensbron toe, klik rechtsboven op TOEVOEGEN en selecteer JSON als het type in de pop-up, geef de gegevensbron een NAAM, voeg het wormgatadres van eerder toe als de URL en klik op NEE voor TRY THINGPROXY. Temperaturen veranderen maar heel langzaam en dus ELKE 15 SECONDEN VERFRISSEN is prima. Klik op OPSLAAN.

Stap 10: Geef de gegevens weer op Freeboard.io (2)

Toon de gegevens op Freeboard.io (2)
Toon de gegevens op Freeboard.io (2)
Toon de gegevens op Freeboard.io (2)
Toon de gegevens op Freeboard.io (2)
Toon de gegevens op Freeboard.io (2)
Toon de gegevens op Freeboard.io (2)
Toon de gegevens op Freeboard.io (2)
Toon de gegevens op Freeboard.io (2)

Klik op PANEEL TOEVOEGEN en vervolgens op + om de eerste widget toe te voegen. Je kunt verschillende TYPE's selecteren en ermee spelen, maar ik ontdekte dat Gauge prima was. Geef een geschikte TITEL, EENHEDEN (C), MINIMUM en MAXIMUM die bij uw toepassing passen. Voor de DATASOURCE, klik op de + en de hierboven aangemaakte bron zal verschijnen.

De vervolgkeuzelijst zou nu de 2 JSON-gegevensbronnen (temp2 & temp2) moeten tonen die eerder zijn gebouwd. Selecteer de juiste bron en klik op opslaan.

Herhaal dit voor de tweede meter en we zijn helemaal klaar.

De gegevens zouden nu op de 2 meters moeten worden weergegeven en als je de PRi nog steeds op een monitor hebt aangesloten, zou je de verzoeken van Freeboard.io moeten zien zodra ze binnenkomen.

Stap 11: Bouw het project in een doos

Bouw het project in een doos
Bouw het project in een doos
Bouw het project in een doos
Bouw het project in een doos
Bouw het project in een doos
Bouw het project in een doos
Bouw het project in een doos
Bouw het project in een doos

Tot nu toe waren de RPi en de andere componenten allemaal op de bank gemonteerd met behulp van een breadboard. Een klein stukje stripboard werd vervolgens gebruikt om het breadboard te vervangen en de draden werden allemaal op hun plaats gesoldeerd.

Er werd een felroze kleine Lego-opbergdoos gevonden die veel ruimte had en waar de RPI niet te warm zou worden. gaten werden in de zijkanten van de doos geboord en 3 mm nylon montagepilaren werden gebruikt om de RPi en het stripboard op hun plaats te houden.

Er zijn slechts 3 verbindingen nodig van de GPIO, 3.3v, GND & data.

  • 3.3vdc-pin 1
  • GND-pen 6
  • Gegevens (GPIO4) pin 7

In de doos zijn ook gaten toegevoegd voor USB-voeding en kabels naar de temperatuursensoren. Nadat alles op zijn plaats was gemonteerd, werd er een kleine hoeveelheid siliconenkit toegevoegd om ervoor te zorgen dat spinnen het geen lekkere warme plek vonden om te overwinteren!

Stap 12: Klaar

Afgewerkt
Afgewerkt
Afgewerkt
Afgewerkt

De doos werd in de kas geplaatst en gevoed via een USB-oplader. De twee sensoren werden boven in de kas geplaatst en de andere op een plantenpot om te controleren hoe koud de zaailingen 's nachts werden.

Dit is mijn eerste Instructable en ik hoop dat je denkt dat het goed is. Als u fouten vindt, laat het me weten en ik zal het aanpassen waar nodig. De volgende stap zou kunnen zijn om de gegevens elke (zeg) 60 seconden te loggen, maar dit komt later.

Aanbevolen: