Добрый день, возникла проблема с отправкой данных на народный мониторинг при назначении
постоянного ip, в таком виде все работает, но адрес динамический 50 строчка закоментирована.
Устанавливаю постоянный ip, перестают отправляться данные на народный мониторинг.
Подскажите решение проблемы.
постоянного ip, в таком виде все работает, но адрес динамический 50 строчка закоментирована.
Устанавливаю постоянный ip, перестают отправляться данные на народный мониторинг.
Подскажите решение проблемы.
Код:
// подключаем библиотеку «ESP8266WiFi»:
#include <ESP8266WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266mDNS.h>
#include <Ticker.h>
#include <WiFiUdp.h>
#include <ESP8266HTTPClient.h>
// вписываем здесь SSID и пароль для вашей WiFi-сети:
const char* ssid = "**";
const char* password = "**";
IPAddress ip(192,168,0,61); //статический IP
IPAddress gateway(192,168,0,1);
IPAddress subnet(255,255,255,0);
// контакт для передачи данных подключен к D1 на ESP8266 12-E (GPI07):
#define ONE_WIRE_BUS D7
Ticker sender;
bool sendtonm;
// создаем экземпляр класса oneWire; с его помощью
// можно коммуницировать с любыми девайсами, работающими
// через интерфейс 1-Wire, а не только с температурными датчиками
// от компании Maxim/Dallas:
OneWire oneWire(ONE_WIRE_BUS);
// передаем объект oneWire объекту DS18B20:
DallasTemperature DS18B20(&oneWire);
char temperatureCString[6];
char temperatureFString[6];
const char* host = "narodmon.ru";
const int httpPort = 8283;
// веб-сервер на порте 80:
WiFiServer server(80);
ESP8266WiFiMulti WiFiMulti;
// блок setup() запускается только один раз – при загрузке:
void setup() {
// инициализируем последовательный порт (для отладочных целей):
Serial.begin(115200);
delay(10);
// подключаемся к WiFi-сети:
Serial.println();
Serial.print("Connecting to "); // "Подключаемся к "
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
// WiFi.config(ip,gateway,subnet);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected"); // "Подключение к WiFi выполнено"
// запускаем веб-сервер:
server.begin();
Serial.println("Web server running. Waiting for the ESP IP...");
// "Веб-сервер запущен. Ожидание IP-адреса ESP..."
delay(10000);
// печатаем IP-адрес ESP:
Serial.println(WiFi.localIP());
// Здесь настройки ВАШЕГО WIFI
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");}
Serial.println(WiFi.localIP());
// выводим мощность принимаемого сигнала:
long rssi = WiFi.RSSI();
Serial.print("RSSI:");
Serial.println(rssi);
sender.attach(305, STM); // Создаем событие отправки данных каждые 305 сек (5 мин + 5 сек, чтобы народный мониторинг не ругался если мы на секунду раньше отправили)
DS18B20.begin(); //Запуск DS18B20
}
void STM() {sendtonm = true;} // Отправка данных разрешена
void getTemperature() {
float tempC;
float tempF;
do {
DS18B20.requestTemperatures();
tempC = DS18B20.getTempCByIndex(0);
dtostrf(tempC, 2, 2, temperatureCString);
tempF = DS18B20.getTempFByIndex(0);
dtostrf(tempF, 3, 2, temperatureFString);
delay(100);
} while (tempC == 85.0 || tempC == (-127.0));
}
// блок loop() будет запускаться снова и снова:
void loop() {
// начинаем прослушку входящих клиентов:
WiFiClient client = server.available();
long rssi = WiFi.RSSI();
if (client) {
Serial.println("New client"); // "Новый клиент"
// создаем переменную типа «boolean»,
// чтобы определить конец HTTP-запроса:
boolean blank_line = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n' && blank_line) {
getTemperature();
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html; charset=utf-8\r\n");
client.println(""); // do not forget this one
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<h1 style='color:#0ea6f2'>Метеостанция</h1");
// веб-страница с данными о температуре:
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head></head><body><h1>Wemos D1</h1><h3>Температура: ");
client.println(temperatureCString);
client.println(" *C");
client.println("</h1>Уровень Wi-FI сигнала: ");
client.println (rssi);
client.println(" dB");
break;
}
if (c == '\n'){ // Если "с" равен символу новой строки
blank_line = true; // Тогда начинаем новую строку
}
else if (c != '\r'){ // Если "с" не равен символу возврата курсора на начало строки
blank_line = false; // Тогда получаем символ на текущей строке
// закрываем соединение:
}}}}
if (sendtonm) { // Если прошло 5 минут, и можно отправлять - работаем.
sendtonm = false; // отключаем флаг отправки данных
DS18B20.requestTemperatures(); // Команда на замер температуры.
delay(1000); // Задержка для того чтобы датчик успел провести замер.
DeviceAddress tempDeviceAddress; // Переменная для получения адреса датчика
String buf; // Буфер для отправки на NarodMon
buf="#" + WiFi.macAddress() + "#ESP" + "\r\n"; //формируем заголовок
DS18B20.getAddress(tempDeviceAddress, 0); // Получаем уникальный адрес датчика
buf = buf + "#";
for (uint8_t i = 0; i < 8; i++) {if (tempDeviceAddress[i] < 16) buf = buf + "0"; buf = buf + String(tempDeviceAddress[i], HEX);} // адрес датчика в буфер
buf = buf + "#" + String(DS18B20.getTempCByIndex(0))+ "\r\n"; //и температура
buf = buf + "##\r\n"; // закрываем пакет
Serial.println("Sending...");
Serial.println("buf");
if (!client.connect("narodmon.ru", 8283)) {
Serial.println("Connection to host failed");
delay(1000);
return;}
client.connect("narodmon.ru", 8283); //Подключаемся
Serial.println("Connect narodmon...");
client.print(buf); // И отправляем данные
}
}