Интеграция датчика температуры DS18B20 с AI-агентом ASI Biont: от аппаратной схемы до предиктивной аналитики

Введение

DS18B20 — это цифровой температурный датчик от компании Maxim Integrated (ныне Analog Devices), который стал стандартом в DIY-проектах, системах умного дома и промышленной автоматизации. Его ключевая особенность — интерфейс 1-Wire, позволяющий подключать десятки датчиков на одну линию, а также встроенный 12-битный АЦП с точностью до 0.0625°C. Диапазон измерений: от -55°C до +125°C [1].

Зачем подключать DS18B20 к AI-агенту? Традиционный подход — написать скрипт на Python или Arduino, который читает данные и отправляет их в базу или на дашборд. Но этого недостаточно для современной автоматизации: хочется не просто логировать температуру, а получать прогнозы, автоматически управлять климат-контролем, получать голосовые уведомления и реагировать на аномалии в реальном времени. ASI Biont решает эту задачу: AI-агент сам пишет код интеграции, подключается к датчику через выбранный интерфейс и реализует любой сценарий — от простого мониторинга до предиктивной аналитики на основе машинного обучения.

Какой способ подключения использует ASI Biont

Для DS18B20 есть два основных сценария, в зависимости от того, какая платформа используется:

Сценарий Платформа Интерфейс ASI Biont Протокол
ESP32 с MQTT ESP32 + датчик MQTT (paho-mqtt) Wi-Fi + MQTT
Raspberry Pi с GPIO Raspberry Pi + датчик SSH (paramiko) 1-Wire + SSH

В обоих случаях AI-агент получает данные от датчика, анализирует их и может управлять исполнительными устройствами (обогреватель, вентилятор, реле) или отправлять уведомления.

Сценарий 1: ESP32 + DS18B20 → MQTT → ASI Biont

Аппаратная схема

Для подключения DS18B20 к ESP32 требуется:
- ESP32 (любая версия: ESP32-WROOM, ESP32-S3 и т.д.)
- Датчик DS18B20 (в корпусе TO-92 или в герметичном варианте для улицы)
- Резистор 4.7 кОм (подтяжка к питанию для шины 1-Wire)
- Макетная плата и соединительные провода

Схема подключения:

DS18B20 (вид спереди, плоской стороной к себе):
  [1] GND  — GND ESP32
  [2] DQ   — GPIO4 ESP32 (через резистор 4.7 кОм к VCC)
  [3] VCC  — 3.3V ESP32

Прошивка ESP32 (MicroPython)

Пользователь загружает на ESP32 следующую прошивку (через Thonny или ampy):

import machine
import onewire
import ds18x20
import time
import network
from umqtt.simple import MQTTClient

# Настройка Wi-Fi
SSID = "YourWiFi"
PASSWORD = "YourPassword"

def connect_wifi():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    wlan.connect(SSID, PASSWORD)
    while not wlan.isconnected():
        time.sleep(1)
    print("WiFi connected:", wlan.ifconfig())

# Настройка MQTT
MQTT_BROKER = "broker.hivemq.com"  # или свой брокер
MQTT_TOPIC = b"sensor/temperature"

def publish_temp(client, ds_sensor, roms):
    ds_sensor.convert_temp()
    time.sleep_ms(750)
    for rom in roms:
        temp = ds_sensor.read_temp(rom)
        client.publish(MQTT_TOPIC, str(temp))
        print("Published:", temp)

# Инициализация датчика
ds_pin = machine.Pin(4)
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
roms = ds_sensor.scan()
print("Found DS18B20 sensors:", len(roms))

# Подключение
connect_wifi()
client = MQTTClient("esp32_ds18b20", MQTT_BROKER)
client.connect()

while True:
    publish_temp(client, ds_sensor, roms)
    time.sleep(60)  # публикуем каждую минуту

Подключение к ASI Biont

Пользователь открывает чат с AI-агентом ASI Biont и пишет:

«Подключись к MQTT брокеру broker.hivemq.com, подпишись на топик sensor/temperature, собирай данные с датчика DS18B20 на ESP32. Каждые 5 минут строй график температуры за последний час. Если температура превышает 30°C — отправь мне уведомление в Telegram. Мой Telegram ID: 123456789»

AI-агент генерирует и выполняет следующий скрипт через execute_python:

import paho.mqtt.client as mqtt
import matplotlib.pyplot as plt
import io
import json
from datetime import datetime, timedelta
import requests

# Конфигурация
BROKER = "broker.hivemq.com"
TOPIC = "sensor/temperature"
TELEGRAM_TOKEN = "YOUR_BOT_TOKEN"
TELEGRAM_CHAT_ID = "123456789"
ALERT_THRESHOLD = 30.0

temp_history = []  # список словарей: {timestamp, value}

def on_message(client, userdata, msg):
    global temp_history
    try:
        temp = float(msg.payload.decode())
        now = datetime.now()
        temp_history.append({"timestamp": now.isoformat(), "value": temp})
        # Храним только последний час
        cutoff = now - timedelta(hours=1)
        temp_history = [x for x in temp_history if datetime.fromisoformat(x["timestamp"]) > cutoff]

        # Проверка превышения
        if temp > ALERT_THRESHOLD:
            message = f"⚠️ Внимание! Температура превысила {ALERT_THRESHOLD}°C: {temp:.2f}°C"
            url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
            requests.post(url, json={"chat_id": TELEGRAM_CHAT_ID, "text": message})
            print("Alert sent to Telegram")

        # Каждые 5 минут строим график
        if len(temp_history) % 5 == 0:
            plot_temp(temp_history)
    except Exception as e:
        print("Error processing message:", e)

def plot_temp(history):
    timestamps = [datetime.fromisoformat(x["timestamp"]) for x in history]
    values = [x["value"] for x in history]

    plt.figure(figsize=(10, 5))
    plt.plot(timestamps, values, marker='o', linestyle='-', color='b')
    plt.title('Температура DS18B20 (последний час)')
    plt.xlabel('Время')
    plt.ylabel('Температура, °C')
    plt.grid(True)
    plt.xticks(rotation=45)
    plt.tight_layout()

    buf = io.BytesIO()
    plt.savefig(buf, format='png')
    buf.seek(0)
    # Отправляем график в чат (через base64 или ссылку)
    print("График построен, размер:", len(buf.getvalue()), "байт")
    plt.close()

client = mqtt.Client()
client.on_message = on_message
client.connect(BROKER, 1883, 60)
client.subscribe(TOPIC)
client.loop_start()

# Ждём 30 секунд (таймаут sandbox)
import time
time.sleep(30)
client.loop_stop()

Важно: Поскольку sandbox ASI Biont имеет таймаут 30 секунд, для длительного мониторинга AI-агент создаёт скрипт, который запускается как сервис на пользовательском сервере (например, через systemd на Raspberry Pi) или использует Hardware Bridge для постоянного подключения.

Сценарий 2: Raspberry Pi + DS18B20 → SSH → ASI Biont

Подключение датчика к Raspberry Pi

На Raspberry Pi датчик DS18B20 подключается к GPIO4 (пин 7 на 40-пиновом разъёме). Необходимо включить 1-Wire интерфейс:

# В /boot/config.txt добавить:
dtoverlay=w1-gpio
# Перезагрузить
sudo reboot

После перезагрузки датчик появится в /sys/bus/w1/devices/28-xxxxxxxxxxxx/w1_slave.

Подключение к ASI Biont по SSH

Пользователь даёт команду в чате:

«Подключись к Raspberry Pi по SSH (IP: 192.168.1.100, user: pi, password: raspberry). Читай температуру с датчика DS18B20 из файла /sys/bus/w1/devices/28-*/w1_slave. Каждые 10 секунд сохраняй данные в JSON-файл /home/pi/temp_log.json. Если температура упадёт ниже 5°C — включи реле на GPIO17 через RPi.GPIO»

AI-агент генерирует Python-скрипт с paramiko:

import paramiko
import time
import json
import re

# Параметры подключения
HOST = "192.168.1.100"
USER = "pi"
PASSWORD = "raspberry"

# Подключение по SSH
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(HOST, username=USER, password=PASSWORD)

def read_temp():
    stdin, stdout, stderr = ssh.exec_command("cat /sys/bus/w1/devices/28-*/w1_slave")
    output = stdout.read().decode()
    # Парсинг: вторая строка содержит t=xxxxx
    match = re.search(r't=(\d+)', output)
    if match:
        temp_c = int(match.group(1)) / 1000.0
        return temp_c
    return None

def set_relay(state):
    # Включаем/выключаем реле на GPIO17
    if state:
        cmd = "python3 -c \"import RPi.GPIO as GPIO; GPIO.setmode(GPIO.BCM); GPIO.setup(17, GPIO.OUT); GPIO.output(17, GPIO.HIGH)\""
    else:
        cmd = "python3 -c \"import RPi.GPIO as GPIO; GPIO.setmode(GPIO.BCM); GPIO.setup(17, GPIO.OUT); GPIO.output(17, GPIO.LOW)\""
    ssh.exec_command(cmd)

# Основной цикл (в sandbox — ограничение 30 секунд, поэтому показываем логику)
temp = read_temp()
if temp is not None:
    print(f"Текущая температура: {temp:.2f}°C")
    # Сохраняем в JSON
    data = {"timestamp": time.time(), "temperature": temp}
    with open("/home/pi/temp_log.json", "a") as f:
        f.write(json.dumps(data) + "\n")

    if temp < 5.0:
        set_relay(True)
        print("Температура ниже 5°C — реле включено")
    else:
        set_relay(False)
        print("Температура в норме — реле выключено")
else:
    print("Ошибка чтения датчика")

ssh.close()

Предиктивная аналитика: прогнозирование температуры

DS18B20 + ASI Biont позволяют не только мониторить текущую температуру, но и прогнозировать её изменение. AI-агент может:

  1. Собрать исторические данные (например, за неделю)
  2. Обучить простую модель ARIMA или линейную регрессию на numpy/scipy
  3. Спрогнозировать температуру на следующий час
  4. Если прогноз показывает превышение порога — заранее включить вентиляцию или обогрев

Пример запроса пользователя:

«У меня есть история температуры за 7 дней в CSV. Построй прогноз на 2 часа вперёд с помощью линейной регрессии. Если прогноз показывает температуру выше 28°C — отправь предупреждение в Telegram»

AI-агент пишет скрипт с scikit-learn:

import numpy as np
from sklearn.linear_model import LinearRegression
import pandas as pd
import requests

# Загрузка данных (предположим, CSV загружен)
df = pd.read_csv('temperature_history.csv')
df['timestamp'] = pd.to_datetime(df['timestamp'])
df['hours'] = (df['timestamp'] - df['timestamp'].min()).dt.total_seconds() / 3600

X = df['hours'].values.reshape(-1, 1)
y = df['temperature'].values

model = LinearRegression()
model.fit(X, y)

# Прогноз на 2 часа вперёд
last_hour = df['hours'].max()
future_hours = np.array([last_hour + 1, last_hour + 2]).reshape(-1, 1)
predictions = model.predict(future_hours)

print(f"Прогноз на +1 час: {predictions[0]:.2f}°C")
print(f"Прогноз на +2 часа: {predictions[1]:.2f}°C")

if max(predictions) > 28:
    msg = f"🚨 Прогноз: температура превысит 28°C (макс. {max(predictions):.2f}°C)"
    requests.post(f"https://api.telegram.org/bot{TOKEN}/sendMessage",
                  json={"chat_id": CHAT_ID, "text": msg})

Почему это выгодно

  1. Нулевой порог входа: не нужно писать код вручную — AI-агент делает всю интеграцию за секунды. Пользователь описывает задачу на естественном языке.
  2. Гибкость: ASI Biont подключается к ЛЮБОМУ устройству через execute_python. Не нужно ждать, пока разработчики добавят поддержку — подключай что угодно прямо сейчас.
  3. Автоматизация: AI сам решает, когда включить обогрев, отправить уведомление или построить прогноз.
  4. Предиктивная аналитика: встроенные библиотеки (scikit-learn, numpy) позволяют строить модели прогнозирования без дополнительных инструментов.
  5. Единый интерфейс: все устройства управляются через один чат — температура, влажность, реле, камеры, PLC.

Заключение

DS18B20 — простой и надёжный датчик, но его потенциал раскрывается в полной мере только при интеграции с AI-агентом. ASI Biont позволяет за 5 минут настроить систему мониторинга, прогнозирования и автоматического управления климатом, не написав ни строчки кода вручную.

Попробуйте сами: подключите DS18B20 к ASI Biont на asibiont.com и управляйте температурой голосом, чатом или автопилотом.


Источники:
1. Maxim Integrated. DS18B20 Programmable Resolution 1-Wire Digital Thermometer. Datasheet, 2019.
2. Raspberry Pi Foundation. 1-Wire Interface. https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#1-wire-interface
3. Espressif Systems. ESP32 Technical Reference Manual, 2023.
4. Eclipse Paho. MQTT Python Client Library. https://pypi.org/project/paho-mqtt/
5. Paramiko. SSHv2 protocol library. https://pypi.org/project/paramiko/

← Все статьи

Комментарии

Читайте также