Spisu treści:
- Krok 1: Tworzenie środowiska budowania
- Krok 2: Uzyskaj kod źródłowy, skonfiguruj i skompiluj
- Krok 3: Podłącz komponenty sprzętowe
- Krok 4: Flash i uruchom
- Krok 5: Interakcja
- Krok 6: Szczegóły implementacji
Wideo: Taśma LED WiFi + czujnik temperatury z ESP8266: 6 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Ten samouczek opisuje kroki, aby skonfigurować ESP8266 i sprawić, by komunikował się zarówno z czujnikiem temperatury, jak i taśmą LED, a jednocześnie jest w stanie odbierać dane wejściowe i wysyłać dane wyjściowe za pomocą MQTT przez Wi-Fi. Projekt powstał na potrzeby kursu prowadzonego w Cal Poly San Luis Obispo jesienią 2016 r. – CPE 439: Real Time Embedded Systems. Ogólnym celem było zademonstrowanie łatwości tworzenia „rzeczy” połączonej z Internetem za pomocą taniego sprzętu.
Wymagane materiały/sprzęt:
- Płyta deweloperska NodeMCU ESP8266
- Taśma LED WS2812B
- Czujnik temperatury MAX31820
- Deska do krojenia chleba
- Rezystor 4,7 kΩ
- Rezystor 220 omów
- przewody połączeniowe
- kabel microUSB
- PC (lub VM) z systemem Linux (np. Ubuntu)
Założenia/warunki wstępne:
- doświadczenie w korzystaniu z narzędzi wiersza poleceń i instalowaniu pakietów w dystrybucji opartej na debianie
- podstawowa znajomość składni Makefile
- przewody łączące
Krok 1: Tworzenie środowiska budowania
Aby zbudować projekt, potrzebujesz zainstalowanego na swoim komputerze esp-open-sdk. Kliknij link i przeczytaj instrukcje kompilacji. Krótko mówiąc, będziesz wykonywać kilka poleceń sudo apt-get, aby zainstalować zależności, klon git --recursive do klonowania/pobierania esp-open-sdk, a na koniec polecenie make do budowania esp-open-sdk.
patrz na mnie
Krok 2: Uzyskaj kod źródłowy, skonfiguruj i skompiluj
Po zbudowaniu esp-open-sdk sklonuj repozytorium projektu.
klon git
Przejdź do katalogu projektu, utwórz folder.local i skopiuj przykładowe ustawienia.
cd esp-rtos-testy
mkdir -p.local cp settings.example.mk.local/settings.mk
Teraz otwórz.local/settings.mk dowolnym edytorem tekstu i zmień następujące ustawienia:
- OPENSDK_ROOT: Ścieżka bezwzględna do lokalizacji esp-open-sdk zbudowanej w kroku 1
- WIFI_SSID: identyfikator SSID Twojej sieci Wi-Fi
- WIFI_PASS: hasło do Twojej sieci Wi-Fi
- PIXEL_COUNT: liczba pikseli na pasku LED WS2812B
Uwaga: Ponieważ ten projekt wykorzystuje SPI do sterowania diodami LED i wykorzystuje NodeMCU 3.3v do ich zasilania, prawdopodobnie nie będziesz w stanie sterować więcej niż ~60 diodami LED.
Uwaga: Inne ustawienia nie muszą być zmieniane, ale mogą być w razie potrzeby. Zaleca się zachowanie kolejności priorytetów zadań. Im niższy numer priorytetu, tym niższy priorytet zadania.
Teraz zbuduj projekt:
zrobić -C przykłady/cpe439
Jeśli wszystko jest poprawnie skonfigurowane, powinno rozpocząć się kompilacja. Na koniec powinieneś zobaczyć:
Pomyślnie utworzono „oprogramowanie układowe/cpe439.bin”
patrz na mnie
Krok 3: Podłącz komponenty sprzętowe
Teraz, gdy kod jest już skompilowany, czas podłączyć nasze urządzenia peryferyjne.
Najpierw przyklej NodeMCU do płytki stykowej, a następnie użyj przewodów połączeniowych, aby wykonać połączenia, jak pokazano na schemacie.
Kilka rzeczy, o których należy pamiętać:
- Ważne: Linia danych WS2812B nie jest dwukierunkowa. Jeśli przyjrzysz się uważnie oznaczeniom po stronie LED paska, powinieneś zobaczyć małe strzałki wskazujące jeden kierunek. Wyjście z D7 NodeMCU musi zmierzać do WS2812B w taki sam sposób, jak znacznik kierunku, który można zobaczyć na schemacie, jeśli przyjrzysz się uważnie.
- W zależności od rodzaju złączy, z którymi jest wyposażony WS2812B, może być konieczne wprowadzenie pewnych modyfikacji, aby bezpiecznie połączyć je z płytką stykową. Możesz również użyć zacisków krokodylkowych, aby podłączyć je do kabli połączeniowych z możliwością montażu płytki stykowej.
- Piny MAX31820 mają mniejszy rozstaw i są cieńsze niż standardowe zworki 0.1"/2.54mm, co utrudnia ich podłączenie. Jednym ze sposobów na obejście tego jest użycie żeńskich-męskich zworek, zdejmując plastikową obudowę z żeńskiej strony, następnie za pomocą szczypiec zaciśnij końcówki zworki żeńskiej ciasno wokół mniejszych styków MAX31820.
Przed włączeniem NodeMCU sprawdź dokładnie połączenia, aby nie uszkodzić komponentów.
Krok 4: Flash i uruchom
Błyskowy
Po podłączeniu całego sprzętu podłącz NodeMCU i flashuj za pomocą następującego polecenia:
make flash -C przykłady/cpe439 ESPPORT=/dev/ttyUSB0
/dev/ttyUSB0 to port szeregowy, pod którym powinno pojawić się NodeMCU. Jeśli masz podłączone inne urządzenia szeregowe, może pojawić się jako /dev/ttyUSB1 lub inny numer. Aby to sprawdzić, możesz uruchomić to polecenie dwa razy, raz z odłączonym NodeMCU, a raz z podłączonym i porównać różnicę:
ls /dev/ttyUSB*
Innym problemem, który możesz napotkać, jest brak uprawnień dostępu do urządzenia. Dwa sposoby na naprawienie tego to:
-
Dodaj użytkownika do grupy połączeń:
sudo adduser $(whoami) dialout
- chmod lub chown urządzenie:
sudo chmod 666 /dev/ttyUSB0 sudo chown $(whoami):$(whoami) /dev/ttyUSB0Preferowana jest pierwsza metoda, ponieważ jest rozwiązaniem trwałym.
Bieganie
Po pomyślnym uruchomieniu polecenia flash urządzenie natychmiast się uruchomi i rozpocznie uruchamianie skompilowanego kodu. W dowolnym momencie po flashowaniu możesz uruchomić następujące polecenie, aby obejrzeć wyjście szeregowe:
python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 /dev/ttyUSB0 500000 --raw -q
Aby zaoszczędzić czas, możesz dodać to do swojego pliku ~/.bashrc:
alias nodemcu='python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 /dev/ttyUSB0 500000 --raw -q'
..co pozwala po prostu wpisać "nodemcu" jako alias dla tego polecenia.
Jeśli wszystko jest poprawnie skonfigurowane, twoja taśma LED powinna zaświecić się na zielono, a na porcie szeregowym powinieneś zobaczyć połączenie Wi-Fi, uzyskać adres IP, połączyć się z MQTT i komunikaty, że dane temperatury są przesyłane.
połączony z MyWiFiSSID, kanał 1dhcp client start…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 = 5xQueeWittta: Connected_tamqQumqeu: (Ponowne) łączenie z serwerem MQTT test.mosquitto.org …xQueueReceive +25.50xQueueSend ok gotoweSend MQTT connect … MQTTv311donexQueueReceive +25.56 xQueueSend ok
Krok 5: Interakcja
Zakładając, że Twoje urządzenie pomyślnie połączyło się z Wi-Fi i brokerem MQTT, będziesz mógł wysyłać i odbierać dane z NodeMCU za pomocą MQTT. Jeśli jeszcze tego nie zrobiłeś, zainstaluj pakiet klientów mosquitto:
sudo apt-get install mosquitto-clients
Powinieneś teraz móc korzystać z programów mosquitto_pub i mosquitto_sub z twojej powłoki.
Odbieranie aktualizacji temperatury
Aby otrzymać dane o temperaturze, będziemy chcieli użyć polecenia mosquitto_sub, aby zasubskrybować temat, w którym publikuje NodeMCU.
mosquitto_sub -h test.mosquitto.org -t /cpe439/temp
Powinieneś zobaczyć dane o temperaturze (w stopniach Celsjusza) przybywające do terminala.
+25.87+25.93+25.68…
Zdalne ustawianie koloru taśmy LED
Prosty format wiadomości jest używany do wysyłania wartości RGB do NodeMCU przez MQTT. Format polecenia wygląda tak:
r:RRRg:GGGb:BBB~
Gdzie RRR, GGG, BBB odpowiadają wartościom RGB (0-255) koloru, który chcesz wysłać. Aby wysłać nasze polecenie, użyjemy polecenia mosquitto_pub. Oto kilka przykładów:
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~' # niebieski
Jeśli chcesz wykazać się kreatywnością, znajdź selektor kolorów w Internecie, taki jak ten, i edytuj polecenie z dowolną wybraną wartością RGB.
Uważaj
Tematy w tym projekcie są ustawione na /cpe439/rgb i /cpe439/temp na publicznym brokerze MQTT, co oznacza, że nic nie stoi na przeszkodzie, aby ktoś inny mógł publikować lub subskrybować te same tematy co Ty. Aby wypróbować różne rzeczy, korzystanie z publicznego brokera jest w porządku, ale w przypadku poważniejszych projektów będziesz chciał połączyć się z brokerem z ochroną hasłem lub uruchomić własnego brokera na serwerze.
Krok 6: Szczegóły implementacji
Onewire
ESP8266 ma tylko 1 rdzeń, więc długie blokowanie zadań, takich jak oczekiwanie 750 ms na czujnik temperatury, aby wykonał pomiar temperatury, normalnie powodowałoby nieprawidłowe działanie WiFi, a może nawet awarię. W paradygmacie FreeRTOS wywołujesz funkcję vTaskDelay(), aby obsłużyć te długie oczekiwania, ale istnieje również wiele krótszych czasów oczekiwania między odczytami i zapisami, które są krótsze niż takt systemowy FreeRTOS, a zatem nie można ich uniknąć za pomocą vTaskDelay(). Aby to obejść, sterownik onewire w tym projekcie został napisany tak, aby działał z maszyny stanu, która jest sterowana przez zegar sprzętowy ESP8266, który może wyzwalać zdarzenia tak niskie, jak co 10 mikrosekund, co jest najkrótszym okresem wymagany czas między operacjami odczytu/zapisu onewire. Większość innych implementacji używa wywołania blokującego do delay_us() lub podobnego, aby sobie z tym poradzić, ale jeśli stale pobierasz aktualizacje temperatury, wszystkie te opóźnienia zaczynają się sumować, co powoduje, że aplikacja jest mniej responsywna. Źródło tej części kodu znajduje się w folderze extras/onewire.
WS2812B
ESP8266 nie ma żadnych standardowych opcji sprzętowych dla PWM wystarczająco szybkich, aby napędzać paski LED z częstotliwością 800KHz. Aby to obejść, ten projekt wykorzystuje pin SPI MOSI do sterowania diodami LED. Dostosowując częstotliwość zegara SPI i zmieniając ładunek SPI wokół, możesz osiągnąć dość niezawodną kontrolę każdej indywidualnej diody LED. Ta metoda nie jest pozbawiona wad - po pierwsze diody powinny być zasilane ze źródła 5V, a na wyjściu pinu SPI należy dodać przesuwnik poziomu. Ale 3,3 V działa. Po drugie, istnieją usterki, które występują z powodu niedoskonałego wyczucia czasu przy użyciu metody SPI. Po trzecie, teraz nie możesz używać SPI do niczego innego. Dodatkowe informacje na temat tej metody można znaleźć tutaj, a źródło tej części kodu znajduje się w folderze extras/ws2812.
Bardziej niezawodną metodą napędzania taśm LED jest użycie i2s. Jednak ta metoda ma wiele hacków specyficznych dla chipów, więc SPI wydawało się lepszym wyborem jako ćwiczenie edukacyjne.
Zalecana:
Czujnik temperatury grilla i mięsa na ESP8266 z wyświetlaczem: 5 kroków (ze zdjęciami)
Czujnik temperatury i mięsa grilla na ESP8266 z wyświetlaczem: W tej instrukcji pokażę, jak stworzyć własną wersję narzędzia do grillowania, które mierzy aktualną temperaturę w grillu i włącza wentylator, aby go zapalić w razie potrzeby. Oprócz tego dostępny jest również czujnik temperatury rdzenia mięsa
Wielokolorowe diody LED reagujące na muzykę - Czujnik wykrywania dźwięku Arduino - Taśma LED RGB: 4 kroki
Wielokolorowe diody LED reagujące na muzykę | Czujnik wykrywania dźwięku Arduino | Taśma LED RGB: Wielokolorowy projekt świateł LED reagujący na muzykę. W tym projekcie zastosowano prostą taśmę LED 5050 RGB (nie adresowalną LED WS2812), czujnik wykrywania dźwięku Arduino oraz zasilacz 12V
Zasilany energią słoneczną czujnik temperatury i wilgotności Arduino jako czujnik Oregon 433 mhz: 6 kroków
Czujnik temperatury i wilgotności Arduino zasilany energią słoneczną jako czujnik Oregon 433 mhz: Jest to konstrukcja czujnika temperatury i wilgotności zasilanego energią słoneczną. Czujnik emuluje czujnik Oregon 433 mhz i jest widoczny w bramce Telldus Net. Czujnik ruchu energii słonecznej" z serwisu eBay. Upewnij się, że mówi o cieście 3,7 V
Czujnik dzwonka do drzwi i czujnik temperatury: 6 kroków
Czujnik nacisku i temperatury dzwonka do drzwi: Ulepsza standardowy dzwonek przewodowy do drzwi z modułem esp-12F (esp8266). Instaluje się w samym dzwonku, aby uniknąć jakichkolwiek zmian w okablowaniu. Zapewnia następujące funkcje Wykrywanie przyciśnięć dzwonka do drzwiWysyła powiadomienia na telefon za pośrednictwem sklepów IFTTTS
Czujnik temperatury i wilgotności WiFi IoT. Część: 8 IoT, automatyka domowa: 9 kroków
Czujnik temperatury i wilgotności WiFi IoT. Część: 8 IoT, Automatyka domowa: WstępTen artykuł dokumentuje praktyczne wzmocnienie i dalszy rozwój wcześniejszego Instructable: „Pimping” pierwszego urządzenia IoT WiFi. Część 4: IoT, automatyka domowa, w tym wszystkie niezbędne funkcje oprogramowania, aby umożliwić sukces