esp 8266 получает данные с датчика dht11 и отправляет на сервак , а на серваке php скрипт который должен отправлять сообщение если превышена температура (задаётся в коде), стал тестить не работает , в чём проблема не могу понять , температуру заданную в коде превышаю , а сообщения нема. P.s скрип не мой .
<?php
// получаем текущую время и дату
// данный метод мы вызовем позже, когда он понадобится
function get_current_date_and_time() {
// определение времени без привязки к текущему времени сервера хостера
$tz = 'Europe/Moscow';
$timestamp = time();
$dt = new DateTime("now", new DateTimeZone($tz));
$dt->setTimestamp($timestamp);
$ret_str = $dt->format('d.m.Y H:i');
return $ret_str;
}
// =============================
// если от датчика приходят данные, то будем писать их в текстовый файл в корне сайта
if(isset($_GET['temp'])) {
// текущая дата и время
$current_date_and_time = get_current_date_and_time();
// в этот файл мы будем писать данные
$file = 'temp_log.txt';
// считываем текущие данные из файла
$current = file_get_contents($file);
// к данным, которые уже в файле были, добавляем новые данные
$current .= $current_date_and_time.' -> '.$_GET['temp']."\n";
// закидываем их в файл
file_put_contents($file, $current);
// получим числовые значения датчиков
$data = explode("temp", trim($_GET['t']));
// влажность
$hum = str_replace("hum","",$data[0]);
// температура
$temp = $data[1];
// теперь можем проверить температуру и если она высокая, то прислать сообщение в телеграм
if($temp > 27) {
// пишем в телеграм
$text = 'Критичная температура в серверной! - '.$temp.' C';
$bot_token = '1810527993:AAE_Fv-bdQpnjVOHo9q4_yOiWGKVC0Hr6uU';
$chat_id = '437840601';
$mess_url = "https://api.telegram.org/bot".$bot_token."/sendMessage?chat_id=".$chat_id."&text=".$text."";
$res = file_get_contents($mess_url);
}
}
// =============================
?>
Код самой ESP 8266
// подключение библиотек
#include <ESP8266WiFi.h>
#include "DHT.h"
// параметры сети Wi-Fi ==================
const char* ssid = "НАЗВАНИЕ_ВАШЕЙ_WI-FI_СЕТИ";
const char* password = "ПАРОЛЬ_ВАШЕЙ_WI-FI_СЕТИ";
// номер пина, к которому подключен сигнальный провод датчика температуры DHT11
int temp_pin = 5;
DHT dht(temp_pin, DHT11);
// адрес домена или айпи адрес, куда будут отправляться данные о температуре - например example.com или 123.124.240.11
String host_temp = "ИМЯ_ИЛИ_IP_ВАШЕГО_ДОМЕНА";
// алрес скрипта PHP на сервере, который будет принимать данные, в данном случае скрипт map.php лежит в корневом каталоге сайта
String get_request_temp = "/map.php?temp=";
// номер пина встроенного светодиода, ним микросхема будет моргать в определенных условиях, которые мы пропишем
int pin = 2;
// данный метод запускается один раз при включении микросхемы
void setup() {
// инициализируем порт мигалки светодиодом
pinMode(pin, OUTPUT);
// --------------------------
// иницируем датчик температуры и влажности
dht.begin();
// ========================================
// пытаемся подключиться к сети Wi-Fi
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
// ========================================
// в цикле будем пытаться подключиться к Wi-Fi, пока не подключимся
while (WiFi.status() != WL_CONNECTED) {
// -------------------
// будем моргать светодиодом - "один длинный - два коротких"
// т.е. если микросхема после заливки прошивки и включения мигает таким образом, то она еще подключается к сети Wi-Fi
digitalWrite(pin, HIGH);
delay(2000);
digitalWrite(pin, LOW);
delay(500);
digitalWrite(pin, HIGH);
delay(100);
digitalWrite(pin, LOW);
delay(100);
// ---------------------
}
// ==============================
}
// главный цикл приложения, который запускается снова и снова по кругу
// именно здесь и описывается, что же будет происходить во время работы микросхемы
void loop() {
digitalWrite(pin, LOW);
// создаем экземплар класса WiFiClient, с которым будем дальше работать
WiFiClient client;
// делаем задержку 2 секунды, чтобы медленный датчик DHT11 успел "растормозиться"
delay(2000);
//Считываем влажность с датчика (раз уж ее можно считать, то считаем ))
float h = dht.readHumidity();
// Считываем температуру
float t = dht.readTemperature();
// Проверка удачно прошло ли считывание
if (isnan(h) || isnan(t)) {
// если считывание с датчика прошло неуспешно, то передаем строку "data_error" и возвращаемся к началу циклв
if(client.connect(host_temp, 80)) {
// формируем строку для передачи ее нашему серверу
// в данном случае строка получится такаая: http://host_temp/map.php?temp=data_error
client.println( "GET " + get_request_temp + "data_error" + " HTTP/1.1\r\nHost: " + host_temp + "\r\n\r\n");
// -------------------
// двойная моргалка "короткий - длинный - короткий" - понимаем, что данные с датчика не получены
//digitalWrite(pin, LOW);
delay(100);
digitalWrite(pin, HIGH);
delay(500);
digitalWrite(pin, LOW);
delay(100);
// ---------------------
}
// возвращаемся к началу цикла
return;
} else {
// если считывание с датчика успешно, то передаем температуру и влажность нашему скрипту на сервере
if(client.connect(host_temp, 80)) {
// формируем строку для передачи ее нашему серверу
// в данном случае строка получится такаая: http://host_temp/map.php?temp=hum26.00temp27.80
// где цифры после hum и temp - это реальные значения влажности и температуры соответственно
client.println( "GET " + get_request_temp + "hum" + String(h) + "temp" + String(t) + " HTTP/1.1\r\nHost: " + host_temp + "\r\n\r\n");
// -------------------
// двойная моргалка "длинный - короткий - короткий" - понимаем, что данные с датчика получены и успешно переданы
//digitalWrite(pin, LOW);
delay(500);
digitalWrite(pin, HIGH);
delay(100);
digitalWrite(pin, LOW);
delay(100);
// ---------------------
}
}
// =============================================
// программа заканчивается и мы снова переходим к началу цикла
// и так до бесконечности, пока включена плата
// =============================================
}