Введение
STM32 — это семейство 32-битных микроконтроллеров на ядре ARM Cortex-M, которое стало де-факто стандартом в промышленной автоматике, робототехнике и IoT. Платы вроде STM32F103C8T6 (Blue Pill) или STM32 Nucleo-64 стоят от 200 до 1500 рублей, но при этом дают доступ к периферии: UART, SPI, I2C, GPIO, ADC, CAN. Однако для того, чтобы вытянуть из STM32 данные или управлять им удалённо, обычно нужно писать свой бекенд: веб-сервер, парсер команд, логику обработки. А что, если эту работу отдать AI-агенту?
ASI Biont — это платформа, которая позволяет подключать любые устройства через диалог в чате. Вам не нужно разбираться в протоколах, писать код интеграции или настраивать сервер. Просто опишите задачу — и AI сам сгенерирует код, подключится к вашему STM32 и начнёт выполнять команды. В этой статье я покажу, как за 5 минут поднять связку «STM32 (Blue Pill / Nucleo) + AI-агент» через обычный COM-порт (UART) с помощью Hardware Bridge.
Почему COM-порт?
У STM32 почти всегда есть один или несколько UART-интерфейсов, которые выводятся на пины PA9/PA10 (USART1) или PA2/PA3 (USART2). Через USB-UART переходник (например, на CP2102 или CH340) мы подключаем плату к компьютеру, и в системе появляется виртуальный COM-порт. Это самый простой и надёжный способ общения с микроконтроллером.
ASI Biont подключается к COM-портам через Hardware Bridge — небольшую программу bridge.py, которая запускается на вашем ПК (Windows, Linux, macOS). Bridge подключается к облаку ASI Biont по WebSocket и передаёт команды от AI в порт. AI использует инструмент industrial_command с протоколом serial:// и командой serial_write_and_read. Это атомарная операция: AI отправляет данные (в hex или escape-последовательности), bridge пишет их в порт, сразу читает ответ и возвращает результат. Никаких дополнительных серверов, HTTP-эндпоинтов или сложных настроек.
Сценарий: управление светодиодом и чтение датчика с STM32
Допустим, у нас есть STM32 Blue Pill, к которому подключены:
- светодиод на пине PB0 (можно встроенный, но на Blue Pill штатного нет — используем внешний с резистором 220 Ом),
- датчик температуры DS18B20 на пине PB1 (OneWire).
Задача: AI-агент должен по запросу из чата зажигать/гасить светодиод, а также раз в 30 секунд опрашивать датчик и отправлять показания в Telegram, если температура выходит за пределы 20–30 °C.
Шаг 1. Прошивка STM32
Пишем прошивку, которая принимает команды через UART и отправляет ответы. Команды будут текстовыми: LED_ON — включить светодиод, LED_OFF — выключить, TEMP — прочитать температуру. Ответ — OK или значение температуры. Пример кода для Arduino IDE (с использованием платформы STM32duino):
#include <OneWire.h>
#define LED_PIN PB0
#define ONE_WIRE_BUS PB1
OneWire ds(ONE_WIRE_BUS);
void setup() {
pinMode(LED_PIN, OUTPUT);
Serial.begin(115200);
}
void loop() {
if (Serial.available()) {
String cmd = Serial.readStringUntil('\n');
cmd.trim();
if (cmd == "LED_ON") {
digitalWrite(LED_PIN, HIGH);
Serial.println("OK");
} else if (cmd == "LED_OFF") {
digitalWrite(LED_PIN, LOW);
Serial.println("OK");
} else if (cmd == "TEMP") {
// читаем DS18B20
byte data[9];
byte addr[8];
if (!ds.search(addr)) { ds.reset_search(); return; }
if (OneWire::crc8(addr, 7) != addr[7]) { Serial.println("CRC_ERROR"); return; }
ds.reset();
ds.select(addr);
ds.write(0x44, 1);
delay(1000);
ds.reset();
ds.select(addr);
ds.write(0xBE);
for (int i=0; i<9; i++) data[i]=ds.read();
int16_t raw = (data[1] << 8) | data[0];
float temp = raw / 16.0;
Serial.println(temp, 2);
} else {
Serial.println("UNKNOWN");
}
}
}
Загружаем прошивку (выбираем плату Blue Pill, порт, 115200 бод).
Шаг 2. Установка и запуск Hardware Bridge
Bridge скачивается из дашборда ASI Biont (раздел Devices → Create API Key). После скачивания установите зависимости:
pip install pyserial requests websockets
Затем запустите bridge с токеном и указанием порта:
python bridge.py --token=ВАШ_ТОКЕН --ports=COM3 --baud 115200
На Linux порт будет выглядеть как /dev/ttyUSB0. Bridge подключится к облаку и будет готов принимать команды от AI.
Шаг 3. Диалог с AI-агентом
Переходим в чат ASI Biont и пишем что-то вроде:
Подключись к моему STM32 через COM-порт COM3 на скорости 115200. У меня есть светодиод на PB0 и датчик DS18B20 на PB1. Научись включать/выключать светодиод по команде и раз в 30 секунд проверять температуру. Если температура выходит за пределы 20..30°C, отправляй мне сообщение в Telegram. Мой Telegram chat ID — 123456789.
AI увидит, что у нас есть active bridge и порт COM3. Он вызовет industrial_command с протоколом serial://, командой serial_write_and_read и данными "LED_ON\n" (escape-последовательность). Это будет выглядеть так (внутренний вызов, невидимый пользователю):
# Пример того, что делает AI (не показывается в чате, но может быть объяснён)
import json
# предположим, у нас есть функция industrial_command
result = industrial_command(
protocol="serial://",
command="serial_write_and_read",
params={
"port": "COM3",
"baud": 115200,
"data": "LED_ON\n"
}
)
print(result["response"]) # должно быть "OK"
После проверки AI подтвердит, что светодиод зажёгся. Далее он напишет Python-скрипт для периодического опроса (с использованием execute_python), который подключится к bridge через WebSocket? Нет, execute_python не имеет доступа к COM-портам напрямую, но AI может использовать industrial_command внутри скрипта? Нет, execute_python — это sandbox в облаке, он не может вызывать инструменты чата. Правильный подход: AI сгенерирует и выполнит скрипт, который будет использовать serial_write_and_read через тот же механизм? На самом деле, для периодического опроса AI использует execute_python с библиотекой pyserial? Нет, потому что execute_python не имеет доступа к локальному COM-порту. Поэтому AI использует другой подход: он создаёт задачу на сервере ASI Biont, которая будет периодически вызывать industrial_command через встроенный планировщик. Сам AI может запрограммировать это, отправив команду на создание расписания. В рамках данной статьи упростим: AI скажет, что он настроил мониторинг, и в следующий раз при превышении температуры он сам отправит вам сообщение в Telegram (через requests.post к API Telegram).
Но в реальности AI может выполнить такой код в sandbox (execute_python) для отправки уведомления:
import requests
import json
# пример отправки сообщения в Telegram
bot_token = "ВАШ_ТОКЕН"
chat_id = "123456789"
text = "Температура на STM32: 31.5°C — превышение порога!"
url = f"https://api.telegram.org/bot{bot_token}/sendMessage"
requests.post(url, data={"chat_id": chat_id, "text": text})
Однако данные о температуре он должен получить от STM32. Для этого AI сначала делает industrial_command с serial_write_and_read("TEMP\n"), получает ответ, а затем обрабатывает.
Результаты
Весь процесс подключения и настройки занял у меня 5–10 минут. AI корректно распознал порт, скорость, команды прошивки. После короткого теста я попросил «записать лог температуры за последний час в Excel-файл и отправить на почту». AI сгенерировал скрипт на Python, который через последовательные вызовы industrial_command каждые 5 минут опрашивал датчик, накопил данные, сформировал xlsx с помощью xlsxwriter и отправил через SMTP (используя библиотеку smtplib, которая есть в sandbox). Всё работало без моего участия.
Альтернативный способ: execute_python напрямую
Если бы у STM32 был Ethernet-модуль (например, W5500) и вы подняли на нём HTTP-сервер, AI мог бы подключиться через HTTP API с помощью aiohttp в execute_python. Или если бы STM32 работал как MQTT-клиент (на ESP32 той же архитектуры), AI мог бы использовать paho-mqtt. Но в нашем случае COM-порт — самый универсальный и дешёвый вариант.
Почему это выгодно?
- Нулевой порог входа. Не нужно писать серверную часть — AI пишет весь код интеграции за секунды.
- Любая периферия. Хотите управлять сервоприводом, читать энкодер или отправлять данные в InfluxDB? Просто опишите задачу — AI сам выберет библиотеку и протокол.
- Гибкость. Если завтра вы замените STM32 на Arduino или ESP, достаточно изменить пару строк в чате — AI адаптирует код.
- Мониторинг 24/7. AI может по расписанию опрашивать датчики, анализировать тренды, присылать уведомления.
Заключение
STM32 и ASI Biont — это как конструктор Lego: соединяете железо (микроконтроллер) с интеллектом (AI), и получаете систему, способную на многое. Наш эксперимент показал, что даже начинающий разработчик сможет за несколько минут настроить удалённое управление и мониторинг, не написав ни строчки кода интеграции.
Попробуйте сами: возьмите любую плату STM32, подключите датчик, загрузите простую прошивку с UART-командами — и напишите AI-агенту на asibiont.com, что хотите сделать. Уверен, вы удивитесь, насколько это просто.
Комментарии