В статье о беспроводном com-порте я вскользь упомянул о варианте использования протокола EspNow в беспроводных кнопках для викторин. Ввиду большого интереса к данным кнопкам я немного подробнее опишу принцип действия и некоторые схемные решения.
Схема
Кнопки построены на базе микроконтроллера esp8266. Два таких контроллера могут связаться друг с другом без создания wi-fi точек доступа. Это идеальное решения для простых устройств, которые должны общаться друг с другом на небольшом расстоянии.
Во-первых, необходимо было решить проблему с питанием кнопок. Подключать их к розетке — плохой вариант, но и батарейки использовать не хотелось. Я остановился на распространенных аккумуляторах типоразмера 18650 с номинальным напряжением 3,5-4,2В. Разводить на печатной плате отдельную схему зарядки не хотелось, так как китайцы уже выпускают достаточно дешевые платы для зарядки таких аккумуляторов. Поэтому я просто установил такой модуль на свою печатную плату. Кроме того, пришлось совместить USB разъем для программирования контроллера и USB порт для зарядки аккумулятора.
Во-вторых, микроконтроллеру требуется питание от 2,5 до 3,3В. Обычные LDO стабилизаторы (типа LM1117) не очень подходят для таких целей. У них слишком большое падение напряжения (тем не менее кнопки с ними тоже работают, хотя их и приходится чуть чаще заряжать). Самым подходящим стабилизатором оказался MCP1700 (падение напряжения всего 0,178В).
В-третьих, механические кнопки с подсветкой должны ярко светить, а от 3,3В они это делать отказывались. Им необходимо напряжение 12В для хорошей яркости. На помощь опять пришли соседи из поднебесной. DC-DC преобразователь MT3608 сделал из напряжения аккумулятора необходимые 12В для подсветки игровой кнопки.
В итоге получилась та схема, что вы видите на рисунке выше (это, кстати, уже пятая ревизия печатной платы). Печатная плата разрабатывалась специально под корпус Gainta G331MF. Винтовые зажимы используются для упрощения монтажа внутри корпуса, ничего паять не нужно.
Назначение винтовых зажимов:
COM
— подключение кнопки или тумблера включения питания. Обычно на нем есть такое же обозначение (COM).
NO
— подключение кнопки или тумблера включения питания. Обычно на нем есть такое же обозначение (NO, normally opened). Замыкается с зажимом COM
при нажатии кнопки включения.
BUZZ
— выход для внешней пищалки или сирены. Если нужен более громкий звук, чем от зуммера, установленного на плате. Выход +3,3В относительно зажима GND
.
BTN_LED+
— сюда подключается положительный вывод подсветки игровой кнопки. Выход +12В.
BTN_LED-
— сюда подключается отрицательный вывод подсветки игровой кнопки. Выход -12В
PAIRED
— положительный выход для сигнализации того, что две кнопки видят друг друга. Выход +3,3В относительно зажима GND
.
BTN
— вход для подключения механической игровой кнопки. Должен замыкаться на землю при нажатии.
GND
— земля.
Игровой сценарий и основные характеристики
После включения питания кнопок им необходимо найти друг друга и установить соединение. Для этого нужно кратковременно нажать по очереди на каждую из игровых кнопок. При удачном соединении загорится светодиод, подключенный к выводу PAIRED
. Я использовал для этой цели подсветку кнопки включения питания. Когда оба светодиода загорелись — можно начинать игру.
Когда одна из кнопок нажата, раздается звуковой сигнал, игровая кнопка начинает светиться, при это вторая блокируется и нажатия на нее ни к чему не приведут. После истечения 4 секунд, кнопки возвращаются в исходное состояние и игру можно продолжить.
Небольшое видео с примером работы — https://dzen.ru/video/watch/6731fda918336765f65a0f04?share_to=link.
Исходный код, схема и печатная плата — https://github.com/ra0sms/wifi_quiz_buttons
Потребляемый ток в режиме ожидания: ~25мА
Потребляемый ток при активации: ~90мА
Элемент питания: аккумулятор 18650
Время автономной работы: не менее 6 часов (зависит от активности нажатия кнопок)
Время зарядки: 4 часа
Кабель зарядки: miniUSB
Вес одной кнопки: 500гр
Размеры: 115*90*80мм