Введение
У вас завалялся старый VGA-монитор? Или, может, вы хотите вывести данные с датчиков на большой экран в цехе, но не хотите покупать дорогие промышленные панели? Есть элегантное решение: ESP32 с VGA-выходом через ЦАП (DAC). Это дешево, просто и невероятно гибко, если подключить такой дисплей к AI-агенту ASI Biont.
В этой статье я покажу, как собрать устройство на ESP32, которое выводит на VGA-монитор реальные данные с датчиков, статусы автоматизации и даже AI-аналитику — и всё это управляется через чат с AI. Никаких веб-панелей, никаких сторонних облачных сервисов. Только ваш монитор, ESP32 и ASI Biont.
Что такое VGA output (ESP32 + DAC) и зачем его подключать к AI
ESP32 — это микроконтроллер с двумя встроенными 8-битными ЦАП (DAC). Если подключить к ним простейший резисторный делитель (R-2R) или готовый VGA-конвертер, можно получить сигнал, который понимает любой VGA-монитор. Разрешение, конечно, не Full HD — обычно 320x240 или 640x480 — но для вывода текста, графиков и простых дашбордов этого более чем достаточно.
Подключив такой экран к ASI Biont, вы получаете:
- Мониторинг в реальном времени — температура, влажность, давление, статусы реле — всё на большом экране.
- AI-аналитику на дисплее — тренды, аномалии, прогнозы, которые AI агент рассчитывает в облаке и присылает на ESP32.
- Управление без лишних кликов — достаточно написать в чат «выведи на VGA статус конвейера», и AI сам обновит дашборд.
Главное преимущество — AI берёт на себя всю логику: парсинг данных с датчиков, форматирование вывода, обновление экрана. Вам остаётся только подключить железо и дать команду.
Какой способ подключения используется и почему
Для ESP32 с VGA-выходом мы используем MQTT — лёгкий протокол обмена сообщениями, идеальный для IoT. ESP32 подписывается на топик, например, esp32/vga/display, и ждёт команды. ASI Biont через industrial_command с протоколом MQTT публикует в этот топик данные в формате JSON.
Почему MQTT, а не COM-порт или SSH?
- ESP32 по Wi-Fi — проводной COM-порт не всегда удобен, если устройство стоит далеко от ПК.
- Асинхронность — MQTT позволяет AI отправлять данные в любой момент, ESP32 получает их и обновляет экран.
- Масштабируемость — можно подключить десятки ESP32 к одному брокеру.
Конкретный сценарий: дашборд температуры на VGA
Что нужно
- ESP32 (например, ESP32-WROOM-32)
- Датчик температуры/влажности DHT22 (или DS18B20)
- VGA-разъём + резисторы R-2R (схема из 8 резисторов 1кОм и 2кОм)
- Старый VGA-монитор или проектор
- MQTT-брокер (например, публичный
test.mosquitto.orgили локальный Mosquitto)
Шаг 1. Прошивка ESP32
Используем библиотеку ESP32Lib для генерации VGA-сигнала. Пример кода на Arduino IDE:
#include <WiFi.h>
#include <PubSubClient.h>
#include <ESP32Lib.h>
#include <DHT.h>
// Пины VGA
const int redPin = 26; // DAC1
const int greenPin = 25; // DAC2
const int bluePin = 33; // через резистор
const int hsyncPin = 32;
const int vsyncPin = 35;
// Настройки Wi-Fi и MQTT
const char* ssid = "ваш_роутер";
const char* password = "пароль";
const char* mqtt_server = "test.mosquitto.org";
const char* topic_display = "esp32/vga/display";
// Датчик DHT22
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// VGA
VGA3Bit vga;
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
dht.begin();
// Инициализация VGA (320x240)
vga.init(vga.MODE320x240, redPin, greenPin, bluePin, hsyncPin, vsyncPin);
vga.clear(0);
vga.setCursor(10, 10);
vga.setTextColor(255, 0);
vga.print("Connecting...");
// Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(500);
// MQTT
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
reconnect();
}
void callback(char* topic, byte* payload, unsigned int length) {
String msg = "";
for (int i = 0; i < length; i++) msg += (char)payload[i];
// Очищаем экран и выводим новое сообщение
vga.clear(0);
vga.setCursor(10, 10);
vga.setTextColor(255, 0);
vga.print(msg);
}
void reconnect() {
while (!client.connected()) {
if (client.connect("ESP32VGA")) {
client.subscribe(topic_display);
} else delay(5000);
}
}
void loop() {
if (!client.connected()) reconnect();
client.loop();
// Каждые 10 секунд отправляем данные с датчика
static unsigned long lastSend = 0;
if (millis() - lastSend > 10000) {
float t = dht.readTemperature();
float h = dht.readHumidity();
if (!isnan(t) && !isnan(h)) {
char json[100];
snprintf(json, 100, "{\"temp\":%.1f,\"hum\":%.1f}", t, h);
client.publish("esp32/vga/sensor", json);
}
lastSend = millis();
}
}
Шаг 2. Подключение к ASI Biont
Теперь самое интересное. Открываем чат с ASI Biont и говорим:
Подключись к MQTT-брокеру test.mosquitto.org:1883. Подпишись на топик esp32/vga/sensor. Каждые 30 секунд анализируй последние показания температуры и влажности с ESP32. Если температура выше 30°C — опубликуй в топик esp32/vga/display сообщение «⚠️ Внимание! Температура выше 30°C» красным цветом. Если ниже — «✅ Температура в норме» зелёным. Также раз в минуту строй простой ASCII-график тренда за последние 10 замеров и выводи его на экран.
AI агент сам напишет и выполнит Python-скрипт в execute_python, используя библиотеку paho-mqtt. Пример того, что сгенерирует AI:
import paho.mqtt.client as mqtt
import json
import time
from datetime import datetime
# Хранилище последних 10 замеров
history = []
def on_message(client, userdata, msg):
global history
try:
data = json.loads(msg.payload.decode())
temp = data.get('temp')
hum = data.get('hum')
if temp is not None:
history.append((datetime.now(), temp))
if len(history) > 10:
history.pop(0)
except:
pass
def build_graph():
if len(history) < 2:
return "Недостаточно данных"
temps = [t[1] for t in history]
min_t = min(temps)
max_t = max(temps)
if max_t == min_t:
return "Температура стабильна"
graph = "Тренд температуры:\n"
for i, (dt, t) in enumerate(history):
bar_len = int((t - min_t) / (max_t - min_t) * 20)
bar = "█" * bar_len + "░" * (20 - bar_len)
graph += f"{t:5.1f}°C
|{bar}|\n"
return graph
client = mqtt.Client()
client.connect("test.mosquitto.org", 1883, 60)
client.subscribe("esp32/vga/sensor")
client.on_message = on_message
client.loop_start()
try:
while True:
time.sleep(30)
if history:
last_temp = history[-1][1]
if last_temp > 30:
alert = "{\"msg\":\"⚠️ Внимание! Температура выше 30°C\", \"color\":\"red\"}"
else:
alert = "{\"msg\":\"✅ Температура в норме\", \"color\":\"green\"}"
client.publish("esp32/vga/display", alert)
graph = build_graph()
client.publish("esp32/vga/display", graph)
except KeyboardInterrupt:
client.loop_stop()
client.disconnect()
Шаг 3. Результат
На VGA-мониторе появляется живой дашборд: зелёные/красные сообщения, ASCII-график тренда температуры. Всё обновляется автоматически. Если нужно изменить формат или добавить новый датчик — просто пишем в чат.
Почему это удобнее классического подхода
Обычно для такого дашборда пришлось бы:
- Писать на ESP32 сложный код форматирования текста и обновления экрана.
- Настраивать веб-сервер или сторонний IoT-дашборд (Grafana, Node-RED).
- Вручную обновлять прошивку при каждом изменении.
С ASI Biont всё иначе:
- AI пишет код за вас — достаточно описать задачу на естественном языке.
- Гибкость — меняем логику за секунды: «вместо температуры выводи влажность» или «добавь прогноз на 1 час».
- Никаких сторонних сервисов — MQTT-брокер может быть локальным, данные не уходят в чужие облака.
Заключение
ESP32 с VGA-выходом — отличный способ превратить старый монитор в умный дашборд. А подключив его к ASI Biont через MQTT, вы получаете AI-управление без программирования. Просто скажите, что вы хотите видеть на экране, и AI сделает это.
Попробуйте сами: соберите ESP32 с VGA, подключите датчик, откройте asibiont.com и напишите в чат: «Подключи мой ESP32 с VGA к MQTT и выведи на экран температуру и тренд». Убедитесь, что интеграция работает за минуты, а не дни.
Комментарии