Подключение датчиков DHT к Mega +WiFi R3 ATmega2560+ESP8266 и вывод на Wеb Сервер
- Войдите на сайт для отправки комментариев
Прошу помощи.
Имеется Mega +WiFi R3 ATmega2560+ESP8266,дачик DHT 11
Не получается вывести результат на web страницу, да и с логаими в мониторе, что-то не то.
Если подключаю датчик к меге, подгружаю скечт для Меги, в консоль выводится температура и влажность.
А в веб не получается, скетч не мой, откуда брал не помню.
Компилирую скетч Board -ESP8266 -> LOLIN WEMOS D1 R2 & mini
dip 567 on, остальные в off, com 0
// подключаем библиотеку «ESP8266WiFi»:
#include <ESP8266WiFi.h>
#include "DHT.h"
// оставляем раскомментированной строчку,
// соответствующую модели вашего датчика:
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
// вписываем здесь данные для своей WiFi-сети:
const char* ssid = "****";
const char* password = "****";
// веб-сервер на порте 80:
WiFiServer server(80);
// датчик DHT:
const int DHTPin = 2;
// инициализируем датчик DHT:
DHT dht(DHTPin, DHTTYPE);
// временные переменные:
static char celsiusTemp[7];
static char fahrenheitTemp[7];
static char humidityTemp[7];
// этот блок будет запускаться только при загрузке ESP:
void setup() {
// инициализируем последовательный порт (в отладочных целях):
Serial.begin(115200);
delay(10);
dht.begin();
// подключаемся к WiFi-сети:
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");
// "Подключение к WiFi выполнено"
// запускаем веб-сервер:
server.begin();
Serial.println("Web server running. Waiting for the ESP IP...");
// "Веб-сервер запущен. Ждем IP-адрес ESP..."
delay(10000);
// печатаем IP-адрес ESP:
Serial.println(WiFi.localIP());
}
// этот блок будет запускаться снова и снова:
void loop() {
// начинаем прослушку новых клиентов:
WiFiClient client = server.available();
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) {
// данные от датчика могут запаздывать на 2 секунды
// (это очень медленный датчик):
float h = dht.readHumidity();
// считываем температуру в Цельсиях (по умолчанию):
float t = dht.readTemperature();
// считываем температуру в Фаренгейтах
// (isFahrenheit = true):
float f = dht.readTemperature(true);
// проверяем, прочитались ли данные от датчика,
// и если нет, то выходим и начинаем заново:
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
// "Не удалось прочитать
// данные от датчика DHT"
strcpy(celsiusTemp,"Failed");
strcpy(fahrenheitTemp, "Failed");
strcpy(humidityTemp, "Failed");
}
else{
// рассчитываем градусы в Цельсиях и Фаренгейтах,
// а также влажность:
float hic = dht.computeHeatIndex(t, h, false);
dtostrf(hic, 6, 2, celsiusTemp);
float hif = dht.computeHeatIndex(f, h);
dtostrf(hif, 6, 2, fahrenheitTemp);
dtostrf(h, 6, 2, humidityTemp);
// все эти Serial.print() ниже можно удалить,
// т.к. они для отладочных целей:
Serial.print("Humidity: "); // "Влажность: "
Serial.print(h);
Serial.print(" %\t Temperature: "); // "Температура: "
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t Heat index: ");
// "Тепловой индекс: "
Serial.print(hic);
Serial.print(" *C ");
Serial.print(hif);
Serial.print(" *F");
Serial.print("Humidity: "); // "Влажность: "
Serial.print(h);
Serial.print(" %\t Temperature: "); // "Температура: "
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t Heat index: ");
// "Тепловой индекс: "
Serial.print(hic);
Serial.print(" *C ");
Serial.print(hif);
Serial.println(" *F");
}
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><h1>ESP8266 - Temperature and Humidity</h1><h3>Temperature in Celsius: ");
client.println(celsiusTemp);
client.println("*C</h3><h3>Temperature in Fahrenheit: ");
client.println(fahrenheitTemp);
client.println("*F</h3><h3>Humidity: ");
client.println(humidityTemp);
client.println("%</h3><h3>");
client.println("</body></html>");
break;
}
if (c == '\n') {
// если обнаружен переход на новую строку:
blank_line = true;
}
else if (c != '\r') {
// если в текущей строчке найден символ:
blank_line = false;
}
}
}
// закрываем соединение с клиентом:
delay(1);
client.stop();
Serial.println("Client disconnected.");
// "Клиент отключен."
}
}
После копиляции переключаю
dip 1234 on, остальные в off, com 3
Board Arduino AVR Boards -> Arduino Mega or Mega2560
На web вывод не утешителен
ESP8266 - Temperature and Humidity
Temperature in Celsius: Failed *C
Temperature in Fahrenheit: Failed *F
Humidity: Failed %
Если компилирую скетч в Меге из примеров, в консоле датчик показывает значения нормально.
Помощи какой?
Помощи в решении проблемы, почему на web не выводит информацию с датчиков.
Видимо не совсем понятно написал
Этот скетч имел в виду, что в Меге в консоль выводит нормально, датчик рабочий, подключен верно.
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
// REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor
#include "DHT.h"
#define DHTPIN 2 // Digital pin connected to the DHT sensor
// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
// Pin 15 can work but DHT must be disconnected during program upload.
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 3 (on the right) of the sensor to GROUND (if your sensor has 3 pins)
// Connect pin 4 (on the right) of the sensor to GROUND and leave the pin 3 EMPTY (if your sensor has 4 pins)
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors. This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println(F("DHTxx test!"));
dht.begin();
}
void loop() {
// Wait a few seconds between measurements.
delay(2000);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.print(F("°C "));
Serial.print(f);
Serial.print(F("°F Heat index: "));
Serial.print(hic);
Serial.print(F("°C "));
Serial.print(hif);
Serial.println(F("°F"));
}
Ещё раз: какой помощи? Материальной, моральной, духовной?
Вроде ясно писал, в решении проблемы.
После копиляции переключаю
dip 1234 on, остальные в off, com 3
Board Arduino AVR Boards -> Arduino Mega or Mega2560
На web вывод не утешителен
ESP8266 - Temperature and Humidity
Temperature in Celsius: Failed *C
Temperature in Fahrenheit: Failed *F
Humidity: Failed %
Что не так, почему не выводятся данные датчиков на web страницу?
Если не выводятся, значит не считываются с датчика.
Печайте в сериал сразу после считывания.
Есть какая-то проблема между esp8266 и датчиками, может в коде.
В сериал мусор сыпанется мусор и все, молчок.
Если есть два скетча, один из которых работает, а другой нет - проблема явно в коде.
Берете нерабочий и начинаете из него выкидывать лишнее, приближаясь к рабочему. Так и найдете свою простую ошибку.
Это не первый скетч, который под ESP8266 компилировал и не работает.
Компилируется без ошибок, но в монитор данные не выдает.
При установки платы esp8566 arduino пишет ошибка.
При установки платы esp8566 arduino пишет ошибка.
Похоже, ошибка - ваше жизненное кредо)) Они (контроллеры) просто ваших намерений понять не могут, чтобы их исполнить
Это не первый скетч, который под ESP8266 компилировал и не работает.
Компилируется без ошибок, но в монитор данные не выдает.
Вот здесь и есть Ваша основная ошибка:
на самом деле код работает. Причем, работает именно так, как Вы написали. Правда, скорее всего, не так, как Вы хотели написать.
Компилятор может проверить код на наличие только синтаксических ошибок, против логических ошибок он бессилен. В смысле, он не знает, чего хотел автор кода, а потому может оперировать только с тем, что этот автор на самом деле написал.
В чем конкретно проблема, где баг?
Мне нужно вывести показания температуры и влажности датчика DH-11 на веб страницу.
Если код не тот, скажите как нужно это сделать, или пример покажите.
Сравните построчно два приведенных вами скетча
В нас тройках Arduino IDE я написал: http://arduino.esp8266.cjm/stable/psckage_esp8266com_index.json
Далее захожу в инструменты - менеджер плат- пишет произошла ошибка при загрузке esp8266
Нет такого домена .cjm
mikl60 -а слабо отдельную тему создать для своего вопроса, а не гадить в чужую?
В чем конкретно проблема, где баг?
Мне нужно вывести показания температуры и влажности датчика DH-11 на веб страницу.
Если код не тот, скажите как нужно это сделать, или пример покажите.
какой пример? вы же написали. что запускали пример для Меги - и он работает. А ваш код - нет.
и что прикажете делать, как помочь? писать код за вас?
Если вам нужен готовый код - обрщайтесь в платный раздел. Если хотите решить проблему сами - так и решайте САМИ, а не ждите что кто-то будет перекапывать ваш код.
Не можете или не хотите помочь разобраться не нужно и не страдайте словоблудством.
Ой какой крутой код написать попросили,только $$$ снятся, аж руки потирает.
Человек, это песочница, не нужен мне ваш код, подсказывать нужно людям начинающим.
хорошо учту.
Человек, это песочница, не нужен мне ваш код, подсказывать нужно людям начинающим.
подсказываю - учись отлавливать ошибки по частям:
Возьми нормальную плату ЕСП8266 ОТДЕЛЬНО, а не свою чуду-юду с мегой
Далее последовательно пробуй:
1. Запустить код работы с датчиком и выводом температуры в Сериал, а не в веб.
2. Если п 1 работает - пробуй тоже самое в веб.
3. если п. 2 заработало - пробуй на своей плате.
Пока не запустишь п 1 - ко второму не переходи. Будут вопросы - спрашивай.
А ты просто как сам себе враг - ни черта в вопросе не понимаешь и сразу свалил все в кучу - и есп. и мегу, и датчики. и веб... Я в десять раз больше тебя понимаю - и то никогда так не делаю, только по частям.
Наверно именно потому, что умнее :)
Мы с вами на брудерша́фт не пили, не нужно панибратства.
Работаю, с тем что есть и дополнительно заказал. Можно и на этом "чудо-юдо" устройстве скорее всего достичь нужных результатов.
1. В Serial как раз тоже не получть результата, читайте внимательно посты.
Да хоть в 100 раз круче, а культуре общения наверное наоборот или вообще zero.
Гонору конечно не занимать. Умнеее в одном, возможно глупее во всем остальном.
И обращаться к вам боже упаси, писал уже.
Это форум не для перепалок.
Если нет ничего по существу, прекратим эту бессмысленную перепалку.
Всего хорошего.
ну и дурак. Раз нифига не понимаешь - не гордого принца надо строить, а помалкивать и слушать что говорят те, кто умнее.
Я тебе реальный совет дал, как ошибку найти - а дальше как хочешь.
А если "можно и на этом чуде-юде достичь нужных результатов" - так чего ж ты не достиг? спрашивать пришел? - иди, достигай...
Получилось!
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include "DHT.h"
#define DHTTYPE DHT11 // DHT 11
const char* ssid = "Hater";
const char* password = "b707";
ESP8266WebServer server(80);
uint8_t DHTPin = 4;
DHT dht(DHTPin, DHTTYPE);
float Temperature;
float Humidity;
void setup() {
Serial.begin(115200);
delay(100);
pinMode(DHTPin, INPUT);
dht.begin();
Serial.println("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected..!");
Serial.print("Got IP: "); Serial.println(WiFi.localIP());
server.on("/", handle_OnConnect);
server.onNotFound(handle_NotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop() {
server.handleClient();
}
void handle_OnConnect() {
Temperature = dht.readTemperature();
Humidity = dht.readHumidity();
server.send(200, "text/html", SendHTML(Temperature,Humidity));
}
void handle_NotFound(){
server.send(404, "text/plain", "Not found");
}
String SendHTML(float Temperaturestat,float Humiditystat){
String ptr = "<!DOCTYPE html> <html>\n";
ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
ptr +="<title>>Mega WiFi R3 ATmega2560 ESP8266 Weather Report</title>\n";
ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n";
ptr +="p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n";
ptr +="</style>\n";
ptr +="</head>\n";
ptr +="<body>\n";
ptr +="<div id=\"webpage\">\n";
ptr +="<h1>Mega WiFi R3 ATmega2560 ESP8266 <br> it`s cool</h1>\n";
ptr +="<p>Temperature: ";
ptr +=(int)Temperaturestat;
ptr +="℃</p>";
ptr +="<p>Humidity: ";
ptr +=(int)Humiditystat;
ptr +="%</p>";
ptr +="<p><i><small>Hi, hater b707, LoL! </small></i></p>\n";
ptr +="</div>\n";
ptr +="</body>\n";
ptr +="</html>\n";
return ptr;
}
Mega WiFi R3 ATmega2560 ESP8266
it`s cool
Temperature: 23℃
Humidity: 42%
Hi, hater b707, LoL!
что, правильно вставить код в форум так и не смог?