← Одноплатные компьютеры | Содержание | Далее: Интеграция с 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)
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.
Схема
[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)
#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();
}
Использование
# 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-команды)
- Подключите HC-05 в режиме AT (удерживайте кнопку при включении питания)
- Откройте терминал на скорости 38400 бод
- 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 (до нескольких километров).
Схема
[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 кбит/с)
- Надёжность: используйте подтверждение и повторные отправки
Пример (передатчик)
// 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
Схема
[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
#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 мс |
Буферизация
При беспроводной связи данные могут буферизоваться. Рекомендации:
- Send commands as a whole — don't split into individual bytes
- Добавляйте задержку между командами (50–100 мс)
- Ожидайте подтверждение перед отправкой следующей команды
Надёжность
Для критичных приложений:
- Проверяйте ответ — команда выполнена успешно только при получении
0x00 - Повторяйте при ошибке — 2–3 попытки с задержкой
- Тайм-аут — если нет ответа в течение 1–2 секунд, повторите отправку
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) в качестве моста:
[WiFi/BT] → [ESP32 (UART)] → [DimmerLink (I2C)]
What's Next?
- FAQ — устранение неполадок
- Команды UART — полный список команд
- Примеры кода — готовые скрипты
← Одноплатные компьютеры | Содержание | Далее: Интеграция с ESPHome →