Разработчик Бас Ботберг захотел распечатывать отчёты с данными датчиков, которые собирает микроконтроллер ESP32-C3, на портативном термопринтере с Bluetooth. Такие компактные устройства печатают на термобумаге без чернил и картриджей, поэтому хорошо подходят для чеков, этикеток и коротких текстовых сводок.
Однако, как это часто бывает с современной недорогой электроникой, единственным официальным способом управлять принтером оказалось фирменное приложение производителя для смартфона. Документации по протоколу обмена данными не было, поэтому Ботберг решил восстановить его самостоятельно, чтобы отправлять команды прямо с микроконтроллера. Путь, который он для этого выбрал, заметно отличается от привычного и может пригодиться всем, кто задумал похожий проект.
Привычный способ: перехват трафика
Стандартная процедура в подобных случаях, если её вообще можно так назвать, опирается на встроенные средства отладки Android. В настройках для разработчиков можно включить журнал HCI-трафика Bluetooth, после чего запустить фирменное приложение и выполнить в нём нужные действия. Полученный файл открывают в анализаторе сетевых протоколов Wireshark и, вооружившись терпением и обоснованными догадками, постепенно выясняют, какие команды и значения передаются устройству.
Метод рабочий, но у него есть свои неудобства: нужен Android-смартфон, само приложение производителя и немало времени на разбор дампов, в которых полезные пакеты перемешаны со служебным обменом.
Другой подход: прямые эксперименты с BLE
Ботберг пошёл иным путём и вовсе не стал использовать программу производителя. Вместо этого он взял приложение, которое опрашивает устройство и выводит список его служб и характеристик Bluetooth Low Energy. В BLE данные организованы по профилю GATT: устройство предоставляет набор служб, а каждая служба содержит характеристики с уникальными идентификаторами UUID и свойствами — например, доступна ли характеристика для чтения, записи или уведомлений.
Разработчика интересовали именно характеристики, помеченные как доступные для записи: в них он начал отправлять данные и наблюдать за реакцией принтера. Для экспериментов он использовал Python и библиотеку Bleak — кроссплатформенный асинхронный BLE-клиент, работающий в Windows, macOS и Linux. Такой набор позволяет быстро менять код и сразу проверять гипотезы. Стоит учитывать, что запись произвольных данных в характеристики незнакомого устройства требует осторожности: заранее неизвестно, за что отвечает каждая из них.
После серии проб и ошибок удалось подобрать нужную последовательность команд, чтобы запустить мотор принтера и прокрутить бумагу. Это стало важной первой вехой: она показала, что направление выбрано верно и остальное управление можно восстановить тем же методом.
Перенос на ESP32-C3
Когда Ботберг разобрался, какие данные и в какие точки нужно отправлять, чтобы управлять принтером из Python, повторить те же посылки в коде на C++ для ESP32 оказалось сравнительно несложно. ESP32-C3 от Espressif построен на одноядерном 32-битном процессоре RISC-V и поддерживает Wi-Fi и Bluetooth LE, поэтому может напрямую подключаться к принтеру без смартфона и дополнительных модулей.
Для дополнительного удобства разработчик подключил графическую библиотеку Adafruit GFX. Она предоставляет готовые функции для вывода текста, шрифтов и простых геометрических примитивов, поэтому с её помощью проще печатать значки и аккуратно форматировать отчёты.
Судя по всему, на момент публикации (15 сентября 2026 года) исходный код проекта в открытый доступ не выложен. Тем не менее энтузиасты и раньше создавали открытые драйверы для подобных дешёвых Bluetooth-принтеров, так что описанный подход может стать хорошей отправной точкой для тех, кто хочет подружить недорогое устройство с собственной электроникой без фирменного приложения.





















