blog.ijacek007.cz

Blog o všem trochu jinak.

Chtěli jste mít někdy přehled o teplotě v blízkosti Vaší bezdrátové sítě? Dnes Vám ukáži, jak si můžete udělat teploměr s vlhkoměrem přístupný na vaší síti, který nestojí ani 200 korun.


obrázek schéma zapojení s teploměrem a vlhkomerem dht22

Budete potřebovat pouze modul ESP8266, který lze na ebay pořídit okolo 50 kč. Poté teploměr s vlhkoměrem, který stojí okolo 80 kč. Dále něco čím, to vše budeme napájet, takže zdroj 3,3V. Ten by měl mít více jak 500mA. Modul toho sice moc nespotřebuje nicméně při zobrazení informací pomocí vnitřního serveru, může docházet k větším požadavkům na spotřebu. Uváděná zátěž ve špičce je okolo 400 mA. V mém příkladu jsem ještě použil dvoubarevnou diodu, pomocí které zobrazuji, zda je modul připojen k Wi-Fi.


obrázek Reálné zapojení esp8266 s teploměrem a vlhkoměrem dht22

Diody jsem tam přidal ze dvou důvodu. Jednak abych si vyzkoušel a trochu osvojil práci s výstupy tohoto modulu a také abych měl okamžitý přehled, zda-li je čidlo připojené k bezdrátové síti. Za předpokladu, že budete mít čidel více, je dioda rozsvícena při správném připojení, nepostradatelný pomocník.

/* DHTServer - ESP8266 Webserver with a DHT sensor as an input

   Based on ESP8266Webserver, DHTexample, and BlinkWithoutDelay (thank you)

   Version 1.0  5/3/2014  Version 1.0   Mike Barela for Adafruit Industries
*/

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <DHT.h>
#define DHTTYPE DHT22
#define DHTPIN  2
#define led_wifi_ok  4
#define led_wifi_ko  5

const char* ssid     = "moje tajna wifi";
const char* password = "Super tajné heslo";


ESP8266WebServer server(80);

// Initialize DHT sensor
// NOTE: For working with a faster than ATmega328p 16 MHz Arduino chip, like an ESP8266,
// you need to increase the threshold for cycle counts considered a 1 or 0.
// You can do this by passing a 3rd parameter for this threshold.  It's a bit
// of fiddling to find the right value, but in general the faster the CPU the
// higher the value.  The default for a 16mhz AVR is a value of 6.  For an
// Arduino Due that runs at 84mhz a value of 30 works.
// This is for the ESP8266 processor on ESP-01
DHT dht(DHTPIN, DHTTYPE, 22); // 11 works fine for ESP8266

float humidity, temp_f;  // Values read from sensor
String webString="";     // String to display
// Generally, you should use "unsigned long" for variables that hold time
unsigned long previousMillis = 0;        // will store last temp was read
const long interval = 2000;              // interval at which to read sensor

void handle_root() {
 // server.send(200, "text/plain", "Hello from the weather esp8266, read from /temp or /humidity");
   gettemperature();       // read sensor
    webString="Teplota:"+String(temp_f)+"C | Vlhkost:"+String((int)humidity)+"%";
// Arduino has a hard time with float to string
    server.send(200, "text/plain", webString);            // send to someones browser when asked

  delay(100);
}

void setup(void)
{

  // Nastav pin obou diod na  zapis a nastav nizkou hodnotu (LED dioda nesviti)
 pinMode(led_wifi_ok, OUTPUT);
 digitalWrite(led_wifi_ok, LOW);

 pinMode(led_wifi_ko, OUTPUT);
 digitalWrite(led_wifi_ko, LOW);

  // You can open the Arduino IDE Serial Monitor window to see what the code is doing
  Serial.begin(115200);  // Serial connection from ESP-01 via 3.3v console cable
  dht.begin();           // initialize temperature sensor

  // Connect to WiFi network
  WiFi.begin(ssid, password);
  Serial.print("\n\r \n\rWorking to connect");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("DHT Weather Reading Server");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  server.on("/", handle_root);


  server.begin();
  Serial.println("HTTP server started");
}

void loop(void)
{
  server.handleClient();

 if (WiFi.status() == WL_CONNECTED) {  digitalWrite(led_wifi_ok, HIGH);digitalWrite(led_wifi_ko, LOW);   }
 if (WiFi.status() == WL_DISCONNECTED) {digitalWrite(led_wifi_ok, LOW);digitalWrite(led_wifi_ko, HIGH);}

}

void gettemperature() {
  // Wait at least 2 seconds seconds between measurements.
  // if the difference between the current time and last time you read
  // the sensor is bigger than the interval you set, read the sensor
  // Works better than delay for things happening elsewhere also
  unsigned long currentMillis = millis();

  if(currentMillis - previousMillis >= interval) {
    // save the last time you read the sensor
    previousMillis = currentMillis;

    // Reading temperature for humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor)
    humidity = dht.readHumidity();          // Read humidity (percent)
    temp_f = dht.readTemperature();     // Read temperature as Fahrenheit
    //float t = dht.readTemperature();
    // Check if any reads failed and exit early (to try again).
    if (isnan(humidity) || isnan(temp_f)) {
      Serial.println("Failed to read from DHT sensor!");
      return;
    }
  }
}

Příklad jsem jen mírně upravil od funkčního systému z internetu. Nejvíce mi trvalo, než jsem přišel, kde autor originálu udělal úpravu, aby se z čidla odečítaly pouze celá čísla. U vlhkosti je to v celku jedno, nicméně jsem chtěl, aby zobrazení teplot bylo i s desetinou čárkou, aby bylo hned na první pohled jasné, kam se teplota pohybuje.


obrázek webová stránka teploty a vlhkosti

Výsledkem je minimalistická stránka, která zobrazuje pouze požadované hodnoty a na diodě připojené k modulu hned vidíte, zda je modul připojený k bezdrátové síti.

Mohlo by Vás zajímat

Reálné zapojení ESP8266 a trojice teploměru s vypnutou funkcí AP

První zapojení ESP8266 na desce esp07

Originální příklad z něhož jsem vycházel (anglicky)

Stránky popisující možnosti WiFi Status(u) web arduino (anglicky)


Štítky článku mini-recenze | programovani | skutecnost | stavebnice |
Autor Ijacek.007 27.10.2016 zobrazeno 6 007x
Předchozí článek První zapojení ESP8266 na desce esp07
Wi-Fi teploměr s esp8266 se třemi čidly dht22 a regulaci svitu diody Další článek


1

Boky

2016-11-11 08:26:26

Ahoj, mam NodeMCU WiFi modul s ESP8266 je to vlastne jen rozšířený o usb a zdroj a to vše na jedné desce,. Dotaz- potřebuji nejakou jinou knihovnu pro to DHT 22 nebo 18b20? Dik


gravatar2iconblog.ijacek007.cz

Ijacek.007

2016-11-11 09:20:39

Boky
ahoj no dle mého názoru není potřeba jiná knihovna ty moduly by měli byt „stejné“ zkus ale dle mého nebude jiná knihovna potřeba. Jinak stejný modul mam objednaný také tak až přijde z číny mohu to vyzkoušet.


3

Boky

2016-11-11 09:34:54

Ja myslel jestli je potřeba jina knihovna než pro arduino uno atd .


gravatar4iconblog.ijacek007.cz

Ijacek.007

2016-11-11 15:57:51

Boky
však seznam knihoven jde vidět nahoře ve zdrojovém kodu příkladu z něj je patrné ze je použita knihovna DHT.h


5

Boky

2016-11-17 21:57:32

Už vše běží jak má


gravatar

Vložit komentář

Nick *:
WWW:
Email * (nezobrazuje se ):
Gravatar:
Pamatuj si mě:
Komentář článku *:
Opiš následující text: *

* - vyžadované údaje. RSS kanál s komentáři

Přihlášení



Audioknihy

Jsme milovníci audio knížek, kterých aktuálně máme zakoupených 118. Poslech všech dohromady zabral přes 1747 hodin.

Z tohoto množství jsme si již stihli poslechnout téměř 41% tedy 48 audioknih.

Aktuálně poslouchaná audioknihakniha je Letopisy Narnie 1-7 - komplet

Poslední hodnocenou audioknihou je Inovátoři .

Nejlépe hodnocenou audioknihou je Zaklínač I. Poslední přání - komplet .

Reklama