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

← Одноплатные компьютеры | Содержание | Далее: Интеграция с ESPHome →

Продвинутое использование

Нестандартные способы подключения и управления DimmerLink.




Адаптеры USB-UART

Управление DimmerLink с компьютера через адаптер USB-UART.


Чип Драйвер Примечания
CH340/CH341 Часто встроен в ОС Дешёвый, распространённый
CP2102/CP2104 Silicon Labs Стабильный
FT232RL FTDI Профессиональный
PL2303 Prolific Устаревший, проблемы с драйверами


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

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

ℹ️ Примечание: DimmerLink поддерживает логические уровни 1.8V, 3.3V и 5V — используйте то напряжение, которое выдаёт ваш адаптер.


Драйверы

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


Управление с ПК (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()


Терминальные программы

Для отладки и тестирования:

Программа Платформа Режим HEX
RealTerm Windows Да
SSCOM Windows Да
CoolTerm Windows/Mac/Linux Да
PuTTY Windows/Linux Нет (только текст)
picocom Linux Нет

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)

Беспроводное управление через ESP-01 или ESP8266.


Схема

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


Подключение ESP-01

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


Прошивка 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();
}


Использование

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)

Управление со смартфона или компьютера через Bluetooth.


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

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

📝 Примечание: HC-05 по умолчанию работает на скорости 9600 бод. Переключите на 115200 через AT-команды.


Настройка HC-05 (AT-команды)

  1. Подключите HC-05 в режиме AT (удерживайте кнопку при включении питания)
  2. Откройте терминал на скорости 38400 бод
  3. Enter:
    AT+UART=115200,0,0 AT+NAME=Dimmer AT+PSWD=1234


Приложение для Android

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

Отправляйте HEX-команды напрямую.




Модули LoRa

Управление на большие расстояния через LoRa (до нескольких километров).


Схема

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

⚠️ Настройка E32: Модули E32 требуют предварительной конфигурации через RF Setting — скорость, канал, адрес. По умолчанию: 9600 бод — необходимо изменить на 115200 для DimmerLink, либо использовать MCU в качестве моста для преобразования скорости.


  • E32 (SX1278) — простой интерфейс UART
  • Ra-02 — требует библиотеку SPI
  • RFM95 — для LoRaWAN


Подключение E32-TTL-100

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


Особенности

  • Задержка: 50–200 мс в зависимости от настроек
  • Пропускная способность: ограничена (1–50 кбит/с)
  • Надёжность: используйте подтверждение и повторные отправки


Пример (передатчик)

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



Модули GSM/GPRS

Удалённое управление через SMS или интернет.


  • SIM800L — компактный, 2G
  • SIM900 — классический
  • SIM7600 — 4G LTE


Схема

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


Подключение SIM800L

SIM800L Arduino/ESP
VCC 4V (отдельное питание!)
GND GND
TXD RX
RXD TX

📝 Примечание: SIM800L требует стабильное питание 3.7–4.2V с током до 2A во время передачи.


Управление через 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);
            }
        }
    }
}



Особенности беспроводной связи


Задержки

Тип соединения Типичная задержка
USB-UART < 1 мс
WiFi (локальная сеть) 5–50 мс
Bluetooth 10–50 мс
LoRa 50–500 мс
GSM (SMS) 1–10 сек
GSM (GPRS) 100–500 мс


Буферизация

При беспроводной связи данные могут буферизоваться. Рекомендации:

  1. Send commands as a whole — don't split into individual bytes
  2. Добавляйте задержку между командами (50–100 мс)
  3. Ожидайте подтверждение перед отправкой следующей команды


Надёжность

Для критичных приложений:

  1. Проверяйте ответ — команда выполнена успешно только при получении 0x00
  2. Повторяйте при ошибке — 2–3 попытки с задержкой
  3. Тайм-аут — если нет ответа в течение 1–2 секунд, повторите отправку
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



Ограничения I2C при работе через мосты

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

Решение: Для беспроводного управления используйте UART.

Если у вас подключение по I2C и нужен беспроводной доступ — добавьте MCU (Arduino/ESP) в качестве моста:

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



What's Next?

← Одноплатные компьютеры | Содержание | Далее: Интеграция с ESPHome →