Sommario:

Striscia LED WiFi + sensore di temperatura con ESP8266: 6 passaggi
Striscia LED WiFi + sensore di temperatura con ESP8266: 6 passaggi

Video: Striscia LED WiFi + sensore di temperatura con ESP8266: 6 passaggi

Video: Striscia LED WiFi + sensore di temperatura con ESP8266: 6 passaggi
Video: Sensori di Umidità del Terreno connessi a Internet con ESP32 - Irrigazione Automatica FAI da TE 2024, Dicembre
Anonim
Striscia LED WiFi + sensore di temperatura con ESP8266
Striscia LED WiFi + sensore di temperatura con ESP8266

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

Connetti i componenti hardware
Connetti 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:

  1. 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.
  2. 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.
  3. 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:

  1. Aggiungi il tuo utente al gruppo dialout:

    sudo adduser $(whoami) dialout

  2. 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: