Ir al contenido

← Comunicación I2C | Contenido | Siguiente: Uso avanzado →

Computadoras de placa única

Conexión de DimmerLink a Raspberry Pi, Orange Pi, Banana Pi y otros SBC.




Descripción general

Todas las computadoras de placa única operan con lógica de 3.3V — conexión directa a DimmerLink sin conversores de nivel.

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



Raspberry Pi


Cableado

Raspberry Pi DimmerLink Función
Pin 1 (3.3V) VCC Alimentación
Pin 6 (GND) GND Tierra
Pin 3 (GPIO2) SDA I2C Data
Pin 5 (GPIO3) SCL I2C Clock

Para UART:

Raspberry Pi DimmerLink Función
Pin 1 (3.3V) VCC Alimentación
Pin 6 (GND) GND Tierra
Pin 8 (GPIO14) RX UART TX → RX
Pin 10 (GPIO15) TX UART RX ← TX


Habilitación de interfaces

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

Reiniciar después de los cambios:

bash
sudo reboot


Verificación de I2C

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

# Scan I2C bus for devices
i2cdetect -y 1

Resultado esperado — dirección 50 en la tabla:

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


Control mediante 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()


Script de inicio automático (systemd)

Crear el archivo /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

⚠️ Importante: Reemplace /home/pi/dimmer_control.py con la ruta a su script.

Activación:

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



Orange Pi


Características

  • La mayoría de los modelos son compatibles con GPIO de Raspberry Pi
  • OS: Armbian (recomendado)
  • Las utilidades de I2C/UART son similares a las de Raspberry Pi


Habilitación de I2C

En Armbian:

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

O mediante overlays en /boot/armbianEnv.txt:

python
overlays=i2c0

📘 Orange Pi generalmente ejecuta Armbian. Instrucciones de instalación de Armbian


Cableado (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


Verificación

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


Código Python

El código es similar al de Raspberry Pi, pero el número de bus puede diferir:

python
from smbus2 import SMBus

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



Banana Pi


Características

  • Diagrama de pines GPIO compatible con Raspberry Pi
  • OS: Armbian, BPI-WiringPi


Cableado (Banana Pi M2)

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


Habilitación de I2C

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



Recomendaciones generales


Resistencias pull-up para I2C

Placa Pull-up integrado Recomendación
Raspberry Pi 1.8kΩ Generalmente suficiente
Orange Pi Varía según el modelo Verificar, agregar 4.7kΩ
Banana Pi Varía según el modelo Verificar, agregar 4.7kΩ
Pico Ninguno Agregar 4.7kΩ


Longitud de cables

  • I2C: hasta 30 cm sin problemas
  • UART: hasta 1–2 metros


Alimentación

  • DimmerLink consume una corriente mínima
  • La alimentación desde el pin de 3.3V del SBC generalmente es suficiente
  • Si el funcionamiento es inestable, utilice una fuente de alimentación independiente


Solución de problemas

  1. I2C no funciona:
  2. Verificar i2cdetect — ¿es visible la dirección 0x50?
  3. Verificar las resistencias pull-up
  4. Asegurarse de que I2C esté habilitado en el sistema

  5. UART no funciona:

  6. Verificar TX↔RX (cableado cruzado)
  7. Asegurarse de que UART esté habilitado
  8. Verificar los permisos de acceso a /dev/serial0

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




What's Next?

← Comunicación I2C | Contenido | Siguiente: Uso avanzado →