Оглавление:

Светодиодная лента WiFi + датчик температуры с ESP8266: 6 шагов
Светодиодная лента WiFi + датчик температуры с ESP8266: 6 шагов

Видео: Светодиодная лента WiFi + датчик температуры с ESP8266: 6 шагов

Видео: Светодиодная лента WiFi + датчик температуры с ESP8266: 6 шагов
Видео: Температура за Вашим окном в кармане. Без программирования! ESP8266 + DS18B20 + WiFi IoT + NarodMON 2024, Июль
Anonim
Светодиодная лента WiFi + датчик температуры с ESP8266
Светодиодная лента WiFi + датчик температуры с ESP8266

В этом руководстве описаны шаги по настройке ESP8266 и его взаимодействие с датчиком температуры и светодиодной лентой, а также возможность принимать входные и выходные данные с помощью MQTT через Wi-Fi. Проект был разработан для курса, пройденного в Калифорнийском Политехническом университете в Сан-Луис-Обиспо осенью 2016 года - CPE 439: Встроенные системы реального времени. Общая цель заключалась в том, чтобы продемонстрировать легкость создания подключенного к Интернету «штуки» с дешевым оборудованием.

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

  • Плата разработчика NodeMCU ESP8266
  • Светодиодная лента WS2812B
  • MAX31820 Датчик температуры
  • Макетная плата
  • Резистор 4,7 кОм
  • Резистор 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 и скопируйте настройки примера.

компакт-диск esp-rtos-tests

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

Теперь откройте.local / settings.mk в любом текстовом редакторе и измените следующие настройки:

  • OPENSDK_ROOT: абсолютный путь к местоположению esp-open-sdk, который вы создали на шаге 1.
  • WIFI_SSID: SSID вашей сети Wi-Fi.
  • WIFI_PASS: пароль вашей сети Wi-Fi.
  • PIXEL_COUNT: количество пикселей на светодиодной ленте WS2812B.

Примечание. Поскольку этот проект использует SPI для управления светодиодами и использует NodeMCU 3.3v для их питания, вы, вероятно, не сможете управлять более чем 60 светодиодами.

Примечание. Остальные настройки изменять не нужно, но при желании их можно изменить. Рекомендуется соблюдать порядок приоритетов задач. Чем ниже номер приоритета, тем ниже приоритет задачи.

Теперь соберите проект:

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

Если все настроено правильно, он должен начать компиляцию. В конце вы должны увидеть:

Успешно создан 'firmware / cpe439.bin'

Смотри на меня

Шаг 3: Подключите аппаратные компоненты

Подключите аппаратные компоненты
Подключите аппаратные компоненты

Теперь, когда код скомпилирован, пришло время подключить наши периферийные устройства.

Сначала прикрепите NodeMCU к макетной плате, затем с помощью перемычек выполните соединения, как показано на схеме.

Несколько вещей, о которых следует знать:

  1. Важно: линия данных WS2812B не является двунаправленной. Если вы внимательно посмотрите на маркировку на светодиодной стороне полосы, вы увидите маленькие стрелки, указывающие в одном направлении. Выходной сигнал от D7 NodeMCU должен направляться в WS2812B так же, как и маркер направления, который вы можете увидеть на диаграмме, если внимательно присмотритесь.
  2. В зависимости от того, с какими разъемами поставляется ваш WS2812B, вам может потребоваться внести некоторые изменения, чтобы они надежно подключались к макетной плате. Вы также можете использовать зажимы типа «крокодил», чтобы подключить их к соединительным кабелям для макетной платы.
  3. Штыри MAX31820 имеют меньший шаг и тоньше стандартных перемычек 0,1 дюйма / 2,54 мм, что затрудняет их подключение. Один из способов решения этой проблемы - использовать перемычки «мама-папа», снять пластиковый корпус со стороны «мама». затем с помощью плоскогубцев плотно обожмите концы перемычки на меньших контактах MAX31820.

Дважды проверьте соединения перед включением NodeMCU, чтобы не повредить компоненты.

Шаг 4: прошить и запустить

Мигает

Когда все оборудование подключено, подключите ваш NodeMCU и выполните прошивку с помощью следующей команды:

сделать flash -C examples / cpe439 ESPPORT = / dev / ttyUSB0

/ dev / ttyUSB0 - это серийный com, под которым должен отображаться NodeMCU. Если у вас подключены другие последовательные устройства, он может отображаться как / dev / ttyUSB1 или какой-либо другой номер. Чтобы проверить, вы можете запустить эту команду дважды, один раз с отключенным NodeMCU и один раз с подключенным, и сравнить разницу:

ls / dev / ttyUSB *

Другая проблема, с которой вы можете столкнуться, - это отсутствие разрешения на доступ к устройству. Два способа исправить это:

  1. Добавьте своего пользователя в группу dialout:

    sudo adduser $ (whoami) dialout

  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" в качестве псевдонима для этой команды.

Если все настроено правильно, ваша светодиодная полоса должна загореться зеленым, а на последовательном интерфейсе вы должны увидеть соединение Wi-Fi, получить IP-адрес, подключиться к MQTT и сообщения о том, что данные о температуре отправляются.

подключен к MyWiFiSSID, запуск клиента dhcp канала 1… wifi_task: status = 1wifi_task: status = 1ip: 192.168.2.23, маска: 255.255.255.0, gw: 192.168.2.1ws2812_spi_init okRequest temp OKwifi_task: status = 5xQ ConneueuexReceive_Select: (Повторное) подключение к серверу MQTT test.mosquitto.org… xQueueReceive + 25.50xQueueSend ok doneSend MQTT connect… MQTTv311donexQueueReceive +25.56 xQueueSend ok

Шаг 5: взаимодействие

Предполагая, что ваше устройство подключено к Wi-Fi и брокеру MQTT успешно, вы сможете отправлять и получать данные от NodeMCU с помощью MQTT. Если вы еще этого не сделали, установите пакет клиентов mosquitto:

sudo apt-get install mosquitto-clients

Теперь вы можете использовать программы mosquitto_pub и mosquitto_sub из своей оболочки.

Получение обновлений температуры

Чтобы получать данные о температуре, мы хотим использовать команду mosquitto_sub, чтобы подписаться на тему, в которой публикуется NodeMCU.

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

Вы должны увидеть данные о температуре (в градусах Цельсия), поступающие в терминал.

+25.87+25.93+25.68…

Удаленная настройка цвета светодиодной ленты

Для отправки значений 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: Детали реализации

Однопроволочный

ESP8266 имеет только 1 ядро, поэтому блокирующие задачи, такие как ожидание 750 мс, пока датчик температуры выполнит измерение температуры, обычно приводят к сбоям в работе Wi-Fi и, возможно, даже к сбою. В парадигме FreeRTOS вы вызываете vTaskDelay () для обработки этих длинных ожиданий, но между чтением и записью требуется также много более коротких ожиданий, которые короче, чем системный тик FreeRTOS, и поэтому их нельзя избежать с помощью vTaskDelay (). Чтобы также обойти это, драйвер onewire в этом проекте был написан для работы с конечным автоматом, который управляется аппаратным таймером ESP8266, который может запускать события каждые 10 микросекунд, что является самым коротким необходимое время между однопроводными операциями чтения / записи. В большинстве других реализаций для обработки этого используется блокирующий вызов delay_us () или аналогичный, но если вы постоянно принимаете обновления температуры, все эти задержки начинают накапливаться, что приводит к менее отзывчивому приложению. Исходный код этой части кода находится в папке extras / onewire.

WS2812B

ESP8266 не имеет стандартных аппаратных опций для ШИМ, достаточно быстрой для работы светодиодных лент на частоте 800 кГц. Чтобы обойти это, в этом проекте используется вывод SPI MOSI для управления светодиодами. Регулируя тактовую частоту SPI и изменяя полезную нагрузку SPI, вы можете добиться довольно надежного управления каждым отдельным светодиодом. Этот метод не лишен недостатков - во-первых, светодиоды должны питаться от источника 5 В, а к выходу вывода SPI должен быть добавлен переключатель уровня. Но 3,3 В работает. Во-вторых, есть сбои, которые возникают из-за несовершенной синхронизации при использовании метода SPI. И в-третьих, теперь вы не можете использовать SPI ни для чего другого. Дополнительную информацию об этом методе можно найти здесь, а исходный код этой части кода находится в папке extras / ws2812.

Более надежный метод забивки светодиодных лент - использование i2s. Однако в этом методе много хитростей, связанных с конкретными чипами, поэтому SPI казался лучшим выбором в качестве обучающего упражнения.

Рекомендуемые: