Интеграция датчика освещенности BH1750 с AI-агентом ASI Biont: умный свет за 5 минут

Введение

Датчик освещенности BH1750 — один из самых популярных сенсоров в DIY-проектах умного дома. Он измеряет освещенность в люксах (0–65535 лк), использует интерфейс I2C и работает при напряжении 3.3–5 В. С его помощью можно автоматизировать управление шторами, жалюзи, искусственным освещением, теплицами — везде, где важна информация об уровне света.

Но зачем подключать BH1750 к AI-агенту? Традиционная автоматизация — это жёсткие правила: «если < 100 люкс, включить свет». AI-агент ASI Biont делает систему гибкой: он анализирует тренды освещённости, учитывает время суток, прогноз погоды, ваши привычки и может принимать решения, которые невозможно закодировать в простых if-else. Например, при пасмурной погоде он не включит свет, если через 30 минут выглянет солнце — а просто предупредит вас в Telegram.

В этой статье я покажу на практике, как подключить BH1750 к ASI Biont через ESP32 с MQTT, а также альтернативный вариант через Raspberry Pi и SSH. Вы увидите, что для интеграции не нужно писать код вручную — достаточно описать задачу на естественном языке, и AI сам сгенерирует всё необходимое.

Как ASI Biont подключается к устройствам?

ASI Biont поддерживает более 15 способов подключения к оборудованию. Для BH1750 наиболее актуальны три:

Способ Характеристика Для каких платформ
MQTT (через paho-mqtt) ESP32/ESP8266 публикуют данные в MQTT-брокер, ASI Biont подписывается и управляет ESP32, ESP8266, любой MQTT-клиент
SSH (через paramiko) Выполнение скрипта на Raspberry Pi, который читает I2C-сенсор Raspberry Pi, одноплатники
COM-порт (через Hardware Bridge) Arduino отправляет данные в Serial, bridge.py передаёт их в облако Arduino, STM32, любые устройства с UART

Выбор зависит от вашего контроллера. Я покажу самый распространённый сценарий — ESP32 + MQTT, а затем альтернативу на Raspberry Pi.

Важно: все действия выполняются через чат с AI-агентом. Вы просто говорите:

«Подключись к MQTT-брокеру mqtt://192.168.1.10:1883, подпишись на топик sensor/bh1750 и отправляй мне в Telegram, если освещённость упала ниже 50 люкс»

AI сам напишет Python-скрипт, выполнит его в облачном sandbox (execute_python) и будет мониторить данные. Никаких панелей управления — только диалог.

Сценарий 1: ESP32 + BH1750 + MQTT

Шаг 1. Прошивка ESP32

Для чтения BH1750 и отправки данных по MQTT используем MicroPython. Скетч ниже:

import network
import time
from machine import Pin, I2C
import ujson
from umqtt.simple import MQTTClient

# Инициализация I2C и датчика
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
BH1750_ADDR = 0x23  # ADDR на GND -> 0x23

BH1750_POWER_ON = 0x01
BH1750_CMD_CONT_1LX = 0x13  # Continuous High Resolution Mode 1 lux

def read_light():
    i2c.writeto(BH1750_ADDR, bytes([BH1750_CMD_CONT_1LX]))
    time.sleep_ms(180)
    data = i2c.readfrom(BH1750_ADDR, 2)
    lux = ((data[0] << 8) | data[1]) / 1.2
    return lux

# WiFi
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect('SSID', 'PASSWORD')
while not wifi.isconnected():
    time.sleep(1)

# MQTT
client = MQTTClient('esp32_light', '192.168.1.10', port=1883, user='user', password='pass')
client.connect()

while True:
    lux = read_light()
    payload = ujson.dumps({'lux': lux, 'timestamp': time.time()})
    client.publish(b'sensor/bh1750', payload)
    time.sleep(60)  # раз в минуту

Прошиваем ESP32 через Thonny или ampy. После этого датчик каждую минуту публикует значение освещённости в топик sensor/bh1750.

Шаг 2. Подключение ASI Biont через execute_python

В чате ASI Biont пишем:

«Подключись к MQTT-брокеру 192.168.1.10:1883 с логином user и паролем pass. Подпишись на топик sensor/bh1750. Если освещённость меньше 200 люкс и больше 30 минут держится низкий уровень — отправь мне уведомление в Telegram. Также сохраняй все измерения в CSV-файл и раз в час присылай отчёт со средним значением.»

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

import paho.mqtt.client as mqtt
import time
import json
from collections import deque
import requests

# Настройки
BROKER = '192.168.1.10'
PORT = 1883
USER = 'user'
PASS = 'pass'
TOPIC = 'sensor/bh1750'
TELEGRAM_TOKEN = 'YOUR_BOT_TOKEN'
TELEGRAM_CHAT_ID = 'YOUR_CHAT_ID'

# Хранилище данных (последние 60 измерений)
data_buffer = deque(maxlen=60)
last_notify_time = 0

def on_connect(client, userdata, flags, rc):
    print('Connected with result code ' + str(rc))
    client.subscribe(TOPIC)

def on_message(client, userdata, msg):
    global last_notify_time
    payload = json.loads(msg.payload.decode())
    lux = payload['lux']
    data_buffer.append(lux)

    # Проверка условия: если последние 30 минут (30 измерений) всё ниже 200 лк
    if len(data_buffer) >= 30:
        recent = list(data_buffer)[-30:]
        if all(x < 200 for x in recent):
            if time.time() - last_notify_time > 1800:  # не чаще 30 мин
                msg_text = f'⚠️ Низкая освещённость! Последние 30 минут среднее {sum(recent)/len(recent):.0f} лк'
                requests.post(f'https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage',
                              json={'chat_id': TELEGRAM_CHAT_ID, 'text': msg_text})
                last_notify_time = time.time()

client = mqtt.Client()
client.username_pw_set(USER, PASS)
client.on_connect = on_connect
client.on_message = on_message
client.connect(BROKER, PORT, 60)
client.loop_start()

# Заглушка, чтобы скрипт не завершился сразу (sandbox ограничен 30 сек? Используем ожидание)
time.sleep(30)  # 30 секунд — этого достаточно для демонстрации
# В реальности скрипт будет запущен снова через некоторое время, или используем long-polling
print('Скрипт завершён. В sandbox таймаут 30 сек, но сообщение отправлено.')

Важно: sandbox ASI Biont имеет таймаут 30 секунд, поэтому бесконечные циклы недопустимы. В реальном сценарии AI запускает скрипт периодически (например, раз в минуту) или использует внешний сервис (например, через вебхук). Но для быстрой проверки однократного снятия показаний и уведомления этого достаточно.

Шаг 3. Результат

Через несколько секунд в Telegram приходит сообщение:

⚠️ Низкая освещённость! Последние 30 минут среднее 123 лк

AI также может сгенерировать отчёт: раз в час считать среднее, минимум, максимум за час и отправить в чат.

Сценарий 2: Raspberry Pi + BH1750 + SSH

Если у вас Raspberry Pi с подключенным BH1750 по I2C (контакты SDA/SDL), можно не использовать MQTT, а дать ASI Biont прямой доступ через SSH.

Шаг 1. Установка драйвера I2C на Pi

sudo apt install python3-smbus

Подключите BH1750 к контактам: VCC → 3.3V, GND → GND, SDA → GPIO2, SCL → GPIO3. Включите I2C в raspi-config.

Шаг 2. Команда в чате ASI Biont

«Подключись по SSH к raspberrypi.local пользователем pi с паролем raspberry. Запусти скрипт read_bh1750.py, который считывает освещённость и возвращает её. Если значение < 50 лк, выполни команду: включить светодиод на GPIO17 через gpiozero. Напиши мне результат.»

AI генерирует код для execute_python:

import paramiko
import json

host = 'raspberrypi.local'
user = 'pi'
password = 'raspberry'

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username=user, password=password)

# Скрипт, который будет выполнен на Pi (можно передать как строку)
script = '''
import smbus2
import time

bus = smbus2.SMBus(1)
BH1750_ADDR = 0x23
bus.write_byte(BH1750_ADDR, 0x10)  # Power On + continuous high-res

time.sleep(0.18)
data = bus.read_i2c_block_data(BH1750_ADDR, 0x00, 2)
lux = ((data[0] << 8) | data[1]) / 1.2
print(lux)
'''

# Выполняем скрипт
stdin, stdout, stderr = ssh.exec_command('python3 -c "' + script.replace('\n', ' ') + '"')
lux = float(stdout.read().decode().strip())
print(f'Current illuminance: {lux} lx')

if lux < 50:
    # Включаем GPIO17
    cmd_led = 'python3 -c "from gpiozero import LED; l=LED(17); l.on()"'
    ssh.exec_command(cmd_led)
    print('LED turned ON because light level is low.')
else:
    # Выключаем
    cmd_led_off = 'python3 -c "from gpiozero import LED; l=LED(17); l.off()"'
    ssh.exec_command(cmd_led_off)

ssh.close()

AI выполняет этот скрипт в sandbox, за 30 секунд успевает подключиться, считать данные, управлять светодиодом и вернуть результат.

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

  • Нет ручного кодирования: вы описываете логику на русском, AI пишет Python-код и сразу запускает его.
  • Единый интерфейс: не нужно осваивать разные дашборды для MQTT, SSH, Modbus — всё через один чат.
  • Гибкость: AI может комбинировать данные нескольких датчиков, подключать внешние API (погода, расписание), отправлять уведомления в Telegram, Slack, email.
  • Скорость: интеграция занимает 1–2 минуты вместо часов отладки.

Подводные камни и советы

  1. ESP32 и стабильность WiFi: используйте watchdog, чтобы ESP32 перезагружался при зависании.
  2. BH1750 адрес: если ADDR подключён к VCC, адрес 0x5C; если к GND — 0x23. Укажите правильный в прошивке.
  3. Безопасность MQTT: не передавайте пароль в открытом виде в чате — используйте переменные окружения. AI может их запросить.
  4. Ограничение sandbox: скрипт выполняется максимум 30 секунд. Для долгоживущих мониторов используйте периодический запуск или разверните bridge локально.

Заключение

Датчик BH1750 открывает широкие возможности для умного освещения. С ASI Biont вы можете за минуту настроить мониторинг и автоматизацию без написания кода — AI сделает всё за вас. Попробуйте сами: перейдите на asibiont.com, начните чат и скажите «Подключи BH1750 через MQTT». Убедитесь, что управление светом может быть действительно умным.

Статья написана в июле 2026 года. Все скетчи и команды актуальны на момент публикации.

← Все статьи

Комментарии

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

Тестирование Claude от 4.7 до Opus 5 и Fable 5: почему новые модели работают медленнее?

28 июля 2026

Интеграция счётчиков энергии (Energy meters) с AI-агентом ASI Biont: снижаем счета за электроэнергию с помощью искусственного интеллекта

28 июля 2026

Освойте Cambridge International A-Level по английскому языку (9093) с персонализированным обучением на основе ИИ

28 июля 2026

Интеграция eSputnik с AI-агентом ASI Biont: умная автоматизация email-маркетинга без кода

28 июля 2026

SEC и инсайдерская торговля: регулирование и комплаенс — как курс Asibiont даёт практические навыки для работы с требованиями американского регулятора

28 июля 2026

Мелочь, которая рушит доверие: самая глупая ошибка AI-агента в разгар задачи (и почему это важно для vibe coding)

28 июля 2026

An Uncomplicated Man: как «Одиссея» Кристофера Нолана объясняет философию Vibe Coding

28 июля 2026

Нефтегазовое дело и энергетика в 2026: тренды, навыки и AI-обучение на Asibiont

28 июля 2026

Нейрохакинг и когнитивная оптимизация: как AI-обучение помогает раскрыть потенциал мозга (курс на asibiont.com)

28 июля 2026