Arduino websocket и ecc

В сети много раз наталкивался на различные поделки типа моей. Почти все либо на Arduino либо на ESP8266. И мало кто использует websocket. Есть куча вариантов:

  1. Сбор данных с датчиков (температура, давление, влажность, освещенность) ардуинкой или ESP8266.
  2. Переключение нагрузки через приложение или страничку при использовании вебсервера на Arduino.
  3. Попытки локально поднять точку управления модулями на базе той же ардуинки.
  4. Даже нашел несколько вариантов с архитектурой подобной electro control center. Правда нигде не смог отрыть исходники этого.
  5. Есть куча решений, которые в удобном формате принимают данные с чего угодно и отображают их.

Почти все они мне не подошли, поэтому набросал свой вариант. Расположил я его пока тут: wall.electro-control-center.ru/mainframe. Он написан на питоне с использованием фрэймворка django и tornado. О нем много написано в блоге, останавливаться не буду. В текущем релизе общение с Arduino происходит через websocket.

DHT-22, Arduino UNO и ECC

Краткое описание центра управления

Далее по тексту будет употребляться термин: центр управления или electro control center (ecc) – это сервер, с которым общаются ардуинки (ноды или звенья).

Вот скриншоты моего аккаунта. На нем два выключателя и 6 текущих значений датчиков.

Зона электрики в ecc

Ниже графики по датчикам.

График давления за сутки на bmp-85

График давления за сутки на dht-22 График освещенности за сутки График срабатывания датчика движения за сутки

На графиках я вывожу три значения агрегированные за час: максимальное значени, среднее и минимальное. Позже добавлю возможность настройки графиков и вывода их на определенные страницы. Сейчас они отображаются в зоне, ноде и на дашборде.

Пока ардуинка весит в коридоре и выполняет функции всего, что конечно делает её медленной. А именно, она включает и выключает освещение по сигналу из ecc (electro control center), по датчику движения, по кнопке, отправляет значения нескольких датчиков.

Алгоритм подключения Arduino к центру управления

Регистрация

Пишите мне на почту: admin@electro-control-center.ru. В теме укажите: «новый аккаунт в ecc».

Нода (звено, Arduino)

Берем любую ардуинку, например Arduino UNO.

Я использую Arduino Leonardo, Arduino UNO с чипом CH340G и Arduino Mega с чипом CH340G. Основное отличие китайских дешевых ардуинок на чипе CH340G – это то, что в них медленно заливаются скетчи. В остальном работают так же.

Подключаем к ней сетевой модуль, например Ethernet shield w5100. Подключаем к ней, например, датчик температуры и влажности DHT-22. Втыкаем в сеть.

Подключение ноды к центру управления

Логинимся в админку по адресу wall.electro-control-center.ru/admin/login.

Подключение и настройка элементов описана в документации на странице подключение узла к центру управления.

Скетч для Arduino

Загружаем модуль Arduino-Websocket для работы с вебсокетом отсюда.

Вносим правку иначе компилятор будет ругаться:

Находим папку с загруженной библиотекой и открываем файл sha1.cpp.

uint8_t sha1InitState[] PROGMEM = {

исправляем на:

const uint8_t sha1InitState[] PROGMEM = {

Скачиваем работающий скетч с гитхаба.

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

Если у вас другая сетевая плата или другой датчик или вы вообще что-то хотите менять, то  описание API ардуинки вам в помощь. А что касается работы с другими сетевыми интерфейсами, то позже добавлю еще несколько вариантов на основе тех, что у меня есть.

Заходим в центр управления

Адрес wall.electro-control-center.ru/mainframe.

В центре управления должен появиться блок с вашим датчиком (на странице ноды) и график.

Полезные ссылки

  1. Описание API центра управления для работы с Arduino.
  2. Подключение узла к центру управления.
  3. Заметка про перевод центра управления на websocket.
  4. Тут ссылки на исходники центра управления и скетчей. Скетчи не все рабочие, так как по мере их появления менялся API центра управления.