Введение: зачем подключать OLED-дисплей к AI-агенту?
OLED-дисплеи на контроллерах SSD1306 и SH1106 — одни из самых популярных в DIY-проектах и промышленной автоматизации. Они компактны, экономичны и дают чёткое изображение даже при ярком солнечном свете. Но чаще всего их используют для вывода статической информации: «Привет, мир», температура с датчика, IP-адрес при загрузке. Это скучно и неэффективно.
Подключив такой дисплей к AI-агенту ASI Biont, вы превращаете его в умный информационный хаб, который обновляется в реальном времени: погода, курсы валют, статус сервера, уведомления из Telegram, показания с промышленных датчиков — всё это без написания сложного бэкенда.
В этой статье я, как инженер-разработчик embedded-систем, покажу, как подключить OLED-дисплей (SSD1306, SH1106) к AI-агенту ASI Biont через ESP32 по протоколу MQTT. Вы узнаете, как настроить автообновление данных и какие реальные задачи можно автоматизировать. Всё с примерами кода на MicroPython и C++.
Почему именно MQTT и ESP32?
ASI Biont поддерживает множество протоколов: Modbus/TCP, SSH, COM-порт, OPC-UA, CAN bus и другие. Но для подключения OLED-дисплея через ESP32 оптимальный выбор — MQTT. Почему:
- Простота: MQTT — лёгкий протокол publish/subscribe, идеальный для IoT-устройств с ограниченными ресурсами.
- Надёжность: встроенный QoS (Quality of Service) гарантирует доставку сообщений даже при нестабильной сети.
- Масштабируемость: можно добавить десятки дисплеев, подписав их на разные топики.
- Безопасность: поддержка TLS-шифрования и аутентификации.
ESP32 выбран из-за встроенного Wi-Fi/Bluetooth и двух ядер — идеально для одновременного приёма данных по MQTT и управления дисплеем.
Как AI-агент подключается к устройству?
ASI Biont не требует установки приложений на ПК или сложных настроек. Всё делается через диалог в чате:
1. Вы описываете задачу: «Подключи OLED-дисплей SSD1306 по I2C к ESP32, получай данные по MQTT от брокера test.mosquitto.org, топик /sensor/temperature, выводи температуру на дисплей».
2. AI-агент генерирует Python-скрипт (для execute_python) или MicroPython-код (для прошивки ESP32) и объясняет, как его запустить.
3. Вы запускаете скрипт на ESP32 (через Arduino IDE или Thonny) или на сервере (через execute_python) — и дисплей начинает работать.
Никаких панелей управления и кнопок «добавить устройство» — только диалог.
Сценарий 1: Вывод погоды и курсов валют на OLED-дисплей
Это самый популярный сценарий для умного дома. Дисплей показывает текущую погоду (температура, влажность, давление) и курсы валют (USD, EUR) с обновлением каждые 15 минут.
Аппаратная схема подключения (I2C)
| Компонент | Пин ESP32 | Пин OLED | Примечание |
|---|---|---|---|
| VCC | 3.3V | VCC | Питание 3.3 В |
| GND | GND | GND | Общий провод |
| SDA | GPIO21 | SDA | Линия данных I2C |
| SCL | GPIO22 | SCL | Линия тактов I2C |
Схема подключения (текстовое описание):
- Подключите OLED к макетной плате.
- Соедините VCC (OLED) с 3.3V (ESP32).
- GND (OLED) с GND (ESP32).
- SDA (OLED) с GPIO21 (ESP32).
- SCL (OLED) с GPIO22 (ESP32).
- При необходимости установите подтягивающие резисторы 4.7 кОм на SDA и SCL (на большинстве модулей SSD1306 они уже встроены).
Код на MicroPython для ESP32
# main.py — прошивка для ESP32 с OLED-дисплеем
# Получает данные по MQTT и выводит на дисплей
import network
import time
import machine
from machine import Pin, I2C
import ssd1306
from umqtt.simple import MQTTClient
import json
# Настройки Wi-Fi
WIFI_SSID = "ваш_SSID"
WIFI_PASS = "ваш_пароль"
# Настройки MQTT
MQTT_BROKER = "test.mosquitto.org"
MQTT_PORT = 1883
TOPIC_WEATHER = "home/weather"
TOPIC_CURRENCY = "home/currency"
# Настройки OLED (I2C)
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
# Переменные для хранения данных
weather_data = {}
currency_data = {}
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('Подключение к Wi-Fi...')
wlan.connect(WIFI_SSID, WIFI_PASS)
while not wlan.isconnected():
time.sleep(1)
print('Wi-Fi подключён:', wlan.ifconfig())
def mqtt_callback(topic, msg):
global weather_data, currency_data
topic_str = topic.decode('utf-8')
try:
data = json.loads(msg.decode('utf-8'))
if topic_str == TOPIC_WEATHER:
weather_data = data
elif topic_str == TOPIC_CURRENCY:
currency_data = data
update_display()
except Exception as e:
print('Ошибка парсинга:', e)
def update_display():
oled.fill(0)
# Вывод погоды
if weather_data:
oled.text('Погода:', 0, 0)
oled.text(f"{weather_data.get('temp', 'N/A')}°C", 0, 10)
oled.text(f"{weather_data.get('humidity', 'N/A')}%", 0, 20)
# Вывод курсов валют
if currency_data:
oled.text('Курсы:', 0, 35)
oled.text(f"USD: {currency_data.get('usd', 'N/A')}", 0, 45)
oled.text(f"EUR: {currency_data.get('eur', 'N/A')}", 0, 55)
oled.show()
# Основная программа
def main():
connect_wifi()
client = MQTTClient("esp32_oled", MQTT_BROKER, port=MQTT_PORT)
client.set_callback(mqtt_callback)
client.connect()
client.subscribe(TOPIC_WEATHER)
client.subscribe(TOPIC_CURRENCY)
print('Подключён к MQTT, ожидание данных...')
while True:
try:
client.check_msg()
time.sleep(0.1)
except OSError as e:
print('Ошибка MQTT:', e)
time.sleep(5)
client.connect()
if __name__ == '__main__':
main()
Как это работает с ASI Biont?
AI-агент ASI Biont подключается к MQTT-брокеру через execute_python (с библиотекой paho-mqtt). Он генерирует скрипт, который:
- Получает данные о погоде через OpenWeatherMap API или другой источник.
- Парсит курсы валют (например, через API Центробанка).
- Публикует их в топики home/weather и home/currency.
Пример команды AI-агенту: «Опубликуй в MQTT-брокер test.mosquitto.org данные о погоде в Москве каждые 15 минут в топик home/weather». AI пишет и запускает скрипт.
Сценарий 2: Мониторинг состояния сервера с уведомлениями
OLED-дисплей может показывать статус сервера (CPU, RAM, диск) и отправлять уведомления в Telegram при критических значениях.
Код на MicroPython для ESP32 (фрагмент)
# ... (подключение Wi-Fi и MQTT как выше)
TOPIC_SERVER_STATUS = "server/status"
def update_display_server(status):
oled.fill(0)
oled.text('Сервер:', 0, 0)
oled.text(f"CPU: {status.get('cpu', 'N/A')}%", 0, 10)
oled.text(f"RAM: {status.get('ram', 'N/A')}%", 0, 20)
oled.text(f"Disk: {status.get('disk', 'N/A')}%", 0, 30)
oled.text(f"Uptime: {status.get('uptime', 'N/A')}h", 0, 40)
oled.show()
Скрипт для AI-агента (выполняется на сервере ASI Biont)
# Этот скрипт генерирует AI и запускает через execute_python
import paho.mqtt.client as mqtt
import psutil
import json
import time
BROKER = "test.mosquitto.org"
TOPIC = "server/status"
def get_status():
return {
"cpu": psutil.cpu_percent(interval=1),
"ram": psutil.virtual_memory().percent,
"disk": psutil.disk_usage('/').percent,
"uptime": int(time.time() - psutil.boot_time()) // 3600
}
def on_connect(client, userdata, flags, rc):
print("Подключён к брокеру")
def main():
client = mqtt.Client()
client.on_connect = on_connect
client.connect(BROKER, 1883, 60)
client.loop_start()
while True:
status = get_status()
client.publish(TOPIC, json.dumps(status))
print(f"Опубликовано: {status}")
time.sleep(30) # Обновление каждые 30 секунд
if __name__ == "__main__":
main()
Важно: execute_python имеет таймаут 30 секунд, поэтому бесконечный цикл while True приведёт к остановке. Для долгосрочных задач AI может предложить запустить скрипт на отдельном сервере или использовать планировщик (например, cron).
Сценарий 3: Уведомления из Telegram на OLED-дисплей
Вы можете получать уведомления из Telegram (например, от бота умного дома) и выводить их на дисплей. Это удобно, когда телефон не под рукой.
Как это настроить?
- Создайте Telegram-бота через @BotFather, получите токен.
- В чате с ASI Biont напишите: «Подпишись на Telegram-бота с токеном XXX, получай сообщения и публикуй их в MQTT-топик home/telegram».
- AI-агент генерирует скрипт, который использует requests.get для long polling и публикует текст в MQTT.
Код на MicroPython для вывода уведомлений
# Фрагмент обработки MQTT-сообщений
TOPIC_TELEGRAM = "home/telegram"
def mqtt_callback(topic, msg):
if topic.decode() == TOPIC_TELEGRAM:
text = msg.decode('utf-8')
# Очистка дисплея и вывод уведомления
oled.fill(0)
oled.text('Уведомление:', 0, 0)
# Разбиваем длинный текст на строки
lines = [text[i:i+16] for i in range(0, len(text), 16)]
for i, line in enumerate(lines[:4]): # максимум 4 строки
oled.text(line, 0, 10 + i*12)
oled.show()
time.sleep(10) # Показываем 10 секунд
update_display() # Возвращаем предыдущий экран
Сценарий 4: Промышленный мониторинг через Modbus/TCP
OLED-дисплей может отображать показания с промышленных контроллеров (PLC) через Modbus TCP. AI-агент подключается к PLC, читает регистры и публикует данные в MQTT.
Команда AI-агенту
«Подключись к PLC Siemens S7-1200 по IP 192.168.1.100, прочитай регистры температуры (адрес 40001) и давления (адрес 40002), опубликуй в MQTT-топик factory/sensors каждые 5 секунд».
Пример кода (выполняется через industrial_command)
# AI генерирует этот код для execute_python
from pymodbus.client import ModbusTcpClient
import paho.mqtt.client as mqtt
import json
import time
PLC_IP = "192.168.1.100"
PLC_PORT = 502
MQTT_BROKER = "test.mosquitto.org"
TOPIC = "factory/sensors"
def read_plc():
client = ModbusTcpClient(PLC_IP, port=PLC_PORT)
client.connect()
rr = client.read_holding_registers(0, 2, unit=1) # Регистры 40001-40002
client.close()
return {"temperature": rr.registers[0] / 10.0, "pressure": rr.registers[1] / 100.0}
def main():
mqtt_client = mqtt.Client()
mqtt_client.connect(MQTT_BROKER, 1883, 60)
while True:
data = read_plc()
mqtt_client.publish(TOPIC, json.dumps(data))
print(f"Отправлено: {data}")
time.sleep(5)
if __name__ == "__main__":
main()
Сценарий 5: Автоматизация умного дома через AI-агента
OLED-дисплей может управлять устройствами умного дома: показывать состояние ламп, розеток, термостата и позволять изменять их через кнопки на ESP32 или через чат.
Пример команды
«Создай скрипт, который показывает на OLED-дисплее состояние лампы (вкл/выкл) и температуру в комнате. При нажатии кнопки на GPIO34 отправляй команду на включение/выключение лампы через MQTT».
Код для ESP32
# Фрагмент обработки кнопки
from machine import Pin
button = Pin(34, Pin.IN, Pin.PULL_UP)
def toggle_light():
# Публикация команды в MQTT
client.publish("home/light/command", "toggle")
# В основном цикле
if not button.value(): # Кнопка нажата
time.sleep(0.05) # Антидребезг
if not button.value():
toggle_light()
time.sleep(0.3)
Почему это выгодно?
- Не нужно писать код вручную: AI делает всю интеграцию за секунды. Вы описываете задачу на естественном языке — и получаете готовый скрипт.
- Гибкость: можно подключать любые устройства, даже те, которые официально не поддерживаются — через execute_python.
- Экономия времени: вместо часов настройки — 5 минут диалога с AI.
- Масштабируемость: добавив ещё один дисплей, просто меняете MQTT-топик в чате.
Заключение
OLED-дисплей SSD1306 или SH1106, подключённый к AI-агенту ASI Biont, перестаёт быть просто «красивой картинкой» и превращается в мощный инструмент визуализации данных. Погода, курсы валют, статус сервера, уведомления из Telegram, промышленные показатели — всё это обновляется в реальном времени без участия разработчика.
Попробуйте сами: откройте asibiont.com, создайте агента, опишите задачу — и ваш дисплей оживёт.
Комментарии