Lampone Pi

Monitoraggio della temperatura in Raspberry Pi

Monitoraggio della temperatura in Raspberry Pi


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:

  1. Un computer a scheda singola Raspberry Pi
  2. Un adattatore di alimentazione per il dispositivo Raspberry Pi
  3. Una scheda microSD con sistema operativo Raspberry Pi installato
  4. Connettività di rete sul dispositivo Raspberry Pi
  5. Un tagliere
  6. 3 pezzi di cavi di collegamento femmina-femmina
  7. Alcuni cavi di collegamento maschio-maschio
  8. Un resistore da 10k
  9. 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 e premi .

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 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 + X seguito da e per salvare il server.js file.

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_pp

Come puoi vedere, i dati della temperatura sono stampati sulla console in formato JSON. Quindi, l'API funziona.

stampa + C per fermare il server.

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.




Monitoraggio della temperatura







00.00°C


Aggiornamenti della temperatura ogni 5 secondi



Una volta terminato, premere + X seguito da e per salvare il indice.html file.

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 + X seguito da e per salvare il pacchetto.json file.

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 -I

Come 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.

I 10 migliori giochi da giocare su Ubuntu
La piattaforma Windows è stata una delle piattaforme dominanti per i giochi a causa dell'enorme percentuale di giochi che si stanno sviluppando oggi p...
I 5 migliori giochi arcade per Linux
Al giorno d'oggi, i computer sono macchine serie utilizzate per i giochi. Se non riesci a ottenere il nuovo punteggio più alto, saprai cosa intendo. I...
Battaglia per Wesnoth 1.13.6 Sviluppo rilasciato
Battaglia per Wesnoth 1.13.6 rilasciato il mese scorso, è la sesta versione di sviluppo nella 1.13.x e offre una serie di miglioramenti, in particolar...