Перейти к содержимому

← Связь по I2C | Содержание | Далее: Расширенное использование →

Одноплатные компьютеры

Подключение DimmerLink к Raspberry Pi, Orange Pi, Banana Pi и другим одноплатным компьютерам.




Обзор

Все одноплатные компьютеры работают на логических уровнях 3.3V — прямое подключение к DimmerLink без преобразователей уровней.

SBC I2C UART ОС
Raspberry Pi 3/4/5 Raspberry Pi OS
Orange Pi Armbian
Banana Pi Armbian



Raspberry Pi


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

Raspberry Pi DimmerLink Назначение
Pin 1 (3.3V) VCC Питание
Pin 6 (GND) GND Земля
Pin 3 (GPIO2) SDA I2C Data
Pin 5 (GPIO3) SCL I2C Clock

Для UART:

Raspberry Pi DimmerLink Назначение
Pin 1 (3.3V) VCC Питание
Pin 6 (GND) GND Земля
Pin 8 (GPIO14) RX UART TX → RX
Pin 10 (GPIO15) TX UART RX ← TX


Включение интерфейсов

bash
sudo raspi-config
  • I2C: Interface Options → I2C → Enable
  • UART: Interface Options → Serial Port → Enable

Перезагрузка после изменений:

bash
sudo reboot


Проверка I2C

bash
# Install utilities (if not installed)
sudo apt install i2c-tools

# Scan I2C bus for devices
i2cdetect -y 1

Ожидаемый результат — адрес 50 в таблице:

python
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --


Управление через CLI

I2C:

bash
# Set brightness to 50%
i2cset -y 1 0x50 0x10 0x32

# 💡 Tip: 0x32 in HEX = 50 in decimal. You can use decimal numbers: i2cset -y 1 0x50 0x10 50

# Read current brightness
i2cget -y 1 0x50 0x10

# Read mains frequency
i2cget -y 1 0x50 0x20

UART:

bash
# Configure port
stty -F /dev/serial0 115200 cs8 -cstopb -parenb

# Set brightness to 50% (requires xxd or printf)
printf '\x02\x53\x00\x32' > /dev/serial0

# Or using a Python one-liner
python3 -c "import serial; s=serial.Serial('/dev/serial0', 115200); s.write(bytes([0x02,0x53,0x00,50])); print(s.read(1).hex())"


Python + I2C (smbus2)

bash
# Install library
pip install smbus2
python
from smbus2 import SMBus
import time

DIMMER_ADDR = 0x50
REG_LEVEL = 0x10
REG_CURVE = 0x11
REG_FREQ = 0x20

bus = SMBus(1)

# Read mains frequency
freq = bus.read_byte_data(DIMMER_ADDR, REG_FREQ)
print(f"Mains frequency: {freq} Hz")

# Set brightness to 50%
bus.write_byte_data(DIMMER_ADDR, REG_LEVEL, 50)
print("Brightness set: 50%")

# Read current brightness
level = bus.read_byte_data(DIMMER_ADDR, REG_LEVEL)
print(f"Current brightness: {level}%")

bus.close()


Python + UART (pyserial)

bash
# Install library
pip install pyserial
python
import serial
import time

ser = serial.Serial('/dev/serial0', 115200, timeout=0.1)

# Set brightness to 50%
ser.write(bytes([0x02, 0x53, 0x00, 50]))
resp = ser.read(1)
if resp and resp[0] == 0x00:
    print("Brightness set: 50%")

# Get mains frequency
ser.write(bytes([0x02, 0x52]))
resp = ser.read(2)
if len(resp) == 2 and resp[0] == 0x00:
    print(f"Mains frequency: {resp[1]} Hz")

ser.close()


Автозапуск скрипта (systemd)

Создайте файл /etc/systemd/system/dimmer.service:

ini
[Unit]
Description=Dimmer Controller Service
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/pi/dimmer_control.py
Restart=on-failure
User=pi

[Install]
WantedBy=multi-user.target

⚠️ Важно: Замените /home/pi/dimmer_control.py на путь к вашему скрипту.

Активация:

bash
sudo systemctl daemon-reload
sudo systemctl enable dimmer.service
sudo systemctl start dimmer.service



Orange Pi


Особенности

  • Большинство моделей совместимы по GPIO с Raspberry Pi
  • ОС: Armbian (рекомендуется)
  • Утилиты для I2C/UART аналогичны Raspberry Pi


Включение I2C

В Armbian:

bash
sudo armbian-config
# System → Hardware → enable i2c

Или через overlays в /boot/armbianEnv.txt:

python
overlays=i2c0

📘 Orange Pi обычно работает под управлением Armbian. Инструкция по установке Armbian


Схема подключения (Orange Pi Zero)

Orange Pi Zero DimmerLink
Pin 1 (3.3V) VCC
Pin 6 (GND) GND
Pin 3 (PA12/SDA) SDA
Pin 5 (PA11/SCL) SCL


Проверка

bash
# Scan for devices
i2cdetect -y 0   # May be i2c-0 instead of i2c-1


Код на Python

Код аналогичен Raspberry Pi, но номер шины может отличаться:

python
from smbus2 import SMBus

# Orange Pi may use bus 0
bus = SMBus(0)  # or SMBus(1) — depends on model



Banana Pi


Особенности

  • Распиновка GPIO совместима с Raspberry Pi
  • ОС: Armbian, BPI-WiringPi


Схема подключения (Banana Pi M2)

Banana Pi M2 DimmerLink
Pin 1 (3.3V) VCC
Pin 6 (GND) GND
Pin 3 (GPIO2) SDA
Pin 5 (GPIO3) SCL


Включение I2C

bash
sudo armbian-config
# System → Hardware → enable i2c



Общие рекомендации


Подтягивающие резисторы для I2C

Плата Встроенный подтягивающий резистор Рекомендация
Raspberry Pi 1.8kΩ Обычно достаточно
Orange Pi Зависит от модели Проверьте, добавьте 4.7kΩ
Banana Pi Зависит от модели Проверьте, добавьте 4.7kΩ
Pico Нет Добавьте 4.7kΩ


Длина проводов

  • I2C: до 30 см без проблем
  • UART: до 1–2 метров


Питание

  • DimmerLink потребляет минимальный ток
  • Питания от вывода 3.3V одноплатного компьютера обычно достаточно
  • При нестабильной работе используйте отдельный источник питания


Отладка

  1. I2C не работает:
  2. Проверьте i2cdetect — виден ли адрес 0x50
  3. Проверьте подтягивающие резисторы
  4. Убедитесь, что I2C включён в системе

  5. UART не работает:

  6. Проверьте TX↔RX (перекрёстное подключение)
  7. Убедитесь, что UART включён
  8. Проверьте права доступа к /dev/serial0

  9. Permission denied error:
    bash sudo usermod -a -G i2c,dialout $USER # Log out and back in after this




What's Next?

← Связь по I2C | Содержание | Далее: Расширенное использование →