Глупая метеостанция (Blynk)

Как-то давным-давно, ещё в безСтрукторные времена, собрал я простенькую метеостанцию. С выводом информации на мобильное приложение Blynk. По началу она была всего лишь прототипом одного из блоков «умного аквариума», но так и осталась самостоятельным устройством. Правда немного доработалось в процессе. А сейчас обзавелась моя метеостанция корпусом из Структора, так как стало понятно, что жить ей долго и не гоже болтаться на проводах без корпуса 🙂 Собственно это, завершение проекта, и послужило поводом написания сего поста. Описание разобью на два этапа. Первый — основное устройство, второй — расширение функционала.

Часть первая, начало

Поехали, для начала нужно:

Собираем все компоненты согласно инструкциям производителей выбранного железа. Скачиваем на телефон программу Blynk, регистрируемся и создаём пустой проект. Далее идём сюда, в левой панели выбираем свою плату, Шилд и вставляем Auth Token (присваивается мобильным приложением при создании проекта). Теперь доработаем полученный код в соответствии с выбранными датчиками, то есть добавляем библиотеки от производителей. Далее считанные значения посылаем на виртуальные пины Blynk’а и в итоге получаем код примерно такой:

#define BLYNK_PRINT Serial // Comment this out to disable prints and save space#include <SPI.h>
#include <Ethernet.h>
#include <BlynkSimpleEthernet.h>
// библиотека для работы I²C
#include <Wire.h>
// библиотека для работы с модулями IMU
#include <TroykaIMU.h>
// библиотека для работы с датчиком DHT11
#include <TroykaDHT11.h>
// создаём объект класса DHT11 и пераём номер пина к которому подкючён датчик
DHT11 dht(6);
// создаём объект для работы с барометром
Barometer barometer;

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "YourAuthToken";

#define W5100_CS 10
#define SDCARD_CS 4

void setup()
{
Serial.begin(9600);

pinMode(SDCARD_CS, OUTPUT);
digitalWrite(SDCARD_CS, HIGH); // Deselect the SD card

//Blynk.begin(auth);
// You can also specify server.
// For more options, see BoardsAndShields/Arduino_Ethernet_Manual example
//Blynk.begin(auth, "your_server.com", 8442);
Blynk.begin(auth, IPAddress(10,0,1,88), 8442);
// инициализация DHT11
dht.begin();
// инициализация барометра
barometer.begin();
}

void loop()
{
Blynk.run();
// создаём переменную и присваиваем ей значения абсолютного давления (в мм р.с.)
float pressure = (barometer.readPressureMillibars()*0.750062);
// создаём переменную и присваиваем ей значения высоты над уровнем море
float altitude = barometer.pressureToAltitudeMeters(pressure);
// создаём переменную и присваиваем ей температуру окружающей среды
float temperature = barometer.readTemperatureC();
// переменная состояния датчика
int check;
// считывание данных с датчика DHT11
check = dht.read();
// Назначаем виртуальные пины
// Для температуры
Blynk.virtualWrite(1, dht.getTemperatureC());
// Для влажности
Blynk.virtualWrite(2, dht.getHumidity());
// Для давления
Blynk.virtualWrite(0, pressure);
// Для температуры 2
Blynk.virtualWrite(3, temperature);
delay(1000);
}

Данные температуры, в моём случае, получаются с двух датчиков. В программе на телефоне можно будет выбрать какой захочется или смотреть сразу оба. Собственно после загрузки скетча на плату можно переходить в приложение на телефоне. Тут уже можно подобрать виджеты отображения данных по своему вкусу. Я ещё добавлял графики, для слежением за динамикой. Добавляются все виджеты по одной схеме: выбираем подходящий тип -> указываем пин получения данных и готово. И графики так же, только можно вывести данные сразу с нескольких пинов. Да, в настройках виджета можно обозвать его, как душе угодно, присвоить единицы измерения и округлить данные до желаемого знака после запятой. Например, если в строке параметра написать ‘Температура /pin/ °C’, то мы увидим  виджет с заголовком «Температура», полные данные с датчика и °C после значения. А если /pin./ — будет только целое число, /pin.#/ — округлённые данные до десятых и т.д. Подробнее тут. На этом первую часть можно считать завершённой, включаем устройство и наслаждаемся 😉

 Часть вторая, дополнение.

Смотрел я на скучные графики в которых самое главное событие было проветривание (Температура падает на несколько градусов) и решил освежить устройство немного. А точнее решил смотреть температуру не только в квартире но и на улице. А заодно и зависимость климата в помещении от внешних условий. Вообщем решил добавить уличный блок. Из железа:

Тут надо сначала в ARDUINO IDE добавить саму плату. Описание этого процесса тут. Далее как и в первой части идём по ссылке, создаём скетч для этой платы, добавляем библиотеку датчика и  виртуальный пин данных. Датчик освещённости просто подсоединил к единственному аналоговому пину, без каких либо манипуляций в коде. Просто мне он нужен был как индикатор светло/темно на улице, значения в люксах не принципиальны. Так как эта плата будет работать по ВиФи, необходимо в коде указать имя своей сети и пароль.

#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

#include <DHT.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "YourAuthToken";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";

#define DHTPIN D2 // номер пина, к которому подсоединен датчик (без D не работает)
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321

DHT dht(DHTPIN, DHTTYPE);

WidgetLED led1(V5); //LED for Blynk (Virtual pin 5)

const int AnalogIn = A0;
int readingIn = 0;

void setup() {

Serial.begin(9600);

Blynk.begin(auth, ssid, pass, IPAddress(10,0,1,88), 8442);

dht.begin();
}

void loop() {

Blynk.run();

readingIn = analogRead(AnalogIn);
// Wait a few seconds between measurements.
delay(2000);

// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();

// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t)) {
led1.on();
return;
}
led1.off();
Blynk.virtualWrite(0, t);
Blynk.virtualWrite(1, h);
Blynk.virtualWrite(2, readingIn);
}
<span 				data-mce-type="bookmark" 				id="mce_SELREST_start" 				data-mce-style="overflow:hidden;line-height:0" 				style="overflow:hidden;line-height:0" 			></span>

Собственно получилось второе, независимое устройство, но… Мне нужна была одна метеостанция, поэтому сделал так. В настройка существующего проекта на телефоне, есть поле «DEVICES», заходим туда и просто добавляем ещё одно устройство. Получаем ещё один YourAuthToken и вставляем у наш код. Теперь по той же схеме, что и в первой части добавляем витжеты для новых датчиков. Ой чуть не забыл, в этой части метеостанции добавил виртуальный светодиод для чека ошибок датчика DHT22. Это собственно всё, можно пользоваться. Наблюдать зависимость температуры и влажности от наличия и интенсивности солнца и как всё это влияет на климат в квартире 😉 Прога получилась больше одного экрана 🙂


А само домашнее устройство вот:


Уличный блок остался без фото, холодно ща за ним лезть и лень. Весит за балконом в герметичном корпусе из «синей изоленты» 😀
Как вариант можно ещё добавить дачный модуль, с данными из теплицы, котельной…

Уф, вроде всё, написал… Надеюсь кому нибудь пригодиться

P.S.: обратите внимание на датчики. На улице висит DHT22, так как может работать с минусовыми температурами, а DHT11 нет.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

w

Connecting to %s