Подключать МТ1132 мы будем не к Ардуино, а к Raspberry Pi, с установленным на ней OpenHab.
Мы можем подключить модуль и к Ардуино, использовать пример с сайта, и поуправлять яркостью чего-нибудь. Но кто мне ответит на вопрос: для чего это можно применить?
Ранее мы к Малине ничего не подключали, сохраняя верность тому, что умный дом — это сообщество умных элементов, а не один мозг и сотня слуг. И продолжаю считать такую мысль верной.
Однако для управления освещением можно сделать исключение, и вот почему: каждый силовой блок nooLite просто обязан управляться собственным пультом. Использовать модуль есть смысл лишь тогда, когда требуется автоматическая отработка сценариев реакции дома на какие-либо события.
Я знаю таких событий три:
- я пришел домой (частный случай — приехал на дачу);
- я перемещаюсь ночью по дому;
- я ушел из дома.
Отдельное событие — включить что-то по расписанию. Но что? Подсветку на Новый Год ровно в 12 ночи. А что еще? Если мы говорим об управлении отоплением, то здесь часто бывают необходимы режимы по расписанию: снижать температуру в ночное время, во время отсутствия в рабочие дни, но nooLite пока «не заточен» под такие решения, потому что здесь идет комбинация управления по температуре и по времени.
Хорошо, начнем с электрического соединения. Малина и nooLite MT1132. Они дружат так:
К этому моменту у нас уже установлены:
на Малине: Raspbian, OpenHab, Mosquitto (или установка как описано здесь) и Habmin ( или установка как описано здесь).
на компьютере: WinSCP и PuTTy.
Для ардуинщика с определенным опытом две предыдущие строки выглядят кошмаром. Тем не менее, выбор делать придется. Или вы, для реализации усложняющихся проектов, начинаете учить ассемблер, чтобы ужимать и ускорять код, или вы берете платформу, не связанную с ограничением по памяти и более быструю.
Часть из вас придет к Малине и, пользуясь тучей инструкций в Интернете, попотев пару вечеров или недель, установит то, что указано выше. К тем инструкциям, добавлю и свою. Полагаю, ее следует изучить перед движением в сторону nooLite.
Ок. Если вы еще продолжаете чтение, значит указанное выше для вас не стало проблемой.
Сделаем несколько приготовлений для использования UART. Убедимся, что:
в файле /boot/cmdline.txt отсутствуют строки строки “console=ttyAMA0,115200” и “kgdboc=ttyAMA0,115200”.
в файле /etc/inittab находится символ # перед последней строкой T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100 .
Теперь оттянем хвост Питону. Вы не знаете кто это? Это язык программирования Python, который присутствует в Малине, но почти не встречается рядом с Ардуино. Вы его не знаете? Я тоже. Но сейчас расскажу кратко: управляющие конструкции там почти такие же как в С++, а остальное… копипастим. Для наших целей знать достаточно.
Выполним команду из терминала:
sudo apt-get install python-serial
в результате чего зверь Питон научится работать с UART.
А теперь в директории / home/pi/ создадим файл noolite.py. Суть его логики была раскрыта в прошлой заметке.
#-*-coding=utf-8-*-
import serial
import sys
# Загрузили два модуля, если по-С++ - подключили две библиотеки
# Известим переменную что она - UART со скоростью 9600
ser = serial.Serial("/dev/ttyAMA0", baudrate=9600)
#print(sys.argv[1])
# Создадим список, который заполним шаблоном значений, отправляемых в мт1132
command = [85,80,0,0,0,0,0,0,0,0,0,170]
command[5] = int(sys.argv[1]) # Это канал силового блока
tempcommand = int(sys.argv[2]) # Это комманда силовому блоку
#print(command)
# Если команда от 15 и меньше - это любая команда кроме управления яркостью.
# 6 отправлять не рекомендуется, но и в этом случае ничего страшного не произойдет,
# силовой блок просто не реагирует на такую команду
if (tempcommand < 16):
command[2] = tempcommand;
# В этом случае требуется обнуление элементов [3] и [6]
command[3] = 0;
command[6] = 0;
# Если команда от 32 до 155 - это управление яркостью
else :
# Значит настоящая команда - 6
command[2] = 6;
# Элемент [3] требует установки в 1
command[3] = 1;
# В элемент [6] передаем значение яркости.
command[6] = tempcommand;
# Вычисляем контрольную сумму, все как на С++
check = 0
for i in range(0, 10): # Нет, не как на С++. Но смысл ясен.
check += command[i]
check = check & 0xFF
#print(check)
command[10] = check
#print(command)
# В списках у Python содержатся на цифры, а то, что в С++ зовется char
# Чтобы там появились цифры, нужен tmpBuffer, который будет содержать необходимое
tmpBuffer = bytearray(command)
# Отправляем команду
ser.write(tmpBuffer)
# Осовбождаем UART
ser.close()
# it works
Проверим, что у нас получилось. Исполним команду:
python /home/pi/noolite.py 0 0
Ау, вы куда смотрели? Надо было смотреть на модуль MT1132 — на нем должен был мигнуть красный диод! И, значит,у нас уже кое-что получилось.
Пора присоединять к MT1132 силовой блок. Делаем это так:
- включаем силовой блок SU111-300 в сеть согласно инструкции;
- нажимаем этот блок, чтобы зеленый огонек начал мигать;
- выполняем команду в терминале
python /home/pi/noolite.py 0 15
где 0 — номер канала, любой из диапазона 0 — 31, а 15 — команда силовому блоку на привязку.
- силовой блок должен отреагировать вспышкой и учащенным миганием;
- нажимаем на силовой блок еще пару раз, и он оказывается привязанным к MT132.
А теперь поиграем в освещение, отправляя на силовой блок в терминале такие команды как:
python /home/pi/noolite.py 0 2
python /home/pi/noolite.py 0 0
python /home/pi/noolite.py 0 4
python /home/pi/noolite.py 0 5
и понаблюдаем за реакцией. Однако, отправка команды, например, 75 (зажечь свет наполовину) — ничего не даст! Все потому, что вы не разрезали и не заизолировали на SU111-200 один проводок. Сделайте это по инструкции, и управление яркостью будет Вам доступно.
В итоге, вы должны повторить то, что показано на этом видео.
До следующей встречи, друзья. А встреча — здесь!