Innholdsfortegnelse:

WiFi LED -stripe + temperatursensor med ESP8266: 6 trinn
WiFi LED -stripe + temperatursensor med ESP8266: 6 trinn

Video: WiFi LED -stripe + temperatursensor med ESP8266: 6 trinn

Video: WiFi LED -stripe + temperatursensor med ESP8266: 6 trinn
Video: Введение в плату разработки NodeMCU ESP8266 WiFi с примером HTTP-клиента 2024, November
Anonim
WiFi LED -stripe + temperatursensor med ESP8266
WiFi LED -stripe + temperatursensor med ESP8266

Denne opplæringen beskriver trinnene for å sette opp en ESP8266 og få den til å snakke med både en temperatursensor og LED -stripe, samtidig som den kan motta inngang og sende utgang med MQTT over WiFi. Prosjektet ble laget for et kurs tatt på Cal Poly San Luis Obispo høsten 2016- CPE 439: Real Time Embedded Systems. Det overordnede målet var å demonstrere det enkle å lage en internett-tilkoblet "ting" med billig maskinvare.

Rekvisita/utstyr som kreves:

  • NodeMCU ESP8266 dev -kort
  • WS2812B LED -stripe
  • MAX31820 Temperatursensor
  • Brødbrett
  • 4,7K ohm motstand
  • 220 ohm motstand
  • jumper ledninger
  • mikro-usb-kabel
  • PC (eller VM) som kjører Linux (f.eks. Ubuntu)

Forutsetninger/forutsetninger:

  • erfaring med bruk av kommandolinjeverktøy og installering av pakker på en debianbasert distro
  • grunnleggende forståelse av Makefile -syntaks
  • tilkobling av ledninger

Trinn 1: Opprette et bygningsmiljø

For å bygge prosjektet trenger du esp-open-sdk installert på maskinen. Følg lenken og les byggeinstruksjonene. Kort sagt, du gjør noen sudo apt-get-kommandoer for å installere avhengigheter, en git-klon-rekursiv for å klone/laste ned esp-open-sdk, og til slutt en kommando for å bygge esp-open-sdk.

Se på meg

Trinn 2: Få kildekoden, konfigurer og bygg

Nå som esp-open-sdk er bygget, klon prosjektdatabasen.

git-klon

Bytt til prosjektkatalogen, opprett en.local mappe og kopier eksempelinnstillingene.

cd esp-rtos-tester

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

Åpne nå.local/settings.mk med hvilken som helst tekstredigerer og endre følgende innstillinger:

  • OPENSDK_ROOT: Den absolutte banen for plasseringen av esp-open-sdk du bygde i trinn 1
  • WIFI_SSID: SSID for WiFi -nettverket ditt
  • WIFI_PASS: Passordet til WiFi -nettverket ditt
  • PIXEL_COUNT: Antall piksler på WS2812B LED -stripen

Merk: Siden dette prosjektet bruker SPI til å drive lysdiodene og bruker NodeMCU 3.3v for å levere dem, vil du sannsynligvis ikke kunne kjøre mer enn ~ 60 lysdioder.

Merk: De andre innstillingene trenger ikke endres, men kan gjøres om ønskelig. Det anbefales å holde rekkefølgen på oppgaveprioritetene. Jo lavere prioritetsnummer, desto lavere prioritet er oppgaven.

Bygg nå prosjektet:

lage -C eksempler/cpe439

Hvis alt er konfigurert riktig, bør det begynne å kompilere. På slutten bør du se:

Oppretting av firmware/cpe439.bin

Se på meg

Trinn 3: Koble til maskinvarekomponenter

Koble til maskinvarekomponenter
Koble til maskinvarekomponenter

Nå som koden er kompilert, er det på tide å koble til eksterne enheter.

Fest først NodeMCU på brødbrettet, og bruk deretter jumperkabler for å lage tilkoblingene som vist i diagrammet.

Et par ting å være oppmerksom på:

  1. Viktig: WS2812B-datalinjen er ikke toveis. Hvis du ser nøye på markeringene på LED -siden av stripen, bør du se små piler som peker i en retning. Utgangen fra D7 til NodeMCU må være på vei inn i WS2812B på samme måte som retningsmarkøren, som du kan se i diagrammet hvis du ser nøye etter.
  2. Avhengig av hva slags kontakter WS2812B kommer med, må du kanskje gjøre noen endringer for å få dem til å koble seg sikkert til brødbrettet. Du kan også bruke krokodilleklips for å koble dem til brødkabel-kompatible hoppekabler.
  3. MAX31820-pinnene har en mindre tonehøyde og er tynnere enn vanlige 0,1 "/2,54 mm-hoppere, noe som gjør dem vanskelige å koble til. En vei rundt dette er å bruke hun-til-mann-hoppetråder, ta av plasthuset fra kvinnesiden, bruk deretter noen tang for å krympe den kvinnelige jumperendene tett rundt de mindre MAX31820 -pinnene.

Dobbeltsjekk tilkoblingene før du slår på NodeMCU for ikke å skade komponentene.

Trinn 4: Flash og Run

Blinker

Når all maskinvare er tilkoblet, kobler du til NodeMCU og blinker med følgende kommando:

lag flash -C eksempler/cpe439 ESPPORT =/dev/ttyUSB0

/dev/ttyUSB0 er serienummeret NodeMCU skal vises under. Hvis du har andre serielle enheter tilkoblet, kan det vises som /dev /ttyUSB1 eller et annet nummer. For å kontrollere kan du kjøre denne kommandoen to ganger, en gang med NodeMCU frakoblet, og en gang med den plugget inn, og sammenligne forskjellen:

ls /dev /ttyUSB*

Et annet problem du kan støte på er ikke å ha tillatelse til å få tilgang til enheten. To måter å fikse dette på er:

  1. Legg til brukeren din i oppringingsgruppen:

    sudo adduser $ (whoami) dialout

  2. chmod eller chown enheten:

sudo chmod 666 /dev /ttyUSB0 sudo chown $ (whoami): $ (whoami) /dev /ttyUSB0Den første metoden foretrekkes da den er en permanent løsning.

Løping

Etter å ha kjørt flash -kommandoen vellykket, starter enheten umiddelbart og begynner å kjøre den kompilerte koden. Når som helst etter at du har blinket, kan du kjøre følgende kommando for å se seriell utgang:

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

For å spare tid kan du legge dette til i ~/.bashrc -filen:

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

..som lar deg ganske enkelt skrive "nodemcu" som et alias for den kommandoen.

Hvis alt er konfigurert riktig, skal LED -stripen lyse grønt, og på seriell bør du se WiFi -tilkobling, få en IP -adresse, koble til MQTT og meldinger om at temperaturdata skyves ut.

koblet til MyWiFiSSID, start av kanal 1dhcp -klient … wifi_task: status = 1wifi_task: status = 1ip: 192.168.2.23, mask: 255.255.255.0, gw: 192.168.2.1ws2812_spi_init okForespørsel temp OKwifi_task: status = 5xQueueReceiveFi: (Re) koble til MQTT -server test.mosquitto.org … xQueueReceive +25,50xQueueSend ok doneSend MQTT connect … MQTTv311donexQueueReceive +25,56 xQueueSend ok

Trinn 5: Samhandling

Forutsatt at enheten din har koblet seg til WiFi og MQTT -megleren med hell, vil du kunne sende og motta data fra NodeMCU med MQTT. Hvis du ikke allerede har gjort det, kan du installere pakken med myggklienter:

sudo apt-get install mosquitto-klienter

Du bør nå kunne bruke programmene mosquitto_pub og mosquitto_sub fra skallet ditt.

Mottar temperaturoppdateringer

For å motta temperaturdata vil vi bruke kommandoen mosquitto_sub til å abonnere på emnet som NodeMCU publiserer til.

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

Du bør se temperaturdata (i Celsius) som ankommer terminalen.

+25.87+25.93+25.68…

Innstilling av fargen på LED -stripen eksternt

Et enkelt meldingsformat brukes til å sende RGB -verdier til NodeMCU over MQTT. Kommandoformatet ser slik ut:

r: RRRg: GGGb: BBB ~

Hvor RRR, GGG, BBB tilsvarer RGB-verdier (0-255) for fargen du vil sende. For å sende kommandoen vår bruker vi kommandoen mosquitto_pub. Her er noen eksempler:

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 ~ ' # blå

Hvis du vil bli kreativ, finn en fargevelger på nettet som denne, og rediger kommandoen med hvilken RGB-verdi du enn velger.

Pass på

Emnene i dette prosjektet er satt til /cpe439 /rgb og /cpe439 /temp på en offentlig MQTT -megler, noe som betyr at det ikke er noe som hindrer noen andre i å publisere eller abonnere på de samme emnene som deg. For å prøve ting, er det greit å bruke en offentlig megler, men for mer seriøse prosjekter vil du koble til en megler med passordbeskyttelse, eller kjøre din egen megler på serveren.

Trinn 6: Implementeringsdetaljer

Onewire

ESP8266 har bare 1 kjerne, så lange blokkeringsoppgaver som å vente 750 ms på at temperatursensoren skal utføre en temperaturmåling, vil normalt føre til at WiFi ikke fungerer godt, og kanskje til og med et krasj. I FreeRTOS -paradigmet ringer du vTaskDelay () for å håndtere disse lange ventene, men det kreves også mange kortere ventetider mellom lesing og skriving som er kortere enn FreeRTOS -systemmerke, og dermed ikke kan unngås med vTaskDelay (). For å også komme rundt disse ble onewire-driveren i dette prosjektet skrevet for å kjøre ut av en statsmaskin som drives av ESP8266s maskinvaretimer, som kan utløse hendelser så lave som hvert 10 mikro-sekund, noe som tilfeldigvis er den korteste nødvendig tid mellom en -lese lese-/skriveoperasjoner. De fleste andre implementeringer bruker et blokkerende anrop til delay_us () eller lignende for å håndtere dette, men hvis du stadig tar temperaturoppdateringer, begynner alle forsinkelsene å legge seg opp, noe som resulterer i en mindre responsiv applikasjon. Kilden for denne delen av koden er plassert i mappen extras/onewire.

WS2812B

ESP8266 har ingen standard maskinvarealternativer for PWM raskt nok til å drive LED -strips på 800KHz. For å komme rundt dette bruker dette prosjektet SPI MOSI -pinnen til å drive lysdiodene. Ved å justere klokkefrekvensen til SPI, og endre SPI -nyttelasten rundt, kan du oppnå ganske pålitelig kontroll av hver enkelt LED. Denne metoden er ikke uten feil- for en bør lysdiodene drives med en 5V-kilde og en nivåskifter bør legges til utgangen på SPI-pinnen. Men 3.3V fungerer. For det andre er det feil som oppstår på grunn av ufullkommen timing ved bruk av SPI -metoden. Og det tredje er at nå kan du ikke bruke SPI til noe annet. Ytterligere bakgrunn på denne metoden finner du her, og kilden for denne delen av koden er plassert i mappen extras/ws2812.

En mer pålitelig metode for å kjøre LED -strips er å bruke i2s. Imidlertid har denne metoden mange chipspesifikke hack, så SPI syntes å være et bedre valg som en læringsøvelse.

Anbefalt: