Sommario:
- Passaggio 1: creazione di un ambiente di compilazione
- Passaggio 2: ottieni il codice sorgente, configura e compila
- Passaggio 3: collegare i componenti hardware
- Passaggio 4: Flash ed Esegui
- Passaggio 5: interazione
- Passaggio 6: dettagli di implementazione
Video: Striscia LED WiFi + sensore di temperatura con ESP8266: 6 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
Questo tutorial descrive i passaggi per configurare un ESP8266 e farlo parlare sia con un sensore di temperatura che con una striscia LED, pur essendo in grado di ricevere input e inviare output con MQTT tramite WiFi. Il progetto è stato realizzato per un corso tenuto al Cal Poly San Luis Obispo nell'autunno 2016- CPE 439: Real Time Embedded Systems. L'obiettivo generale era dimostrare la facilità di creare una "cosa" connessa a Internet con hardware economico.
Forniture/attrezzature richieste:
- Scheda di sviluppo NodeMCU ESP8266
- Striscia LED WS2812B
- MAX31820 Sensore di temperatura
- tagliere
- Resistore da 4,7K ohm
- Resistenza da 220 ohm
- cavi per ponticelli
- cavo micro-usb
- PC (o VM) con Linux (es. Ubuntu)
Presupposti/Prerequisiti:
- esperienza con l'utilizzo di strumenti da riga di comando e l'installazione di pacchetti su una distribuzione basata su Debian
- comprensione di base della sintassi del Makefile
- cavi di collegamento
Passaggio 1: creazione di un ambiente di compilazione
Per compilare il progetto, avrai bisogno di esp-open-sdk installato sul tuo computer. Segui il link e leggi le istruzioni di compilazione. In breve, eseguirai alcuni comandi sudo apt-get per installare le dipendenze, un git clone --recursive per clonare/scaricare esp-open-sdk e infine un comando make per compilare esp-open-sdk.
Guardami
Passaggio 2: ottieni il codice sorgente, configura e compila
Ora che esp-open-sdk è stato compilato, clona il repository del progetto.
git clone
Passare alla directory del progetto, creare una cartella.local e copiare le impostazioni di esempio.
cd esp-rtos-test
mkdir -p.local cp settings.example.mk.local/settings.mk
Ora apri.local/settings.mk con qualsiasi editor di testo e modifica le seguenti impostazioni:
- OPENSDK_ROOT: il percorso assoluto per la posizione di esp-open-sdk che hai creato nel passaggio 1
- WIFI_SSID: l'SSID della tua rete WiFi
- WIFI_PASS: la password della tua rete WiFi
- PIXEL_COUNT: il numero di pixel sulla striscia LED WS2812B
Nota: poiché questo progetto utilizza SPI per pilotare i LED e utilizza NodeMCU 3.3v per alimentarli, probabilmente non sarai in grado di pilotare più di ~60 LED.
Nota: le altre impostazioni non devono essere modificate, ma possono esserlo se lo si desidera. Si consiglia di mantenere l'ordine delle priorità dell'attività. Più basso è il numero di priorità, minore è la priorità dell'attività.
Ora costruisci il progetto:
make -C esempi/cpe439
Se tutto è impostato correttamente, dovrebbe iniziare la compilazione. Alla fine dovresti vedere:
"firmware/cpe439.bin" creato con successo
Guardami
Passaggio 3: collegare i componenti hardware
Ora che il codice è compilato, è il momento di collegare le nostre periferiche.
Per prima cosa, incolla il NodeMCU sulla breadboard, quindi usa i cavi dei ponticelli per effettuare i collegamenti come mostrato nel diagramma.
Un paio di cose da sapere:
- Importante: la linea dati WS2812B non è bidirezionale. Se osservi attentamente i segni sul lato LED della striscia, dovresti vedere piccole frecce che puntano in una direzione. L'uscita da D7 del NodeMCU deve essere diretta nel WS2812B allo stesso modo dell'indicatore di direzione, che puoi vedere nel diagramma se guardi da vicino.
- A seconda del tipo di connettori con cui viene fornito il WS2812B, potrebbe essere necessario apportare alcune modifiche per collegarli saldamente alla breadboard. È inoltre possibile utilizzare clip a coccodrillo per collegarli a cavi jumper compatibili con breadboard.
- I pin MAX31820 hanno un passo più piccolo e sono più sottili dei ponticelli standard da 0,1 "/2,54 mm, il che li rende difficili da collegare. Un modo per aggirare questo è usare i cavi dei ponticelli femmina-maschio, togliere la custodia di plastica dal lato femmina, quindi utilizzare delle pinze per crimpare saldamente le estremità del ponticello femmina attorno ai pin più piccoli MAX31820.
Ricontrollare le connessioni prima di accendere il NodeMCU in modo da non danneggiare i componenti.
Passaggio 4: Flash ed Esegui
lampeggiante
Con tutto l'hardware collegato, collega il tuo NodeMCU e flasha con il seguente comando:
make flash -C esempi/cpe439 ESPPORT=/dev/ttyUSB0
/dev/ttyUSB0 è il com seriale sotto il NodeMCU dovrebbe apparire. Se hai altri dispositivi seriali collegati, potrebbe essere visualizzato come /dev/ttyUSB1 o qualche altro numero. Per verificare, puoi eseguire questo comando due volte, una volta con NodeMCU scollegato e una volta collegato, e confrontare la differenza:
ls /dev/ttyUSB*
Un altro problema che potresti riscontrare è non avere il permesso di accedere al dispositivo. Due modi per risolvere questo problema sono:
-
Aggiungi il tuo utente al gruppo dialout:
sudo adduser $(whoami) dialout
- chmod o chown il dispositivo:
sudo chmod 666 /dev/ttyUSB0 sudo chown $(whoami):$(whoami) /dev/ttyUSB0Il primo metodo è preferito in quanto è una soluzione permanente.
In esecuzione
Dopo aver eseguito correttamente il comando flash, il dispositivo si avvierà immediatamente e inizierà a eseguire il codice compilato. In qualsiasi momento dopo aver lampeggiato è possibile eseguire il seguente comando per guardare l'output seriale:
python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 /dev/ttyUSB0 500000 --raw -q
Per risparmiare tempo puoi aggiungere questo al tuo file ~/.bashrc:
alias nodemcu='python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 /dev/ttyUSB0 500000 --raw -q'
..che ti permette di digitare semplicemente "nodemcu" come alias per quel comando.
Se tutto è configurato correttamente, la striscia LED dovrebbe accendersi in verde e sul seriale dovresti vedere la connessione WiFi, ottenere un indirizzo IP, connettersi a MQTT e messaggi che i dati sulla temperatura vengono espulsi.
connesso con MyWiFiSSID, canale 1dhcp client start…wifi_task: status = 1wifi_task: status = 1ip:192.168.2.23, mask:255.255.255.0, gw:192.168.2.1ws2812_spi_init okRequest temp OKwifi_task: status = 5xQueueReceive _25.43xWiFiestarted: (Ri)connessione al server MQTT test.mosquitto.org …xQueueReceive +25.50xQueueSend ok doneSend MQTT connect … MQTTv311donexQueueReceive +25.56 xQueueSend ok
Passaggio 5: interazione
Supponendo che il tuo dispositivo si sia connesso al WiFi e al broker MQTT con successo, sarai in grado di inviare e ricevere dati dal NodeMCU con MQTT. Se non lo hai già fatto, installa il pacchetto client mosquitto:
sudo apt-get install mosquitto-clients
Ora dovresti essere in grado di usare i programmi mosquitto_pub e mosquitto_sub dalla tua shell.
Ricezione di aggiornamenti sulla temperatura
Per ricevere i dati sulla temperatura, utilizzeremo il comando mosquitto_sub per iscriverci all'argomento su cui sta pubblicando il NodeMCU.
mosquitto_sub -h test.mosquitto.org -t /cpe439/temp
Dovresti vedere i dati di temperatura (in gradi Celsius), in arrivo nel terminale.
+25.87+25.93+25.68…
Impostazione del colore della striscia LED a distanza
Un semplice formato di messaggio viene utilizzato per inviare valori RGB al NodeMCU tramite MQTT. Il formato del comando è simile a questo:
r:RRRg:GGGb:BBB~
Dove RRR, GGG, BBB corrispondono ai valori RGB (0-255) del colore che si desidera inviare. Per inviare il nostro comando, useremo il comando mosquitto_pub. Ecco alcuni esempi:
mosquitto_pub -h test.mosquitto.org -t /cpe439/rgb -m 'r:255g:0b:0~' # redmosquitto_pub -h test.mosquitto.org -t /cpe439/rgb -m 'r:0g:255b: 0~' # greenmosquitto_pub -h test.mosquitto.org -t /cpe439/rgb -m 'r:0g:0b:255~' # blu
Se vuoi essere creativo, trova un selettore di colori online come questo e modifica il comando con qualsiasi valore RGB tu scelga.
Attento
Gli argomenti in questo progetto sono impostati su /cpe439/rgb e /cpe439/temp su un broker MQTT pubblico, il che significa che non c'è nulla che impedisca a qualcun altro di pubblicare o iscriversi agli stessi argomenti come te. Per provare le cose, usare un broker pubblico va bene, ma per progetti più seri ti consigliamo di connetterti a un broker con protezione tramite password o eseguire il tuo broker sul server.
Passaggio 6: dettagli di implementazione
Onewire
L'ESP8266 ha solo 1 core, quindi a lungo, attività di blocco come l'attesa di 750 ms affinché il sensore di temperatura esegua una misurazione della temperatura comporterebbe normalmente il mancato funzionamento del WiFi e forse anche un arresto anomalo. Nel paradigma FreeRTOS, chiami vTaskDelay() per gestire queste lunghe attese, ma ci sono anche molte attese più brevi richieste tra le letture e le scritture che sono più brevi del tick del sistema FreeRTOS e quindi non possono essere evitate con vTaskDelay(). Per aggirare questi problemi, il driver onewire in questo progetto è stato scritto per funzionare da una macchina a stati guidata dal timer hardware di ESP8266, che può attivare eventi fino a ogni 10 microsecondi, che risulta essere il più breve tempo richiesto tra le operazioni di lettura/scrittura onewire. La maggior parte delle altre implementazioni utilizza una chiamata di blocco a delay_us() o simile per gestirlo, ma se si aggiornano costantemente la temperatura, tutti questi ritardi iniziano a sommarsi, risultando in un'applicazione meno reattiva. La fonte di questa porzione di codice si trova nella cartella extras/onewire.
WS2812B
L'ESP8266 non ha opzioni hardware standard per PWM abbastanza veloce da pilotare strisce LED a 800KHz. Per aggirare questo problema, questo progetto utilizza il pin MOSI SPI per pilotare i LED. Regolando la frequenza di clock di SPI e modificando il payload SPI, è possibile ottenere un controllo abbastanza affidabile di ogni singolo LED. Questo metodo non è privo di difetti: per prima cosa i LED dovrebbero essere alimentati con una sorgente a 5V e dovrebbe essere aggiunto un traslatore di livello all'uscita del pin SPI. Ma 3,3 V funziona. In secondo luogo, ci sono problemi che si verificano a causa di un tempismo imperfetto utilizzando il metodo SPI. E terzo è che ora non puoi usare SPI per nient'altro. Ulteriori informazioni su questo metodo sono disponibili qui e l'origine di questa porzione di codice si trova nella cartella extras/ws2812.
Un metodo più affidabile per pilotare le strisce LED consiste nell'utilizzare i2s. Tuttavia, questo metodo ha molti hack specifici per i chip, quindi SPI sembrava essere una scelta migliore come esercizio di apprendimento.
Consigliato:
Interfaccia Arduino con sensore a ultrasuoni e sensore di temperatura senza contatto: 8 passaggi
Interfacciamento Arduino con sensore ad ultrasuoni e sensore di temperatura senza contatto: oggi, Makers, Developers preferisce Arduino per lo sviluppo rapido della prototipazione dei progetti. Arduino è una piattaforma elettronica open source basata su hardware e software di facile utilizzo. Arduino ha un'ottima community di utenti. In questo progetto
ESP8266 NodeMCU Access Point (AP) per server Web con sensore di temperatura DT11 e stampa di temperatura e umidità nel browser: 5 passaggi
ESP8266 NodeMCU Access Point (AP) per server Web con sensore di temperatura DT11 e temperatura e umidità di stampa nel browser: ciao ragazzi nella maggior parte dei progetti utilizziamo ESP8266 e nella maggior parte dei progetti utilizziamo ESP8266 come server Web in modo da poter accedere ai dati su qualsiasi dispositivo tramite wifi accedendo al server Web ospitato da ESP8266 ma l'unico problema è che abbiamo bisogno di un router funzionante per
Sensore di frequenza cardiaca reattivo con striscia LED Arduino: 5 passaggi
Sensore di frequenza cardiaca reattivo con striscia LED Arduino: la prima cosa che ho fatto è stata collegare il mio sensore di frequenza cardiaca Grove al mio Arduino tramite un tutorial molto facile da seguire su YouTube. https://www.youtube.com/watch?v=Dzq4tnJ0LjAhttps://www.kiwi-electronics.nl/grove-finger-clip
Striscia LED attivata dal sensore di movimento con timer: 6 passaggi (con immagini)
Striscia LED attivata da sensore di movimento con timer: ciao a tutti! Sono davvero felice di scrivere un altro istruibile in questo momento. Questo progetto è nato quando sono stato contattato da un collega istruibile (?!) (David @dducic) diversi mesi fa chiedendo aiuto per la progettazione. Quindi ecco le specifiche originali: &q
SENSORE SUHU DENGAN LCD DAN LED (Realizzazione del sensore di temperatura con LCD e LED): 6 passaggi (con immagini)
SENSOR SUHU DENGAN LCD DAN LED (Making Temperature Sensor With LCD and LED): hai, dico Devi Rivaldi mahasiswa UNIVERSITAS NUSA PUTRA dari Indonesia, di si dica akan bebagi cara membuat sensor suhu menggunakan Arduino dengan Output ke LCD e LED. Ini adalah pembaca suhu dengan desain saya sendiri, dengan sensor ini anda