Съдържание:

WiFi LED лента + температурен сензор с ESP8266: 6 стъпки
WiFi LED лента + температурен сензор с ESP8266: 6 стъпки

Видео: WiFi LED лента + температурен сензор с ESP8266: 6 стъпки

Видео: WiFi LED лента + температурен сензор с ESP8266: 6 стъпки
Видео: ESP8266 ESP01 WIFI Mobile Phone Control | LDmicro-Roboremo Programming 2024, Ноември
Anonim
WiFi LED лента + температурен сензор с ESP8266
WiFi LED лента + температурен сензор с ESP8266

Този урок описва стъпките за настройване на ESP8266 и го кара да говори както с температурен сензор, така и с LED лента, като същевременно може да приема и изпраща изход с MQTT през WiFi. Проектът е направен за курс, проведен в Cal Poly San Luis Obispo през есента на 2016 г.- CPE 439: Вградени системи в реално време. Общата цел беше да се демонстрира лекотата на създаване на свързано с интернет „нещо“с евтин хардуер.

Необходими консумативи/оборудване:

  • NodeMCU ESP8266 платка за разработка
  • WS2812B LED лента
  • MAX31820 Температурен сензор
  • Платка
  • 4.7K ом резистор
  • Резистор 220 ома
  • джъмперни проводници
  • micro-usb кабел
  • Компютър (или виртуална машина), работещ под Linux (например Ubuntu)

Предположения/предпоставки:

  • опит с използването на инструменти от командния ред и инсталиране на пакети на дистрибуция, базирана на debian
  • основно разбиране за синтаксиса на Makefile
  • свързващи проводници

Стъпка 1: Създаване на среда за изграждане

За да изградите проекта, ще ви е необходим esp-open-sdk, инсталиран на вашата машина. Следвайте връзката и прочетете инструкциите за изграждане. Накратко, вие ще правите някои sudo apt-get команди за инсталиране на зависимости, git clone --recursive за клониране/изтегляне на esp-open-sdk и накрая команда make за изграждане на esp-open-sdk.

Гледай ме

Стъпка 2: Вземете изходния код, конфигурирайте и изградете

След като esp-open-sdk е изграден, клонирайте хранилището на проекта.

git clone

Преминете в директорията на проекта, създайте.local папка и копирайте примерните настройки.

cd esp-rtos-тестове

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

Сега отворете.local/settings.mk с всеки текстов редактор и променете следните настройки:

  • OPENSDK_ROOT: Абсолютният път за местоположението на esp-open-sdk, който сте изградили в стъпка 1
  • WIFI_SSID: SSID на вашата WiFi мрежа
  • WIFI_PASS: Паролата на вашата WiFi мрежа
  • PIXEL_COUNT: Броят на пикселите на вашата LED лента WS2812B

Забележка: Тъй като този проект използва SPI за задвижване на светодиодите и използва NodeMCU 3.3v за тяхното захранване, вероятно няма да можете да управлявате повече от ~ 60 светодиода.

Забележка: Другите настройки не се нуждаят от промяна, но при желание могат да бъдат променени. Препоръчва се да се спазва редът на приоритетите на задачите. Колкото по -нисък е приоритетният номер, толкова по -нисък е приоритетът на задачата.

Сега изградете проекта:

make -C примери/cpe439

Ако всичко е настроено правилно, трябва да започне компилирането. В края трябва да видите:

Успешно създаден „фърмуер/cpe439.bin“

Гледай ме

Стъпка 3: Свържете хардуерни компоненти

Свържете хардуерни компоненти
Свържете хардуерни компоненти

Сега, когато кодът е компилиран, е време да свържем нашите периферни устройства.

Първо, залепете NodeMCU върху чертежа, след това използвайте джъмперни проводници, за да направите връзките, както е показано на диаграмата.

Няколко неща, които трябва да знаете:

  1. Важно: Линията за данни WS2812B не е двупосочна. Ако се вгледате внимателно в маркировките от LED страната на лентата, ще видите малки стрелки, сочещи една посока. Изходът от D7 на NodeMCU трябва да бъде насочен към WS2812B по същия начин като маркера за посока, който можете да видите на диаграмата, ако се вгледате внимателно.
  2. В зависимост от вида на конекторите, с които се предлага вашият WS2812B, може да се наложи да направите някои модификации, за да ги накарате да се свържат сигурно в макета. Можете също така да използвате клипове от алигатор, за да ги свържете към кабелите за джъмпери, които могат да се създават.
  3. Щифтовете MAX31820 имат по-малка стъпка и са по-тънки от стандартните 0,1 "/2,54 мм джъмпери, което ги прави трудни за свързване. Един от начините за това е да използвате проводници от женски към мъжки, свалете пластмасовия калъф от женската страна, след това използвайте клещи, за да притиснете здраво краищата на джъмпера около по -малките щифтове MAX31820.

Проверете два пъти връзките, преди да включите NodeMCU, за да не повредите компонентите.

Стъпка 4: Мигайте и стартирайте

Мига

С целия свързан хардуер, включете вашия NodeMCU и премигнете със следната команда:

направете flash -C примери/cpe439 ESPPORT =/dev/ttyUSB0

/dev/ttyUSB0 е серийният com, под който трябва да се показва NodeMCU. Ако имате свързани други серийни устройства, той може да се покаже като /dev /ttyUSB1 или друг номер. За да проверите, можете да изпълните тази команда два пъти, веднъж с изключен NodeMCU и веднъж с включен, и сравнете разликата:

ls /dev /ttyUSB*

Друг проблем, който може да срещнете, е липсата на разрешение за достъп до устройството. Два начина да поправите това са:

  1. Добавете вашия потребител към групата за разговори:

    sudo adduser $ (whoami) диалог

  2. chmod или chown на устройството:

sudo chmod 666 /dev /ttyUSB0 sudo chown $ (whoami): $ (whoami) /dev /ttyUSB0Първият метод е предпочитан, тъй като е постоянно решение.

Бягане

След успешно стартиране на командата flash устройството ще се стартира незабавно и ще започне да изпълнява компилирания код. Във всеки момент след мигане можете да изпълните следната команда, за да гледате сериен изход:

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

За да спестите време, можете да добавите това към вашия ~/.bashrc файл:

псевдоним nodemcu = 'python3 -m serial.tools.miniterm --eol CRLF --exit -char 003 /dev /ttyUSB0 500000 --raw -q'

..която ви позволява просто да въведете "nodemcu" като псевдоним за тази команда.

Ако всичко е конфигурирано правилно, вашата LED лента трябва да светне в зелено, а при серийно трябва да видите WiFi връзка, да получите IP адрес, да се свържете с MQTT и съобщения, че данните за температурата се изтласкват.

свързан с MyWiFiSSID, клиент на канал 1dhcp… wifi_task: status = 1wifi_task: status = 1ip: 192.168.2.23, mask: 255.255.255.0, gw: 192.168.2.1ws2812_spi_init okRequest temp OKwifi_task: status = 5xQuett: (Повторно свързване към сървър MQTT test.mosquitto.org…

Стъпка 5: Взаимодействие

Ако приемем, че вашето устройство е свързано с WiFi и брокера на MQTT успешно, ще можете да изпращате и получавате данни от NodeMCU с MQTT. Ако все още не сте инсталирали пакета за клиенти на mosquitto:

sudo apt-get инсталирайте клиенти на комари

Вече трябва да можете да използвате програмите mosquitto_pub и mosquitto_sub от вашата черупка.

Получаване на актуализации на температурата

За да получаваме данни за температурата, ще искаме да използваме командата mosquitto_sub, за да се абонираме за темата, в която NodeMCU публикува.

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

Трябва да видите данните за температурата (в Целзий), пристигащи в терминала.

+25.87+25.93+25.68…

Задаване на цвят на LED лентата от разстояние

За изпращане на RGB стойности към NodeMCU през MQTT се използва прост формат на съобщение. Форматът на командата изглежда така:

r: RRRg: GGGb: BBB ~

Когато RRR, GGG, BBB съответстват на RGB стойности (0-255) на цвета, който искате да изпратите. За да изпратим нашата команда, ще използваме командата mosquitto_pub. Ето няколко примера:

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 ~ ' # синьо

Ако искате да проявите креативност, намерете избор на цвят онлайн като този и редактирайте командата с всяка стойност на RGB, която изберете.

Внимавай

Темите в този проект са зададени на /cpe439 /rgb и /cpe439 /temp на публичен MQTT брокер, което означава, че нищо не пречи на някой друг да публикува или да се абонира за същите теми като вас. За да изпробвате нещата, използването на публичен брокер е добре, но за по -сериозни проекти ще искате да се свържете с брокер със защита с парола или да стартирате свой собствен брокер на сървъра.

Стъпка 6: Подробности за внедряването

Onewire

ESP8266 има само 1 ядро, толкова дълги, блокиращи задачи, като изчакване на 750ms за температурния сензор да извърши измерване на температурата, обикновено би довело до това, че WiFi не функционира добре, а може би дори до срив. В парадигмата FreeRTOS извиквате vTaskDelay (), за да се справите с тези дълги изчаквания, но има и много по -кратки изчаквания между четенията и писанията, които са по -къси от системната отметка на FreeRTOS и по този начин не могат да бъдат избегнати с vTaskDelay (). За да ги заобиколите, драйверът onewire в този проект е написан да избяга от държавна машина, която се задвижва от хардуерния таймер на ESP8266, който може да задейства събития на всеки 10 микросекунди, което е най-краткото необходимо време между операциите за четене/запис на една жица. Повечето други реализации използват блокиращо извикване към delay_us () или подобно, за да се справят с това, но ако постоянно правите актуализации на температурата, всички тези забавяния започват да се увеличават, което води до по -малко отзивчиво приложение. Източникът за тази част от кода се намира в папката extras/onewire.

WS2812B

ESP8266 няма стандартни хардуерни опции за ШИМ достатъчно бързо, за да задвижва LED ленти на 800KHz. За да заобиколи това, този проект използва SPI MOSI щифт за задвижване на светодиодите. Чрез регулиране на тактовата честота на SPI и промяна на полезния товар на SPI можете да постигнете сравнително надежден контрол на всеки отделен светодиод. Този метод не е без недостатъци- за един светодиодите трябва да се захранват с 5V източник и да се добави превключвател на нивото към изхода на SPI щифта. Но 3.3V работи. Второ, има проблеми, които възникват поради несъвършено време, използвайки метода SPI. И трето, сега не можете да използвате SPI за нищо друго. Допълнителна информация за този метод може да се намери тук, а източникът за тази част от кода се намира в папката extras/ws2812.

По -надежден метод за задвижване на LED ленти е използването на i2s. Този метод обаче има много специфични за чипове хакове, така че SPI изглеждаше по-добър избор като учене.

Препоръчано: