/*
Создал Zanis Dukalskis
01.05.2016
Скетч отправки данных на сайт мониторинг http://narodmon.ru
При помощи сенсора температуры и давления BMP180.
Из скетча регистрационные данные не требуется отправлять,т.к. после регистрации сервер определяет по IP.
Подробно о передаче данных http://narodmon.ru/#!proto
Необходимые библиотеки:
Adafruit_BMP085.h - https://github.com/adafruit/Adafruit-BMP085-Library
Wire.h - http://www.pjrc.com/teensy/td_libs_OneWire.html
*/
#include <ESP8266WiFi.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
//WIFI точка к которой подключается ESP8266 вписать свою
const char* WIFI_SSID = "****"; // your-ssid // название вашего беспроводного интернета
const char* WIFI_PASSWORD = "****"; // your-password // пароль
// *** Для narodmon.ru сокета ***
const char* IP_ADDRESS = "narodmon.ru";
const int PORT = 8283;
// *******************************
// *** Данные, необходимые для передачи на narodmon.ru
const char* ID = "18-FE-34-A2-43-C1"; // your-mac // MAC - серийный номер ESP8266 (обязательно передавать)
//MAC можно узнать через WEB страницу рутера вашей WIFI сети или через Flasher NODEMCU https://github.com/nodemcu/nodemcu-flasher (в поле STA MAC)
const char* NAME = "ESP8266"; // Название устройства мониторинга (не обязательно передавать)
// *******************************
// *** Данные одного датчика ***
const char* mac1 = "T1"; // Уникальные серийные номер датчика подключенного к устройству (обязательно передавать)
// T - означает что температурный, 1 порядковый номер .Если датчиков несколько можно отсылать серийный номер в виде T1-XX-XX.. (где XX-XX.. серийный номер датчика)
const char* name1 = "BMP180_Temperature"; // Название датчика (не обязательно передавать)
// *******************************
// *** Данные второго датчика ***
const char* mac2 = "P1"; // Уникальные серийные номер датчика подключенного к устройству (обязательно передавать)
// T - означает что температурный, 1 порядковый номер .Если датчиков несколько можно отсылать серийный номер в виде T1-XX-XX.. (где XX-XX.. серийный номер датчика)
const char* name2 = "BMP180_Pressure"; // Название датчика (не обязательно передавать)
// *******************************
const int DELAY = 300000; // отправка данных через каждые 5 минут (1000 ms * 300sec = 300000ms = 5min)
// сервер блокирует данные чаше чем раз в 5-ть минут - TOO OFTEN
const int ONE_WIRE_BUS = 2; //[DATA] контакт от датчика DS18B20 подключать на GPIO2
// инициализация
Adafruit_BMP085 bmp;
void wifiConnect() //подключение к WIFI
{
Serial.print("Connecting to WIFI");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
}
void sending(float temp,int pressure)// отправка данных температуры
{
WiFiClient client;
while (!client.connect(IP_ADDRESS, PORT)) { //подключаемся к сокету
Serial.println("connection failed");
wifiConnect();
}
client.print( // отправляем
String("#") + ID + "#" + NAME + "\n" + //MAC и название устройства
"#" + mac1 + "#" + temp + "#" + name1 + "\n" + //пишем в сокет сформированные данные для одного датчика
"#" + mac2 + "#" + pressure + "#" + name2 + "\n" + //пишем в сокет сформированные данные для второго датчика
"##" // конец передачи
);
Serial.print("Data send\n");
delay(100);
// читаем ответ,получаем OK если всё хорошо :)
while (client.available()) {
String line = client.readStringUntil('\r');
Serial.print(line);
}
Serial.println();
Serial.println("Connection closed");
}
void setup() {
Serial.begin(9600);
Wire.begin(0,2); //Wire.begin(sda,scl);
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
wifiConnect();
// не работает
//ESP.deepSleep(1000000 * 60 * 5);//глубокий сон 5 минут (что-бы работало нужно закоротить GPIO16 на RESET)
}
void loop() {// получение показаний температуры в бесконечном цикле
sending(bmp.readTemperature(),bmp.readPressure());
delay(DELAY);
}