Kazalo:

WiFi LED trak + temperaturni senzor z ESP8266: 6 korakov
WiFi LED trak + temperaturni senzor z ESP8266: 6 korakov

Video: WiFi LED trak + temperaturni senzor z ESP8266: 6 korakov

Video: WiFi LED trak + temperaturni senzor z ESP8266: 6 korakov
Video: ESP8266 Беспроводной ЧМИ Nextion || Внешний ПЛК Arduino 2024, Julij
Anonim
WiFi LED trak + temperaturni senzor z ESP8266
WiFi LED trak + temperaturni senzor z ESP8266

V tej vadnici so opisani koraki za nastavitev ESP8266 in pogovor s temperaturnim senzorjem in LED trakom, hkrati pa lahko sprejemate vhodne in pošiljate izhodne podatke z MQTT prek WiFi. Projekt je bil narejen za tečaj na Cal Poly San Luis Obispo jeseni 2016- CPE 439: Vgrajeni sistemi v realnem času. Splošni cilj je bil dokazati enostavnost ustvarjanja "stvari", povezane z internetom, s poceni strojno opremo.

Potrebni material/oprema:

  • Razvojna plošča NodeMCU ESP8266
  • WS2812B LED trak
  • MAX31820 Temperaturno tipalo
  • Ogledna plošča
  • 4,7K ohmski upor
  • 220 ohmski upor
  • mostične žice
  • mikro USB kabel
  • PC (ali VM) z Linuxom (npr. Ubuntu)

Predpostavke/predpogoji:

  • izkušnje z uporabo orodij ukazne vrstice in nameščanjem paketov v distribucijski sistem, ki temelji na debianu
  • osnovno razumevanje sintakse Makefile
  • povezovalne žice

1. korak: Ustvarjanje gradbenega okolja

Za izdelavo projekta potrebujete esp-open-sdk, nameščen na vašem računalniku. Sledite povezavi in preberite navodila za izdelavo. Skratka, naredili boste nekaj ukazov sudo apt-get za namestitev odvisnosti, git clone --recursive za kloniranje/prenos esp-open-sdk in končno ukaz make za izdelavo esp-open-sdk.

Glej me

2. korak: Pridobite izvorno kodo, konfigurirajte in sestavite

Zdaj, ko je esp-open-sdk zgrajen, klonirajte skladišče projektov.

git clone

Preklopite v imenik projekta, ustvarite mapo.local in kopirajte vzorčne nastavitve.

cd esp-rtos-testi

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

Zdaj odprite.local/settings.mk s katerim koli urejevalnikom besedila in spremenite naslednje nastavitve:

  • OPENSDK_ROOT: Absolutna pot za lokacijo esp-open-sdk, ki ste jo zgradili v 1. koraku
  • WIFI_SSID: SSID vašega omrežja WiFi
  • WIFI_PASS: Geslo vašega omrežja WiFi
  • PIXEL_COUNT: Število slikovnih pik na LED traku WS2812B

Opomba: Ker ta projekt uporablja LED za pogon LED in za napajanje uporablja NodeMCU 3.3v, verjetno ne boste mogli poganjati več kot ~ 60 LED.

Opomba: drugih nastavitev ni treba spreminjati, lahko pa jih po želji spremenite. Priporočljivo je, da sledite vrstnemu redu prednostnih nalog. Nižja kot je prioritetna številka, nižja je prioriteta naloge.

Zdaj zgradite projekt:

make -C examples/cpe439

Če je vse pravilno nastavljeno, je treba začeti s sestavljanjem. Na koncu bi morali videti:

Uspešno ustvarjen 'firmware/cpe439.bin'

Glej me

3. korak: Povežite komponente strojne opreme

Povežite komponente strojne opreme
Povežite komponente strojne opreme

Zdaj, ko je koda sestavljena, je čas, da povežemo naše zunanje naprave.

Najprej prilepite NodeMCU na ploščo, nato pa uporabite mostične žice za povezavo, kot je prikazano na diagramu.

Nekaj stvari, ki se jih morate zavedati:

  1. Pomembno: Podatkovna linija WS2812B ni dvosmerna. Če natančno pogledate oznake na LED strani traku, bi morali videti majhne puščice, ki kažejo eno smer. Izhod iz D7 NodeMCU mora biti usmerjen v WS2812B enako kot smerna oznaka, ki jo lahko vidite na diagramu, če natančno pogledate.
  2. Odvisno od vrste priključkov, s katerimi je opremljen vaš WS2812B, boste morda morali narediti nekaj sprememb, da se bodo varno povezali v ploščo. Uporabite lahko tudi sponke iz aligatorja, da jih povežete s skakalnimi kabli, ki omogočajo izdelavo plošč.
  3. Zatiči MAX31820 imajo manjši naklon in so tanjši od standardnih 0,1 "/2,54 mm mostičkov, zato jih je težko povezati. Eden od načinov za to je uporaba žic za moške od ženskega do moškega, odstranite plastično ohišje z ženske strani, nato z nekaj klešč tesno stisnite konice skakalcev okoli manjših zatičev MAX31820.

Preden vklopite NodeMCU, dvakrat preverite povezave, da ne poškodujete komponent.

4. korak: Zaženite in zaženite

Utripa

Ko je vsa strojna oprema povezana, priključite NodeMCU in utripajte z naslednjim ukazom:

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

/dev/ttyUSB0 je serijski com, pod katerim bi se moral prikazati NodeMCU. Če imate priključene druge serijske naprave, se lahko prikaže kot /dev /ttyUSB1 ali katera druga številka. Če želite preveriti, lahko ta ukaz izvedete dvakrat, enkrat z izklopljenim NodeMCU in enkrat z vklopljenim ter primerjajte razliko:

ls /dev /ttyUSB*

Druga težava, na katero lahko naletite, je, da nimate dovoljenja za dostop do naprave. To lahko popravite na dva načina:

  1. Dodajte svojega uporabnika v skupino za pogovor:

    sudo adduser $ (whoami) pogovor

  2. chmod ali chown napravo:

sudo chmod 666 /dev /ttyUSB0 sudo chown $ (whoami): $ (whoami) /dev /ttyUSB0Prva metoda je prednostna, saj je trajna rešitev.

Tek

Po uspešnem zagonu ukaza flash se bo naprava takoj zagnala in začela izvajati prevedeno kodo. Kadar koli po utripanju lahko za ogled serijskega izhoda zaženete naslednji ukaz:

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

Če želite prihraniti čas, lahko to dodate v datoteko ~/.bashrc:

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

.., ki vam omogoča, da preprosto vnesete "nodemcu" kot vzdevek za ta ukaz.

Če je vse pravilno konfigurirano, mora vaš LED trak zasvetleti zeleno, pri serijskem prikazovanju pa morate videti povezavo WiFi, dobiti naslov IP, vzpostaviti povezavo z MQTT in sporočati, da se podatki o temperaturi izrivajo.

povezan z odjemalcem MyWiFiSSID, odjemalec 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 ok Zahteva temp OKwifi_task: status = 5xQueteeve4: (Ponovna povezava s strežnikom MQTT test.mosquitto.org… xQueueReceive +25,50xQueueSend ok doneSend MQTT connect… MQTTv311donexQueueReceive +25,56 xQueueSend ok

5. korak: Interakcija

Ob predpostavki, da je vaša naprava povezana z WiFi in posrednik MQTT uspešno, boste lahko pošiljali in prejemali podatke iz NodeMCU z MQTT. Če še niste, namestite paket odjemalcev mosquitto:

sudo apt-get install mosquitto-clients

Zdaj bi morali uporabljati programe mosquitto_pub in mosquitto_sub iz svoje lupine.

Prejemanje posodobitev temperature

Za prejemanje podatkov o temperaturi se bomo želeli z ukazom mosquitto_sub naročiti na temo, v kateri objavlja NodeMCU.

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

Videti bi morali podatke o temperaturi (v stopinjah Celzija), ki prispejo v terminal.

+25.87+25.93+25.68…

Barva LED traku na daljavo

Za pošiljanje vrednosti RGB v NodeMCU prek MQTT se uporablja preprosta oblika sporočila. Oblika ukaza je videti tako:

r: RRRg: GGGb: BBB ~

Kjer RRR, GGG, BBB ustrezajo vrednostim RGB (0-255) barve, ki jo želite poslati. Za pošiljanje našega ukaza bomo uporabili ukaz mosquitto_pub. Tu je nekaj primerov:

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

Če želite postati ustvarjalni, poiščite izbirnik barv na spletu, kot je ta, in uredite ukaz s poljubno vrednostjo RGB.

Pazi

Teme v tem projektu so nastavljene na /cpe439 /rgb in /cpe439 /temp v javnem posredniku MQTT, kar pomeni, da ničesar ne preprečuje objavi ali naročanju na iste teme kot vi. Če poskusite stvari, je uporaba javnega posrednika v redu, za resnejše projekte pa se boste želeli povezati z posrednikom z zaščito z geslom ali pa na strežniku zagnati svojega posrednika.

6. korak: Podrobnosti o izvajanju

Onewire

ESP8266 ima samo eno jedro, tako dolge, blokirajoče naloge, kot je čakanje 750 ms, da temperaturni senzor izvede meritev temperature, bi običajno povzročilo, da WiFi ne deluje dobro, in morda celo zrušilo. V paradigmi FreeRTOS pokličete vTaskDelay () za obravnavo teh dolgih čakanj, vendar je med branji in pisanjem potrebnih tudi veliko krajših čakanj, ki so krajša od sistemske kljukice FreeRTOS, zato se jim z vTaskDelay () ni mogoče izogniti. Da bi se jih tudi izognili, je bil gonilnik onewire v tem projektu napisan tako, da je odtekel stanje-stroj, ki ga poganja strojni časovnik ESP8266, ki lahko sproži dogodke že vsakih 10 mikro-sekund, kar je najkrajše potreben čas med operacijami branja/pisanja ene žice. Večina drugih izvedb uporablja blokirni klic za delay_us () ali podobno za to, če pa nenehno posodabljate temperaturo, se vse te zamude začnejo seštevati, kar povzroči manj odzivno aplikacijo. Vir za ta del kode se nahaja v mapi extras/onewire.

WS2812B

ESP8266 nima standardnih strojnih možnosti za PWM, ki bi dovolj hitro poganjale LED trakove pri 800KHz. Da bi se temu izognili, ta projekt uporablja zatič LED za vklop SPI MOSI. S prilagajanjem časovne frekvence SPI in spreminjanjem obremenitve SPI lahko dosežete dokaj zanesljiv nadzor nad vsako posamezno LED. Ta metoda ni brez napak- za eno je treba LED diode napajati z virom 5 V, na izhodu zatiča SPI pa je treba dodati menjalnik nivoja. Toda 3.3V deluje. Drugič, obstajajo napake, ki nastanejo zaradi nepopolnega časovnega razporeda z uporabo metode SPI. Tretjič, zdaj SPI ne morete uporabljati za nič drugega. Dodatno ozadje te metode najdete tukaj, vir tega dela kode pa v mapi extras/ws2812.

Zanesljivejša metoda za zavijanje LED trakov je uporaba i2s. Vendar ima ta metoda veliko hakov, značilnih za čipe, zato se je zdelo, da je SPI boljša izbira kot učna vaja.

Priporočena: