Se rendre au contenu

← Ordinateurs monocarte | Sommaire | Suivant : Intégration ESPHome →

Utilisation avancée

Méthodes non standard pour connecter et contrôler DimmerLink.




Adaptateurs USB-UART

Contrôler DimmerLink depuis un ordinateur via un adaptateur USB-UART.


Puce Pilote Remarques
CH340/CH341 Souvent intégré à l'OS Bon marché, courant
CP2102/CP2104 Silicon Labs Stable
FT232RL FTDI Professionnel
PL2303 Prolific Obsolète, problèmes de pilotes


Câblage

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

ℹ️ Remarque : DimmerLink prend en charge les niveaux logiques 1.8V, 3.3V et 5V — utilisez la tension fournie par votre adaptateur.


Pilotes

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


Contrôle depuis le 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()


Programmes de terminal

Pour le débogage et les tests :

Programme Plateforme Mode HEX
RealTerm Windows Oui
SSCOM Windows Oui
CoolTerm Windows/Mac/Linux Oui
PuTTY Windows/Linux Non (texte uniquement)
picocom Linux Non

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)

Contrôle sans fil via ESP-01 ou ESP8266.


Schéma

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


Câblage 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();
}


Utilisation

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)

Contrôle depuis un smartphone ou un ordinateur via Bluetooth.


Câblage

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

📝 Remarque : HC-05 est réglé par défaut à 9600 bauds. Reconfigurez à 115200 via les commandes AT.


Configuration du HC-05 (commandes AT)

  1. Connectez le HC-05 en mode AT (maintenez le bouton enfoncé lors de la mise sous tension)
  2. Ouvrez un terminal à 38400 bauds
  3. Enter:
    AT+UART=115200,0,0 AT+NAME=Dimmer AT+PSWD=1234


Application Android

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

Envoyez les commandes HEX directement.




Modules LoRa

Contrôle longue portée via LoRa (jusqu'à plusieurs kilomètres).


Schéma

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

⚠️ Configuration E32 : Les modules E32 nécessitent une pré-configuration via RF Setting — vitesse, canal, adresse. Par défaut : 9600 bauds — à modifier en 115200 pour DimmerLink, ou utilisez un MCU comme pont pour la conversion de vitesse.


  • E32 (SX1278) — interface UART simple
  • Ra-02 — nécessite une bibliothèque SPI
  • RFM95 — pour LoRaWAN


Câblage E32-TTL-100

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


Considérations

  • Latence : 50–200 ms selon les réglages
  • Bande passante : limitée (1–50 kbps)
  • Fiabilité : utilisez l'acquittement et les tentatives de renvoi


Exemple (émetteur)

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);
}



Modules GSM/GPRS

Contrôle à distance par SMS ou Internet.


  • SIM800L — compact, 2G
  • SIM900 — classique
  • SIM7600 — 4G LTE


Schéma

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


Câblage SIM800L

SIM800L Arduino/ESP
VCC 4V (alimentation séparée !)
GND GND
TXD RX
RXD TX

📝 Remarque : Le SIM800L nécessite une alimentation stable de 3.7–4.2V avec un courant jusqu'à 2A pendant la transmission.


Contrôle par 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);
            }
        }
    }
}



Considérations sur la communication sans fil


Latence

Type de connexion Latence typique
USB-UART < 1 ms
WiFi (réseau local) 5–50 ms
Bluetooth 10–50 ms
LoRa 50–500 ms
GSM (SMS) 1–10 sec
GSM (GPRS) 100–500 ms


Mise en mémoire tampon

Lors d'une communication sans fil, les données peuvent être mises en mémoire tampon. Recommandations :

  1. Send commands as a whole — don't split into individual bytes
  2. Ajoutez un délai entre les commandes (50–100 ms)
  3. Attendez l'acquittement avant d'envoyer la commande suivante


Fiabilité

Pour les applications critiques :

  1. Vérifiez la réponse — la commande a réussi uniquement si 0x00 est reçu
  2. Réessayez en cas d'erreur — 2–3 tentatives avec délai
  3. Délai d'attente — si aucune réponse dans les 1–2 secondes, réessayez
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



Limitations de l'I2C à travers les ponts

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

Solution : Pour le contrôle sans fil, utilisez UART.

Si vous disposez d'une connexion I2C et avez besoin d'un accès sans fil — ajoutez un MCU (Arduino/ESP) comme pont :

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



What's Next?

← Ordinateurs monocarte | Sommaire | Suivant : Intégration ESPHome →