← Связь по 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 |
Включение интерфейсов
sudo raspi-config
- I2C: Interface Options → I2C → Enable
- UART: Interface Options → Serial Port → Enable
Перезагрузка после изменений:
sudo reboot
Проверка I2C
# Install utilities (if not installed)
sudo apt install i2c-tools
# Scan I2C bus for devices
i2cdetect -y 1
Ожидаемый результат — адрес 50 в таблице:
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:
# 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:
# 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)
# Install library
pip install smbus2
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)
# Install library
pip install pyserial
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:
[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на путь к вашему скрипту.
Активация:
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:
sudo armbian-config
# System → Hardware → enable i2c
Или через overlays в /boot/armbianEnv.txt:
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 |
Проверка
# Scan for devices
i2cdetect -y 0 # May be i2c-0 instead of i2c-1
Код на Python
Код аналогичен Raspberry Pi, но номер шины может отличаться:
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
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 одноплатного компьютера обычно достаточно
- При нестабильной работе используйте отдельный источник питания
Отладка
- I2C не работает:
- Проверьте
i2cdetect— виден ли адрес 0x50 - Проверьте подтягивающие резисторы
-
Убедитесь, что I2C включён в системе
-
UART не работает:
- Проверьте TX↔RX (перекрёстное подключение)
- Убедитесь, что UART включён
-
Проверьте права доступа к
/dev/serial0 -
Permission denied error:
bash sudo usermod -a -G i2c,dialout $USER # Log out and back in after this
What's Next?
- Расширенное использование — USB-UART, беспроводные модули
- FAQ — устранение неполадок
- Примеры кода — готовые скрипты
← Связь по I2C | Содержание | Далее: Расширенное использование →