ESP 8266-01 DHT11 and Arduino IDE

Nov 03, 2018 14:33


Вот такой бутерброд, идея что бы можно было с телефона посмотреть что показывает датчик.



спойлер



Нам понадобится

Железо:

  1. ESP8266-01
  2. DHT11
  3. TTL converter
  4. Computer

Софт:

  1. Arduino IDE с плагинами
  2. Библиотеки DHT и Adafruit_Sensor распаковать по пути (...\Arduino\libraries\DHT\)

Подключаем согласно инструкции

схема подключения датчика



Я прицепил на GPIO2 соответственно у меня пин2. Если используется DHT 21 или 22 надо разкомментировать соответствующие строки.

// Including the ESP8266 WiFi library

#include

#include "DHT.h"

// Uncomment one of the lines below for whatever DHT sensor type you're using!

#define DHTTYPE DHT11   // DHT 11

//#define DHTTYPE DHT21   // DHT 21 (AM2301)

//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

// Replace with your network details, можно на телефоне активировать хотспот и подключаться к нему

const char* ssid = "Ваша wifi сеть";

const char* password = "пароль от вашей сети";

// Web Server on port 80

WiFiServer server(80);

// DHT Sensor

const int DHTPin = 2;

// Initialize DHT sensor.

DHT dht(DHTPin, DHTTYPE);

// Temporary variables

static char celsiusTemp[7];

static char fahrenheitTemp[7];

static char humidityTemp[7];

// only runs once on boot

void setup() {

// Initializing serial port for debugging purposes

//Serial.begin(115200);

delay(1000);

dht.begin();

// Connecting to WiFi network

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");

// Starting the web server

server.begin();

Serial.println("Web server running. Waiting for the ESP IP...");

delay(10000);

// Printing the ESP IP address

Serial.println(WiFi.localIP());

}

// runs over and over again

void loop() {

// Listenning for new clients

WiFiClient client = server.available();

if (client) {

Serial.println("New client");

// bolean to locate when the http request ends

boolean blank_line = true;

while (client.connected()) {

if (client.available()) {

char c = client.read();

if (c == '\n' && blank_line) {

// 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("Failed to read from DHT sensor!");

strcpy(celsiusTemp,"Failed");

strcpy(fahrenheitTemp, "Failed");

strcpy(humidityTemp, "Failed");

}

else{

// Computes temperature values in Celsius + Fahrenheit and Humidity

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);

// You can delete the following Serial.print's, it's just for debugging purposes

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();

// your actual web page that displays temperature and humidity

client.println("");

client.println("");

client.println("ESP8266 - Temperature and Humidity
Temperature in Celsius: ");

client.println(celsiusTemp);

client.println("*C
Temperature in Fahrenheit: ");

client.println(fahrenheitTemp);

client.println("*F
Humidity: ");

client.println(humidityTemp);

client.println("%
");

client.println("");

break;

}

if (c == '\n') {

// when starts reading a new line

blank_line = true;

}

else if (c != '\r') {

// when finds a character on the current line

blank_line = false;

}

}

}

// closing the client connection

delay(1);

client.stop();

Serial.println("Client disconnected.");

}

}

Все достаточно тривиально, после заливки скетча ESP коннектится к точке доступа и подключившись вы можете зайти на ее сервер по IP.

У меня возникла проблема, ESP не стартовала после отключения TTL converter, отключаете RX (ESP) и замыкаете его на землю все грузится и работает.

Значения меняются значительно, подключения резистора 4.7КОм на землю приводит к сбою, если подтяуть к +3.3 нашел это в datasheet все работает но разброс значений значительный, надо делать усреднение.

полезные ссылки



ESP8266 DHT11/DHT22 Web Server Arduino IDE



In this project you’ll create a standalone web server with an ESP8266 that displays the temperature and humidity with a DHT11 or DHT22 sensor.

randomnerdtutorials.com





ESP8266 и Arduino, подключение, распиновка



Привет geektimes. Тема ESP8266, как и IoT(интернет вещей), всё больше набирает популярности, и уже Arduino подхватывает инициативу - добавляя эти Wi-Fi модули в...

habr.com



esp8266, smarthome, #define, #include

Previous post Next post
Up