Радионяня с термометром и гигрометром на Esp8266 и Android
Привет, Пикабу!
У меня пару недель назад родились сразу две удивительные дочки, Василиса и Варвара:) Я от них просто без ума, они потрясающие! :) Но! Даже самому безумному папке нужно иногда отойти от кроваток своих дочурок, сделать домашние дела, подключиться по vpn на работу или просто пойти и выкинуть мусор, пока любимая жена в душе.
Решение, как же узнать, что детки проснулись, давно известно, опробовано и используется кучей людей в мире.
Радионяня!
Ок!
(Можно смириться с ебучей ценой за трехсотенный девайс и не читать дальше)
Но это не наши методы, правда?
Пикабушник, ты видел цены на два куса пластика с тремя транзисторами внутри? Я чутка потерялся, буду честен. Всё, что имеет приставку "детское", почему то и цену имеет неоправданно завышенную. Не буду далее томить.
Я сделал радионяню на датчике звука от ардуино, присовокупил датчик температуры/влажности, и всё это мониторю по домашнему WiFi на любом Android-устройстве.
В настройках можно изменить адрес, где слушает esp, и время опроса.
Итак, что мы имеем. Два устройства, смартфон и nodemcu с датчиками.
Алгоритм простой, nodemcu подключается к домашнему вайфаю, открывает там сервер, и вещает на нем данные от датчиков. Андроид-смартфон получает данные, выводит их на экран и если данные от датчика звука превышают порог - меняет цвет фона экрана и пищит.
Код для esp простейший:
#include <ESP8266WiFi.h>
#include "DHT.h"
#define DHTPIN 5
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const char *ssid = "wlan;
const char *pass = "pass";
WiFiServer server(80);
IPAddress ip(192,168,1,128);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
void setup() {
pinMode(A0,INPUT);
Serial.begin(115200);
delay(10);
WiFi.begin(ssid, pass);
WiFi.config(ip, gateway, subnet);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("WiFi connected, using IP address: ");
Serial.println(WiFi.localIP());
server.begin();
dht.begin();
}
void loop() {
WiFiClient client = server.available();
if (!client) {
return;
}
while(!client.available()){
delay(1);
}
delay(3000);
float h = dht.readHumidity();
float t = dht.readTemperature();
int s = analogRead(A0);
String req = client.readStringUntil('\r');
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("");
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head></head><body>");
client.print(t);
client.print(":");
client.print(h);
client.print(":");
client.print(s);
client.println("</body></html>");
delay(1);
client.stop();
}
Исходники для андроида можно взять на гитхабе
Там же есть и исходники для esp, только чувствительность китайских микрофонов подстраивайте каждый под себя, мой модуль по уровню инвертирован, чем громче, тем ниже значение.
Датчик звука у меня KY-038.
Не знаю, что еще описать подробнее, чем есть. Отвечу в комментариях и приму критику и пожелания в комментариях.
Скетч, схема, и андроид-приложение были написаны за время обеденного перерыва, позднее был отлажен только уровень датчика звука.
Спасибо за внимание, надеюсь быть полезным.
Надо датчик влажности в пелёнки вкорячить. Или браслет запилить с хартрейтом и температурой ребёнка.
Чет малой подостыл немного