Sadržaj:

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

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

Video: WiFi LED traka + senzor temperature s ESP8266: 6 koraka
Video: NodeMCU LDR Sensor | ESP8266 LDR Sensor | Light Sensor LED Control | LDR Light Control in Hindi 🔥 2024, Studeni
Anonim
WiFi LED traka + senzor temperature s ESP8266
WiFi LED traka + senzor temperature s ESP8266

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

Potrebni materijal/oprema:

  • NodeMCU ESP8266 ploča za razvoj
  • WS2812B LED traka
  • MAX31820 Senzor temperature
  • Oglasna ploča
  • 4,7K ohmski otpornik
  • Otpor 220 oma
  • kratkospojne žice
  • mikro-USB kabel
  • Računalo (ili VM) s linuxom (npr. Ubuntu)

Pretpostavke/preduvjeti:

  • iskustvo s korištenjem alata naredbenog retka i instaliranjem paketa na distribuciju temeljenu na debianu
  • osnovno razumijevanje sintakse Makefile
  • spojne žice

Korak 1: Stvaranje okruženja za izgradnju

Za izradu projekta trebat će vam esp-open-sdk instaliran na vašem računalu. 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 klon

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

cd esp-rtos-testovi

mkdir -p.lokalne kp postavke.primjer.mk.lokalno/postavke.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: Zaporka 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, a za napajanje koristi NodeMCU 3.3v, vjerojatno nećete moći pogoniti više od ~ 60 LED -a.

Napomena: Ostale postavke nije potrebno mijenjati, ali se po želji mogu promijeniti. Preporuča se držati redoslijed prioriteta zadataka. Što je manji broj prioriteta, niži je prioritet zadatka.

Sada izgradite projekt:

make -C primjeri/cpe439

Ako je sve ispravno postavljeno, trebalo bi početi s sastavljanjem. Na kraju biste trebali vidjeti:

Uspješno izrađen 'firmware/cpe439.bin'

Gledaj me

Korak 3: Povežite hardverske komponente

Povežite hardverske komponente
Povežite hardverske komponente

Sada kada je kôd sastavljen, 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 kako je prikazano na dijagramu.

Nekoliko stvari kojih morate biti svjesni:

  1. Važno: Podatkovna linija WS2812B nije dvosmjerna. Ako pomno 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 oznaka smjera, što možete vidjeti na dijagramu ako pažljivo pogledate.
  2. Ovisno o tome s kakvim priključcima dolazi vaš WS2812B, možda ćete morati napraviti 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 kabele koji se mogu upotrijebiti za matičnu ploču.
  3. Igle MAX31820 imaju manji nagib i tanje su od standardnih 0,1 "/2,54 mm kratkospojnika, što ih čini teškim za spajanje. Jedan od načina za to je korištenje žica kratkospojnika" ženski na muški ", skinuti plastično kućište sa ženske strane, zatim upotrijebite kliješta da čvrsto uvijete krajeve ženskih kratkospojnika oko manjih klinova MAX31820.

Prije uključivanja NodeMCU-a dvaput provjerite veze kako ne biste oštetili komponente.

Korak 4: Bljeskajte 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. Za provjeru možete pokrenuti ovu naredbu dva puta, jednom s isključenim NodeMCU -om, a jednom s uključenim, i usporedite razliku:

ls /dev /ttyUSB*

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

  1. Dodajte svog korisnika u grupu za razgovor:

    sudo adduser $ (whoami) dijalog

  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 bljeskanja 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 datoteku ~/.bashrc:

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

..koji vam omogućuje da jednostavno upišete "nodemcu" kao pseudonim za tu naredbu.

Ako je sve ispravno konfigurirano, vaša LED traka trebala bi 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, pokretanje klijenta kanala 1dhcp … 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 = 5xQueTeVee4: (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 je vaš uređaj spojen na WiFi i posrednik MQTT uspješno, moći ćete slati i primati podatke iz NodeMCU -a s MQTT -om. Ako već niste, instalirajte paket klijenata komaraca:

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 upotrijebiti naredbu mosquitto_sub za pretplatu na temu u 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 upotrijebit ć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 ne postoji ništa što sprječava nekoga drugog da objavi ili se pretplati na iste teme kao i vi. Za isprobavanje je dobro koristiti javnog posrednika, ali za ozbiljnije projekte htjet ćete se povezati s posrednikom sa zaštitom lozinkom ili pokrenuti vlastitog brokera na poslužitelju.

Korak 6: Pojedinosti 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, pa č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 oznake sustava FreeRTOS, pa se stoga ne mogu izbjeći vTaskDelay (). Da bi se to također zaobišlo, upravljački program onewire u ovom projektu napisan je da radi s državnog stroja koji 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 poduzimate ažuriranja temperature, sva se kašnjenja počinju 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 za pogon LED traka 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 bi se LED diode trebale napajati s izvorom od 5 V, a na izlaz SPI pina treba dodati mjenjač razine. Ali 3.3V radi. Drugo, postoje greške koje se javljaju zbog nesavršenog vremena korištenjem SPI metode. I treće, sada ne možete koristiti SPI ni za š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 pogon LED traka je uporaba i2s. Međutim, ova metoda ima puno hakova specifičnih za čip, pa se činilo da je SPI bolji izbor kao vježba za učenje.

Preporučeni: