Spisu treści:

Taśma LED WiFi + czujnik temperatury z ESP8266: 6 kroków
Taśma LED WiFi + czujnik temperatury z ESP8266: 6 kroków

Wideo: Taśma LED WiFi + czujnik temperatury z ESP8266: 6 kroków

Wideo: Taśma LED WiFi + czujnik temperatury z ESP8266: 6 kroków
Wideo: MULTISENSOR WIFI na ESP8266 | Inteligentny Dom DIY #14 2024, Lipiec
Anonim
Taśma LED WiFi + Czujnik Temperatury Z ESP8266
Taśma LED WiFi + Czujnik Temperatury Z ESP8266

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

Podłącz komponenty sprzętowe
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ć:

  1. 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.
  2. 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.
  3. 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:

  1. Dodaj użytkownika do grupy połączeń:

    sudo adduser $(whoami) dialout

  2. 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: