Часы реального времени DS1302 с ESP8266. |
WiFi_IR_control v1.16 /22 мая 2016/ (zip).
Чтобы универсальный пульт управления устройствами был действительно универсальным, в него необходимо встроить часы реального времени. У меня в стартовом наборе оказался модуль DS1302, который я попытался пристроить к ESP8266. Сначала я думал, что это будет очень сложно, но, понабивав шишек, хочу поделиться как это мне удалось сделать.
RTC DS1302 | pin (GPIO) ESP8266 | назначение |
---|---|---|
GND | GND | общий |
VCC | +5V | питание |
RST | GPIO16 (pin0), можно изменять | Reset = 0, Chip Enable = 1; |
CLK | GPIO5 (pin1), можно изменять | тактовая частота передачи данных |
DAT | GPIO4 (pin2), можно изменять | шина данных |
Так сложилось с другими модулями, что у меня первые три ноги у DevKitMode ESP8266 были свободны и я решил их использовать как указано в таблице.
Что вселило надежду, это найденная (здесь) для этого модуля библиотека. Попытки сразу запустить часы не увенчались успехом, так как потребовалась еще одна библиотека Time.h. Загрузив примеры, я понял, что старался не зря: в терминале COM порта появились перые цифры, но, в основном, нули.
http://lesson.iarduino.ru/... Описание функций
Первое что надо сделать, после того, как установлен в модуль часов аккумулятор, это запустить часы. Для этого сначала устанавливаем системное время, а потом записываем это время в модуль:
прописать в глобальных переменных | |
DS1302RTC RTC(16, 4, 5); | GPIO16 (D0)- RST; GPIO4 (D2) - DAT; GPIO5 (D1) - CLK; |
прописать в void setup() | |
setTime(18, 10, 30, 23, 5, 2016); | //18 час. 10 мин. 30 сек. 23.05.2016 |
RTC.set(now()); | //запись системного времени в модуль часов. |
Такую процедуру надо запускать, когда необходимо подправить время или запустить часы заново, а чтобы не забыть как это делается, можно оставить эти строчки в скетче, как комментарии.
Все, библиотеки определены, часы запущены, далее дело техники. Подробности можно увидеть в скетче.
RTC и расписание на день
или последний штрих для универсального пульта управления
Так, в универсальном пульте выглядит страничка Daily - расписание на день. Вверху уже знакомое нам выпадающее меню, ниже заголовок с возможностью выводить дополнительну информацию (опция). Далее основное поле из четырех панелей. На этих панелях в возрастающем порядке высвечены команды, ожидающееисполнения в заданное время. Как только наступит время выполнения очередной команды, список будет смещен вверх, с добавление очередной команды.
Откуда берутся команды. Команды размещены в текстовых файлах, размещенных на SD карте в папке DAILY. Я рассматриваю временную ситуацию в трех уровнях:
- каждодневное задание (открыть/закрыть шторы);
- задание на определенный день недели;
- задание на определенное число;
Программа распазнает каждый уровень по названию файла и его расположению. Поскольку наименования файлов не могут содержать более 8 символов, пришлось организовать папку с наименованием года, например 2016, в которой располагаются текстовые файлы на те дни, в которые необходимо выполнить команды с универсального пульта. Наименования файлов начинаются с номера месяца, например 5_30.TXT, это задание на 30 мая. В самой папке DAILY находятся восемь файлов: семь дней недели (DAYn.TXT) и расписание на каждый день DAILY.TXT.
Итак, каждый день программа создает, максимум из трех файлов, расписание на сутки. Это расписание сортируется в программе, но расписание DAILY.TXT необходимо составить уже отсортированной по времени.
Программа следит за сменой дня и при этом составляет новое расписание на новый текущий день.
Программа будет выполняться вне зависимости открыта страница расписания, или нет. Но, открыв страницу вы видите, какие команды на очереди. Более того, у Вас есть возможность редактировать эти команды на текущий день. Но, если эти команды появятся в следующие дни, они будут иметь первозданный формат. То есть редакция команд локальная и временная.
На каждой информационной панели есть кнопка для размещения информации в поле ввода для редактирования. После изменения содержимого необходимо нажать на кнопку "ЗАПИСАТЬ", и информация изменится на страничке и на сервере.
Частота опроса сервера и обновления информации на страничке задается таймером, расположенным внизу страницы.
Пример расписания на день DAILY.TXT
	h00m00s::GRAIL:open;sec=1;

h00m00s::samsung:pwr;sec=1;/включить tv

h15m00s::samsung:pwr;sec=1;/выключить tv

h15m00s::macro:test0;/макрокоманда
h00m00s::GRAIL:close;sec=1;
h30m00s::192.168.0.121/?map:cb0=1;sec=3;
h59m00s::samsung:pwr;sec=1;/включить tv
h00m00s::samsung:2;sec=1;/включить 1tv
h30m00s::samsung:pwr;sec=1;/выключить tv
h13m00s::192.168.0.121/?map:cb0=0;sec=3;
- - сканирование и хранение IR команд для различных бытовых устройств;
- - формирование различных html страничек с функциями пультов управления;
- - генерация IR кодов и передача со встроенного излучателя;
- - управление WiFi модулями;
- - получение информации от других ESP8266 модулей через WiFi;
- - возможность формирования макро команд управления устройствами;
- - исполнение команд по расписанию на любой день года.
- - открытый код программы!