IoT, ESP Реобас на ESP32 с функцией управления 3pin, 4pin, адресной светодиодной лентой

ATRedline

✩✩✩✩✩✩✩
1 Апр 2020
2
0
Реализовал под свои нужды небольшой проект: это реобас (контроллер корпусных вентиляторов) c софтовым управлением с ПК через UART.
В данной теме я рассмотрю 2 реализации данного проекта.

DSC06594.JPG

Данный реобас умеет:
-Обрабатывать температуры CPU и/или GPU
-Управлять оборотами 4-пин вентиляторов с возможностью подключения вразрез
-Управлять оборотами 3-пин вентиляторов
-Плавно менять обороты вентиляторов
-Управлять адресной светодиодной лентой
-Подключаться вразрез штатных PWM линий

Что касается ленты, реализовано:
-Статическая подсветка
-Режим цветовой индикации температур
-Режим цветовых эффектов

preview.png

Управление вентиляторами происходит ступенями. По достижению следующей ступени - программная часть с ПК передаёт через UART команду на повышение оборотов, ESP32 получает команду, анализирует, и плавно меняет обороты вентиляторов со скорость 0.06с на 1 шаг PWM. Основная идея возможности подключения вразрез штатных линий состоит в возможности сохранения их функциональности. Тоесть, при подключении вразрез, FanControl перехватывает управление только тогда, когда это необходимо. В BIOS, до загрузки операционной системы, или во время нагрузки исключительно на CPU, корпусные вентиляторы будут работать от штатной системы управления (Или не будут, зависит от того, как вы настроите FanControl).

Проект написан на Python/Micropython (Написано достаточно криво, я не профессиональный программист, в будущем буду дорабатывать, возможно переведу основную программу на ООП в пределах Python или перенесу на C#)

Проект на Github:
https://github.com/ATRedline/ESP32_Fan_Control
В репозитории находятся исходники, прошивка для ESP32 (Самодельный билд с hardware-based pwm модулем от Loboris), схему сборки и чертёж для RCB (Подходит только для реализации ESP32 как на моём фото), скрипт для ESP32, установшик программной части для ПК (скомпиллированой в .exe).

Статья на overclockers.ru:
https://overclockers.ru/blog/ATRCha...funkciej-upravleniya-led-lentoj-svoimi-rukami

Видео на youtube.ru:

Драйвер CP2102, необходим, если со штатным драйвером ESPшка отказывается прошиваться. Использовать драйвер 6.7.6 для Windows 7/8.1:
https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers

Утилита Flash Download Tools для прошивки ESP32:
https://www.espressif.com/en/support/download/other-tools

Утилита Espy для работы с файловой системой ESP32:
https://github.com/jungervin/EsPy/tree/master/EsPy/Release


DSC06629.JPG

Что касается выбора ESP32 - нас интересуют девкиты WROOM, в которых применяется USB-UART конвертор CP2102, нам НЕ подойдут модули на CH340. Так выходит потому, что CP2102 умеет дёргать аппаратный ресет, а CH340 - не умеет.

Первый вариант реализации на готовых модулях с AliExpress:

DSC06601.JPG

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

Нам потребуются:
ESP32, стоит в данный момент в районе 370 рублей с доставкой Standart Shiping
Модуль развязки на оптопарах PC817 и транзисторный модуль, комплект в одном магазине обойдется в 370 рублей
Модуль реле, который может вам пригодится, обойдётся в дополнительные 70 рублей

esp32 ali.jpg
optron + relay.jpg

Итого, выходит что-то в районе 850 рублей (к сожалению, как вы знаете, в текущий кризис всё подорожало). Так же потребуются копеечные резисторы в 200-300оМ, 1кОм.

Подключается всё это по следующей схеме:

simple_scheme.png

PWM-выводы ESP32 подключаются на входы модуля развязки, туда же подаётся земля с ESP32. На выходную часть модуля развязки подаётся +5v от источника питания, и берутся уже отвязанные от ESP32 PWM-линии. Для управления 4-pin вентиляторами, эти отвязанные линии подаются напрямую на PWM контакты вентиляторов и дополнительно шунтируются на землю через резисторы в 1кОм, на плюсовой и минусовой контакты вентилятора подаются плюс и минус от источника питания.
DSC06602.JPG
На каждую PWM линию можно вешать по несколько вентиляторов одного типа через двойники или тройники. Для управления 3-pin вентиляторами PWM сигнал с развязки подаётся на транзисторный модуль, который устанавливается в разрез минусового контакта 3-pin вентилятора, на плюсовой контакт вентилятора подаётся питание.

Модуль оптической развязки необходимо немного доработать, есть два способа это сделать. На входах и выходах модуля стоят резисторы на 3кОм, помеченные как 302, на входе последовательно с резистором стоит светодиод. От этих сопротивлений необходимо избавиться, и есть два способа, которые вы можете видеть в моей реализации:
DSC06603.JPG
Первый способ - заменить резистор на выходе на 300оМ, и навесить резистор на 300оМ в обход штатного резистора и светодиода, при этом на входы и на выходы можно будет подключать провода безо всяких резисторов.
Второй способ - выпаять выходной резистор и кинуть на его место сполю, зачистить землю рядом со вторых резистором со стороны оптопары, и соединить соплёй выход резистора с землёй. Выполнить эти действия немного проще, но в таком случае на входы и выходы придётся подавать провода с впаяными вразрез резисторами. Джамперы с модуля необходимо поснимать.

Что касается светодиодной ленты, есть два способа подключения.
Первый способ - запитать ленту от USB порта, в данном случае можно использовать только порт USB3.0, ленту WS2812b не более чем на 15 светодиодов. USB порт должен выключаться вместе с ПК.
Второй способ - подключить ленту к внешнему источнику (внешнему адаптеру) питания через модуль реле. Пин для подключения реле можно посмотреть в прошивке. Данный способ не имеет ограничений на тип ленты и кол-во светодиодов.

В дополнение: помимо модуля опторазвязки я опробовал готовый модуль, который представляет из себя связку N-канального транзистора и оптопары, который вы сможете увидеть на фото ниже. Так вот, нормальной его работы, что называется малой кровью, мне достичь не удалось, нам он не подходит:
DSC06634.JPG

Основной проблемой данной реализации являются медленные оптопары PC817, которые, во-первых, плохо переносят высокие чатоты сигнала, во-вторых даже на низких частотах искажают ширину импульса, рисуют не совсем ровный меандр, что вы можете видеть на этой фотографии:

искажение сигнала.jpg
В результате, диапазон регулировки существенно сужается, и уже при 50-60% заполнения PWM сигнала на выходе с оптопары получаем практически полное заполнение. Для небольшой компенсации данных проблем стоит выбрать максимально низкие рабочие частоты: для 4-pin вентиляторов на своём тестовом стенде я использую 5кГц. Для 3-pin вентиляторов же следует выбрать минимальную частоту, при которой вентилятор не свистит обмотками - в моём случае это 12кГц.

Ну и второй вариант реализации данного проекта - самодельная вытравленная плата.

DSC06608.JPG
Схема имеется в репозитории. Данная плата несёт на себе реле для подключения светодиодной ленты, конденсатор, логические элементы И/ИЛИ, а так же микросхему развязки ADUM1400 которая развязывает сигнал без искажения.
Соответственно, плата поддерживает светодиодные ленты WS2812b на 5v и WS2811 на 12v, плата поддерживает подключение четырёх 4-pin вентиляторов напрямую или вразрез штатных линий, две 4-pin линии можно джамперами переключить в 3-pin режим без возможности подключения вразрез и измерения оборотов.

scheme.png

Пара слов о прошивке ESP32.

Для прошивки нам потребуется утилита Flash Download Tools от Espressif. Прошивка firmware.bin находится в папке /ESP32 репозитория. Утилиту и прошивку помещаем в корень диска C:\, т.к. это как раз тот случай, когда программа действительно не переваривает кирилицу. Подключаем ESP32 к USB-порту. Запускаем утилиту, выбираем ESP32 Download Tool. Вверху программы оставляем чекбокс только на одной строке, в которой выбираем путь до прошивки, и чуть правее вбиваем адрес: 0x1000. Внизу справа выбираем нужный COM-порт и жмём ERASE. Ждём завершения очистки, и после жмём кнопку START.
прошивка.png

После завершения прошивки нам потребуется утилита Espy. Во вкладке Device выбираем нужный COM-порт, после чего на панели инструментов жмём кнопочку Connect. Следом жмём кнопку File Manager и заливаем в устройство boot.py из папки /ESP32 репозитория.
espy.png
boot.py можно и нужно предварительно отредактировать при помощи Notepad++. Там всё примерно понятно
boot.png

После того как ESPшка прошита и на неё закачан файл boot.py, можно устанавливать джампер между as_pin и землёй, и она готова к работе.

Посмотреть на примеры, более подробно обо всём можете почитать в статье на overclockers или послушать в видео. Более развёрнуто написать тут не могу, т.к. стоит ограничение на 10000 символов на пост. На этом у меня всё. Буду рад замечаниям, исправлениям, комментариям, а так же, если это устройство пригодится кому-то ещё, кроме меня самого.
 

IamNikolay

★✩✩✩✩✩✩
15 Янв 2020
169
30
......c софтовым управлением с ПК через UART........
В таком случае зачем там 2 ядерный микроконтроллер с вайфай и блютуз? это только добавило стоимости проекту. А раз изготавливали плату, то не проще было микроконтроллер сразу припаивать и юсб-юарт конвертер. Все же плата разработки не для пайки...
P.S. Цены первые попавшиеся, возможно есть дешевле.
1586381067001.png
1586381133834.png
 
Последнее редактирование:

ATRedline

✩✩✩✩✩✩✩
1 Апр 2020
2
0
В таком случае зачем там 2 ядерный микроконтроллер с вайфай и блютуз?
Затем, что я кроме Python ничего не знаю, а ESP32 - самый дешевый микроконтроллер под Python с нормальным аппаратным PWM. Впрочем, если кто-то создаст клиентскую часть для других микроконтроллеров - буду только рад. И да, там, так то, достаточно много вычислений проводится на стороне микроконтроллера, изменение скорости оборотов и цвета подсветки выполняется шагами, плавно, для нескольких линий, задействовано несколько потоков обработки. WiFi может пригодиться для включения в систему умного дома - например для включения ПК при срабатывании будильника.
Да и по вашим ценам, если выбрать нормальную доставку (ввиде Aliexpress Standart Shiping) выйдет в те же самые 300 рублей.
Голенькая ESP32 так же стоит немногим дешевле инженерной доски, и усложнять себе жизнь за 100 рублей - не вижу смысла. Кстати CH340 в данном случае не подходит. Толи баг драйверов, толи баг uP с RTOS - но именно ESP32 не всегда доступна к подключению через UART, вернее подключение происходит, а сигналы не проходят. В этом случае помогает способность cp2102 дёргать аппаратный ресет, чем, собственно, он занимается при каждом реконнекте.

И да, если у кого-то есть вопросы на которые нужны срочные ответы - задавайте под видео в комментах, т.к. там я сразу увижу.
 
Последнее редактирование:

IamNikolay

★✩✩✩✩✩✩
15 Янв 2020
169
30
@ATRedline, про Python пожалуй единственный стоящий аргумент, т.к. реобасов на ардуине множество и вычислительной способности выдавать ШИМ хватает...
Для включения пк есть же Wake-on-LAN.
Про доставку - вообще не аргумент, т.к. поштучно позиции покупать - себе дороже. Так можно и про есп32 сказать - если выбрать доставку за 2 -5 т.р....
Модуль есп32 стоит примерно на 30 % дешевле платы это существенная разница
CH340 прекрасно работает с ресетом
1586604595518.png