Введение
Семисегментные индикаторы — один из самых простых и наглядных способов вывода числовых данных в DIY-проектах, измерительных приборах и панелях промышленной автоматизации. Модуль на чипе TM1637 — популярное решение: четыре цифры, поддержка десятичной точки и точек-разделителей, управление по двум проводам (I²C-подобный протокол). Однако в эпоху IoT и AI всё чаще требуется, чтобы данные на дисплее обновлялись не вручную, а автоматически — на основе решений, принятых искусственным интеллектом.
Здесь на помощь приходит ASI Biont — AI-агент, который умеет подключаться к любому оборудованию через десятки промышленных протоколов. В этой статье мы разберём, как интегрировать TM1637-дисплей с ASI Biont двумя практичными способами: через ESP32 и MQTT (беспроводной сценарий) и через Arduino и COM-порт (проводной сценарий). Вы увидите, что для интеграции не нужно писать сложный связующий код — достаточно описать задачу в чате с AI-агентом, и он сам сгенерирует и выполнит необходимые скрипты.
Почему именно TM1637 и ASI Biont?
TM1637 — недорогой и распространённый дисплей, который работает от 3,3–5 В, имеет готовые библиотеки для Arduino и MicroPython. Он идеален для отображения текущих показаний температуры, влажности, счётчиков, таймеров или статусов. ASI Biont, со своей стороны, способен собирать данные из различных источников: датчиков, баз данных, HTTP API, MQTT-брокеров — и принимать решения на основе этих данных. Интеграция позволяет отображать на дисплее «умные» показания, которые AI обновляет в реальном времени.
Способы интеграции TM1637 с ASI Biont
У ASI Biont есть два основных механизма для работы с микроконтроллерами, к которым подключён TM1637:
| Способ | Протокол | Устройство-посредник | Особенности |
|---|---|---|---|
| MQTT | MQTT (paho-mqtt) | ESP32 (или любой Wi-Fi-микроконтроллер) | Беспроводной, подходит для удалённого управления, AI может публиковать данные на дисплей через топик |
| COM-порт | RS-232 через Hardware Bridge | Arduino (или USB-UART-преобразователь) | Проводной, надёжный, AI использует industrial_command с командой serial_write_and_read для отправки строки на дисплей |
| SSH | Paramiko | Raspberry Pi, Orange Pi | Если TM1637 подключён к одноплатнику, AI может через SSH запускать скрипты управления дисплеем |
| execute_python | Универсальный sandbox | Любое устройство с IP-доступом | AI генерирует и выполняет Python-код с библиотеками (например, requests для HTTP, paho-mqtt для MQTT) — без предустановленных брокеров |
В этой статье мы подробно разберём первые два способа как самые типовые.
Сценарий 1: ESP32 + MQTT + TM1637
Архитектура
- ESP32 подключается к Wi-Fi и MQTT-брокеру (например, Mosquitto, HiveMQ Cloud или локальный брокер).
- TM1637 подключён к ESP32 по двум проводам (CLK и DIO).
- ASI Biont через
execute_pythonподключается к тому же MQTT-брокеру и публикует данные в топикesp32/display. - ESP32 подписан на этот топик и при получении сообщения обновляет дисплей.
Схема подключения TM1637 к ESP32
| TM1637 | ESP32 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| CLK | GPIO4 |
| DIO | GPIO5 |
Примечание: можно использовать любые свободные GPIO, указав их в коде.
Прошивка ESP32 (MicroPython)
Пользователь загружает на ESP32 следующий скетч через Thonny или uPyCraft. Скетч подключается к Wi-Fi и MQTT, слушает топик и выводит на дисплей число (до 4 цифр).
# main.py для ESP32 с MicroPython
import network
import time
from machine import Pin
from tm1637 import TM1637
from umqtt.simple import MQTTClient
# Конфигурация Wi-Fi
SSID = "YourWiFi"
PASSWORD = "YourPass"
# Конфигурация MQTT
BROKER = "broker.hivemq.com"
TOPIC = b"esp32/display"
# Инициализация дисплея
tm = TM1637(clk=Pin(4), dio=Pin(5))
# Подключение к Wi-Fi
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(SSID, PASSWORD)
while not wifi.isconnected():
time.sleep(0.5)
print("WiFi connected")
# MQTT callback
def callback(topic, msg):
try:
# Ожидаем строку с числом, например "1234"
value = int(msg.decode())
tm.number(value)
except:
tm.show("Err ")
# Подписка
client = MQTTClient("esp32", BROKER)
client.set_callback(callback)
client.connect()
client.subscribe(TOPIC)
print("Subscribed to", TOPIC)
while True:
client.check_msg()
time.sleep(0.1)
Как AI подключается через ASI Biont
Пользователь в чате ASI Biont пишет:
«Подключись к MQTT-брокеру broker.hivemq.com, опубликуй в топик esp32/display значение 2026 (текущий год). Используй библиотеку paho-mqtt.»
AI-агент генерирует и выполняет следующий код в sandbox (execute_python):
import paho.mqtt.client as mqtt
broker = "broker.hivemq.com"
port = 1883
topic = "esp32/display"
client = mqtt.Client()
client.connect(broker, port, 60)
client.publish(topic, "2026")
client.disconnect()
print("Сообщение отправлено")
После выполнения на дисплее ESP32 загорится «2026». Никакого ручного кодирования — AI сделал всё сам.
Преимущества сценария
- Не нужен провод до компьютера — дисплей может быть в любой точке с Wi-Fi.
- AI может отправлять данные по расписанию, на основе анализа других датчиков или по триггеру.
- ESP32 может сам собирать данные (например, с DHT22) и публиковать их, а AI — решать, что выводить.
Сценарий 2: Arduino + COM-порт + TM1637
Архитектура
- Arduino Uno (или Nano) через USB подключён к компьютеру, на котором запущен Hardware Bridge (
bridge.py). - TM1637 подключён к пинам Arduino.
- ASI Biont через WebSocket отправляет команду на bridge, который пишет строку в COM-порт Arduino.
- Arduino получает команду, парсит её и обновляет дисплей.
Схема подключения TM1637 к Arduino
| TM1637 | Arduino |
|---|---|
| VCC | 5V |
| GND | GND |
| CLK | D3 |
| DIO | D4 |
Скетч Arduino
#include <TM1637Display.h>
#define CLK 3
#define DIO 4
TM1637Display display(CLK, DIO);
void setup() {
Serial.begin(115200);
display.setBrightness(7);
display.showNumberDec(0, false);
}
void loop() {
if (Serial.available()) {
String data = Serial.readStringUntil('\
');
data.trim();
int value = data.toInt();
display.showNumberDec(value, false);
}
}
Настройка Hardware Bridge
Пользователь скачивает bridge.py из дашборда ASI Biont (Devices → Create API Key → Скачать bridge). Устанавливает зависимости:
pip install pyserial requests websockets
Запускает bridge, указав токен API и порт:
python bridge.py --token=ВАШ_ТОКЕН --ports=COM3 --baud=115200
Команда от AI в чате
Пользователь говорит:
«Отправь на Arduino через COM3 число 1234. Используй команду serial_write_and_read.»
AI выполняет вызов инструмента industrial_command:
industrial_command(
protocol='serial',
command='serial_write_and_read',
data='313233340a' # hex для "1234\
"
)
Bridge принимает команду, записывает байты 31 32 33 34 0A в COM3, Arduino получает строку
Комментарии