Obsah:

WiFi LED pásik + snímač teploty s ESP8266: 6 krokov
WiFi LED pásik + snímač teploty s ESP8266: 6 krokov

Video: WiFi LED pásik + snímač teploty s ESP8266: 6 krokov

Video: WiFi LED pásik + snímač teploty s ESP8266: 6 krokov
Video: Введение в плату разработки NodeMCU ESP8266 WiFi с примером HTTP-клиента 2024, November
Anonim
WiFi LED pásik + snímač teploty s ESP8266
WiFi LED pásik + snímač teploty s ESP8266

Tento tutoriál popisuje kroky na nastavenie ESP8266 a jeho uvedenie do kontaktu s teplotným senzorom a LED pásikom a zároveň dokáže prijímať a odosielať výstup pomocou MQTT cez WiFi. Projekt bol vypracovaný pre kurz absolvovaný na Cal Poly San Luis Obispo na jeseň 2016- CPE 439: Real Time Embedded Systems. Celkovým cieľom bolo demonštrovať jednoduchosť vytvárania „veci“pripojenej k internetu pomocou lacného hardvéru.

Potrebný spotrebný materiál/vybavenie:

  • Doska pre vývojárov NodeMCU ESP8266
  • LED pás WS2812B
  • MAX31820 Snímač teploty
  • Breadboard
  • Rezistor 4,7K ohm
  • Odpor 220 ohmov
  • prepojovacie vodiče
  • mikro USB kábel
  • PC (alebo VM) so systémom Linux (napr. Ubuntu)

Predpoklady/predpoklady:

  • skúsenosti s používaním nástrojov príkazového riadka a inštaláciou balíkov v distribúcii založenej na debian
  • základné znalosti syntaxe Makefile
  • spojovacie vodiče

Krok 1: Vytvorenie prostredia pre zostavenie

Na zostavenie projektu budete potrebovať esp-open-sdk nainštalovaný vo vašom počítači. Kliknite na odkaz a prečítajte si pokyny na zostavenie. Stručne povedané, budete vykonávať niekoľko príkazov sudo apt-get na inštaláciu závislostí, git clone --recursive na klonovanie/sťahovanie esp-open-sdk a nakoniec príkaz make na zostavenie esp-open-sdk.

Sleduj ma

Krok 2: Získajte zdrojový kód, nakonfigurujte ho a vytvorte

Teraz, keď je vytvorený esp-open-sdk, klonujte archív projektov.

klon git

Prejdite do adresára projektu, vytvorte priečinok.local a skopírujte vzorové nastavenia.

cd esp-rtos-testy

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

Teraz otvorte.local/settings.mk v ľubovoľnom textovom editore a zmeňte nasledujúce nastavenia:

  • OPENSDK_ROOT: Absolútna cesta k umiestneniu súboru esp-open-sdk, ktorý ste vytvorili v kroku 1
  • WIFI_SSID: SSID vašej siete WiFi
  • WIFI_PASS: Heslo vašej siete WiFi
  • PIXEL_COUNT: Počet pixelov na vašom páse LED WS2812B

Poznámka: Pretože tento projekt používa na napájanie LED diódy SPI a na ich napájanie používa NodeMCU 3.3v, pravdepodobne nebudete môcť ovládať viac ako ~ 60 diód LED.

Poznámka: Ostatné nastavenia nie je potrebné meniť, ale môžu byť podľa želania. Odporúča sa zachovať poradie priorít úloh. Čím nižšie číslo priority, tým nižšia priorita úlohy.

Teraz vytvorte projekt:

make -C examples/cpe439

Ak je všetko správne nastavené, malo by sa začať s kompiláciou. Na konci by ste mali vidieť:

Úspešne vytvorený súbor „firmware/cpe439.bin“

Sleduj ma

Krok 3: Pripojte hardvérové súčasti

Pripojte hardvérové komponenty
Pripojte hardvérové komponenty

Teraz, keď je kód zostavený, je čas pripojiť naše periférne zariadenia.

Najprv prilepte NodeMCU na nepájivú dosku a potom pomocou prepojovacích káblov vykonajte pripojenia podľa obrázku.

Je potrebné si uvedomiť niekoľko vecí:

  1. Dôležité: Dátový riadok WS2812B nie je obojsmerný. Ak sa pozriete pozorne na značky na strane LED pásika, mali by ste vidieť malé šípky smerujúce jedným smerom. Výstup z D7 NodeMCU musí smerovať do WS2812B rovnakým spôsobom ako ukazovateľ smeru, ktorý môžete vidieť na diagrame, ak sa pozriete pozorne.
  2. V závislosti od toho, s akým typom konektorov je váš WS2812B dodávaný, bude možno potrebné vykonať určité úpravy, aby sa zaistilo bezpečné pripojenie k doske. Aligátorové svorky môžete tiež použiť na ich prepojenie s prepojovacími káblami, ktoré možno prepojiť s chlebom.
  3. Kolíky MAX31820 majú menšiu rozteč a sú tenšie ako štandardné prepojky 0,1 "/2,54 mm, čo spôsobuje, že ich pripojenie je náročné. Jedným zo spôsobov, ako to obísť, je použiť prepojovacie vodiče medzi ženami a mužmi a zložiť plastové puzdro zo ženskej strany, potom pomocou klieští zvierajte konce prepojky tesne okolo menších kolíkov MAX31820.

Pred zapnutím NodeMCU dvakrát skontrolujte zapojenia, aby ste nepoškodili súčasti.

Krok 4: Blesk a spustenie

Bliká

Keď je pripojený všetok hardvér, zapojte NodeMCU a blikajte pomocou nasledujúceho príkazu:

urobiť flash -C príklady/cpe439 ESPPORT =/dev/ttyUSB0

/dev/ttyUSB0 je sériový kom, pod ktorým by sa mal NodeMCU zobrazovať. Ak máte pripojené ďalšie sériové zariadenia, môže sa zobraziť ako /dev /ttyUSB1 alebo iné číslo. Ak chcete skontrolovať, môžete tento príkaz spustiť dvakrát, raz s odpojeným NodeMCU a raz so zapojeným a porovnať rozdiel:

ls /dev /ttyUSB*

Ďalším problémom, s ktorým sa môžete stretnúť, je to, že nemáte povolenie na prístup k zariadeniu. Dva spôsoby, ako to vyriešiť, sú:

  1. Pridajte svojho používateľa do skupiny dialógových okien:

    sudo adduser $ (whoami) dialout

  2. chmod alebo chown zariadenia:

sudo chmod 666 /dev /ttyUSB0 sudo chown $ (whoami): $ (whoami) /dev /ttyUSB0Uprednostňuje sa prvý spôsob, pretože je to trvalé riešenie.

Beh

Po úspešnom spustení príkazu flash sa zariadenie okamžite spustí a spustí spustený kompilovaný kód. Kedykoľvek po blikaní môžete spustiť nasledujúci príkaz na sledovanie sériového výstupu:

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

Aby ste ušetrili čas, môžete to pridať do svojho súboru ~/.bashrc:

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

..ktorý vám umožní jednoducho napísať "nodemcu" ako alias pre tento príkaz.

Ak je všetko nakonfigurované správne, váš LED pásik by sa mal rozsvietiť nazeleno a na sérii by ste mali vidieť WiFi pripojenie, získať IP adresu, pripojiť sa k MQTT a hlásiť, že sa tlačia údaje o teplote.

spojený s MyWiFiSSID, kanál 1dhcp klient … wifi_task: status = 1wifi_task: status = 1ip: 192.168.2.23, maska: 255.255.255.0,:)

Krok 5: Interakcia

Za predpokladu, že je vaše zariadenie pripojené k WiFi a broker MQTT úspešne, budete môcť odosielať a prijímať údaje z NodeMCU pomocou MQTT. Ak ste to ešte neurobili, nainštalujte si balík klientov mosquitto:

sudo apt-get install mosquitto-clients

Teraz by ste mali mať možnosť používať programy mosquitto_pub a mosquitto_sub zo svojho shellu.

Prijímanie aktualizácií teploty

Ak chcete prijímať údaje o teplote, budeme sa chcieť prihlásiť pomocou príkazu mosquitto_sub k téme, na ktorú NodeMCU publikuje.

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

Mali by ste vidieť údaje o teplote (v stupňoch Celzia), prichádzajúce do terminálu.

+25.87+25.93+25.68…

Diaľkové nastavenie farby pásika LED

Na odosielanie hodnôt RGB na NodeMCU cez MQTT sa používa jednoduchý formát správy. Formát príkazu vyzerá takto:

r: RRRg: GGGb: BBB ~

Kde RRR, GGG, BBB zodpovedajú hodnotám RGB (0-255) farby, ktorú chcete odoslať. Na odoslanie nášho príkazu použijeme príkaz mosquitto_pub. Tu je niekoľko príkladov:

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 ~ ' # modrá

Ak chcete byť kreatívni, nájdite online nástroj na výber farieb, ako je tento, a upravte príkaz pomocou ľubovoľnej zvolenej hodnoty RGB.

Pozor

Témy v tomto projekte sú nastavené na /cpe439 /rgb a /cpe439 /temp na verejnom maklérovi MQTT, čo znamená, že nič nebráni tomu, aby niekto iný publikoval alebo sa prihlásil na odber rovnakých tém ako vy. Na vyskúšanie vecí je použitie verejného makléra v poriadku, ale pre serióznejšie projekty sa budete chcieť pripojiť k brokerovi s ochranou heslom alebo spustiť vlastného brokera na serveri.

Krok 6: Podrobnosti o implementácii

Onewire

ESP8266 má iba 1 jadro, takže dlhé blokovacie úlohy, ako napríklad čakanie 750 ms na teplotný snímač, aby vykonal meranie teploty, by normálne spôsobili, že WiFi nefunguje správne a môže dokonca dôjsť k zlyhaniu. V paradigme FreeRTOS voláte vTaskDelay (), aby ste zvládli tieto dlhé čakania, ale medzi čítaniami a zápismi je potrebných aj mnoho kratších čakaní, ktoré sú kratšie ako zaškrtnutie systému FreeRTOS, a preto sa im vTaskDelay () nedá vyhnúť. Aby sa to tiež dalo obísť, bol ovládač onewire v tomto projekte napísaný tak, aby bežal na stavovom počítači, ktorý je poháňaný hardvérovým časovačom ESP8266, ktorý môže spúšťať udalosti už od každých 10 mikrosekund, čo je zhoda okolností najkratšia doba. požadovaný čas medzi operáciami čítania/zápisu onewire. Väčšina ostatných implementácií na to používa blokovacie volanie delay_us () alebo podobné, ale ak neustále aktualizujete teplotu, všetky tieto oneskorenia sa začnú sčítavať, čo má za následok menej responzívnu aplikáciu. Zdroj pre túto časť kódu je umiestnený v priečinku extras/onewire.

WS2812B

ESP8266 nemá žiadne štandardné hardvérové možnosti pre PWM dostatočne rýchle na napájanie pásikov LED na frekvencii 800 kHz. Aby sme to obišli, tento projekt používa na napájanie LED diódy SPI MOSI. Úpravou taktovacej frekvencie SPI a zmenou užitočného zaťaženia SPI môžete dosiahnuť pomerne spoľahlivé ovládanie každej jednotlivej LED diódy. Táto metóda nie je bez chýb- v prvom prípade by mali byť LED diódy napájané zdrojom 5 V a na výstup pinu SPI by mal byť pridaný radič úrovne. Ale 3,3 V funguje. Za druhé, existujú chyby, ktoré sa vyskytujú v dôsledku nedokonalého načasovania pomocou metódy SPI. A po tretie, teraz nemôžete SPI používať na nič iné. Ďalšie informácie o tejto metóde nájdete tu a zdroj pre túto časť kódu sa nachádza v priečinku extras/ws2812.

Spoľahlivejšou metódou na pohon pásov LED je použitie i2s. Táto metóda má však veľa hackov špecifických pre čipy, takže sa zdá, že SPI je lepšia voľba ako učebné cvičenie.

Odporúča: