Obsah:

WiFi LED pásek + teplotní senzor s ESP8266: 6 kroků
WiFi LED pásek + teplotní senzor s ESP8266: 6 kroků

Video: WiFi LED pásek + teplotní senzor s ESP8266: 6 kroků

Video: WiFi LED pásek + teplotní senzor s ESP8266: 6 kroků
Video: Úvod do desky NodeMCU ESP8266 WiFi Development s příkladem klienta HTTP 2024, Listopad
Anonim
WiFi LED pásek + teplotní senzor s ESP8266
WiFi LED pásek + teplotní senzor s ESP8266

Tento tutoriál popisuje kroky k nastavení ESP8266 a jeho připojení k teplotnímu senzoru a LED pásku a zároveň je schopen přijímat vstup a odesílat výstup pomocí MQTT přes WiFi. Projekt byl vytvořen pro kurz absolvovaný na Cal Poly San Luis Obispo na podzim 2016- CPE 439: Real Time Embedded Systems. Celkovým cílem bylo demonstrovat snadnost vytváření „věci“připojené k internetu pomocí levného hardwaru.

Požadované zásoby/vybavení:

  • Vývojová deska NodeMCU ESP8266
  • WS2812B LED pásek
  • MAX31820 Teplotní senzor
  • Prkénko
  • Rezistor 4,7K ohm
  • Rezistor 220 ohmů
  • propojovací vodiče
  • mikro USB kabel
  • PC (nebo VM) s linuxem (např. Ubuntu)

Předpoklady/předpoklady:

  • zkušenosti s používáním nástrojů příkazového řádku a instalací balíčků v distribuci založené na debianu
  • základní porozumění syntaxi Makefile
  • spojovací vodiče

Krok 1: Vytvoření prostředí sestavení

K sestavení projektu budete potřebovat na svém počítači nainstalovaný esp-open-sdk. Klikněte na odkaz a přečtěte si pokyny k sestavení. Stručně řečeno, budete provádět několik příkazů sudo apt-get k instalaci závislostí, klon git --recursive pro klonování/stahování esp-open-sdk a nakonec příkaz make k vytvoření esp-open-sdk.

Sleduj mě

Krok 2: Získejte zdrojový kód, konfigurujte a sestavte

Nyní, když je vytvořeno esp-open-sdk, klonujte úložiště projektu.

klon git

Přejděte do adresáře projektu, vytvořte složku.local a zkopírujte ukázková nastavení.

cd esp-rtos-testy

mkdir -p.local nastavení cp. příklad.mk.local/nastavení.mk

Nyní otevřete.local/settings.mk pomocí libovolného textového editoru a změňte následující nastavení:

  • OPENSDK_ROOT: Absolutní cesta pro umístění esp-open-sdk, které jste vytvořili v kroku 1
  • WIFI_SSID: SSID vaší WiFi sítě
  • WIFI_PASS: Heslo vaší WiFi sítě
  • PIXEL_COUNT: Počet pixelů na vašem LED pásku WS2812B

Poznámka: Vzhledem k tomu, že tento projekt využívá k napájení LED diody SPI a k jejich napájení používá NodeMCU 3.3v, pravděpodobně nebudete moci řídit více než ~ 60 LED.

Poznámka: Ostatní nastavení není třeba měnit, ale mohou být v případě potřeby. Doporučuje se zachovat pořadí priorit úkolů. Čím nižší číslo priority, tím nižší priorita úkolu.

Nyní vytvořte projekt:

make -C examples/cpe439

Pokud je vše správně nastaveno, mělo by se začít kompilovat. Na konci byste měli vidět:

Úspěšně vytvořen 'firmware/cpe439.bin'

Sleduj mě

Krok 3: Připojte hardwarové součásti

Připojte hardwarové součásti
Připojte hardwarové součásti

Nyní, když je kód kompilován, je čas připojit naše periferie.

Nejprve přilepte NodeMCU na prkénko a poté pomocí propojovacích vodičů proveďte připojení podle obrázku.

Je třeba si uvědomit několik věcí:

  1. Důležité: Datová linka WS2812B není obousměrná. Pokud se podíváte pozorně na značky na straně LED pásku, měli byste vidět malé šipky směřující jedním směrem. Výstup z D7 NodeMCU musí směřovat do WS2812B stejným způsobem jako ukazatel směru, který můžete vidět v diagramu, pokud se podíváte pozorně.
  2. V závislosti na tom, s jakým typem konektorů je váš WS2812B dodáván, bude možná nutné provést určité úpravy, aby se bezpečně připojily k prkénku. Aligátorové svorky můžete také použít k jejich připojení k propojovacím kabelům, které lze připojit na prkénko.
  3. Kolíky MAX31820 mají menší rozteč a jsou tenčí než standardní 0,1 "/2,54 mm propojky, takže je obtížné je propojit. Jedním ze způsobů, jak to obejít, je použít propojovací vodiče typu samec-samec, sundat plastové pouzdro ze ženské strany, poté pomocí kleští pevně spojte konce propojky kolem menších kolíků MAX31820.

Před zapnutím NodeMCU zkontrolujte zapojení, aby nedošlo k poškození součástí.

Krok 4: Blesk a spuštění

Bliká

Když je připojen veškerý hardware, připojte NodeMCU a flashujte pomocí následujícího příkazu:

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

/dev/ttyUSB0 je sériový kom, pod kterým by se měl NodeMCU zobrazovat. Pokud máte připojena další sériová zařízení, může se zobrazit jako /dev /ttyUSB1 nebo jiné číslo. Chcete -li zkontrolovat, můžete tento příkaz spustit dvakrát, jednou s odpojeným NodeMCU a jednou s připojeným a porovnat rozdíl:

ls /dev /ttyUSB*

Dalším problémem, se kterým se můžete setkat, je to, že nemáte oprávnění k přístupu k zařízení. Dva způsoby, jak to opravit, jsou:

  1. Přidejte svého uživatele do skupiny dialoutů:

    sudo adduser $ (whoami) dialout

  2. chmod nebo chown zařízení:

sudo chmod 666 /dev /ttyUSB0 sudo chown $ (whoami): $ (whoami) /dev /ttyUSB0Upřednostňuje se první metoda, protože se jedná o trvalé řešení.

Běh

Po úspěšném spuštění příkazu flash se zařízení okamžitě spustí a začne spouštět kompilovaný kód. Kdykoli po blikání můžete spustit následující příkaz a sledovat sériový výstup:

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

Chcete -li ušetřit čas, můžete toto přidat do souboru ~/.bashrc:

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

..který vám umožní jednoduše zadat "nodemcu" jako alias pro tento příkaz.

Pokud je vše správně nakonfigurováno, měl by se váš LED pásek rozsvítit zeleně a na sériovém čísle byste měli vidět připojení WiFi, získat IP adresu, připojit se k MQTT a zprávy, že jsou vytlačována data o teplotě.

propojeno s MyWiFiSSID, kanál 1dhcp klient … wifi_task: status = 1wifi_task: status = 1ip: 192.168.2.23, maska: 255.255.255.0,: (Opětovné) připojení k serveru MQTT test.mosquitto.org… xQueueReceive +25,50xQueueSend ok donePend MQTT connect… MQTTv311donexQueueReceive +25,56 xQueueSend ok

Krok 5: Interakce

Za předpokladu, že je vaše zařízení připojeno k WiFi a broker MQTT úspěšně, budete moci odesílat a přijímat data z NodeMCU pomocí MQTT. Pokud jste to ještě neudělali, nainstalujte si balíček mosquitto clients:

sudo apt-get install mosquitto-clients

Nyní byste měli být schopni používat programy mosquitto_pub a mosquitto_sub ze svého shellu.

Příjem aktualizací teploty

Chcete -li přijímat údaje o teplotě, budeme se chtít pomocí příkazu mosquitto_sub přihlásit k odběru tématu, do kterého NodeMCU publikuje.

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

Měli byste vidět údaje o teplotě (ve stupních Celsia), přicházející do terminálu.

+25.87+25.93+25.68…

Vzdálené nastavení barvy LED pásku

K odeslání hodnot RGB na NodeMCU přes MQTT se používá jednoduchý formát zprávy. Formát příkazu vypadá takto:

r: RRRg: GGGb: BBB ~

Kde RRR, GGG, BBB odpovídají hodnotám RGB (0-255) barvy, kterou chcete odeslat. K odeslání našeho příkazu použijeme příkaz mosquitto_pub. Zde jsou nějaké příklady:

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

Pokud chcete být kreativní, najděte si online výběr barev, jako je tento, a upravte příkaz s libovolnou zvolenou hodnotou RGB.

Dávej si pozor

Témata v tomto projektu jsou nastavena na /cpe439 /rgb a /cpe439 /temp na veřejném makléři MQTT, což znamená, že nic nebrání tomu, aby někdo jiný publikoval nebo se přihlásil k odběru stejných témat jako vy. Pro vyzkoušení věcí je použití veřejného brokera v pořádku, ale u serióznějších projektů se budete chtít připojit k brokerovi s ochranou heslem nebo spustit vlastního brokera na serveru.

Krok 6: Podrobnosti o implementaci

Onewire

ESP8266 má pouze 1 jádro, takže dlouhé blokovací úlohy, jako je čekání 750 ms na teplotní senzor, aby provedl měření teploty, by normálně vedly k tomu, že WiFi nefunguje správně, a možná dokonce i ke zhroucení. V paradigmatu FreeRTOS voláte vTaskDelay (), abyste zvládli tato dlouhá čekání, ale mezi čteními a zápisy, které jsou kratší než zaškrtnutí systému FreeRTOS, je také zapotřebí mnoho kratších čekání, a proto se jim vTaskDelay () nelze vyhnout. Aby se také obešly, byl ovladač onewire v tomto projektu napsán tak, aby běžel ze stavového stroje, který je poháněn hardwarovým časovačem ESP8266, který může spouštět události až každých 10 mikrosekund, což je shodně nejkratší požadovaný čas mezi operacemi čtení/zápisu onewire. Většina ostatních implementací k tomu používá blokovací volání delay_us () nebo podobné, ale pokud neustále přijímáte aktualizace teploty, všechna tato zpoždění se začínají sčítat, což má za následek méně citlivou aplikaci. Zdroj pro tuto část kódu je umístěn ve složce extras/onewire.

WS2812B

ESP8266 nemá žádné standardní hardwarové možnosti pro PWM dostatečně rychlé pro napájení LED pásů na 800KHz. Chcete -li to obejít, používá tento projekt k ovládání diod SPI MOSI. Úpravou hodinové rychlosti SPI a změnou užitečného zatížení SPI můžete dosáhnout poměrně spolehlivého ovládání každé jednotlivé LED. Tato metoda není bez chyb- pro jednu by LED diody měly být napájeny zdrojem 5 V a na výstup pinu SPI by měl být přidán řadič úrovně. Ale 3,3 V funguje. Za druhé, existují závady, ke kterým dochází v důsledku nedokonalého načasování pomocí metody SPI. A za třetí, nyní nemůžete SPI použít na nic jiného. Další pozadí této metody najdete zde a zdroj pro tuto část kódu je umístěn ve složce extras/ws2812.

Spolehlivější metodou pro řízení LED pásků je použití i2s. Tato metoda má však spoustu hacků specifických pro čipy, takže se zdálo, že SPI je jako učební cvičení lepší volbou.

Doporučuje: