Cuprins:
- Pasul 1: Crearea unui mediu de construire
- Pasul 2: obțineți codul sursă, configurați și creați
- Pasul 3: Conectați componentele hardware
- Pasul 4: Flash și Run
- Pasul 5: interacțiune
- Pasul 6: Detalii de implementare
Video: Banda LED WiFi + Senzor de temperatură cu ESP8266: 6 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
Acest tutorial descrie pașii pentru a configura un ESP8266 și pentru a-l vorbi atât cu un senzor de temperatură, cât și cu o bandă LED, în timp ce puteți primi și să trimiteți ieșire cu MQTT prin WiFi. Proiectul a fost realizat pentru un curs urmat la Cal Poly San Luis Obispo în toamna anului 2016 - CPE 439: Real Time Embedded Systems. Scopul general a fost să demonstreze ușurința de a crea un „lucru” conectat la internet cu hardware ieftin.
Consumabile / Echipamente necesare:
- Placă dev NodeMCU ESP8266
- Benzi LED WS2812B
- MAX31820 Senzor de temperatură
- Pană de pâine
- Rezistor de 4,7K ohm
- Rezistor de 220 ohmi
- fire jumper
- cablu micro-usb
- PC (sau VM) care rulează Linux (de exemplu, Ubuntu)
Ipoteze / premise:
- experiență cu utilizarea instrumentelor din linia de comandă și instalarea pachetelor pe o distribuție bazată pe debian
- înțelegerea de bază a sintaxei Makefile
- conectarea firelor
Pasul 1: Crearea unui mediu de construire
Pentru a construi proiectul, veți avea nevoie de esp-open-sdk instalat pe mașină. Urmați linkul și citiți instrucțiunile de construire. Pe scurt, veți face câteva comenzi sudo apt-get pentru a instala dependențe, o clonă git - recursivă pentru clonare / descărcare esp-open-sdk și, în cele din urmă, o comandă make pentru a construi esp-open-sdk.
Priveste-ma
Pasul 2: obțineți codul sursă, configurați și creați
Acum că este construit esp-open-sdk, clonați depozitul de proiect.
git clone
Treceți în directorul proiectului, creați un folder.local și copiați setările de exemplu.
cd esp-rtos-tests
mkdir -p.local cp settings.example.mk.local / settings.mk
Acum deschideți.local / settings.mk cu orice editor de text și modificați următoarele setări:
- OPENSDK_ROOT: calea absolută pentru locația esp-open-sdk pe care ați construit-o la pasul 1
- WIFI_SSID: SSID-ul rețelei WiFi
- WIFI_PASS: parola rețelei WiFi
- PIXEL_COUNT: numărul de pixeli de pe banda LED WS2812B
Notă: Deoarece acest proiect folosește SPI pentru a conduce LED-urile și folosește NodeMCU 3.3v pentru a le furniza, probabil că nu veți putea conduce mai mult de ~ 60 de LED-uri.
Notă: Celelalte setări nu trebuie modificate, dar pot fi, dacă se dorește. Se recomandă păstrarea ordinii priorităților sarcinii. Cu cât numărul priorității este mai mic, cu atât este mai mică prioritatea sarcinii.
Acum construiți proiectul:
faceți -C exemple / cpe439
Dacă totul este configurat corect, ar trebui să înceapă compilarea. La final ar trebui să vedeți:
S-a creat cu succes „firmware / cpe439.bin”
Priveste-ma
Pasul 3: Conectați componentele hardware
Acum că codul este compilat, este timpul să ne conectăm perifericele.
Mai întâi, lipiți NodeMCU pe placa de masă, apoi folosiți fire jumper pentru a face conexiunile așa cum se arată în diagramă.
Câteva lucruri de care să fii conștient:
- Important: Linia de date WS2812B nu este bidirecțională. Dacă priviți cu atenție marcajele de pe partea LED a benzii, ar trebui să vedeți săgeți mici care indică o direcție. Ieșirea din D7 a NodeMCU trebuie să se îndrepte către WS2812B în același mod ca și marcatorul de direcție, pe care îl puteți vedea în diagramă dacă priviți cu atenție.
- În funcție de tipul de conectori cu care vine WS2812B, poate fi necesar să faceți unele modificări pentru a le face să se conecteze în siguranță la panoul de control. Puteți utiliza, de asemenea, cleme de aligator pentru a le conecta la cabluri jumper capabile de panouri.
- Știfturile MAX31820 au un pas mai mic și sunt mai subțiri decât jumperii standard de 0,1 "/ 2,54 mm, ceea ce le face dificil de conectat. Un mod în acest sens este să folosiți fire jumper de la femeie la mascul, scoateți carcasa din plastic de pe partea feminină, apoi folosiți niște clești pentru a sertiza ferm capetele jumperului în jurul pinilor MAX31820 mai mici.
Verificați de două ori conexiunile înainte de a porni NodeMCU pentru a nu deteriora componentele.
Pasul 4: Flash și Run
Intermitent
Cu tot hardware-ul conectat, conectați NodeMCU și flash cu următoarea comandă:
make flash -C examples / cpe439 ESPPORT = / dev / ttyUSB0
/ dev / ttyUSB0 este com serialul în care ar trebui să apară NodeMCU. Dacă aveți alte dispozitive seriale conectate, acesta poate apărea ca / dev / ttyUSB1 sau un alt număr. Pentru a verifica, puteți rula această comandă de două ori, o dată cu NodeMCU deconectat și o dată cu aceasta conectată și puteți compara diferența:
ls / dev / ttyUSB *
O altă problemă pe care o puteți întâlni este faptul că nu aveți permisiunea de a accesa dispozitivul. Două moduri de a remedia acest lucru sunt:
-
Adăugați utilizatorul la grupul de apelare:
sudo adduser $ (whoami) dialout
- chmod sau chown dispozitivul:
sudo chmod 666 / dev / ttyUSB0 sudo chown $ (whoami): $ (whoami) / dev / ttyUSB0Prima metodă este preferată deoarece este o soluție permanentă.
Alergare
După executarea cu succes a comenzii flash, dispozitivul va porni imediat și va începe să ruleze codul compilat. În orice moment după ce clipiți, puteți rula următoarea comandă pentru a urmări ieșirea serială:
python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 / dev / ttyUSB0 500000 --raw -q
Pentru a economisi timp, puteți adăuga acest lucru în fișierul dvs. ~ /.bashrc:
alias nodemcu = 'python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 / dev / ttyUSB0 500000 --raw -q'
..care vă permite să tastați pur și simplu „nodemcu” ca alias pentru acea comandă.
Dacă totul este configurat corect, banda LED ar trebui să se aprindă în verde, iar pe serial ar trebui să vedeți conexiunea WiFi, să obțineți o adresă IP, să vă conectați la MQTT și să primiți mesaje care indică faptul că datele de temperatură sunt împinse.
conectat cu MyWiFiSSID, canal 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 = 5xQueuet: (Re) conectarea la serverul MQTT test.mosquitto.org … xQueueReceive + 25.50xQueueSend ok doneSend MQTT connect … MQTTv311donexQueueReceive +25.56 xQueueSend ok
Pasul 5: interacțiune
Presupunând că dispozitivul dvs. s-a conectat la WiFi și brokerul MQTT cu succes, veți putea trimite și primi date de la NodeMCU cu MQTT. Dacă nu ați făcut-o deja, instalați pachetul clienților mosquitto:
sudo apt-get install mosquitto-clients
Acum ar trebui să puteți utiliza programele mosquitto_pub și mosquitto_sub din shell.
Primirea actualizărilor de temperatură
Pentru a primi date despre temperatură, vom dori să folosim comanda mosquitto_sub pentru a vă abona la subiectul la care publică NodeMCU.
mosquitto_sub -h test.mosquitto.org -t / cpe439 / temp
Ar trebui să vedeți datele de temperatură (în grade Celsius), care sosesc în terminal.
+25.87+25.93+25.68…
Setarea culorii benzii LED de la distanță
Un format simplu de mesaj este utilizat pentru a trimite valori RGB către NodeMCU prin MQTT. Formatul de comandă arată astfel:
r: RRRg: GGGb: BBB ~
În cazul în care RRR, GGG, BBB corespund valorilor RGB (0-255) ale culorii pe care doriți să o trimiteți. Pentru a trimite comanda noastră, vom folosi comanda mosquitto_pub. Aici sunt cateva exemple:
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 ~ '# albastru
Dacă doriți să fiți creativi, găsiți un selector de culori online ca acesta și modificați comanda cu orice valoare RGB alegeți.
Ai grija
Subiectele din acest proiect sunt setate la / cpe439 / rgb și / cpe439 / temp pe un broker public MQTT, ceea ce înseamnă că nu există nimic care să împiedice altcineva să publice sau să se aboneze la aceleași subiecte ca dvs. Pentru a încerca lucrurile, utilizarea unui broker public este în regulă, dar pentru proiecte mai serioase veți dori să vă conectați la un broker cu protecție prin parolă sau să vă rulați propriul broker pe server.
Pasul 6: Detalii de implementare
Onewire
ESP8266 are doar 1 nucleu, atât de lung, sarcini de blocare, cum ar fi așteptarea 750 ms pentru ca senzorul de temperatură să efectueze o măsurare a temperaturii, ar duce în mod normal la WiFi nu funcționează bine și poate chiar la un accident. În paradigma FreeRTOS, apelați vTaskDelay () pentru a gestiona aceste așteptări lungi, dar există, de asemenea, multe așteptări mai scurte necesare între citiri și scrieri, care sunt mai scurte decât bifarea sistemului FreeRTOS și, prin urmare, nu pot fi evitate cu vTaskDelay (). Pentru a le ocoli, driverul onewire din acest proiect a fost scris pentru a rula de pe o mașină de stat care este acționată de cronometrul hardware al ESP8266, care poate declanșa evenimente la fel de mici ca la fiecare 10 micro-secunde, ceea ce se întâmplă să fie cel mai scurt timpul necesar între operațiile de citire / scriere onewire. Majoritatea celorlalte implementări folosesc un apel de blocare către delay_us () sau similar pentru a gestiona acest lucru, dar dacă luați constant actualizări de temperatură, toate aceste întârzieri încep să se adune, rezultând o aplicație mai puțin receptivă. Sursa pentru această porțiune de cod se află în folderul extras / onewire.
WS2812B
ESP8266 nu are opțiuni hardware standard pentru PWM suficient de rapid pentru a conduce benzi LED la 800KHz. Pentru a rezolva acest lucru, acest proiect folosește pinul SPI MOSI pentru a conduce LED-urile. Reglând rata de ceas a SPI și modificând sarcina utilă SPI în jur, puteți obține un control destul de fiabil al fiecărui LED individual. Această metodă nu este lipsită de defectele sale - pentru unul, LED-urile ar trebui să fie alimentate cu o sursă de 5V și un schimbător de nivel ar trebui adăugat la ieșirea pinului SPI. Dar 3,3V funcționează. În al doilea rând, există erori care apar din cauza temporizării imperfecte folosind metoda SPI. Și al treilea este acum că nu poți folosi SPI pentru altceva. Informații suplimentare despre această metodă pot fi găsite aici, iar sursa pentru această porțiune de cod se află în folderul extras / ws2812.
O metodă mai fiabilă pentru conducerea benzilor cu LED-uri este utilizarea i2-urilor. Cu toate acestea, această metodă are o mulțime de hacks specifice cipului, astfel încât SPI părea să fie o alegere mai bună ca exercițiu de învățare.
Recomandat:
Bandă cu senzor de temperatură și LED-uri: 5 pași
Bandă cu senzor de temperatură și LED-uri: în acest proiect, am realizat o banderolă care conține un senzor de temperatură cu lumini LED implicate
Music Reactive Multicolor LED Lights - Senzor de detectare a sunetului Arduino - Banda LED RGB: 4 pași
Music Reactive Multicolor LED Lights | Senzor de detectare a sunetului Arduino | Banda LED RGB: Proiect cu lumini LED multicolore reactive la muzică. În acest proiect, s-au folosit o bandă LED 5050 RGB simplă (nu LED-ul adresabil WS2812), senzor de detectare a sunetului Arduino și adaptor de 12V
Punct de acces (AP) NodeMCU ESP8266 pentru server web cu senzor de temperatură DT11 și temperatură și umiditate de imprimare în browser: 5 pași
Punct de acces (AP) ESP8266 NodeMCU pentru server web cu senzor de temperatură DT11 și temperatură și umiditate de imprimare în browser: Bună băieți în majoritatea proiectelor folosim ESP8266 și în majoritatea proiectelor folosim ESP8266 ca server web, astfel încât datele să poată fi accesate pe orice dispozitiv prin Wi-Fi accesând Webserver-ul găzduit de ESP8266, dar singura problemă este că avem nevoie de un router funcțional pentru
Senzor de frecvență cardiacă cu bandă led Arduino: 5 pași
Senzor de frecvență cardiacă cu bandă led Arduino: Primul lucru pe care l-am făcut a fost conectarea senzorului meu de ritm cardiac Grove la Arduino printr-un tutorial foarte ușor de urmărit pe YouTube. https://www.youtube.com/watch?v=Dzq4tnJ0LjAhttps://www.kiwi-electronics.nl/grove-finger-clip
Senzor senzor digital de temperatură cu LED: 3 pași
Senzor digital de temperatură cu LED simplu: un senzor electronic de temperatură digital simplu, la preț redus, H. William James, august, 2015 LED-urile intermitente abstracte conțin un mic cip IC care le determină să clipească continuu când se aplică o tensiune. Acest studiu arată că clipirea ra