//ардуино 181, либы схоронил
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#define debug true // вывод отладочных сообщений
#define postingInterval 300000 // интервал между отправками данных в миллисекундах (5 минут)
#define DHTPIN 2 // dht на gpio02
// Uncomment the type of sensor in use:
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Lib instantiate
DHT dht(DHTPIN, DHTTYPE);
Adafruit_BMP085 bmp;
/**/unsigned long lastConnectionTime = 0; // время последней передачи данных
/**/String Hostname; //имя железки - выглядит как ESPAABBCCDDEEFF т.е. ESP+mac адрес.
float dhttemp; // буферная переменная для хранения температуры от dht22
int dhthum; // буферная переменная для хранения влажности от dht22
int topwm; // хранит значение для шима яркости дисплея
void wifimanstart() { // Волшебная процедура начального подключения к Wifi.
// Если не знает к чему подцепить - создает точку доступа ESP8266 и настроечную таблицу http://192.168.4.1
// Подробнее: https://github.com/tzapu/WiFiManager
WiFiManager wifiManager;
wifiManager.setDebugOutput(debug);
wifiManager.setMinimumSignalQuality();
if (!wifiManager.autoConnect("ESP8266")) {
if (debug) Serial.println("failed to connect and hit timeout");
delay(3000);
//reset and try again, or maybe put it to deep sleep
ESP.reset();
delay(5000); }
if (debug) Serial.println("connected...");
}
void setup()
{
//
pinMode(14, OUTPUT); // gpio14 будет шимить подсветку дисплея
Hostname = "ESP"+WiFi.macAddress();
Hostname.replace(":","");
Serial.begin(115200);
// инициализация экрана
lcd.begin(4, 5); // sda=gpio04, scl=gpio05
lcd.backlight();
// инициализация датчика температуры и давления bmp180
dht.begin();
if (!bmp.begin()) // если датчик не обнаружен, сообщаем об этом в компорт и на дисплей
{
Serial.println("Could not find BMP180 or BMP085 sensor at 0x77");
lcd.clear();
lcd.print("BMP180 FAILED");
while (1) {}
}
WiFi.hostname(Hostname);
wifimanstart();
Serial.println(WiFi.localIP()); Serial.println(WiFi.macAddress()); Serial.print("Narodmon ID: "); Serial.println(Hostname); // выдаем в компорт мак и айпишник железки, так же выводим на дисплей
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(WiFi.localIP());
lcd.setCursor(0, 1);
lcd.print(Hostname);
lastConnectionTime = millis() - postingInterval + 15000; //первая передача на народный мониторинг через 15 сек.
}
void WriteLcdTemp (void){ // заполнение дисплея. происходит каждые 5 минут после получения данных с датчиков
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("T1 ");
lcd.setCursor(4, 0);
lcd.print(bmp.readTemperature());
lcd.setCursor(8,0);
lcd.print(" P ");
lcd.setCursor(11,0);
lcd.print(bmp.readPressure()/133.3);
lcd.setCursor(1, 1);
lcd.print("T2 ");
lcd.setCursor(4, 1);
lcd.print(dhttemp);
lcd.setCursor(8,1);
lcd.print(" H ");
lcd.setCursor(11,1);
lcd.print(dhthum);
lcd.setCursor(13,1);
lcd.print("%");
}
bool SendToNarodmon() { // Собственно формирование пакета и отправка.
WiFiClient client;
String buf;
buf = "#" + Hostname + "#ESP_YOBA" + "\r\n"; // заголовок И ИМЯ, которое будет отображаться в народном мониторинге, чтоб не палить мак адрес
dhttemp=dht.readTemperature(); // сохравняем в буферные переменные данные с dht22, чтобы удобно было оперировать
dhthum=dht.readHumidity();
buf = buf + "#T1#" + String(bmp.readTemperature()) + "\r\n"; //температура bmp180
buf = buf + "#T2#" + String(dhttemp) + "\r\n"; //температура dht22
buf = buf + "#H1#" + String(dhthum) + "\r\n"; //влажность
buf = buf + "#P1#" + String(bmp.readPressure()) + "\r\n"; //давление
buf = buf + "##\r\n"; // закрываем пакет
if (!client.connect("narodmon.ru", 8283)) { // попытка подключения
Serial.println("connection failed");
lcd.clear();
lcd.print("connect failed");
return false; // не удалось;
} else
{
WriteLcdTemp();
client.print(buf); // и отправляем данные
if (debug) Serial.print(buf);
while (client.available()) {
String line = client.readStringUntil('\r'); // если что-то в ответ будет - все в Serial
Serial.print(line);
}
}
return true; //ушло
}
void loop()
{
//автояркость
topwm=map(analogRead(A0), 0, 1023, 10, 950);
analogWrite(14, topwm);
delay(100);// нужна, беж делея у меня не подключался к вайфаю
if (millis() - lastConnectionTime > postingInterval) {// ждем 5 минут и отправляем
if (WiFi.status() == WL_CONNECTED) { // ну конечно если подключены
if (SendToNarodmon()) {
lastConnectionTime = millis();
}else{ lastConnectionTime = millis() - postingInterval + 15000; }//следующая попытка через 15 сек
}else{ lastConnectionTime = millis() - postingInterval + 15000; Serial.println("Not connected to WiFi"); lcd.clear(); lcd.print("No WiFi");}//следующая попытка через 15 сек
} yield(); // что за команда - фиг знает, но ESP работает с ней стабильно и не глючит.
}
+23 |
1638
52
|
+150 |
3449
43
|
+45 |
2398
83
|
нашел на али такую йобу
Я делаю так
Можно готовую найти, можно самому сделать, инструкции есть в сети, не сложно.
Это стоимость по курсу доллара, что был вчера до 15:00 или после 17:00? Или по такой цене покупалось месяц назад?
BTW скриншоты уменьшать следует. Не нужно в обзоры вставлять FullHD скриншоты-портянки, которые потом скролить приходится.
Им никогда не приходил в голову вопрос: «а почему это в 99% обзоров цена на товар указана в долларах?»
Автор, ответьте, пожалуйста. У вас ардуина зависала, а ESP не зависает?
Я без сарказма…
У меня 2 месяца как полёт нормальный:
У меня по 5в и по 3,3в стоят обыкновенные электролиты по 470мф, воткнуты прямо в макетку. На самом модуле только керамика блокировочная после стабилизатора 0,1мф.
Второй год работает — зависаний не было (бывают сбросы, когда я в тот же многопортовый БП втыкаю телефон на зарядку)
<spoiler/>
elchupanibrei.livejournal.com/23293.html
но примерно через год лежания в подвале датчик влажности дал дуба.
Для ванной симпатично и недорого выглядит вот такой ebay.com/itm/351645178898
Как всегда, на али может быть дешевле. Поиск по «Logger Humidity».
В одном из обзоров ( а может и в комментах к этому :) ) Проскакивала ссылка на сервис thingspeak.com/. Кажется, он как раз для этого. И он такой не единственный, естественно.
По уму для мониторинга постоянный конект не нужен.
Нужно по старту
— подать напругу на датчик,
— собрать данные,
— подключить сеть,
— отправить данные,
— уйти в глубокий сон на 5 мин
(esp просыпается резетом)
есть вариант накапливать данные в памяти и отправлять пачками
А эта фиговина лучше или наоборот? Там CP2102 вместо CH340 стоит. Я понятия не имею что это, просто та фигня у меня заказана.
И к нему база за $2.33 с доставкой: https://aliexpress.com/item/item/NodeMcu-base-ESP8266-testing-DIY-Breadboard/32452003527.html
www.radioscanner.ru/files/miscsoftware/file18946/
Замена простая и как провод использую простой пачкорд.
В максимуме ESP12 потребляет 70мА. С индикатором 1602 потребление 100 мА.
А дохнуть стал, когда похолодало до минусовых температур.
А dht есть в уличном исполнении — надо было сразу их ставить (я когда 99% было заказал, но пока датчик ехал — старый «вылечился»).
Ну и датчик давления я бы не стал лепить на улицу. Давление в комнате от уличного не отличается, а датчику в комнате жить гораздо легче. Заодно можно и комнатную температуру с него выводить.
если хочется смотреть на телефоне у Виктора(https://esp8266.ru/esplorer/) есть интересный проект iotmanager.ru/
сам он использует platformio
много примеров автомаизации github.com/4refr0nt/iot-manager-demo
Ватчдог использовал?
А лучше сделать логический конвертер на мосфетах 1n7002 их как грязи на материнках. Часть схемы конвертора уже разведена на вашей плате (резисторы 10к).
Как uart через конвертер, так и i2c, тем более dht22 рекомендуется кормить 5 вольтами, реле и тп, тоже требуют 5 воль. Да и многие китайские uart-usb выдают 5вольт а не 3.3.
Датчики внешние тоже на 5 вольт, тогда не страшно если пара вольт потеряется по дороге к этому датчику :)
В непосредственной близости от антенны ESP8266 модуля вижу большой полигон. Это сильно влияет на КСВН печатной антенны, а => и на излучаемую мощность и как следствие — на качества связи.
Обратите внимание как установлен этот модуль на оригинальной плате NodeMCU.
narodmon.ru/3306
Вемос компактнее, nodemcu имеет больше пинов.
По сути дело вкуса какую платку использовать.
У меня есть и вемосы (штук 5) и 2 nodemcu и 1 witty cloud (бутерброд).
Вемос нравится больше всех своей компактность. Но столкнулся с тем что на нем криво работает INT ADC с хоум смартовской прошивкой. Пока не понял почему.
и датчик ebay.com/itm/112206549256
Пришли с Али два модуля Wemos D1, точнее, как выяснилось, копии.
При подключении к компу идёт постоянный реконнект. На питание реагируют. Сеть создают.
Один из модулей мне удалось прошить, подключив его под конец компиляции скетча.
Witty Cloud и NodeMcu Lua подключаются и шьются без вопросов.
Куда копнуть?
я так сделал
float e;
e = (6.112 * pow(10, (7.5 * temperature / (237.7 + temperature))) * humidity / 100);
float humidex = temperature + 0.55555555 * (e — 10.0);
return humidex;
}
код такой, сам подсчёт взял готовый у кого то из программы :)
весь код тут arduino.ru/forum/programmirovanie/18-tft-128160-i-bmp180#comment-248522
github.com/enjoyneering/HTU21D
А я вот задумался, почему сразу два BME280 не поставить? На улицу и дома. Зато полный набор показаний.
Зачем выводить разъем для прошивки? Посмотрите в сторону ArduinoOTA. У Вас же есть wi-fi, вот и прошивайте по воздуху. Да, согласен, в первый раз нужны провода, чтоб зашить OTA, это нужно сделать только один раз при первом включении, так сказать «извлечении модуля из заводской упаковки», можно даже просто проводками «на коленке». Потом здравствуй wi-fi.
Вот мой вариант. Начинка вся та-же, только OLED 0,96" дисплейчик. Установлен в коробочку от RJ-45 розетки, на застекленный балкон, без утепления.
Показывает:
Уровень сигнала Wi-Fi;
Динамика температуры (рядом со значком «температура» стрелочки в нужную сторону или знак "=" при отсутствии изм. темп. );
Время по NTP;
Сброс показаний раз в 10 минут на сервер (домашний)
Обновление показаний на экране раз в секунду (часы идут) опрос датчиков раз в 5 секунд. Динамика вычисляется раз в 10 минут, в момент отправки показаний. OLED пережил холода вполне достойно, а вот DHT врет не по детски, буду переделывать на другой датчик. Зависаний пока не было, т.к. использованы танталы по питанию, блок питания китайская зарядка для телефона.
Да простят меня модераторы, но не нашел кнопки Споллера.
будут вопросы, спрашивайте, но заранее прошу прощения если сразу не отвечаю, на работе аврал такой, что врагу не пожелаешь.
Подскажите, пожалуйста, что они дают?
Это нужно только ESP или для Ардуино тоже?
Технология OTA предполагает сокращение доступного объёма памяти под программу — например, половину, а то и меньше, из имеющегося. В одной половине памяти находится рабочая программа, во вторую будет загружаться обновление, при удачной загрузке будет переключение на новую программу, а прежняя часть памяти будет использоваться при очередном OTA-обновлении.
Многие модули, построенные на ESP8266, имеют на борту, как пишут продавцы, «4 М» или даже «4 М байт», что часто означает всего лишь 4 мегабита или 512 килобайт. (На сколько я могу судить, модуль из статьи именно с 512 кБ.) Для использования OTA с таким модулем программа должна умещаться в 256 килобайт. При программировании в ArduinoIDE это может стать ограничением, когда захочется добавить функциональности в проект. В результате программа может просто перестать работать, а в com-порт будут приходить лишь сообщения от WDT.
Но модули встречаются и с 1 мегабайтом (8 мегабит), и даже с 4 мегабайтами (32 мегабита) памяти. Я приобрёл такой https://aliexpress.com/item/item/NodeMCU-V3-Lua-WIFI-module-integration-of-ESP8266-extra-memory-32M-flash-USB-serial-CH340G/32739832131.html ещё до введения платной доставки, отчего цена получилась ниже, чем итоговая у обозреваемого в статье. (Кстати, эта плата уже обычных NodeMCU и на беспаячной макетной плате остаётся по одному ряду с боков для подключения.)
Сейчас поиск на Али выдал, среди прочих, такое: $2.88 (+$1.02 доставка в РФ) https://aliexpress.com/item/item/NodeMCU-V3-Lua-WIFI-module-integration-of-ESP8266-extra-memory-32M-flash-USB-serial-CH340G/32789696232.html, за $3.15 с бесплатной доставкой в РФ: https://aliexpress.com/item/item/V3-4M-bytes-32Mbits-FLASH-NodeMcu-Lua-WIFI-Networking-development-board-Based-ESP8266-with-firmware/32565317233.html — но эти варианты плат я не проверял.
мне больше нравится OLED, как в проекте выше, или например, минимализм:
learn.adafruit.com/huzzah-weather-display/circuit-assembly
Перед выходом из дома глянул за окно, нет ли дождя. Посмотрел температуру «за бортом». Можно ещё в смартфоне глянуть прогноз погоды на день. Всё.
А зачем эта метеостанция? Не понимаю. Тем более зачем собирать метеоисторию и передавать её куда-то?
Или тут все поголовно синоптики и архивные данные о погоде им позарез нужны в работе?
Иначе полезность подобных устройств равняется нулю. Впрочем. занудам, которые ещё в койке планируют, что же надеть, выходя из дома, какая-то польза от метеостанции на прикроватной тумбочке будет.
Из шести моих самоделок, которые я делаю/буду, температура используется в двух — контроллер паяльного фена(встроенный датчик) и ламинатор для ПП(датчик LM35). Никакой температуры окружающей среды, она нужна разве что в каком-нибудь контроллере отопления/кондиционирования дома. В квартире температуру вообще не контролирую, без устройств её регулирования это идиотизм.
В наших широтах такое не прокатывает! У нас в народе ходит такая пословица-поговорка «Даже в самый жаркий и солнечный день не забудь взять с собой теплый свитер и зонтик» :-) Динамика изменений позволяет немного прикинуть — а что нас ждет дальше. Сутра, с просоней, чисто на автопилоте, глянув на обычные цифры на дисплее можно прикинуть, как одеть ребенка в детский сад. Поверьте, лезть в смартфон чтобы ознакомиться с прогнозом совсем влом (ну по крайней мере у меня). Да Вы и сами знаете поговорку «каждый… так, как хочет» :-) В большинстве случаев все (на мой взгляд) такие поделки это не более чем красивый локальный показометр, у одних это может быть «пробой пера» в программировании, так сказать «Hello World», у других что то новое в железках, у третих интересная самоделка с пользой «только для меня».
exit status 1
Ошибка компиляции для платы NodeMCU 1.0 (ESP-12E Module).
Подскажите пожалуйста…
exit status 1
Ошибка компиляции для платы Generic ESP8266 Module.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.