Доброго времени суток уважаемы Мусковчане, давно читаю блог и вот решил сам написать, тем более повод хоть и небольшой но все таки есть. Обзор первый, можете пинать :)
Все куплено за свои, в целях самообразования.
Давно витает у меня мысль, сделать свой дом немного умнее, приобретено немало уже всяких поделий китайских братьев. И вот буквально на днях на коленке собрал для проверки следующее :esp8266, датчик температуры и влажности Si7021, подключена библиотека TelegramBot для Arduino IDE.
Начну с виновника обзора:
aliexpress.com/item/WIFi-D1-R2-integration-of-ESP8266-32Mb-flash-WeMos-D1-analog-form-factor-for-Ard-Uno/32739176923.html
«Вемос» D1R2 аналоговый, wi-fi D1 R2 интеграция ESP8266 + 32 МБ flash, форм-фактор для Ard. Uno R3 — , это обычный и всем известный модуль ESP 8266 распаянный на плате форм фактора arduino uno r3.
Характеристики:
Power DC:7~23V
Memory:32Mb flash (т.е 4 MB)
MCU:ESP8266
USB-TTL:CH340
I/O:11 digital + 1 analog
Меня он заинтересовал впрочем не этим, а в первую очередь разъемом для подключения внешней антенны. Заказ и доставка ничем не примечательны. Шло долго порядка 4 недель в г. Курган. Упаковано как обычно, в этом магазине, в антистатичный пакетик с указанием, что находится в этом пакетике.
В посылке было еще несколько модулей, во все залил стандартный блинк для проверки. Все работали нормально — кроме обозреваемого! Он работал довольно странно, какую бы прошивку я туда не заливал, он начинал очень сильно греться в районе распаянной на плате антенны. Выдавал в serial не то что хотелось видеть, тормозил и т.д… Так как заказ уже был закрыт, спор открывать не стал, но продавцу написал об непонятном поведении модуля. В ответ тишина и посей день. В итоге дополнил свой отзыв на али этой информацией. Почитав попутно, что пишут люди про этот модуль. Оказалось, что не я первый кто с этим сталкивался! Модуль работает вполне себе отлично, если — подключить внешнюю антенну! На самом деле я и покупал то его, чтобы подключить внешнюю антенну и поставить в дальний угол участка. Собственно на этом проблемы кончились, наверняка чтобы задействовать внутреннюю антенну надо какую нибудь перемычку перепаять или еще какие нибудь подобные манипуляции совершить. У продавца это никак не описано и искать было не охото.
Второй участник обзора, не менее всем известный датчик температуры и влажности Si7021, он уже тоже по праву становится народным! Покупался тут
aliexpress.com/item/Humidity-Sensor-with-I2C-Interface-Si7021-for-Arduino-Industrial-High-Precision/32683233516.html
Шёл он тоже долго, в итоге все равно пришел и слава богу, больше тут сказать нечего, упакован был хорошо.
Далее, в поисках различных способов управления “умным” домом или его частью :) был найден подходящий мне и моим домочадцам способ. Это — месенджер Телеграм, и его отличная особенность — простое создание ботов. Наверняка, найдется кто скинет кучу ссылок на другие способы, типа Можордомо и т.д. Все это я посмотрел и пришел к выводу что месенджер есть у всех моих родных, навыки работы с ними сейчас наверное даже дети впитывают с молоком матери :) Учитывая сколько матери проводят время со смартфонами! В общем выбор сделан и активно ищутся ( и находятся) пути реализации этой большой цели — “умный дом”. Ну, а на пути к этой цели иногда и получаются такие вот простенькие поделки для тестов!
Дак вот блуждая по просторам сети я обнаружил, что esp8266 уже сами без посредников, вроде raspbery pi, могут слать в Телеграм — телеграммы :)
Ссылка на гитхаб
github.com/Gianbacchio/ESP8266-TelegramBot
Устанавливаем в Arduino IDE эту библиотеку. С ней есть два простых примера на их то основе и сделаем свой скетч.
#include <Wire.h>
#include <SI7021.h>
#include <ESP8266TelegramBOT.h>
#include <ESP8266WiFi.h>
const char* ssid = «your ssid»;
const char* password = «your password»;
// Initialize Telegram BOT
#define BOTtoken «xxxxxxxxxxxxxxxxxxxxxxxxxx» //тут должен быть ваш токен
#define BOTname «NameBot» // имя бота
#define BOTusername "@Name_bot" //username бота
#define SDA 4 // GPIO4 on ESP module
#define SCL 5 // GPIO5 on ESP module
TelegramBOT bot(BOTtoken, BOTname, BOTusername);
int Bot_mtbs = 1000; //mean time between scan messages
long Bot_lasttime; //last time messages' scan has been done
bool Start = false;
SI7021 sensor;
void Bot_ExecMessages() {
for (int i = 1; i < bot.message[0][0].toInt() + 1; i++) {
bot.message[i][5]=bot.message[i][5].substring(1,bot.message[i][5].length());
if (bot.message[i][5] == «temp») {
;
float temp = sensor.getCelsiusHundredths()/100.0; //измерение температуры
bot.sendMessage(bot.message[i][4], «Temp „+String(temp), “»); //отправка сообщения боту
}
if (bot.message[i][5] == «hum») {
float hum = sensor.getHumidityPercent()*1.1; //измерение влажности
bot.sendMessage(bot.message[i][4], «Hum: „+String(hum), “»); //отправка сообщения боту
}
}
bot.message[0][0] = ""; // All messages have been replied — reset new messages
}
void setup() {
sensor.begin(SDA,SCL);
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
delay(10);
// We start by connecting to a WiFi network
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.println(«WiFi connected»);
Serial.println(«IP address: „);
Serial.println(WiFi.localIP());
bot.begin(); // launch Bot functionalities
}
void loop() {
if (millis() > Bot_lasttime + Bot_mtbs) {
bot.getUpdates(bot.message[0][1]); // launch API GetUpdates up to xxx message
Bot_ExecMessages(); // reply to message with Echo
Bot_lasttime = millis();
}
}
Подключение Si 7021 к ESP8266 очень простое:
SCL датчика в D1 esp
SDA датчика в D2 esp
Для того чтобы бот заработал? нужно конечно в скетче ввести название WiFi сети, пароль, Токен бота (который получите при регистрации бота в Telegram) а так же name и user_name этого бота. Как зарегистрировать бота можно почитать тут
tlgrm.ru/docs/bots
И в конце — результат работы бота: написав команду /temp получаем в ответ температуру в градусах, а команда /hum показывает влажность. Получившийся прибор автономный — можно запитать от любого powerbank либо USB порта (например, для того чтобы померить влажность во всех комнатах ).
Как самостоятельная единица — такой прибор использоваться не будет, и собран только для проверки библиотеки TelegramBot для ArduinoIDE, а также для тестирования платы от RobotDyn. На этом — всё.
Дежавю — что то пошло не так)))
Только вместо телеграмма кидаю в бд/web тоже esp-шкой, правда стоящей отдельно на привязи к Arduino nano
si7021 +-0.4° от -10° до +85°
bme280/bmp280 +-0.5° на +25° и +-1° от 0° до 65° (ниже нуля, точность не указана, и видимо, хуже)
Так что ни фига бош не точнее всех.
Видно что bme сильно отличается от остальных, но 7021 за счет защитной мембраны аццкий тормоз.
График странный — не победил подвисание esp, когда его даж AT+RST не берёт, надо будет его ресетить железно (где-то была бага esp8266)
Сейчас работает без него, вроде норм.
Ну или надо тогда какой-то поверенный прибор где-то брать для полноты счастья
это великолепно
У мея два DHT рядом
показывали с разностью в 3.5 градусов :-(
Помигать диодом — это, безусловно, очень интересно.
Особенно для окружающих.
А нельзя ли рассказать хотя бы конечную идею, для чего это применить,
как хотелось бы видеть конечный результат.
Конечно, от «мигания диодом» до реализации конечной задумки далеко.
Но все же хотелось бы что-то услышать/увидеть, как автор видит свой умный дом в будущем.
Ну может, помечтаем вместе…
посоветуйте плз с чего начать. :)
спасибо за обзор
обычно под этим подразумевают способность самостоятельно находить и переваривать информацию
а ты учился 5 лет?
сейчас инфы столько, что девать некуда все это
времени нет :(
это нормально
25 лет назад вообще ничего почти не продавалось, собирал по помойкам и выпаивал
Я пытался — у меня памяти не хватает.
Правда я еще и mqtt клиента туда воткнул
работа со строками (а все эти боты очень любят много букв вместо байт) занимают много озу
UPD сам нашел)) но не очевидно было
А «запихнуть невпихуемое»…
Вот, для проверки подключал 5 DS18B20, только отправка по MQTT
1) Температура на улице
2) Температура в котельной
3) Температура котла
4) Температура прихожей
5) Температура спальни
Примерно так, DS18B20 там длинна провода играет роль? Т.е 5 датчиков я могу посадить на шину из 3х проводов и у меня будет занято под датчики температуры только три пина на плате esp?
Вот здесь www.ab-log.ru/smart-house/1-wire/1-wire-experience описано практическое использование 1-Wire сети.
Что такое Вемос наверное мало кто знает на Муське. Если уж в заголовок вынесено сиё иностранное название, то стоило бы хоть пару предложений написать, что это за аббревиатура(?) и что из этого следует.
Я хоть и немного интересуюсь контроллерами и около, но вообще первый раз слышу про какой-то там WeMos.
Это типа такой Дремель, Ксерокс или что вообще?
В том числе и на mysku было куча обзоров и если Вы про это не читали и первый раз слышите — это ведь Ваша проблема, не так-ли? Вас забанили в гугле? Никто за вас разжевывать и класть в рот не будет — интересуетесь — потрудитесь поискать инфу — это нормально. А делать вступительное интро на пару абзацев каждый раз при любом DIY на ESP-шке (еще и описывать что такое ESP, почему оно и т.д., почему не ардуино?) — это абсолютно бесполезная работа.
Последняя статья про вемос аккурат под самый НГ была.
Я, например, радиолюбитель широкого профиля — про ESP ещё как-то в наслышан, а вот уж на какие оно там сорта разделяется — не в курсе. Просто не занимался ими непосредственно. И таких, пожалуй, большинство.
Чем плох обычный веб-сервер, а? Или обычная веб-консоль?
Проще, надежней и не завязана ни на какого дядю.
Вот я иногда на людей смотрю сейчас и не знаю — то ли я чего-то не догоняю, то ли они :D
Под ESP много готового есть — по сути надо по IP отдать html-ку, или принять команду — это все достаточно просто реализуемо — точно не сложней API дурова :)
Но при этом плюсов гораздо больше, и приложение писать не надо — зачем? По сути это обычный сайт.
Но если очень хочется — достаточно иметь этот сайт и опять-же не надо ничего разбирать под разные платформы — сейчас есть компиллеры или фреймворки в которых укзывается, куда бежать и на входе получается web-based приложение для всех типов платформ (IOS/Android/Win).
Да, это не нативка, но выглядит и работает почти как она самая. Единственный, но Вам не важный недостаток — конечно оно чуть медленнее работает, чем нативка.
правда теперь ждать пару месяцев наверное
В Serial Monitor выдает:
GET Update Messages
Sent Update request messages up to: 0
no new messages
Вот примерно так я сделал:
#include <DHT.h>
#include <DHT_U.h>
#include <Wire.h>
#include <ESP8266TelegramBOT.h>
#include <ESP8266WiFi.h>
#define DHTPIN 7
const char* ssid = "*******";
const char* password = "*******";
#define DHTTYPE DHT22
// Initialize Telegram BOT
#define BOTtoken "***********" //тут должен быть ваш токен
#define BOTname "***********" // имя бота
#define BOTusername "@*********" //username бота
//#define SDA 4 // GPIO4 on ESP module
//#define SCL 5 // GPIO5 on ESP module
TelegramBOT bot(BOTtoken, BOTname, BOTusername);
int Bot_mtbs = 100; //mean time between scan messages
long Bot_lasttime; //last time messages' scan has been done
bool Start = false;
DHT dht (D7,DHT22);
void Bot_ExecMessages() {
for (int i = 1; i < bot.message[0][0].toInt() + 1; i++) {
bot.message[i][5]=bot.message[i][5].substring(1,bot.message[i][5].length());
if (bot.message[i][5] == «temp») {
;
float temp = dht.readTemperature(); //измерение температуры
bot.sendMessage(bot.message[i][4], «temp „+String(temp), “»); //отправка сообщения боту
}
if (bot.message[i][5] == «hum») {
float hum = dht.readHumidity();; //измерение влажности
bot.sendMessage(bot.message[i][4], «hum: „+String(hum), “»); //отправка сообщения боту
}
}
bot.message[0][0] = ""; // All messages have been replied — reset new messages
}
void setup() {
dht.begin();
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
delay(1000);
// We start by connecting to a WiFi network
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.println(«WiFi connected»);
Serial.println(«IP address: „);
Serial.println(WiFi.localIP());
bot.begin(); // launch Bot functionalities
}
void loop() {
if (millis() > Bot_lasttime + Bot_mtbs) {
bot.getUpdates(bot.message[0][1]); // launch API GetUpdates up to xxx message
Bot_ExecMessages(); // reply to message with Echo
Bot_lasttime = millis();
}
}