Il monitoraggio delle temperature può essere un requisito in molti dei tuoi progetti Raspberry Pi. È relativamente facile da fare in Raspberry Pi e i componenti necessari per questo progetto non sono troppo costosi.Questo articolo mostra come utilizzare il modulo termometro digitale DS18B20 per monitorare la temperatura utilizzando Raspberry Pi. L'articolo mostra anche come creare un'app web per visualizzare la temperatura.
Cose di cui avrai bisogno:
Per provare gli esempi in questo articolo, avrai bisogno di quanto segue:
- Un computer a scheda singola Raspberry Pi
- Un adattatore di alimentazione per il dispositivo Raspberry Pi
- Una scheda microSD con sistema operativo Raspberry Pi installato
- Connettività di rete sul dispositivo Raspberry Pi
- Un tagliere
- 3 pezzi di cavi di collegamento femmina-femmina
- Alcuni cavi di collegamento maschio-maschio
- Un resistore da 10k
- Un modulo termometro digitale DS18B20
Piedinatura del termometro digitale DS18B20
Se si tiene il termometro digitale DS18B20 come mostrato nell'immagine qui sotto, il primo pin sarà messo a terra (TERRA), il secondo pin sarà DATI, e il terzo perno sarà VCC.
Schema elettrico
Lo schema elettrico del monitor della temperatura è mostrato nell'immagine qui sotto.
qui, il PIN2/5V del dispositivo Raspberry Pi deve essere collegato al PIN3/VCC del modulo termometro digitale.
Il PIN7/GPIO4 del dispositivo Raspberry Pi deve essere collegato al PIN2/DATI del modulo termometro digitale.
Il PIN9/GND del dispositivo Raspberry Pi deve essere collegato al PIN1/GND del modulo termometro digitale.
UN Resistenza da 10k 10 dovrebbe essere collegato tra PIN2 e PIN3 del modulo termometro digitale.
Dovresti tenere il tuo Raspberry Pi come mostrato nell'immagine qui sotto. Quindi, il pin in alto a sinistra sarà will PIN1. Il perno proprio accanto a PIN1 sarà PIN2. Quindi, se vai avanti di una riga, quella di sinistra sarà PIN3 e quello giusto sarà PIN4, e così via.
Dopo aver collegato tutti i componenti al tuo dispositivo Raspberry Pi, dovrebbe assomigliare a questo:
Dai un'occhiata più da vicino a come ho posizionato i componenti sulla breadboard.
Dopo aver collegato tutti i componenti al tuo dispositivo Raspberry Pi, accendi il dispositivo Raspberry Pi. Quindi, connettiti al tuo dispositivo Raspberry Pi tramite VNC o SSH.
Lettura dei dati di temperatura dal termometro digitale DS18B20
Il modulo termometro DS18B20 utilizza il protocollo di comunicazione a 1 filo per inviare dati al Raspberry Pi. Per impostazione predefinita, l'interfaccia a 1 filo non è abilitata. Puoi facilmente abilitare l'interfaccia dallo strumento di configurazione Raspberry Pi.
Per abilitare l'interfaccia a 1 filo, eseguire raspi-config con il seguente comando:
$ sudo raspi-config
Selezionare Opzioni di interfaccia e premi
Selezionare 1-filo e premi
Selezionare
stampa
Per uscire dal raspi-config utilità, premere
Affinché le modifiche abbiano effetto, riavvia il tuo Raspberry Pi come segue:
$ sudo reboot
Per verificare se il w1_gpio e w1_therm vengono caricati i moduli del kernel, eseguire il seguente comando:
$ sudo lsmod | grep w1
Se per qualche motivo, il w1_therm modulo non è caricato, è possibile caricarlo manualmente con il seguente comando:
$ sudo modprobe w1_therm
Una volta abilitato Comunicazione a 1 filo e caricato il w1_therm modulo, un nuovo dispositivo (28-00000ba693e9, nel mio caso) dovrebbe essere elencato in /sys/bus/w1/devices directory, come puoi vedere nello screenshot qui sotto.
$ ls /sys/bus/w1/dispositivi/
Passare alla nuova directory, come segue:
$ cd /sys/bus/w1/devices/28-00000ba693e9
dovresti trovare un temperatura file nella directory, come puoi vedere nello screenshot qui sotto.
$ ls -lh
Il temperatura il file è un semplice file di testo. È possibile leggere i dati di temperatura utilizzando il gatto comando, come segue:
$ temperatura del gatto
Come puoi vedere, i dati della temperatura sono stampati sulla console. Qui, 30375 si intende 30.375°C.
Puoi usare un linguaggio di programmazione, come Python o Node.js, per analizzare questi dati di temperatura e utilizzarli sulla tua app. Ti mostrerò come farlo nella prossima sezione di questo articolo.
Per analizzare i dati di temperatura utilizzando un linguaggio di programmazione, sarà necessario il percorso assoluto per il temperatura file. Puoi trovarlo usando il leggi link comando, come segue:
$ readlink -f temperatura
Crea un'app Web per visualizzare i dati sulla temperatura:
In questa sezione imparerai come analizzare i dati di temperatura dal modulo termometro DS18B20 e visualizzarli su un'app web.
In questo esempio, creerò un'API, che analizzerà i dati di temperatura dal modulo del termometro DS18B20 a cui è possibile accedere dall'API. Creerò anche un'app Web che recupererà i dati sulla temperatura dall'API e li visualizzerà correttamente. Userò il Nodo.js linguaggio di programmazione per farlo. I codici vengono caricati nel mio repository GitHub shovon8/ds18b20-raspberrypi-api. Potresti voler dare un'occhiata se hai difficoltà a copiare e incollare i codici da questo articolo.
Nodo.js non è installato sul sistema operativo Raspberry Pi per impostazione predefinita. Ma è disponibile nel repository ufficiale dei pacchetti del sistema operativo Raspberry Pi. Puoi installare facilmente Node.js dal repository del pacchetto del sistema operativo Raspberry Pi.
Innanzitutto, aggiorna la cache del repository del pacchetto APT con il seguente comando:
$ sudo apt update
Quindi, installa Node.js e NPM con il seguente comando:
$ sudo apt install nodejs npm
Per confermare l'installazione, premere sì e poi premere
Il gestore di pacchetti APT scaricherà e installerà tutti i pacchetti richiesti. Potrebbe volerci un po' di tempo per completare.
A questo punto Node.js e NPM dovrebbero essere installati.
Una volta nodo.js e NPM sono installati, controlla se il nodo e npm i comandi sono disponibili, come segue:
$ nodo --version$ npm --version
Aggiorna NPM con il seguente comando:
$ sudo npm install --global npm
NPM dovrebbe essere aggiornato.
Come puoi vedere, NPM è stato aggiornato dalla versione 5.8.0 alla versione 6.14.8.
$ nodo --version $ npm --version
Ora quel nodo.js e NPM sono installati, crea la nuova directory del progetto ~/ds18b20, come segue:
$ mkdir -v ~/ds18b20
Vai a ~/ds18b20 rubrica, come segue:
$ cd ~/ds18b20
Crea il vuoto pacchetto.json file con il seguente comando:
$ npm init --y
Installa il Esprimere.js libreria per il progetto con il seguente comando:
$ npm install --save express
L'Espresso.js dovrebbe ora essere installata.
Crea il nuovo file server.js nella directory del progetto, come segue:
$ nano server.js
Inserisci le seguenti righe di codici nel in server.js file.
let express = require('express');let fs = require('fs');
let server = express();
const PORTA = 8080;
const WEBROOT = './pubblico';
server.get('/', express.statico(WEBROOT));
server.get('/temperatura', (req, res) =>
let tempDataPath = '/sys/bus/w1/devices/28-00000ba693e9/temperature';
lasciare temperatura = fs.readFileSync(tempDataPath, codifica: 'utf8', flag: 'r') / 1000;
res.json(temperatura, rangeStart: -55, rangeEnd: 125);
);
server.ascolta(PORTA, () =>
console.log('server in esecuzione sulla porta $PORT');
);
Una volta terminato, premere
Qui, la riga 1 importa esprimere, e la riga 2 importa il fs modulo.
La riga 4 inizializza express.
Le righe 6 e 7 definiscono il PORTA e WEBROOT variabili costanti, rispettivamente. L'API e il server web verranno eseguiti su PORTA (che è 8080, in questo articolo) e il server web servirà contenuti statici dal WEBROOT (qual è pubblico/ directory all'interno della directory del progetto in questo articolo).
La riga 9 viene utilizzata per configurare express per servire contenuti statici dal WEBROOT.
Le righe 11-15 definiscono l'endpoint API /temperatura, che verrà utilizzato per ottenere i dati della temperatura in formato JSON.
Nella riga 12, il tempDataPath variabile contiene il percorso assoluto per il temperatura file del modulo termometro digitale DS18B20, mostrato in una sezione precedente di questo articolo.
Nella riga 13, i dati di temperatura vengono letti dal temperatura file utilizzando il Nodo.js fs e i dati della temperatura sono memorizzati nel temperatura variabile.
Nella riga 14, i dati della temperatura vengono stampati in formato JSON. Il modulo termometro digitale DS18B20 può misurare tra le temperature da -55°C a 125°C. L'ho aggiunto nell'output JSON usando il gammaInizio e gammaFine proprietà.
Infine, la riga 17-19 esegue l'API e il server web su PORTA (che è 8080, in questo articolo).
Creare un pubblico/ directory nella directory del progetto, come segue:
$ mkdir -v public
Corri il server.js programma con il seguente comando:
$ nodo server.js
Il server dovrebbe essere in esecuzione sulla porta 8080.
È possibile accedere ai dati di temperatura del modulo termometro DS18B20 dal /temperatura endpoint dell'API.
Per verificare se è possibile ottenere i dati sulla temperatura dall'API, eseguire arricciare, come segue:
$ curl -s http://localhost:8080/temperatura | json_ppCome puoi vedere, i dati della temperatura sono stampati sulla console in formato JSON. Quindi, l'API funziona.
stampa
Ora creerò una pagina Web che richiederà al server API i dati sulla temperatura e li visualizzerà correttamente sulla pagina. I dati della temperatura verranno aggiornati ogni 5 secondi.
Crea un nuovo indice.html file nel pubblico/ directory del progetto, come segue:
$ nano pubblico/indice.html
Inserisci le seguenti righe di codici nel in indice.html file.
00.00°C
Aggiornamenti della temperatura ogni 5 secondi
Una volta terminato, premere
Il file HTML indice.html è facile da capire. È il formato in cui verranno visualizzati i dati di temperatura nell'app web.
Qui, le righe 53-55 vengono utilizzate per visualizzare una barra di avanzamento e le righe 57-60 vengono utilizzate per visualizzare la temperatura.
Le righe 5-49 sono usate per decorare bene l'app web usando CSS (Cascading Style Sheet).
Le righe 62-109 servono per rendere funzionale l'app web. I codici JavaScript vengono utilizzati per animare la barra di avanzamento, recuperare i dati della temperatura dall'API e visualizzare le informazioni.
La linea 63 corre il principale funzione una volta caricata l'app Web nel browser.
Il principale la funzione è molto lunga. Si estende dalla linea 65 alla linea 108. All'interno della funzione principale, abbiamo alcune altre funzioni, come getTemperature, aggiornaTemperatura, aggiornamentoProgress, app, e inizio.
Il aggiornamentoProgress la funzione, nelle righe 83-86, prende la percentuale di avanzamento come input e aggiorna la barra di avanzamento.
Il aggiornaTemperatura la funzione nelle righe 77-81 prende i dati della temperatura come input e aggiorna l'app Web con i dati della temperatura.
Il getTemperature la funzione nelle righe 66-75 fa una richiesta al /temperatura endpoint dell'API e ottiene i dati sulla temperatura. Una volta ricevuti i dati, chiama il aggiornaTemperatura funzione con i dati. Il aggiornaTemperatura funzione quindi aggiorna l'app Web con i nuovi dati di temperatura.
Il app la funzione, nelle righe 88-99, anima la barra di avanzamento e richiede i dati di temperatura dall'API ogni 5 secondi.
Il inizio la funzione, nelle righe 101-104, avvia l'app web.
Apri il pacchetto.json file con l'editor di testo nano come segue:
$ nano pacchetto.json
Modificare principale per server.js e aggiungi il nuovo script servire nel script sezione, come indicato nello screenshot qui sotto.
Una volta terminato, premere
Ora che tutto è pronto, esegui l'app Web e l'API con il seguente comando:
$ npm run serve
Il server dovrebbe essere in esecuzione sulla porta 8080.
Ora apri un browser web sul tuo dispositivo Raspberry Pi e visita http://localhost:8080. I dati di temperatura dal modulo termometro digitale DS18B20 dovrebbero essere visualizzati sul browser web, come puoi vedere nello screenshot qui sotto.
I dati della temperatura dovrebbero essere aggiornati ogni 5 secondi.
Come puoi vedere, la temperatura cambia ogni 5 secondi.
Se desideri accedere all'app web da un altro computer della tua rete, dovrai conoscere l'indirizzo IP del tuo dispositivo Raspberry Pi.
Puoi trovare l'indirizzo IP del tuo dispositivo Raspberry Pi con il seguente comando:
$ hostname -ICome puoi vedere, l'indirizzo IP del mio dispositivo Raspberry Pi è 192.168.0.107. Questo sarà diverso per te. Quindi, assicurati di sostituire l'indirizzo IP d'ora in poi.
Una volta che conosci l'indirizzo IP del tuo dispositivo Raspberry Pi, dovresti essere in grado di accedere all'app web da qualsiasi computer sulla tua rete utilizzando un browser web. Basta visitare http://192.168.0.107:8080 e l'app Web dovrebbe mostrare i dati di temperatura dal modulo termometro digitale DS18B20.
Conclusione
In questo articolo, hai imparato come utilizzare il modulo termometro digitale DS18B20 in Raspberry Pi per misurare la temperatura. Hai anche imparato a creare un nodo.js API per mostrare i dati della temperatura in un'app Web, che accede ai dati della temperatura dall'API e li visualizza. Questo articolo dovrebbe aiutarti a iniziare con il monitoraggio della temperatura Raspberry Pi con il modulo termometro digitale DS18B20 e IoT con Raspberry Pi.