Övervakning av temperaturer kan vara ett krav i många av dina Raspberry Pi-projekt. Det är relativt enkelt att göra i Raspberry Pi och de komponenter som krävs för detta projekt är inte för dyra.Den här artikeln visar hur du använder den digitala termometermodulen DS18B20 för att övervaka temperaturen med hjälp av Raspberry Pi. Artikeln visar också hur man skapar en webbapp för att visa temperaturen.
Saker du behöver:
För att testa exemplen i den här artikeln behöver du följande:
- En Raspberry Pi-dator ombord
- En strömadapter för Raspberry Pi-enheten
- Ett microSD-kort med Raspberry Pi OS installerat
- Nätverksanslutning på Raspberry Pi-enheten
- En brödbräda
- 3 st kvinnliga till kvinnliga anslutningsledningar
- Några man-till-man-anslutningskablar
- Ett 10k motstånd
- En DS18B20 digital termometermodul
DS18B20 Digital termometerutgångar
Om du håller den digitala termometern DS18B20 enligt bilden nedan kommer den första stiftet att slipas (GND), den andra stiftet kommer att vara DATA, och den tredje stiftet kommer att vara VCC.
Kretsschema
Kretsschemat för temperaturmonitorn visas i bilden nedan.
Här, den PIN2 / 5V på Raspberry Pi-enheten ska anslutas till PIN3 / VCC av den digitala termometermodulen.
De PIN7 / GPIO4 på Raspberry Pi-enheten ska anslutas till PIN2 / DATA av den digitala termometermodulen.
De PIN9 / GND på Raspberry Pi-enheten ska anslutas till PIN1 / GND av den digitala termometermodulen.
A 10kΩ motstånd bör anslutas mellan PIN2 och PIN3 av den digitala termometermodulen.
Du bör hålla din Raspberry Pi som visas i bilden nedan. Då kommer den övre vänstra stiftet att vara PIN1. Stiftet bredvid PIN1 kommer vara PIN2. Om du sedan går framåt en rad kommer den vänstra att vara PIN3 och den rätta kommer att vara PIN4, och så vidare.
När du väl har anslutit alla komponenter till din Raspberry Pi-enhet ska det se ut så här:
Ta en närmare titt på hur jag placerade komponenterna på panelen.
När du har anslutit alla komponenter till din Raspberry Pi-enhet, slå på Raspberry Pi-enheten. Anslut sedan till din Raspberry Pi-enhet via VNC eller SSH.
Läser temperaturdata från DS18B20 digital termometer
DS18B20-termometermodulen använder 1-tråds kommunikationsprotokoll för att skicka data till Raspberry Pi. Som standard är 1-trådsgränssnittet inte aktiverat. Du kan enkelt aktivera gränssnittet från Raspberry Pi-konfigurationsverktyget.
För att aktivera 1-trådsgränssnittet, kör raspi-config med följande kommando:
$ sudo raspi-config
Välj Gränssnittsalternativ och tryck
Välj 1-tråd och tryck
Välj
Tryck
Att gå ut ur raspi-config verktyg, tryck på
För att ändringarna ska träda i kraft startar du om din Raspberry Pi enligt följande:
$ sudo omstart
För att kontrollera om w1_gpio och w1_therm kärnmoduler är laddade, kör följande kommando:
$ sudo lsmod | grep w1
Om det av någon anledning w1_therm modulen är inte laddad, då kan du ladda den manuellt med följande kommando:
$ sudo modprobe w1_therm
När du har aktiverat 1-trådskommunikation och laddade w1_therm modul, en ny enhet (28-00000ba693e9, i mitt fall) bör listas i / sys / bus / w1 / enheter katalog, som du kan se på skärmdumpen nedan.
$ ls / sys / bus / w1 / enheter /
Navigera till den nya katalogen enligt följande:
$ cd / sys / bus / w1 / enheter / 28-00000ba693e9
Du borde hitta en temperatur fil i katalogen, som du kan se på skärmdumpen nedan.
$ ls -lh
De temperatur filen är en vanlig textfil. Du kan läsa temperaturdata med hjälp av katt kommandot enligt följande:
$ katt temperatur
Som du kan se skrivs temperaturdata ut på konsolen. Här, 30375 innebär att 30.375 ° C.
Du kan använda ett programmeringsspråk, till exempel Python eller Node.js, för att analysera denna temperaturinformation och använda den i din app. Jag kommer att visa dig hur du gör det i nästa avsnitt av den här artikeln.
För att analysera temperaturdata med ett programmeringsspråk behöver du den absoluta sökvägen till temperatur fil. Du hittar detta med hjälp av läslänk kommandot enligt följande:
$ readlink -f temperatur
Skapa en webbapp för att visa temperaturdata:
I det här avsnittet lär du dig att analysera temperaturdata från termometermodulen DS18B20 och visa den i en webbapp.
I det här exemplet skapar jag ett API som analyserar temperaturdata från termometermodulen DS18B20 som kan nås från API: t. Jag kommer också att skapa en webbapp som hämtar temperaturdata från API och visar den snyggt. Jag kommer att använda noden.js programmeringsspråk för att göra det. Koderna laddas upp i mitt GitHub-arkiv shovon8 / ds18b20-raspberrypi-api. Du kanske vill kolla in det om du har problem med att kopiera och klistra in koder från den här artikeln.
Nod.js är inte installerat på Raspberry Pi OS som standard. Men det är tillgängligt i det officiella paketförvaret för Raspberry Pi OS. Du kan enkelt installera Node.js från Raspberry Pi OS-paketförvaret.
Uppdatera först APT-paketets förvarscache med följande kommando:
$ sudo apt uppdatering
Installera sedan Node.js och NPM med följande kommando:
$ sudo apt installera nodejs npm
För att bekräfta installationen, tryck på Y och tryck sedan på
APT-pakethanteraren laddar ner och installerar alla nödvändiga paket. Det kan ta ett tag att slutföra.
Vid denna punkt, Node.js och NPM bör installeras.
Once Node.js och NPM är installerade, kontrollera om nod och npm kommandon är tillgängliga, enligt följande:
$ node --version$ npm --version
Uppgradera NPM med följande kommando:
$ sudo npm install - global npm
NPM bör uppgraderas.
Som du kan se har NPM uppdaterats från version 5.8.0 till version 6.14.8.
$ node --version $ npm --version
Nu den noden.js och NPM är installerade, skapa den nya projektkatalogen ~ / ds18b20, som följer:
$ mkdir -v ~ / ds18b20
Navigera till ~ / ds18b20 katalog, enligt följande:
$ cd ~ / ds18b20
Skapa det tomma paket.json fil med följande kommando:
$ npm init --y
Installera uttrycka.js bibliotek för projektet med följande kommando:
$ npm install - spara express
Expressen.js-biblioteket ska nu installeras.
Skapa den nya filen server.js i projektkatalogen enligt följande:
$ nano-server.js
Ange följande rader med koder i server.js fil.
let express = kräver ('express');låt fs = kräver ('fs');
låt server = express ();
const PORT = 8080;
const WEBROOT = './offentlig';
server.få ('/', uttrycka.statisk (WEBROOT));
server.get ('/ temperature', (req, res) =>
låt tempDataPath = '/ sys / bus / w1 / enheter / 28-00000ba693e9 / temperatur';
låt temperatur = fs.readFileSync (tempDataPath, kodning: 'utf8', flagga: 'r') / 1000;
res.json (temperatur, rangeStart: -55, rangeEnd: 125);
);
server.lyssna (PORT, () =>
trösta.log ('server som körs på port $ PORT');
);
När du är klar trycker du på
Här importerar rad 1 uttrycka, och linje 2 importerar fs modul.
Rad 4 initialiserar express.
Rad 6 och 7 definierar HAMN och WEBROOT konstanta variabler. API och webserver körs HAMN (vilket är 8080, i den här artikeln) och webbservern kommer att servera statiskt innehåll från WEBROOT (vilken är offentlig/ katalog i projektkatalogen i den här artikeln).
Linje 9 används för att konfigurera express för att servera statiskt innehåll från WEBROOT.
Linjer 11-15 definierar API-slutpunkten /temperatur, som kommer att användas för att få temperaturdata till JSON-format.
I rad 12, tempDataPath variabel har den absoluta vägen till temperatur filen för den digitala termometermodulen DS18B20, som visas i ett tidigare avsnitt i den här artikeln.
I rad 13 avläses temperaturdata från temperatur fil med hjälp av noden.js fs-modulen och temperaturdata lagras i temperatur variabel.
I rad 14 skrivs temperaturdata ut i JSON-format. DS18B20 digital termometermodul kan mäta mellan temperaturerna -55 ° C och 125 ° C. Jag har lagt till det i JSON-utgången med rangeStart och rangeEnd egenskaper.
Slutligen kör linje 17-19 API och webserver på HAMN (vilket är 8080, i den här artikeln).
Skapa en offentlig/ katalog i projektkatalogen enligt följande:
$ mkdir -v allmänhet
Springa det server.js program med följande kommando:
$ nodserver.js
Servern ska köras på port 8080.
Du kan komma åt temperaturdata för termometermodulen DS18B20 från /temperatur slutpunkt för API: et.
För att testa om du kan få temperaturdata från API: n, kör ringla, som följer:
$ curl -s http: // localhost: 8080 / temperatur | json_ppSom du kan se skrivs temperaturdata ut på konsolen i JSON-format. Så API fungerar.
Tryck
Nu skapar jag en webbsida som begär API-servern för temperaturdata och visar den snyggt på sidan. Temperaturdata kommer att uppdateras var 5: e sekund.
Skapa en ny index.html filen i offentlig/ projektets katalog, enligt följande:
$ nano public / index.html
Ange följande rader med koder i index.html fil.
00.00 ° C
Temperaturuppdateringar var 5: e sekund
När du är klar trycker du på
HTML-filen index.html är lätt att förstå. Det är det format där temperaturdata kommer att visas i webbappen.
Här används raderna 53-55 för att visa en förloppsindikator och raderna 57-60 för att visa temperaturen.
Linjer 5-49 används för att dekorera webbappen snyggt med CSS (Cascading Style Sheet).
Linjer 62-109 används för att göra webbappen funktionell. JavaScript-koder används för att animera förloppsindikatorn, hämta temperaturdata från API: et och visa informationen.
Linje 63 kör huvud funktion när webbappen laddas i webbläsaren.
De huvud funktionen är mycket lång. Det sträcker sig från linje 65 till linje 108. Inuti huvudfunktionen har vi några andra funktioner, till exempel getTemperature, updateTemperature, updateProgress, app, och Start.
De updateProgress funktion, i raderna 83-86 tar procentandelen av framsteg som inmatning och uppdaterar förloppsindikatorn.
De updateTemperature funktion i rader 77-81 tar temperaturdata som inmatning och uppdaterar webbappen med temperaturdata.
De getTemperature funktion i rad 66-75 gör en begäran till /temperatur slutpunkt för API: et och får temperaturdata. När data väl har tagits emot ringer den till updateTemperature fungerar med data. De updateTemperature funktionen uppdaterar sedan webbappen med de nya temperaturdata.
De app funktionen, i raderna 88-99, animerar förloppsindikatorn och begär temperaturdata från API var 5: e sekund.
De Start funktionen, i raderna 101-104, startar webbappen.
Öppna paket.json fil med nano-textredigeraren enligt följande:
$ nano-paket.json
Förändra huvud till server.js och lägg till det nya skriptet tjäna i skript avsnitt, som markerat i skärmdumpen nedan.
När du är klar trycker du på
Nu när allt är klart kör du webbappen och API: et med följande kommando:
$ npm kör servering
Servern ska köras på port 8080.
Öppna nu en webbläsare på din Raspberry Pi-enhet och besök http: // localhost: 8080. Temperaturdata från den digitala termometermodulen DS18B20 ska visas i din webbläsare, som du kan se på skärmdumpen nedan.
Temperaturdata bör uppdateras var 5: e sekund.
Som du kan se ändras temperaturen var 5: e sekund.
Om du vill komma åt webbappen från en annan dator i ditt nätverk måste du känna till din Raspberry Pi-enhets IP-adress.
Du hittar IP-adressen till din Raspberry Pi-enhet med följande kommando:
$ värdnamn -ISom du kan se är IP-adressen till min Raspberry Pi-enhet 192.168.0.107. Detta kommer att vara annorlunda för dig. Så se till att ersätta IP-adressen från och med nu.
När du väl känner till din Raspberry Pi-enhets IP-adress bör du kunna komma åt webbappen från vilken dator som helst i ditt nätverk med en webbläsare. Besök bara http: // 192.168.0.107: 8080 och webbappen ska visa temperaturdata från den digitala termometermodulen DS18B20.
Slutsats
I den här artikeln lärde du dig hur du använder den digitala termometermodulen DS18B20 i Raspberry Pi för att mäta temperaturen. Du lärde dig också hur du skapar en nod.js API för att visa temperaturdata i en webbapp, som får åtkomst till temperaturdata från API och visar den. Den här artikeln ska hjälpa dig att komma igång med Raspberry Pi temperaturövervakning med den digitala termometermodulen DS18B20 och IoT med Raspberry Pi.