Ir al contenido

← Computadoras de placa única | Contenido | Siguiente: Integración con ESPHome →

Uso avanzado

Formas no estándar de conectar y controlar DimmerLink.




Adaptadores USB-UART

Controlar DimmerLink desde una computadora mediante un adaptador USB-UART.


Chip Controlador Notas
CH340/CH341 A menudo integrado en el SO Económico, común
CP2102/CP2104 Silicon Labs Estable
FT232RL FTDI Profesional
PL2303 Prolific Obsoleto, problemas con controladores


Cableado

USB-UART DimmerLink
VCC (3.3V o 5V) VCC
GND GND
TXD RX
RXD TX

ℹ️ Nota: DimmerLink soporta niveles lógicos de 1.8V, 3.3V y 5V — use el voltaje que proporcione su adaptador.


Controladores

Windows:
- CH340: usually installs automatically, or download from manufacturer's website
- CP2102: Silicon Labs VCP Driver
- FTDI: FTDI VCP Driver

Linux:
- Drivers are usually already in the kernel
- Device will appear as /dev/ttyUSB0 or /dev/ttyACM0

macOS:
- CH340: may require driver from manufacturer
- CP2102/FTDI: built into the system


Control desde el PC (Python)

python
import serial
import time

# Windows: 'COM3', Linux: '/dev/ttyUSB0', macOS: '/dev/tty.usbserial-*'
ser = serial.Serial('COM3', 115200, timeout=0.1)

def set_level(level):
    ser.write(bytes([0x02, 0x53, 0x00, level]))
    resp = ser.read(1)
    return len(resp) > 0 and resp[0] == 0x00

def get_frequency():
    ser.write(bytes([0x02, 0x52]))
    resp = ser.read(2)
    if len(resp) == 2 and resp[0] == 0x00:
        return resp[1]
    return None

# Usage
print(f"Mains frequency: {get_frequency()} Hz")
set_level(50)
print("Brightness: 50%")

ser.close()


Programas de terminal

Para depuración y pruebas:

Programa Plataforma Modo HEX
RealTerm Windows
SSCOM Windows
CoolTerm Windows/Mac/Linux
PuTTY Windows/Linux No (solo texto)
picocom Linux No

Example in RealTerm:
1. Port → select your COM port
2. Baud: 115200
3. Send → "Send Numbers" tab
4. Enter: 02 53 00 32 (HEX)
5. Click "Send Numbers"




WiFi-UART (ESP-01)

Control inalámbrico mediante ESP-01 o ESP8266.


Diagrama

python
[Computer/Phone] ←WiFi→ [ESP-01] ←UART→ [DimmerLink] → [Dimmer]


Cableado ESP-01

ESP-01 DimmerLink
VCC VCC (3.3V)
GND GND
TX RX
RX TX


Firmware ESP-01 (Arduino IDE)

cpp
#include 
#include 

const char* ssid = "YOUR_WIFI";
const char* password = "YOUR_PASSWORD";

ESP8266WebServer server(80);

void setup() {
    Serial.begin(115200);

    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
    }

    server.on("/set", handleSet);
    server.on("/get", handleGet);
    server.begin();
}

void handleSet() {
    if (server.hasArg("level")) {
        int level = server.arg("level").toInt();
        if (level >= 0 && level <= 100) {
            uint8_t cmd[] = {0x02, 0x53, 0x00, (uint8_t)level};
            Serial.write(cmd, 4);

            delay(10);
            if (Serial.available()) {
                uint8_t resp = Serial.read();
                server.send(200, "text/plain", resp == 0x00 ? "OK" : "ERROR");
            } else {
                server.send(500, "text/plain", "NO_RESPONSE");
            }
        } else {
            server.send(400, "text/plain", "INVALID_LEVEL");
        }
    } else {
        server.send(400, "text/plain", "MISSING_LEVEL");
    }
}

void handleGet() {
    uint8_t cmd[] = {0x02, 0x47, 0x00};
    Serial.write(cmd, 3);

    delay(10);
    if (Serial.available() >= 2) {
        uint8_t status = Serial.read();
        uint8_t level = Serial.read();  // Already in percent 0-100!
        if (status == 0x00) {
            server.send(200, "text/plain", String(level));
        } else {
            server.send(500, "text/plain", "ERROR");
        }
    } else {
        server.send(500, "text/plain", "NO_RESPONSE");
    }
}

void loop() {
    server.handleClient();
}


Uso

bash
# Set brightness to 50%
curl "http://192.168.1.100/set?level=50"

# Get current brightness
curl "http://192.168.1.100/get"



Bluetooth (HC-05/HC-06)

Control desde un teléfono inteligente o computadora mediante Bluetooth.


Cableado

HC-05/HC-06 DimmerLink
VCC VCC (3.3V o 5V)
GND GND
TXD RX
RXD TX

📝 Nota: HC-05 viene configurado por defecto a 9600 baudios. Reconfigure a 115200 mediante comandos AT.


Configuración del HC-05 (comandos AT)

  1. Conecte el HC-05 en modo AT (mantenga presionado el botón al encender)
  2. Abra un terminal a 38400 baudios
  3. Enter:
    AT+UART=115200,0,0 AT+NAME=Dimmer AT+PSWD=1234


Aplicación Android

Use any Bluetooth Serial app:
- Serial Bluetooth Terminal
- Bluetooth Electronics

Envíe comandos HEX directamente.




Módulos LoRa

Control de largo alcance mediante LoRa (hasta varios kilómetros).


Diagrama

python
[Controller + LoRa TX] ~~~radio~~~ [LoRa RX + DimmerLink]

⚠️ Configuración E32: Los módulos E32 requieren preconfiguración mediante RF Setting — velocidad, canal, dirección. Por defecto: 9600 baudios — debe cambiarse a 115200 para DimmerLink, o use un MCU como puente para la conversión de velocidad.


  • E32 (SX1278) — interfaz UART simple
  • Ra-02 — requiere biblioteca SPI
  • RFM95 — para LoRaWAN


Cableado E32-TTL-100

E32 DimmerLink
VCC VCC (3.3V o 5V)
GND GND
TXD RX
RXD TX


Consideraciones

  • Latencia: 50–200 ms según la configuración
  • Ancho de banda: limitado (1–50 kbps)
  • Fiabilidad: use confirmación y reintentos


Ejemplo (transmisor)

cpp
// Arduino + E32 (transmitter)
void sendCommand(uint8_t* cmd, int len) {
    Serial1.write(cmd, len);  // Send via LoRa
}

void loop() {
    // Set brightness to 50%
    uint8_t cmd[] = {0x02, 0x53, 0x00, 0x32};
    sendCommand(cmd, 4);
    delay(1000);
}



Módulos GSM/GPRS

Control remoto mediante SMS o Internet.


  • SIM800L — compacto, 2G
  • SIM900 — clásico
  • SIM7600 — 4G LTE


Diagrama

python
[Server/Phone] ←GSM→ [SIM800L + MCU] ←UART→ [DimmerLink]


Cableado SIM800L

SIM800L Arduino/ESP
VCC 4V (¡alimentación separada!)
GND GND
TXD RX
RXD TX

📝 Nota: El SIM800L requiere una alimentación estable de 3.7–4.2V con una corriente de hasta 2A durante la transmisión.


Control por SMS

cpp
#include 

SoftwareSerial gsm(7, 8);  // RX, TX for SIM800L
SoftwareSerial dimmer(10, 11);  // RX, TX for DimmerLink

void setup() {
    gsm.begin(9600);
    dimmer.begin(115200);

    // Configure SIM800L for SMS
    gsm.println("AT+CMGF=1");  // Text mode
    delay(100);
    gsm.println("AT+CNMI=2,2,0,0,0");  // SMS notifications
    delay(100);
}

void loop() {
    if (gsm.available()) {
        String message = gsm.readString();

        // Parse SMS "SET 50"
        if (message.indexOf("SET ") >= 0) {
            int idx = message.indexOf("SET ") + 4;
            int level = message.substring(idx).toInt();

            if (level >= 0 && level <= 100) {
                uint8_t cmd[] = {0x02, 0x53, 0x00, (uint8_t)level};
                dimmer.write(cmd, 4);
            }
        }
    }
}



Consideraciones sobre la comunicación inalámbrica


Latencia

Tipo de conexión Latencia típica
USB-UART < 1 ms
WiFi (red local) 5–50 ms
Bluetooth 10–50 ms
LoRa 50–500 ms
GSM (SMS) 1–10 seg
GSM (GPRS) 100–500 ms


Almacenamiento en búfer

En la comunicación inalámbrica, los datos pueden almacenarse en búfer. Recomendaciones:

  1. Send commands as a whole — don't split into individual bytes
  2. Agregue una pausa entre comandos (50–100 ms)
  3. Espere la confirmación antes del siguiente comando


Fiabilidad

Para aplicaciones críticas:

  1. Verifique la respuesta — el comando fue exitoso solo al recibir 0x00
  2. Reintente en caso de error — 2–3 intentos con pausa
  3. Tiempo de espera — si no hay respuesta en 1–2 segundos, reintente
python
def reliable_set_level(ser, level, retries=3):
    for attempt in range(retries):
        ser.write(bytes([0x02, 0x53, 0x00, level]))
        ser.flush()

        resp = ser.read(1)
        if resp and resp[0] == 0x00:
            return True

        time.sleep(0.1)

    return False



Limitaciones de I2C a través de puentes

I2C is not suitable for wireless communication due to:
- Strict timing requirements (clock stretching)
- Lack of buffering in the protocol
- Need for bidirectional synchronous communication

Solución: Para el control inalámbrico, use UART.

Si tiene una conexión I2C y necesita acceso inalámbrico — agregue un MCU (Arduino/ESP) como puente:

python
[WiFi/BT] → [ESP32 (UART)] → [DimmerLink (I2C)]



What's Next?

← Computadoras de placa única | Contenido | Siguiente: Integración con ESPHome →