СамоДельник

Цифровой «онлайн» датчик температуры (с отслеживанием на веб-сайте narodmon)

Nextrp [CPP] RU + Many GEOs

Здрасти, почетаемые читатели и самоделкины!
У почти всех из Вас имеются домашние «метеостанции», самые обыкновенные из которых могут показывать текущую температуру и влажность в помещении. Наиболее продвинутые версии имеют проводные и беспроводные выносные датчики, и могут запоминать пиковые значения.
Намного наиболее увлекательными смотрятся проекты на базе модулей NodeMcu — будучи обустроенными модулем WiFi они могут передавать показания датчиков на особый веб-сайт народного мониторинга.
Так Вы можете поглядеть графики либо текущие показания детекторов собственной станции из хоть какой точки мира.
Там же на карте показываются все метеостанции, присоединенные к этому проекту. Способностей у проекта много, и приводить их все не буду.
В данной статье Алесей, создатель YouTube канала «arduinoLab», скажет Для вас как можно создать цифровой датчик температуры с WiFi и передачей данных на веб-сайт народного мониторинга.
Этот проект очень прост в изготовлении, и с ним управится даже начинающий.
Материалы, нужные для самоделки.
— Модуль ESP-01 WiFi
— Цифровой датчик температуры DS1820
— Датчик атмосферного давления BMP180
— Стабилизатор напряжения AMS1117 3.3
— Набор резисторов
— Набор танталовых конденсаторов
— Макетная плата, соединительные провода
— Герметичная коммутационная коробка 89×43×37 мм
— Термоусадочная трубка с клеевым наполнителем, провода, припой.
Инструменты, использованные создателем.
— Паяльничек с регулировкой температуры T12
— Лабораторный блок питания.
процесс производства.
Итак, основой для данной самоделки послужит очень дешевенький модуль ESP-01.
Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)В первой версии Алексей собрал все на макетной плате, и употреблял обычный стабилизатор напряжения на 3.3В из серии LM78xx.
К плате был подключен цифровой датчик температуры DS1820 в корпусе TO-92, и загерметизирован термоусадочной трубкой.
Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Опции датчиков на веб-сайте, и график температуры на телефоне смотрятся вот так.
Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Плата питается напряжением 5В, и для этого подойдет старенькое зарядное устройство. Стабилизатор понижает его до 3.3В.
Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Схема подключения смотрится последующим образом.
Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Имея подключение по WiFi к точке доступа с вебом, плата передает данные на веб-сайт. Крайний идентифицирует ее по MAC адресу. Его необходимо будет указывать при регистрации датчика.
Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Вот так смотрится крайняя версия прошивки. В ней необходимо будет прописать имя и пароль от Вашей точки доступа, чтоб плата смогла подключиться к вебу.
// отправка данных на народмон.ру с градусника ds18b20
// для ESP8266, ver0.3
// изменена работа с градусниками, сейчас работа с 18b20 с помощью библиотеки DallasTemperature
// добавленна работа с несколькоими градусниками, данные отправляются со всех присоединенных 18b20
// из основного цикла убран delay
//, но как и прошедшая версия, оно незначительно глючит.
#include
#include
#include // https://github.com/milesburton/Arduino-Temperature-Control-Library
#include
OneWire ds (2); // on pin 2 (a 4.7K resistor is necessary)
DallasTemperature sensors (&ds);
Ticker flipper;
const char* ssid = «SSID»;
const char* Password = «PASS»;
const char* host = «narodmon.ru»;
const int httpPort = 8283;
const int interval = 10*60; // 10 минут
int tm = interval;
int deviceCount = 0;
void flip (){
tm–;
// Serial.println™;
}
void setup () {
Serial.begin (115200);
delay (10);
sensors.begin ();
delay (10);
deviceCount = sensors.getDeviceCount (); // узнаем количество присоединенных градусников
// sensors.getAddress (Address18b20, 0);
sensors.setResolution (10); // устанавливаем разрешение градусника 9, 10, 11, либо 12 bit
sensors.requestTemperatures (); // забераем температуру с градусника
Send (); // при включении отправляем данные
flipper.attach (1, flip); // запускаем таймер
}
/// функция посылает данные на народмон.ру
void Send () {
// Подключаемся к wifi
Serial.println ();
Serial.println ();
Serial.print («Connecting to «);
Serial.println (ssid);
WiFi.begin (ssid, Password);
while (WiFi.status () ≠ WL_CONNECTED) {
delay (500);
Serial.print (».»);
}
Serial.println (); // отправляем в Serial данные о подключении
Serial.println («WiFi connected»);
Serial.print («IP address: «);
Serial.println (WiFi.localIP ());
Serial.print («MAC address: «);
Serial.println (WiFi.macAddress ());
Serial.println ();
// подключаемся к серверу
Serial.print («connecting to «);
Serial.println (host);
// Use WiFiClient class to create TCP connections
WiFiClient client;
if (!client.connect (host, httpPort)) {
Serial.println («connection failed»);
return;
}
// отправляем данные
Serial.println («Sending…»);
// заголовок
client.print (»#»);
client.print (WiFi.macAddress ()); // отправляем МАС нашей ESP8266
client.print (»#»);
client.print («ESP8266»); // заглавие устройства
// client.print (»#»);
// client.print («45.031660#39.004750»); // координаты местопребывания датчика
client.println ();
// в цикле отправляем данные с присоединенных градусников.
for (int i = 0; i ≤ deviceCount — 1; i++){
DeviceAddress Address18b20;
sensors.getAddress (Address18b20, i);
float temp = sensors.getTempC (Address18b20);
client.print (»#»);
for (int i = 0; i < 8; i++) client.print (Address18b20[i], HEX); // номер 18b20
client.print (»#»);
client.println (temp);
}
client.println (»##»);
delay (10);
// читаем ответ с и отправляем его в сериал
// совершенно на ответ необходимо как-то реагировать
Serial.print («Requesting: «);
while (client.available ()){
String line = client.readStringUntil (‘r’);
Serial.print (line);
}
client.stop ();
Serial.println ();
Serial.println ();
Serial.println («Closing connection»);
WiFi.disconnect (); // отключаемся от сети
Serial.println («Disconnect WiFi.»);
}
void loop () {
if (tm == 0){ // если таймер отработал
flipper.detach (); // выключаем
tm = interval; // сбрасываем переменную таймера
sensors.requestTemperatures (); // забераем температуру с градусника
delay (10);
Send (); // отправляем
flipper.attach (1, flip); // включаем прерывание по таймеру
}
}
Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Вот эту строчку необходимо будет раскомментировать (включить, убрав //), если необходимо передавать данные о местоположении датчика.
В ней же необходимо указать правильные координаты места.
Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Через некое время Алексей переработал проект, и упаковал его в герметичную коммутационную коробку размерами 89×43×37 мм. Это дозволит установить датчик на улице.
Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)На сей раз применен цифровой датчик температуры DS1820 в герметичной железной гильзе. Он выведен из корпуса через муфту с уплотнительным кольцом.
Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Также он сделал простенькую интегральную схему, и установил неплохой стабилизатор напряжения AMS1117 на 3.3В.
Фильтрами питания послужит пара танталовых конденсаторов
Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)файл с макетом печатной платы Вы сможете скачать по последующей ссылке, разлюбезно предоставленной мастером.
Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)К шине данных можно подключить сходу несколько датчиков температуры DS1820, для что употребляется библиотека DallasTemperature.
Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Для подключения большего количества датчиков (атмосферного давления, влажности, освещенности и проч.), необходимо использовать вот таковой модуль ESP12 с огромным числом портов.
Прошивка для работы с датчиком атмосферного давления BMP180 представлена ниже.
// отправка данных на народмон.ру и cloudmqtt с модуля BMP180HTU21BH1750
// для ESP8266
#include
#include
#include «SparkFunHTU21D.h»
#include
#include
#include
#include
const char* ssid = «WLAN1»;
const char* Password = «1231234123»;
#define mqtt_server «m11.cloudmqtt.com» // mqtt брокер
#define mqtt_login «123»
#define mqtt_Password «123»
#define mqtt_port 1883 // порт подключения к mqtt, у cloudmqtt порт хороший от 1883
const char* host = «narodmon.ru»;
const int httpPort = 8283;
const int interval = 10*60; // 10 минут
//const int interval = 10; // 10 минут
int tm = interval;
int deviceCount = 0;
Ticker flipper;
HTU21D HTU21;
SFE_BMP180 BMP180;
BH1750 lightMeter;
WiFiClient client;
PubSubClient mqttclient (client);
float getBMP180(){
char status;
double T,P,p0,a;
status = BMP180.startTemperature ();
if (status ≠ 0) {
delay (status);
status = BMP180.getTemperature (T);
if (status ≠ 0) {
status = BMP180.startPressure (3);
if (status ≠ 0)
{
// Wait for the measurement to complete:
delay (status);
status = BMP180.getPressure (P,T);
if (status ≠ 0)
{
// Print out the measurement:
return P/1.333;
}
else Serial.println («error retrieving pressure measurementn»);
}
else Serial.println («error starting pressure measurementn»);
}
else Serial.println («error retrieving temperature measurementn»);
}
else Serial.println («error starting temperature measurementn»);
}
void flip (){
tm–;
Serial.println™;
}
void setup () {
Serial.begin (115200);
delay (10);
Wire.begin (2, 0);
HTU21.begin ();
BMP180.begin ();
lightMeter.begin ();
setup_wifi ();
mqttclient.setServer (mqtt_server, mqtt_port);
SendMQTT (); // при включении отправляем данные
// SendNarodmon ();
WiFi.disconnect ();
flipper.attach (1, flip); // запускаем таймер
}
/// функция посылает данные на народмон.ру
void SendNarodmon () {
float HTU21humd = HTU21.readHumidity ();
float HTU21temp = HTU21.readTemperature ();
float BMP180Pressure = getBMP180();
int BH1750lux = lightMeter.readLightLevel ();
// подключаемся к серверу
Serial.print («connecting to «);
Serial.println (host);
// Use WiFiClient class to create TCP connections
WiFiClient client;
if (!client.connect (host, httpPort)) {
Serial.println («connection failed»);
return;
}
// отправляем данные
Serial.println («Narodmon sending…»);
// заголовок
client.print (»#»);
client.print (WiFi.macAddress ()); // отправляем МАС нашей ESP8266
client.print (»#»);
client.print («ESP8266»); // заглавие устройства
client.println ();
// отправляем данные с присоединенных градусников.
client.print (»#HTU21temp#»);
client.println (HTU21temp);
client.print (»#HTU21humd#»);
client.println (HTU21humd);
client.print (»#BMP180Pressure#»);
client.println (BMP180Pressure);
client.print (»#BH1750Light#»);
client.println (BH1750lux);
client.println (»##»);
delay (10);
// читаем ответ с и отправляем его в сериал
// совершенно на ответ необходимо както реагировать
Serial.print («Requesting: «);
while (client.available ()){
String line = client.readStringUntil (‘r’);
Serial.print (line);
}
client.stop ();
Serial.println ();
Serial.println ();
Serial.println («Closing connection»);
}
void SendMQTT () {
char msgT[7];
char msgH[7];
char msgP[7];
char msgL[7];
float HTU21temp = HTU21.readTemperature ();
float HTU21humd = HTU21.readHumidity ();
float BMP180Pressure = getBMP180();
int BH1750lux = lightMeter.readLightLevel ();
dtostrf (HTU21temp, 6, 2, msgT);
dtostrf (HTU21humd, 6, 2, msgH);
dtostrf (BMP180Pressure, 6, 2, msgP);
snprintf (msgL, sizeof (msgL), «%02d», BH1750lux);
if (!mqttclient.connected ()) {
Serial.print («Attempting MQTT connection…»);
// создаем случайный идентификатор клиента
String clientId = «ESP8266Client-»;
clientId += String (random (0xffff), HEX);
// подключаемся, в client.connect передаем ID, логин и пасс
if (mqttclient.connect (clientId.c_str (), mqtt_login, mqtt_Password)) {
Serial.println («connected»); // если подключились
mqttclient.publish («Temperature», msgT);
mqttclient.publish («Humidity», msgH);
mqttclient.publish («Pressure», msgP);
mqttclient.publish («LightLevel», msgL);
Serial.println («MQTT Send OK»);
} else { // по другому ругаемся в монитор порта
Serial.println («MQTT connection failed»);
delay (5000);
}
}
}
void setup_wifi () {
delay (10);
// We start by connecting to a WiFi Network
Serial.println ();
Serial.print («Connecting to «);
Serial.println (ssid);
WiFi.begin (ssid, Password);
while (WiFi.status () ≠ WL_CONNECTED) {
delay (500);
Serial.print (».»);
}
randomSeed (micros ());
Serial.println (»»);
Serial.println («WiFi connected»);
Serial.println («IP address: «);
Serial.println (WiFi.localIP ());
}
void loop () {
if (tm == 0){ // если таймер отработал
flipper.detach (); // выключаем
tm = interval; // сбрасываем переменную таймера
setup_wifi ();
// отправляем
SendMQTT ();
SendNarodmon ();
WiFi.disconnect (); // отключаемся от сети
Serial.println («Disconnect WiFi.»);
flipper.attach (1, flip); // включаем прерывание по таймеру
}
}
Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)Цифровой «онлайн» датчик температуры (с отслеживанием на сайте narodmon)веб-сайт «народного мониторинга» просит, чтоб датчик демонстрировал корректные значения, и устанавливать его необходимо только в тени, либо создавать для него защитный футляр.
Если Для вас не необходимы такие «навороты», то можно взять обыденную метеостанцию с выносными радиодатчиками.
Благодарю Алексея за ординарную схему и прошивку «онлайн» датчика температуры.
За развитием проекта можно смотреть на последующей авторской странице.
Всем неплохого настроения, крепкого здоровья, и увлекательных мыслях!
Подписывайтесь на телеграм-канал веб-сайта, чтоб не пропустить новейшие статьи.
Авторское видео можно поглядеть тут.

FIFA Online 4 [CPP] RU+CIS

SamoDelnik

Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного. - Альберт Эйнштейн

AliExpress WW


Black Desert [CPP, Innova] RU + CIS

AliExpress WW
Яндекс.Маркет
FIFA Online 4 [CPP] RU+CIS

Follow us

Don't be shy, get in touch. We love meeting interesting people and making new friends.