Введение
SPI (Serial Peripheral Interface) — один из самых распространённых протоколов для подключения периферийных устройств к микроконтроллерам. Датчики температуры, дисплеи, АЦП, сдвиговые регистры — всё это работает через SPI. Однако написание кода для инициализации, чтения и обработки данных с таких устройств требует времени и глубоких знаний. ASI Biont — AI-агент, который берёт на себя всю эту работу. В этой статье мы разберём, как подключить SPI-устройство к AI-агенту через COM-порт и GPIO, используя реальные сценарии: мониторинг температуры с выводом на дисплей и управление по голосовым командам.
Зачем подключать SPI-устройства к AI-агенту?
SPI-устройства используются повсеместно: от промышленных контроллеров до IoT-датчиков. Традиционная интеграция требует написания прошивки на C/C++, настройки регистров и отладки. ASI Biont позволяет:
- Автоматизировать сбор данных: AI сам пишет код для чтения SPI-датчиков (температура, давление, освещённость).
- Интегрировать с внешними сервисами: отправлять данные в Telegram, Google Sheets, базы данных.
- Управлять через голос: AI может интерпретировать голосовые команды и отправлять SPI-команды на устройство.
- Не писать код вручную: пользователь описывает задачу в чате, AI генерирует и выполняет код.
Как ASI Biont подключается к SPI-устройствам?
SPI-устройства сами по себе не имеют сетевого интерфейса. Они подключаются к микроконтроллеру (ESP32, Arduino, Raspberry Pi), который выступает мостом. ASI Biont подключается к этому микроконтроллеру одним из следующих способов:
| Способ | Описание | Устройство-посредник |
|---|---|---|
| Hardware Bridge (COM-порт) | Пользователь запускает bridge.py на ПК, AI отправляет команды через industrial_command() | Arduino / ESP32 через USB-UART |
| SSH | AI подключается по SSH к Raspberry Pi и управляет GPIO через RPi.GPIO или spidev | Raspberry Pi |
| MQTT | ESP32 публикует данные с датчиков в MQTT-брокер, AI подписывается и анализирует | ESP32 с Wi-Fi |
| execute_python | AI пишет Python-скрипт, который запускается в облаке и взаимодействует с устройством через один из вышеперечисленных способов | Универсально |
В этой статье мы рассмотрим два сценария: подключение ESP32 с датчиком DHT22 и дисплеем через MQTT, и управление Arduino через Hardware Bridge.
Сценарий 1: Мониторинг температуры с выводом на OLED-дисплей (ESP32 + MQTT)
Что нужно:
- ESP32 (например, ESP32-WROOM-32)
- Датчик температуры/влажности DHT22
- OLED-дисплей 128x64 (SSD1306, SPI-интерфейс)
- MQTT-брокер (например, Mosquitto, HiveMQ Cloud)
- ASI Biont (asibiont.com)
Схема подключения
ESP32 GPIO5 → OLED CS
ESP32 GPIO18 → OLED SCK (CLK)
ESP32 GPIO23 → OLED MOSI (DATA)
ESP32 GPIO4 → DHT22 DATA
ESP32 3.3V → OLED VCC, DHT22 VCC
ESP32 GND → OLED GND, DHT22 GND
Прошивка ESP32 (MicroPython)
import network
import time
import machine
import dht
from machine import Pin, SPI
import ssd1306
from umqtt.simple import MQTTClient
# Настройка Wi-Fi
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect('SSID', 'PASSWORD')
while not wifi.isconnected():
time.sleep(1)
# Настройка SPI для OLED
spi = SPI(1, baudrate=8000000, polarity=0, phase=0, sck=Pin(18), mosi=Pin(23))
cs = Pin(5, Pin.OUT)
dc = Pin(2, Pin.OUT)
rst = Pin(15, Pin.OUT)
oled = ssd1306.SSD1306_SPI(128, 64, spi, dc, rst, cs)
# Датчик DHT22
dht_sensor = dht.DHT22(Pin(4))
# MQTT клиент
client = MQTTClient('esp32_temp', 'broker.hivemq.com', port=1883)
client.connect()
while True:
dht_sensor.measure()
temp = dht_sensor.temperature()
hum = dht_sensor.humidity()
# Вывод на OLED
oled.fill(0)
oled.text('Temp: {} C'.format(temp), 0, 0)
oled.text('Hum: {} %'.format(hum), 0, 16)
oled.show()
# Публикация в MQTT
payload = '{{"temperature": {}, "humidity": {}}}'.format(temp, hum)
client.publish('sensors/temperature', payload)
time.sleep(10)
Интеграция с ASI Biont
Пользователь пишет в чате ASI Biont:
«Подключись к MQTT-брокеру broker.hivemq.com, подпишись на топик sensors/temperature, получай данные с ESP32. Если температура выше 30°C, отправь уведомление в Telegram. Также по команде „покажи температуру“ выведи текущие показания на OLED-дисплей через MQTT publish в топик esp32/command.»
AI генерирует и выполняет следующий Python-скрипт (через execute_python):
import paho.mqtt.client as mqtt
import json
import requests
TELEGRAM_TOKEN = 'YOUR_BOT_TOKEN'
CHAT_ID = 'YOUR_CHAT_ID'
def on_message(client, userdata, msg):
data = json.loads(msg.payload)
temp = data['temperature']
hum = data['humidity']
print(f'Получены данные: температура {temp}°C, влажность {hum}%')
if temp > 30:
message = f'⚠️ Внимание! Температура превысила 30°C: {temp}°C'
requests.post(f'https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage',
json={'chat_id': CHAT_ID, 'text': message})
broker = 'broker.hivemq.com'
client = mqtt.Client()
client.on_message = on_message
client.connect(broker, 1883, 60)
client.subscribe('sensors/temperature')
client.loop_forever()
AI также настраивает обработку голосовых команд: когда пользователь говорит «покажи температуру», AI публикует в топик esp32/command сообщение {"cmd": "display_temp"}, а прошивка ESP32 реагирует на это выводом данных на OLED.
Сценарий 2: Управление SPI-АЦП через Hardware Bridge (Arduino + COM-порт)
Что нужно:
- Arduino Uno или Nano
- АЦП MCP3208 (SPI, 12 бит, 8 каналов)
- ПК с Windows/Linux/macOS
- ASI Biont (asibiont.com)
Схема подключения
Arduino Pin 10 (SS) → MCP3208 CS
Arduino Pin 11 (MOSI) → MCP3208 DIN
Arduino Pin 12 (MISO) → MCP3208 DOUT
Arduino Pin 13 (SCK) → MCP3208 CLK
Arduino 5V → MCP3208 VDD
Arduino GND → MCP3208 VSS, AGND
Прошивка Arduino (C++)
#include <SPI.h>
const int CS_PIN = 10;
void setup() {
Serial.begin(115200);
SPI.begin();
pinMode(CS_PIN, OUTPUT);
digitalWrite(CS_PIN, HIGH);
}
int readADC(int channel) {
digitalWrite(CS_PIN, LOW);
byte command = 0b00000001; // Start bit
command |= (channel << 4); // Channel selection (bits 6-4)
SPI.transfer(command);
byte high = SPI.transfer(0x00);
byte low = SPI.transfer(0x00);
digitalWrite(CS_PIN, HIGH);
int value = ((high & 0x0F) << 8) | low;
return value;
}
void loop() {
if (Serial.available()) {
char cmd = Serial.read();
if (cmd == 'r') {
int channel = Serial.parseInt();
int value = readADC(channel);
Serial.println(value);
}
}
}
Интеграция с ASI Biont через Hardware Bridge
- Пользователь запускает bridge.py на ПК:
python bridge.py --token=YOUR_ASI_TOKEN --ports=COM3 --default-baud=115200
- Пользователь пишет в чате ASI Biont:
«Подключись к Arduino через COM3 на скорости 115200. Каждые 5 секунд читай данные с канала 0 АЦП MCP3208. Если значение превышает 2000 (что соответствует примерно 2.5V), отправь уведомление в Telegram. Также по команде „статус АЦП“ выведи все 8 каналов.»
AI использует industrial_command для отправки команд на bridge:
industrial_command(protocol='serial://COM3', command='r0', baud=115200)
AI генерирует скрипт для периодического опроса:
import time
import requests
TELEGRAM_TOKEN = 'YOUR_BOT_TOKEN'
CHAT_ID = 'YOUR_CHAT_ID'
def send_serial_command(command):
# AI использует industrial_command для отправки
# В реальном коде это tool call, но для примера:
result = industrial_command(protocol='serial://COM3', command=command, baud=115200)
return result
while True:
value = int(send_serial_command('r0'))
voltage = value * 5.0 / 4095.0
print(f'Канал 0: {value} ({voltage:.2f}V)')
if value > 2000:
message = f'⚠️ Напряжение на канале 0 превысило 2.5V: {voltage:.2f}V'
requests.post(f'https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage',
json={'chat_id': CHAT_ID, 'text': message})
time.sleep(5)
Почему это выгодно?
- Экономия времени: AI пишет код за секунды, а не часы.
- Гибкость: можно подключать любые SPI-устройства без ожидания обновлений.
- Голосовое управление: интеграция с голосовыми ассистентами через AI.
- Никаких панелей управления: всё через диалог в чате.
Заключение
SPI-устройства — основа многих embedded-систем. ASI Biont позволяет подключить их к AI-агенту без написания кода вручную. Будь то датчик температуры, АЦП или дисплей — AI сам разберётся с протоколом, напишет код и настроит автоматизацию. Попробуйте интеграцию на asibiont.com и убедитесь, насколько это просто.
Комментарии