Sadržaj:

WiFi LED traka + senzor temperature sa ESP8266: 6 koraka
WiFi LED traka + senzor temperature sa ESP8266: 6 koraka

Video: WiFi LED traka + senzor temperature sa ESP8266: 6 koraka

Video: WiFi LED traka + senzor temperature sa ESP8266: 6 koraka
Video: Введение в плату разработки NodeMCU ESP8266 WiFi с примером HTTP-клиента 2024, Novembar
Anonim
WiFi LED traka + senzor temperature sa ESP8266
WiFi LED traka + senzor temperature sa ESP8266

Ovaj vodič opisuje korake za postavljanje ESP8266 i razgovor sa senzorom temperature i LED trakom, a istovremeno može primati ulaz i slati izlaz putem MQTT -a putem WiFi -a. Projekt je napravljen za kurs koji je održan u Cal Poly San Luis Obispo u jesen 2016.- CPE 439: Ugrađeni sistemi u stvarnom vremenu. Opći cilj je bio pokazati lakoću stvaranja "stvari" povezane s internetom s jeftinim hardverom.

Potreban pribor/oprema:

  • NodeMCU ESP8266 ploča za razvoj
  • WS2812B LED traka
  • MAX31820 Senzor temperature
  • Breadboard
  • 4.7K ohmski otpornik
  • 220 omski otpornik
  • kratkospojne žice
  • mikro-USB kabl
  • PC (ili VM) sa Linuxom (npr. Ubuntu)

Pretpostavke/preduvjeti:

  • iskustvo s korištenjem alata naredbenog retka i instaliranjem paketa na debian-based distro
  • osnovno razumijevanje sintakse Makefile
  • spojne žice

Korak 1: Stvaranje okruženja za izgradnju

Za izradu projekta potreban vam je esp-open-sdk instaliran na vašem računaru. Slijedite vezu i pročitajte upute za izradu. Ukratko, radit ćete neke sudo apt-get naredbe za instaliranje ovisnosti, git clone --recursive za kloniranje/preuzimanje esp-open-sdk i na kraju naredbu make za izgradnju esp-open-sdk.

Gledaj me

Korak 2: Nabavite izvorni kod, konfigurirajte i sastavite

Sada kada je esp-open-sdk izgrađen, klonirajte spremište projekata.

git clone

Promijenite se u direktorij projekta, stvorite.local mapu i kopirajte primjere postavki.

cd esp-rtos-testovi

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

Sada otvorite.local/settings.mk s bilo kojim uređivačem teksta i promijenite sljedeće postavke:

  • OPENSDK_ROOT: Apsolutni put za lokaciju esp-open-sdk koji ste izgradili u 1. koraku
  • WIFI_SSID: SSID vaše WiFi mreže
  • WIFI_PASS: Lozinka vaše WiFi mreže
  • PIXEL_COUNT: Broj piksela na LED traci WS2812B

Napomena: Budući da ovaj projekt koristi SPI za pogon LED -a i koristi NodeMCU 3.3v za napajanje, vjerojatno nećete moći upravljati više od ~ 60 LED -a.

Napomena: Ostale postavke nije potrebno mijenjati, ali se po želji mogu promijeniti. Preporučuje se da se pridržavate redoslijeda prioriteta zadataka. Što je manji broj prioriteta, niži je prioritet zadatka.

Sada izgradite projekat:

make -C examples/cpe439

Ako je sve ispravno postavljeno, trebalo bi započeti kompajliranje. Na kraju biste trebali vidjeti:

Uspješno kreiran 'firmware/cpe439.bin'

Gledaj me

Korak 3: Povežite hardverske komponente

Povežite hardverske komponente
Povežite hardverske komponente

Sada kada je kod preveden, vrijeme je da povežemo naše periferne uređaje.

Najprije zalijepite NodeMCU na matičnu ploču, a zatim upotrijebite kratkospojne žice za povezivanje kao što je prikazano na dijagramu.

Nekoliko stvari kojih morate biti svjesni:

  1. Važno: WS2812B linija podataka nije dvosmjerna. Ako pažljivo pogledate oznake na LED strani trake, trebali biste vidjeti male strelice usmjerene u jednom smjeru. Izlaz iz D7 NodeMCU -a mora biti usmjeren u WS2812B na isti način kao i marker smjera, koji možete vidjeti na dijagramu ako pažljivo pogledate.
  2. Ovisno o vrsti konektora s kojima dolazi vaš WS2812B, možda ćete morati izvršiti neke izmjene kako biste ih sigurno spojili na matičnu ploču. Također možete upotrijebiti kopče od aligatora za njihovo spajanje na kratkospojne kablove koji mogu omogućiti izradu oplate.
  3. Igle MAX31820 imaju manji razmak i tanje su od standardnih džampera od 0,1 "/2,54 mm, što ih čini nezgodnim za povezivanje. Jedan od načina za to je korištenje žica kratkospojnika za muškarce, skidanje plastičnog kućišta sa ženske strane, zatim upotrijebite kliješta da dobro uvijete krajeve ženskih kratkospojnika oko manjih igli MAX31820.

Dvaput provjerite veze prije nego uključite NodeMCU kako ne biste oštetili komponente.

Korak 4: Flash i pokrenite

Treperi

Kad je sav hardver spojen, priključite svoj NodeMCU i bljesnite sljedećom naredbom:

napravi flash -C primjere/cpe439 ESPPORT =/dev/ttyUSB0

/dev/ttyUSB0 je serijski com ispod kojeg bi se trebao pojaviti NodeMCU. Ako imate povezane druge serijske uređaje, može se prikazati kao /dev /ttyUSB1 ili neki drugi broj. Da biste provjerili, možete pokrenuti ovu naredbu dva puta, jednom s isključenim NodeMCU -om, a jednom s uključenim, i uporedite razliku:

ls /dev /ttyUSB*

Još jedan problem na koji možete naići nemate dozvolu za pristup uređaju. Dva načina da to popravite su:

  1. Dodajte svog korisnika u grupu za razgovor:

    sudo adduser $ (whoami) dijalout

  2. chmod ili napunite uređaj:

sudo chmod 666 /dev /ttyUSB0 sudo chown $ (whoami): $ (whoami) /dev /ttyUSB0Poželjna je prva metoda jer je trajno rješenje.

Trčanje

Nakon uspješnog pokretanja naredbe flash, uređaj će se odmah pokrenuti i početi izvoditi prevedeni kod. U bilo kojem trenutku nakon treptanja možete pokrenuti sljedeću naredbu za gledanje serijskog izlaza:

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

Da biste uštedjeli vrijeme, ovo možete dodati u svoju ~/.bashrc datoteku:

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

..koji vam dozvoljava da jednostavno upišete "nodemcu" kao pseudonim za tu naredbu.

Ako je sve ispravno konfigurirano, vaša LED traka bi trebala zasvijetliti zeleno, a na serijskom dijelu trebali biste vidjeti WiFi vezu, dobiti IP adresu, spojiti se na MQTT i poslati poruku da se podaci o temperaturi istiskuju.

povezan s MyWiFiSSID -om, kanal 1dhcp klijent se pokreće … wifi_task: status = 1wifi_task: status = 1ip: 192.168.2.23, maska: 255.255.255.0, gw: 192.168.2.1ws2812_spi_init okRequest temp OKwifi_task: status = 5xQueTeTev4: (Ponovno) povezivanje s poslužiteljem MQTT test.mosquitto.org… xQueueReceive +25.50xQueueSend ok doneSend MQTT connect… MQTTv311donexQueueReceive +25.56 xQueueSend ok

Korak 5: Interakcija

Pod pretpostavkom da se vaš uređaj povezao na WiFi i MQTT posrednik uspješno, moći ćete slati i primati podatke iz NodeMCU -a pomoću MQTT -a. Ako već niste, instalirajte paket komaraca za klijente:

sudo apt-get install mosquitto-clients

Sada biste trebali moći koristiti programe mosquitto_pub i mosquitto_sub iz svoje ljuske.

Primanje ažuriranja temperature

Za primanje podataka o temperaturi htjet ćemo koristiti naredbu mosquitto_sub za pretplatu na temu o kojoj NodeMCU objavljuje.

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

Trebali biste vidjeti podatke o temperaturi (u Celzijusima) koji stižu na terminal.

+25.87+25.93+25.68…

Daljinsko podešavanje boje LED trake

Jednostavan format poruke koristi se za slanje RGB vrijednosti NodeMCU -u preko MQTT -a. Format naredbe izgleda ovako:

r: RRRg: GGGb: BBB ~

Tamo gdje RRR, GGG, BBB odgovaraju RGB vrijednostima (0-255) boje koju želite poslati. Za slanje naše naredbe koristit ćemo naredbu mosquitto_pub. Evo nekoliko primjera:

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

Ako želite biti kreativni, pronađite na internetu birač boja poput ovog i uredite naredbu s bilo kojom RGB vrijednošću koju odaberete.

Pazi

Teme u ovom projektu postavljene su na /cpe439 /rgb i /cpe439 /temp na javnom MQTT posredniku, što znači da ništa ne sprečava nekoga drugog da objavi ili se pretplati na iste teme kao i vi. Za isprobavanje, korištenje javnog brokera je u redu, ali za ozbiljnije projekte htjet ćete se povezati s posrednikom sa zaštitom lozinkom ili pokrenuti svog brokera na poslužitelju.

Korak 6: Detalji implementacije

Onewire

ESP8266 ima samo 1 jezgru, pa bi tako dugi zadaci blokiranja, poput čekanja 750 ms da temperaturni senzor izvrši mjerenje temperature obično doveli do toga da WiFi ne radi dobro, a možda čak i do pada. U paradigmi FreeRTOS, pozivate vTaskDelay () za rješavanje ovih dugih čekanja, no potrebno je i mnogo kraćih čekanja između čitanja i pisanja koja su kraća od sistemske oznake FreeRTOS, pa se stoga ne mogu izbjeći vTaskDelay (). Da bi se i to zaobišlo, upravljački program onewire u ovom projektu napisan je da radi s state-mašine koju pokreće hardverski mjerač vremena ESP8266, koji može pokrenuti događaje na svakih 10 mikro-sekundi, što je najkraće potrebno vrijeme između operacija čitanja/pisanja jedne žice. Većina drugih implementacija koristi blokirajući poziv to delay_us () ili slično za rješavanje ovoga, ali ako stalno ažurirate temperaturu, sva ta kašnjenja počinju se zbrajati, što rezultira manje osjetljivom aplikacijom. Izvor za ovaj dio koda nalazi se u mapi extras/onewire.

WS2812B

ESP8266 nema standardnih hardverskih opcija za PWM dovoljno brzo da pokreće LED trake na 800KHz. Da bi se to zaobišlo, ovaj projekt koristi SPI MOSI pin za pogon LED dioda. Podešavanjem takta SPI i promjenom korisnog opterećenja SPI možete postići prilično pouzdanu kontrolu svake pojedinačne LED diode. Ova metoda nije bez nedostataka- za jednu LED diode treba napajati 5V izvor, a na izlaz SPI pina treba dodati mjenjač nivoa. Ali 3.3V radi. Drugo, postoje propusti koji se javljaju zbog nesavršenog vremena primjenom SPI metode. I treće, sada ne možete koristiti SPI za bilo što drugo. Dodatnu pozadinu ove metode možete pronaći ovdje, a izvor za ovaj dio koda nalazi se u mapi extras/ws2812.

Pouzdanija metoda za postavljanje LED traka je upotreba i2s. Međutim, ova metoda ima mnogo hakova specifičnih za čip, pa se činilo da je SPI bolji izbor kao vježba za učenje.

Preporučuje se: