Часы реального времени DS1302 с ESP8266.

WiFi_IR_control v1.16 /22 мая 2016/   zip (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

 

Так, в универсальном пульте выглядит страничка Daily - расписание на день. Вверху уже знакомое нам выпадающее меню, ниже заголовок с возможностью выводить дополнительну информацию (опция). Далее основное поле из четырех панелей. На этих панелях в возрастающем порядке высвечены команды, ожидающееисполнения в заданное время. Как только наступит время выполнения очередной команды, список будет смещен вверх, с добавление очередной команды.

Откуда берутся команды. Команды размещены в текстовых файлах, размещенных на SD карте в папке DAILY. Я рассматриваю временную ситуацию в трех уровнях:
- каждодневное задание (открыть/закрыть шторы);
- задание на определенный день недели;
- задание на определенное число;

Программа распазнает каждый уровень по названию файла и его расположению. Поскольку наименования файлов не могут содержать более 8 символов, пришлось организовать папку с наименованием года, например 2016, в которой располагаются текстовые файлы на те дни, в которые необходимо выполнить команды с универсального пульта. Наименования файлов начинаются с номера месяца, например 5_30.TXT, это задание на 30 мая. В самой папке DAILY находятся восемь файлов: семь дней недели (DAYn.TXT) и расписание на каждый день DAILY.TXT.

Итак, каждый день программа создает, максимум из трех файлов, расписание на сутки. Это расписание сортируется в программе, но расписание DAILY.TXT необходимо составить уже отсортированной по времени.

Программа следит за сменой дня и при этом составляет новое расписание на новый текущий день.

sd

Программа будет выполняться вне зависимости открыта страница расписания, или нет. Но, открыв страницу вы видите, какие команды на очереди. Более того, у Вас есть возможность редактировать эти команды на текущий день. Но, если эти команды появятся в следующие дни, они будут иметь первозданный формат. То есть редакция команд локальная и временная.

На каждой информационной панели есть кнопка для размещения информации в поле ввода для редактирования. После изменения содержимого необходимо нажать на кнопку "ЗАПИСАТЬ", и информация изменится на страничке и на сервере.

Частота опроса сервера и обновления информации на страничке задается таймером, расположенным внизу страницы.

Формат команд

Пример расписания на день DAILY.TXT

&#9h00m00s::GRAIL:open;sec=1;
&#10h00m00s::samsung:pwr;sec=1;/включить tv
&#10h15m00s::samsung:pwr;sec=1;/выключить tv
&#10h15m00s::macro:test0;/макрокоманда
&#20h00m00s::GRAIL:close;sec=1;
&#20h30m00s::192.168.0.121/?map:cb0=1;sec=3;
&#20h59m00s::samsung:pwr;sec=1;/включить tv
&#21h00m00s::samsung:2;sec=1;/включить 1tv
&#23h30m00s::samsung:pwr;sec=1;/выключить tv
&#23h13m00s::192.168.0.121/?map:cb0=0;sec=3;

Что получилось в итоге:

  • - сканирование и хранение IR команд для различных бытовых устройств;
  • - формирование различных html страничек с функциями пультов управления;
  • - генерация IR кодов и передача со встроенного излучателя;
  • - управление WiFi модулями;
  • - получение информации от других ESP8266 модулей через WiFi;
  • - возможность формирования макро команд управления устройствами;
  • - исполнение команд по расписанию на любой день года.
  • - открытый код программы!
Hosted by uCoz