WEB server smart window /ESP8266, SD card, Arduino NANO/.
третья редакция

rarSmartWindow v2.0 - все в одном архиве

    В последней версии:
  • выделены в отдельные файлы CSS стили и скрипты Javascript. Загрузка htm страницы стала более стабильной;
  • есть возможность установки времени в RTC;
  • добавлена опция отображения текущих настроек и настроек по умолчанию измерительного модуля.
  • схемное решение оптимизировано с использованием двунаправленного преобразователя логических уровней.

В рабочем режиме перемычка "boot" разомкнута, а перемычки Jamper TX/RX - замкнуты

В режиме программирования необходимо размкнуть перемычки Jamper TX/RX, а перемычку "boot" замкнуть. Подключить RX1 TX1 от Arduino непосредственно к ОДНОИМЕННЫМ выводам ESP8266. Только после этого необходимо включить питание (подсоединить usb кабель) при нажатой кнопке RESET на Arduino NANO. Не отпуская кнопку Reset можно прошить программу в ESP модуль.

Это третья разработка для управления открытием и закрытием окна, в зависимости от качества атмосферы снаружи помещения и внутри. Предыдущие можно посмотреть здесь, а о причине повышенного интереса к этой теме есть видео первой редакции на другом микроконтроллере youtube.

В систему входят два газовых сенсора MQ-2 и датчик температуры и влажности DHT11..Один их газовых сенсоров объединен в модуль с DHT11 - это уличный модуль, а другой MQ-2 находится внутри помещения.

Покакзания датчиков с указанием времени могут регистрироваться на накопитель (SD карту), для далнейшего анализа. Управление и контроль за системой может осуществляться через последовательное соединение с компьютером (USB) и/или со смартфона через WiFi. Управление с компьютера описано в предыдущих версиях устройства и [ВИДЕО] осталось прежним.

Для автономной работы прибора в системе должны быть часы реального времени и регистратор данных. Можно было бы ограничиться часами браузера, но тогда для регистрации результатов должна быть открыта хотя бы одна страница данного сервера. Такой вариант имеет ограничения и может рассматриваться как запасной или аварийный.

В качестве регистратора используется модуль SD card, который подключен непосредственно к ESP8266, чтобы оптимизироватьработу сервера, организованного на ESP8266.

Железо.

Вся конструкция состоит из 4-х модулей:

  • Измерительный модуль, включающий Arduino UNO и коммутационную надстройку с оптронной развязкой для управления мотором;
  • Сервер, обеспечивающий организацию HTML страницы, WiFi коммутацию, передачу и регистрацию данных на SD с привязкой к часам реального времени;
  • Сенсоры. Газовый сенсор для помещения может быть расположен на измерительном модуле, но желательно его подвесить для лучшей обдуваемости;
  • Исполнительный модуль с мотором (на схеме не показан).

Сервер /ESP8266/.

Организация сервера осуществлена на модуле ESP8266 с подключенным модулем SD card. SD карта используется для хранения всех необходимых файлов HTML страницы. Кроме того на SD карту записываются все данные, поступающие с измерительного модуля.

Типы переменных ESP8266.

par

На рисунке показаны основные потоки информации в системе ESP8266, Arduino Nano, браузер и компьютер.

- WEB запросы и команды от бруазера [WiFi]

- WEB запросы и сообщения от ESP8266 к браузеру [WiFi]

- запросы настроек для установок границ измерений, периода измерений и др. Запрос настроек (&set_xxx) формируется одной строкой и занимает около 255 байт, что потребовало внести изменение в библиотеку.

Поскольку в библиотеке SoftwareSerial.h буфер расчитан на 64 байта, то необходимо исправить размер буфера на 256 байт. Следует найти этот файл в папке
C:\Program Files\Arduino\hardware\arduino\avr\libraries\SoftwareSerial
и заменить 64 на 256 как здесь:
#define _SS_MAX_RX_BUFF 256 //было 64 - ruben// RX buffer size

Полный список переменных и отдельных запросов помещен в таблице: закладка "Подробнее".

  
браузер ◀ ▶ ESP8266 ◀ ▶ Arduino ◀ ▶ PC описание
        измерения      
set_val0= set_val0= @f##   улица
set_val1= set_val1= @s##   дом
set_t= set_t= @t##   температура
set_h= set_h= @h##   влажность
in_wnd= in_wnd= @w ◀ ▶ %w окно
    -=- @t ▶◀ %t окно-время
        установка      
&set_scala0= о &set_scala0= - - ◀ ▶ -  
&set_scala1= д &set_scala1= - - ◀ ▶ -  
&set_mode0= н &set_mode0= - - ◀ ▶ -  
set_mode1= о set_mode1= - - ◀ ▶ -  
&set_gy0= й &set_gy0= - -@a(x,?) ◀ ▶ - начало желтой зоны
&set_gy1=   &set_gy1= - -@b(x,?) ◀ ▶ - начало желтой зоны
&set_yr0=   &set_yr0= - --@a(?,x) ◀ ▶ - начало красной зоны
&set_yr1= ◀ ▶ &set_yr1= ◀ ▶ -@b(?,x) ◀ ▶ - начало красной зоны
&set_max0=   &set_max0= - - ◀ ▶ - максимум для 0 шкалы
&set_max1=   &set_max1= - - ◀ ▶ - максимум для 1 шкалы
&set_min0= с &set_min0= - - ◀ ▶ - минимум для 0 шкалы
&set_min1= т &set_min1= - - ◀ ▶ - минимум для 1 шкалы
&set_sens0= р &set_sens0= - - ◀ ▶ - тип сенсора 0 шкалы
&set_sens1= о &set_sens1= - - ◀ ▶ - тип сенсора 1 шкалы
&set_per= к &set_per= - @p ▶◀ %p период измерений
&set_wnd= о &set_wnd= - - ◀ ▶ - открыть/закрыть окно
&set_tmax= й &set_tmax= - - ◀ ▶ - время открытия (сек)
        управление      
sc_load ▶◀all read config.ini ▶all @i ▶◀ %i info
sc_default ▶◀all ▶▶▶▶-◀◀◀◀ ▶◀all       прошитые настройки
sc_current ▶◀all ▶▶▶▶-◀◀◀◀ ▶◀all       текущие настройки
cb_sd ◀ ▶ cb_sd = 1          
&set_wnd= i▶▶▶▶▶▶▶▶▶ ◀ ▶ @w ▶◀ %w окно
      -=- @t ▶◀ %t окно-время
        @r ▶◀ %r резерв
  

Органы управления и режим настроек

Над экраном с графиками три элемента управления:

  • установка периода опроса измерительного модуля. С таким интервалом браузер будет посылать Get запросы на сервер, для получения данных с информационного модуля. Например, если установлено 10 сек, то на экране будет отображаться история наблюдения примерно за один час.
  • кнопка "rec" активируется только в режиме настроек нулевой (верхней) шкалы. При нажатии на эту кнопку на светлом поле в нижней части html страницы появится информация для записи текущих настроек верхней шкалы, которые могут быть использованы для глобальных установок селектора датчиков, если их внести в базу программы. База эта прописана в Javascript в файле index.html
      
    var baza = {
    baza0: [1023, 0, 256, 64, 128, 1],
    baza1: [1023, 0, 0, 0, 0, 0]
    baza2: [1023, 43, 255, 140, 200,1],
    baza3: [512, 0, 255, 80, 192,1],
    baza4: [512, 44, 214, 54, 154,1],
    baza5: [1023, 20, 180, 110, 210,1],
    baza6: [1023, 30, 190, 120, 220,1],
    baza7: [1023, 40, 200, 130, 230,1],
    count: 8,
    anotherdata: null
    }
    Для каждого датчика
    прописано шесть параметров:
    - Разрешение шкалы
    - минимальное значение зоны наблюдения
    - максимально значение зоны наблюдения
    - начало желтой зоны
    - начало красной зоны
    - тип шкалы
      

При выборе в селекторе первых двух позиций будет сформирован запрос на получение из измерительного блока прошитых или текущих настроек соответственно.

Под изображением ESP модуля находится рисунок часов, кликнув по которому можно записать текущее время браузера в модуль RTC. Проверить правильность установки времени в RTC можно посоединив Arduino к серийному терминалу через USB, дать разрешение на запросы, и включив запись на SDcard.

В правом верхнем углу счетчик обратного отсчета, показывающий время в секундах до следующего запроса данных. Рядом устанавливается разрешение на все запросы. Если требуется осуществить запрос быстрее, чем осталось времени, то можно сбросить разраешение на запрос и снова установить его. Тогда отсчет начнется с 10 сек. А можно уменшить период опроса.

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

Под экраном находятся две шкалы газовых сенсоров. Верхняя шкала имеет номер 0, нижняя-1. Как создать такие шкалы подробно показано на видео.youtube

Справа у каждой шкалы расположена кнопка переключения в режим настроек, и еще правее цветовая метка графика данной шкалы.

В режиме настроек можно изменять зону наблюдения и зоны граничных значений. Для этого достаточно "ухватить" мышкой либо саму зону либо указатель границ и установить в нужное значени. В смартфоне ухватить мышкой затруднительно и для этого для каждого параметра имеются окна ввода.

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

Для каждой шкалы из выпадающих меню можно выбрать шаблоны настроек для разных датчиков и тип шкалы. Изменения шаблонов возможно только в редакторе html, но после загрузки шаблона можно его скорректировать и записать на SD карту, не прибегая к редакции html файла. Следует помнить, что все сделанные изменения касаются только браузера, а чтобы эти настройки касались измерительного модуля, их надо записать, нажав на кнопку "rec" (см. ниже).

Под шкалами размещена строка, отображающая состояние окна. Ползунком можно также управлять открытием окна. Справа от ползунка размещено окно ввода максимального раскрытия окна - это время в секундах, разрешенное для полного или максимального открытия окна. Понятно, что зимой его можно сделать небольшим, а летом максимальным. Для привода в моем случае максимальное время раскрытия окна состовляет 24 сек.

Опустимся еще на строку ниже, где расположены две кнопки "load" и "rec", а также выключатель, разрешающий регистрацию данных на SD карту. Кнопка load загружает в браузер и измерительный модуль ранее записанные настройки, хранящиеся в файле config.ini на SD карте.

Есть возможность установить настройки по умолчанию, заложенные в измерительном модуле. Для этого необходимо обнулить модуль (нажать на Arduino UNO сброс или перезапустить питание модуля), а затем в выпадающем меню выбора датчиков любой шкалы выбрать "by default".

Завершает страничку тонкий бордюр с мелкой надписью "test" - это кнопка для раскрытия тестовых движков для обоих шкал и кнопки ввода данных.

Регистрация данных

Ардуино передает измерения пакетом через определенные интервалы времени. Этот пакет собирается в строку и отправляется в браузер через ESP8266. Если разрешена запись на SD, то они добавляются строкой в файл hh.txt, где hh - текущий час. Файлы находятся в папке "climat/year/mounth/day".
Например: climat/2016/9/24/18.txt это данные от 18:00 до 18:59 от 24 сентября 2016 года. Фрагмент данных представлен на рисунке:

Представить такие данные в табличном виде или графическом, например в EXCEL, достаточно просто, но это отдельная тема.

Источники питания и включение системы

Здесь есть проблема, которую я пока не решил. Дело в том, что при одновременном включении питания на Arduino UNO и ESP8266 последний зависает. Если подавать питание сначала на ESP8266, а на Arduino через несколько десятков мили секунд, то все загружается и работает нормально. Можно запускать и другим способом. Перед включением общего питания разорвать цепь SoftSerial, покрайней мере у ESP8266 отключить TXD0 - загрузка пройдет нормально. Вернуть подключениеTXD0 можно также практически сразу. Если кто знает как обойти эту проблему, пожалуйста сообщите. Пока я решил эту проблему, нажимая на кнопку при включении питания, чтобы на время разорвать цепь TXD0.

 

 

Hosted by uCoz