Taula de continguts:

Tira LED WiFi + sensor de temperatura amb ESP8266: 6 passos
Tira LED WiFi + sensor de temperatura amb ESP8266: 6 passos

Vídeo: Tira LED WiFi + sensor de temperatura amb ESP8266: 6 passos

Vídeo: Tira LED WiFi + sensor de temperatura amb ESP8266: 6 passos
Vídeo: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, De novembre
Anonim
Cinta LED WiFi + Sensor de temperatura amb ESP8266
Cinta LED WiFi + Sensor de temperatura amb ESP8266

Aquest tutorial descriu els passos per configurar un ESP8266 i fer-lo parlar tant amb un sensor de temperatura com amb una tira LED, alhora que es pot rebre l'entrada i enviar sortida amb MQTT per WiFi. El projecte es va fer per a un curs realitzat a Cal Poly San Luis Obispo la tardor del 2016 - CPE 439: Sistemes incrustats en temps real. L'objectiu general era demostrar la facilitat per crear una cosa "connectada" a Internet amb maquinari econòmic.

Subministraments / equips necessaris:

  • Taula de desenvolupament NodeMCU ESP8266
  • Tira LED WS2812B
  • MAX31820 Sensor de temperatura
  • Taula de pa
  • Resistència de 4,7 K ohm
  • Resistència de 220 ohm
  • cables de pont
  • cable micro-usb
  • PC (o màquina virtual) que executa Linux (per exemple, Ubuntu)

Supòsits / requisits previs:

  • experiència amb l'ús d'eines de línia d'ordres i la instal·lació de paquets en una distribució basada en debian
  • comprensió bàsica de la sintaxi de Makefile
  • connexió de cables

Pas 1: crear un entorn de compilació

Per construir el projecte, necessitareu esp-open-sdk instal·lat a la vostra màquina. Seguiu l'enllaç i llegiu les instruccions de construcció. En resum, feu algunes ordres sudo apt-get per instal·lar dependències, un clon git --recursiu per clonar / descarregar esp-open-sdk i, finalment, una ordre make per construir esp-open-sdk.

Mireu-me

Pas 2: Obteniu el codi font, configureu-lo i creeu-lo

Ara que es construeix esp-open-sdk, cloneu el dipòsit del projecte.

git clone

Canvieu al directori del projecte, creeu una carpeta.local i copieu la configuració d'exemple.

cd esp-rtos-tests

mkdir -p.local cp settings.example.mk.local / settings.mk

Ara obriu.local / settings.mk amb qualsevol editor de text i canvieu la configuració següent:

  • OPENSDK_ROOT: el camí d'accés absolut per a la ubicació de l'esp-open-sdk que heu creat al pas 1
  • WIFI_SSID: l’SSID de la vostra xarxa WiFi
  • WIFI_PASS: la contrasenya de la vostra xarxa WiFi
  • PIXEL_COUNT: el nombre de píxels de la vostra banda LED WS2812B

Nota: Atès que aquest projecte utilitza SPI per conduir els LED i utilitza el NodeMCU 3.3v per subministrar-los, probablement no podreu conduir més de ~ 60 LED.

Nota: No cal canviar la resta de paràmetres, però si es pot fer-ho. Es recomana mantenir l'ordre de les prioritats de la tasca. Com més baix sigui el número de prioritat, menor serà la prioritat de la tasca.

Ara creeu el projecte:

fes exemples -C / cpe439

Si tot està configurat correctament, hauria de començar a compilar-se. Al final hauríeu de veure:

S'ha creat "firmware / cpe439.bin" amb èxit

Mireu-me

Pas 3: Connecteu components de maquinari

Connecteu components de maquinari
Connecteu components de maquinari

Ara que es compila el codi, és hora de connectar els nostres perifèrics.

Primer, enganxeu el NodeMCU a la taula de treball i, a continuació, utilitzeu cables de pont per fer les connexions tal com es mostra al diagrama.

Un parell de coses que cal tenir en compte:

  1. Important: la línia de dades WS2812B no és bidireccional. Si mireu atentament les marques del costat LED de la tira, hauríeu de veure petites fletxes que apunten una direcció. La sortida de D7 del NodeMCU ha de dirigir-se al WS2812B de la mateixa manera que el marcador de direcció, que es pot veure al diagrama si es fixa bé.
  2. Depenent del tipus de connectors que inclogui el vostre WS2812B, és possible que hàgiu de fer algunes modificacions perquè es connectin de manera segura a la placa de control. També podeu utilitzar clips de cocodril per connectar-los a cables jumper capaços de configurar taulers.
  3. Els pins MAX31820 tenen un pas més petit i són més prims que els ponts estàndard de 0,1 "/ 2,54 mm, cosa que els fa difícils de connectar. Una manera d’evitar-ho és utilitzar cables de pont femení a masculí, treure la caixa de plàstic del costat femení, A continuació, utilitzeu unes alicates per encertar els extrems del pont femení amb força al voltant dels passadors MAX31820 més petits.

Comproveu les connexions abans d’engegar el NodeMCU per no danyar els components.

Pas 4: Flash i execució

Parpellejant

Amb tot el maquinari connectat, connecteu el NodeMCU i feu flash amb l'ordre següent:

make flash -C examples / cpe439 ESPPORT = / dev / ttyUSB0

/ dev / ttyUSB0 és la com sèrie en què hauria d'aparèixer NodeMCU. Si teniu connectats altres dispositius de sèrie, pot aparèixer com / dev / ttyUSB1 o algun altre número. Per comprovar-ho, podeu executar aquesta ordre dues vegades, una amb NodeMCU desconnectat i una altra amb endollat, i compareu la diferència:

ls / dev / ttyUSB *

Un altre problema que podeu trobar és que no teniu permís per accedir al dispositiu. Dues maneres de solucionar-ho són:

  1. Afegiu el vostre usuari al grup de marcatge:

    marcatge sudo adduser $ (whoami)

  2. chmod o bufat el dispositiu:

sudo chmod 666 / dev / ttyUSB0 sudo chown $ (whoami): $ (whoami) / dev / ttyUSB0Es prefereix el primer mètode, ja que és una solució permanent.

Córrer

Després d’executar l’ordre flash amb èxit, el dispositiu arrencarà immediatament i començarà a executar el codi compilat. En qualsevol moment després de parpellejar, podeu executar l'ordre següent per veure la sortida en sèrie:

python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 / dev / ttyUSB0 500000 --raw -q

Per estalviar temps, podeu afegir-lo al fitxer ~ /.bashrc:

àlies nodemcu = 'python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 / dev / ttyUSB0 500000 --raw -q'

..que us permet escriure simplement "nodemcu" com a àlies d'aquesta ordre.

Si tot està configurat correctament, la vostra tira LED hauria d’il·luminar-se de color verd i, en sèrie, hauríeu de veure la connexió WiFi, obtenir una adreça IP, connectar-vos a MQTT i els missatges que indiquen que s’estan enviant les dades de temperatura.

connectat amb MyWiFiSSID, inici del client del canal 1dhcp … 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 = 5xQueue_task: (Re) connectar-se al servidor MQTT test.mosquitto.org … xQueueReceive + 25,50xQueueEnvia ok doneEnvia MQTT connect … MQTTv311donexQueueReceive +25,56 xQueueSend ok

Pas 5: interactuar

Suposant que el dispositiu s’hagi connectat a WiFi i al corredor MQTT amb èxit, podreu enviar i rebre dades del NodeMCU amb MQTT. Si encara no ho heu fet, instal·leu el paquet mosquitto clients:

sudo apt-get install mosquitto-clients

Ara hauríeu de poder utilitzar els programes mosquitto_pub i mosquitto_sub del vostre intèrpret d’ordres.

Rebre actualitzacions de temperatura

Per rebre dades de temperatura, voldrem utilitzar l'ordre mosquitto_sub per subscriure-us al tema al qual publica NodeMCU.

mosquitto_sub -h test.mosquitto.org -t / cpe439 / temp

Heu de veure les dades de temperatura (en centígrads) que arriben a la terminal.

+25.87+25.93+25.68…

Configuració remota del color de la tira LED

S'utilitza un format de missatge senzill per enviar valors RGB al NodeMCU mitjançant MQTT. El format de l'ordre té aquest aspecte:

r: RRRg: GGGb: BBB ~

On RRR, GGG i BBB corresponen als valors RGB (0-255) del color que voleu enviar. Per enviar la nostra comanda, utilitzarem l'ordre mosquitto_pub. Aquests són alguns exemples:

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 ~ '# blau

Si voleu ser creatiu, cerqueu un selector de colors en línia com aquest i editeu l'ordre amb el valor RGB que trieu.

Ves amb compte

Els temes d’aquest projecte s’estableixen a / cpe439 / rgb i / cpe439 / temp en un broker MQTT públic, cosa que significa que no hi ha res que impedeixi que algú altre publiqui o subscrigui els mateixos temes que vosaltres. Per provar coses, fer servir un broker públic està bé, però per a projectes més seriosos voldreu connectar-vos a un broker amb protecció per contrasenya o executar el vostre propi broker al servidor.

Pas 6: detalls de la implementació

Onewire

L'ESP8266 només té 1 nucli, de manera llarga, tasques de bloqueig com esperar 750 ms perquè el sensor de temperatura realitzi una mesura de temperatura normalment provocaria que el WiFi no funcioni bé, i potser fins i tot un bloqueig. Al paradigma FreeRTOS, truqueu a vTaskDelay () per gestionar aquestes llargues esperes, però també hi ha moltes esperes més curtes necessàries entre lectures i escriptures que són més curtes que la marca del sistema FreeRTOS i, per tant, no es poden evitar amb vTaskDelay (). Per solucionar-ho també, el controlador onewire d’aquest projecte es va escriure perquè s’executés d’una màquina d’estat que funciona amb el temporitzador de maquinari de l’ESP8266, que pot provocar esdeveniments tan baixos com cada 10 microsegons, que és el més curt temps necessari entre les operacions de lectura / escriptura onewire. La majoria d’altres implementacions utilitzen una trucada de bloqueig a delay_us () o similar per gestionar-ho, però si constantment feu actualitzacions de temperatura, tots aquests retards comencen a sumar-se, donant lloc a una aplicació menys sensible. La font d'aquesta porció de codi es troba a la carpeta d'extres / onewire.

WS2812B

L'ESP8266 no té cap opció de maquinari estàndard per a PWM prou ràpida com per conduir tires LED a 800 KHz. Per solucionar-ho, aquest projecte utilitza el pin SPI MOSI per accionar els LED. Ajustant la freqüència de rellotge de SPI i canviant la càrrega útil de SPI, podeu aconseguir un control bastant fiable de cada LED individual. Aquest mètode no està exempt de defectes: per a un, els LED s’han d’alimentar amb una font de 5 V i s’ha d’afegir un canvi de nivell a la sortida del pin SPI. Però el 3.3V funciona. En segon lloc, hi ha fallades que es produeixen a causa d’un temps imperfecte que utilitza el mètode SPI. I el tercer és que ara no es pot utilitzar SPI per a res més. Aquí es pot trobar informació addicional sobre aquest mètode i la font d’aquesta porció de codi es troba a la carpeta extras / ws2812.

Un mètode més fiable per conduir tires LED és utilitzar i2s. Tanmateix, aquest mètode té molts hacks específics del xip, de manera que SPI semblava ser una millor opció com a exercici d'aprenentatge.

Recomanat: