Python Урок 3. Отправка команды на установку яркости по ID устройства

 

В уроке 2 мы научились считывать ответ от устройства. В этом уроке мы отправим команду на установку яркости по адресу устройства, не учитывая канал CH. Для этого необходимо:

 

1. Узнать идентификатор устройства SUF-1-300.

2. Включить режим диммирования устройству SUF-1-300.

3. Подсчитать контрольную сумму (CRC) для отправляемого пакета.

4. Отправить устройству пакет с командой с заданным значением яркости по указанному адресу устройства

 

1. Из полученного ответа можно узнать идентификатор устройства (ID), который состоит из байтов ID0, ID1, ID2, ID3. В нашем случае идентификатор (в десятичном виде) - 0 1 56 170.

Отправим команду на установку яркости непосредственно по адресу устройства, не учитывая канал CH, к которому оно было привязано. Для этого в пакете из 17 байтов следует изменить значение CTR с 0 на 9, что означает передачу команды по указанному адресу.

 

2. Так как нам необходимо отправить команду на установку яркости с определенным ее значением, то у устройства SUF-1-300 должен быть включен режим диммирования. Чтобы включить режим диммирования, следует отправить устройству пакет с настройкой (аналогично отправке команды из первого урока), который представлен ниже. Обратите внимание, что данный пакет настройки уже предназначен определенному адресу устройства.


(ST= 171; MODE = 2; CTR = 9; RES = 0; CH = 0; CMD = 129; FMT = 16; D0= 2; D1 = 0; D2 = 2; D3 = 0; ID0 = 0; ID1 = 1; ID2 = 56; ID3 = 170; CRC = 46; SP = 172)

Байт:STMODECTRRESCHCMDFMTD0D1D2D3ID0ID1ID2ID3CRCSP
Передача (17 байт):1712900129162020015617046172

CMD = 129  это команда Write_State, с помощью которой задаются настройки устройства 

FMT = 16,  D0 = 2, D2 = 2 формат и данные для включения режима диммирования

 

Нагрузка плавно загорится и погаснет, если настройка была успешно принята устройством SUF-1-300.

 

3. Подсчет контрольной суммы (CRC) был рассмотрен в уроке 1. Чтобы автоматизировать этот процесс, необходимо сложить значения байтов с 0-го по 14-ый включительно, затем вычислить остаток от деления суммы на 256.

 

4. Рассмотрим команду на установку яркости, см. таблицу ниже. CMD = 6, в D0 указываем конкретное значение яркости, которое может быть от 0 до 255.


(ST= 171; MODE = 2; CTR = 9; RES = 0; CH = 0; CMD = 6; FMT = 0; D0= 255; D1 = 0; D2 = 0; D3 = 0; ID0 = 0; ID1 = 1; ID2 = 56; ID3 = 170; CRC = 158; SP = 172)

Байт:STMODECTRRESCHCMDFMTD0D1D2D3ID0ID1ID2ID3CRCSP
Передача (17 байт):1712900602550000156170158172

В предложенном коде программы необходимо ввести идентификатор устройства (разделяя байты пробелами) и значение яркости, при условии, что режим диммирования уже включен. 

 

Пример кода Python в подсказке.

# Подключение модуля для работы с СОМ портом

import serial

# Задание параметров порта
port = serial.Serial(port='COM8'baudrate=9600stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS)

print("Введите ID, отделяя байты пробелами:")
id = [
int(i) for in input().split()]
(4.) Ввод значения яркости для отправляемой команды

 

 

print("Введите яркость 0 до 255:")
bright = int(input())

# (2.) Пакет байтов для отправки.
# Значение 8 - для отправки команды по указанному идентификатору.
# Значение 6 - команда яркости Set_Brightness.

 

 

# Остальные байты, кроме стопового, заполним нулями.
package = bytearray ([171290060000000000172])
# (1.) Подстановка значения яркости и ID , введённых пользователем
package[7] = bright
package[11] = id[0]
package[12] = id[1]
package[13] = id[2]
package[14] = id[3]

# (3.) Подсчёт контрольной суммы для 15го байта в массиве (младший байт от суммы байтов с 0-го по 14-ый включительно)
byteSumm = 0
for i in range(015):
    
byteSumm += package[i]
crc = byteSumm % 256
package[15] = crc
# Запись пакета с командой, яркостью и идентификатором в порт
command = port.write(package)

Вывод консоли ниже.