Метеостанция
August 25, 2018

Домашняя метеостанция. Часть 1

Сегодня я не стану подробно разбирать написанный мною код (но без него не обойдётся). Сегодня я расскажу про свою мечту и её реализацию.

Мечта

Ещё в начале 2017-го я загорелся идеей окутать свой дом погодными датчиками и получать с них данные в реальном времени через бота в Telegram.

Тогда эта идея мне казалась недосягаемой и мало практичной. Я до сих пор считаю свою идею мало практичной, но если что-то хочется — надо делать.

Концепция метеостанции

В моём представлении, метеостанция должна работать следующим образом. Раз в какой-то промежуток времени, платформа опрашивает погодные датчики и передаёт полученные данные в базу на сервер. Данные в базе копятся и с помощью Telegram-бота, можно их запрашивать. Например, можно узнать данные, за минуту, час, неделю, месяц, и так далее.

Шаг за шагом

Вывод данных с датчиков в консоль Espruino Web IDE

Для меня эта задача очень большая и, кажется, почти неподъёмная. Я решил действовать последовательно и разбить всё на этапы:

  1. Настройка датчиков и платформы. Вывод данных в консоль.
  2. Настройка сервера и передача полученных данных в базу.
  3. Написание Telegram-бота и передача в него данных из базы.

Платформа

В качестве основы для своей метеостанции я выбрал Iskra JS. Iskra JS — это, как Arduino, только производится в России и работает на JavaScript. Можно было бы остановиться на Arduino, но я не знаю C++. А с JavaScript уже хоть как-то знаком.

Все датчики, которые подходят к Arduino, можно подключить и к Iskra JS (если есть нужная библиотека). Обе платы находятся примерно в одном ценовом диапазоне. Конечно, если сравнивать Iskra JS с оригиналом Arduino, а не Китайской репликой. К слову, Китайскую реплику можно купить где-то за 200 рублей на AliExpress. Так что имейте в виду.

В остальном, отличий вроде бы нет.

Конфигурация

Слева направо: Iskra JS, Slot Shield, Wi-Fi (ESP8266), термометр (TMP36), часы реального времени (DS1307) и барометр (LPS331AP)

Для первого этапа я взял аналоговый термометр (TMP36) и барометр (LPS331AP). Ещё понадобились часы реального времени (DS1307). Данные с этих датчиков передаются с помощью Wi-Fi (ESP8266). Он работает на частоте 2.4 GHz.

Все датчики имеют специальный форм-фактор и устанавливаются без пайки на Iskra JS с помощью переходника Slot Shield.

Принципы работы

Загрузка Wi-Fi модуля и последующий запрос к API «Яндекса»

При подаче питания на плату, через 10-15 секунд Wi-Fi модуль загружается и подключается к интернету. Затем, он делает запрос к API Яндекса и получает точное Московское время. После чего, полученное значение передаётся в часы реального времени. И только после этого, начинают работать все остальные датчики.

Я немного упрощённо описал принципы работы. Можно ознакомиться с репозиторием на GitHub и самому вникнуть в код.

Проблемы

Конечно же, не всё так гладко.

Во-первых, у меня есть подозрения, что в определённый момент у Iskra JS заканчивается память и в консоль выводится что-то странное. Я пока не знаю, как это проверить и исправить.

Во-вторых, мне очень не нравится этот кусок:

var wifi = require('@amperka/wifi').setup(PrimarySerial, function(err) {
  wifi.connect(SSID, PSWD, function(err) {
    print('Connected to Wi-Fi');
    getTime();
  });
});

Но другие варианты почему-то не срабатывают и переписать эту часть у меня пока не вышло.

Благодарности

Благодарности: Диме Гуденкову и Жене Кочеткову — за помощь с кодом. Илье Лыткину — за перевод описания репозитория.


Подписывайтесь на Telegram-канал «Дизайнер учит код». Меня всегда можно найти в Instagram, Facebook или Twitter. Или напишите моему боту-резюме.