diff --git "a/\346\270\251\346\271\277\345\272\246\346\230\276\347\244\272/millis-dht-esp8266.ino" "b/\346\270\251\346\271\277\345\272\246\346\230\276\347\244\272/millis-dht-esp8266.ino" new file mode 100644 index 0000000000000000000000000000000000000000..941a8b0bf384e9141077cd7e8afaef233478b679 --- /dev/null +++ "b/\346\270\251\346\271\277\345\272\246\346\230\276\347\244\272/millis-dht-esp8266.ino" @@ -0,0 +1,360 @@ +// #include +// #include +// #include +// #include +#include // Graphics and font library for ST7735 driver chip +#include +#include "DHTStable.h" +// #include "HanZi12.h" + +#ifdef ESP32 +#pragma message(THIS EXAMPLE IS FOR ESP8266 ONLY !) +#error Select ESP8266 board. +#endif +//传感器 +#define DHT22_PIN 4 + +DHTStable DHT; +struct +{ + uint32_t total; + uint32_t ok; + uint32_t crc_error; + uint32_t time_out; + uint32_t connect; + uint32_t ack_l; + uint32_t ack_h; + uint32_t unknown; +} counter = { 0, 0, 0, 0, 0, 0, 0, 0 }; + +float humidity = 0.0; +float temperature = 0.0; +// unsigned long dhttime = 0; +// int dhtdelay = 2000; + +// #ifndef STASSID +// #define STASSID "DESKTOP-AO310UN 5415" //你的wifi名称 +// #define STAPSK "10086111" //你的wifi密码 我家没有密码所以没有了 +// #endif + +// const char* ssid = STASSID; +// const char* password = STAPSK; + +// ESP8266WebServer server(80); + +// const int led = 13; +// const int relay1 = 14; +// 屏幕 +TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h +String hString = "humidity:"; +String tString = "temperature:"; + +// void handleRoot() { +// digitalWrite(led, 1); +// server.send(200, "text/plain", "hello from esp8266!\r\n"); +// digitalWrite(led, 0); +// } + + + +// int times = 0; +// bool runif = false; +// unsigned long lasttime = 0; +// void relayon() { +// if (times == 0) { +// digitalWrite(led, 1); +// digitalWrite(relay1, 1); +// server.send(200, "text/plain", "relay always on\r\n"); +// digitalWrite(led, 0); +// } else { +// digitalWrite(led, 1); +// digitalWrite(relay1, 1); +// server.send(200, "text/plain", "relay on:" + (String)times + "\r\n"); +// digitalWrite(led, 0); +// lasttime = millis(); +// runif = true; +// } +// } + +// void settime() { +// if (server.args() > 0) { +// for (int i = 0; i < server.args(); i++) { + +// if (server.argName(i) == "time") { +// times = server.arg(i).toInt(); +// if (times > 0) { +// String tout = "times:" + (String)times + " set is ok "; +// Serial.println(tout); +// server.send(200, "text/plain", tout); +// } else { +// times = 0; +// String tout = "times: 0 set is ok "; +// Serial.println(tout); +// server.send(200, "text/plain", tout); +// } +// } +// } +// } +// } + +// void relayoff() { +// digitalWrite(led, 1); +// digitalWrite(relay1, 0); +// server.send(200, "text/plain", "relay is off\r\n"); +// digitalWrite(led, 0); +// runif = false; +// } + +// void showtemp() { +// String text = "H:" + (String)humidity + " T:" + temperature; +// server.send(200, "text/plain", text); +// } + +// void handleNotFound() { +// digitalWrite(led, 1); +// String message = "File Not Found\n\n"; +// message += "URI: "; +// message += server.uri(); +// message += "\nMethod: "; +// message += (server.method() == HTTP_GET) ? "GET" : "POST"; +// message += "\nArguments: "; +// message += server.args(); +// message += "\n"; +// for (uint8_t i = 0; i < server.args(); i++) { +// message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; +// } +// server.send(404, "text/plain", message); +// digitalWrite(led, 0); +// } + +void setup(void) { + // 屏幕 + tft.init(); + tft.setRotation(1); + // pinMode(led, OUTPUT); + // pinMode(relay1, OUTPUT); + // digitalWrite(led, 0); + Serial.begin(115200); + + // WiFi.mode(WIFI_STA); + // WiFi.begin(ssid, password); + // Serial.println(""); + // // Wait for connection + // while (WiFi.status() != WL_CONNECTED) { + // delay(500); + // Serial.print("."); + // } + // Serial.println(""); + // Serial.print("Connected to "); + // Serial.println(ssid); + // Serial.print("IP address: "); + // Serial.println(WiFi.localIP()); + + // if (MDNS.begin("esp8266")) { + // Serial.println("MDNS responder started"); + // } + + // server.on("/", handleRoot); + // server.on("/on", relayon); + // server.on("/config", settime); + // server.on("/off", relayoff); + // server.on("/temp", showtemp); + // server.on("/inline", []() { + // server.send(200, "text/plain", "this works as well"); + // }); + + // server.on("/gif", []() { + // static const uint8_t gif[] PROGMEM = { + // 0x47, 0x49, 0x46, 0x38, 0x37, 0x61, 0x10, 0x00, 0x10, 0x00, 0x80, 0x01, + // 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x2c, 0x00, 0x00, 0x00, 0x00, + // 0x10, 0x00, 0x10, 0x00, 0x00, 0x02, 0x19, 0x8c, 0x8f, 0xa9, 0xcb, 0x9d, + // 0x00, 0x5f, 0x74, 0xb4, 0x56, 0xb0, 0xb0, 0xd2, 0xf2, 0x35, 0x1e, 0x4c, + // 0x0c, 0x24, 0x5a, 0xe6, 0x89, 0xa6, 0x4d, 0x01, 0x00, 0x3b + // }; + // char gif_colored[sizeof(gif)]; + // memcpy_P(gif_colored, gif, sizeof(gif)); + // // Set the background to a random set of colors + // gif_colored[16] = millis() % 256; + // gif_colored[17] = millis() % 256; + // gif_colored[18] = millis() % 256; + // server.send(200, "image/gif", gif_colored, sizeof(gif_colored)); + // }); + + // server.onNotFound(handleNotFound); + + // ///////////////////////////////////////////////////////// + // // Hook examples + + // server.addHook([](const String& method, const String& url, WiFiClient* client, ESP8266WebServer::ContentTypeFunction contentType) { + // (void)method; // GET, PUT, ... + // (void)url; // example: /root/myfile.html + // (void)client; // the webserver tcp client connection + // (void)contentType; // contentType(".html") => "text/html" + // Serial.printf("A useless web hook has passed\n"); + // Serial.printf("(this hook is in 0x%08x area (401x=IRAM 402x=FLASH))\n", esp_get_program_counter()); + // return ESP8266WebServer::CLIENT_REQUEST_CAN_CONTINUE; + // }); + + // server.addHook([](const String&, const String& url, WiFiClient*, ESP8266WebServer::ContentTypeFunction) { + // if (url.startsWith("/fail")) { + // Serial.printf("An always failing web hook has been triggered\n"); + // return ESP8266WebServer::CLIENT_MUST_STOP; + // } + // return ESP8266WebServer::CLIENT_REQUEST_CAN_CONTINUE; + // }); + + // server.addHook([](const String&, const String& url, WiFiClient* client, ESP8266WebServer::ContentTypeFunction) { + // if (url.startsWith("/dump")) { + // Serial.printf("The dumper web hook is on the run\n"); + + // // Here the request is not interpreted, so we cannot for sure + // // swallow the exact amount matching the full request+content, + // // hence the tcp connection cannot be handled anymore by the + // // webserver. + // #ifdef STREAMSEND_API + // // we are lucky + // client->sendAll(Serial, 500); + // #else + // auto last = millis(); + // while ((millis() - last) < 500) { + // char buf[32]; + // size_t len = client->read((uint8_t*)buf, sizeof(buf)); + // if (len > 0) { + // Serial.printf("(<%d> chars)", (int)len); + // Serial.write(buf, len); + // last = millis(); + // } + // } + // #endif + // // Two choices: return MUST STOP and webserver will close it + // // (we already have the example with '/fail' hook) + // // or IS GIVEN and webserver will forget it + // // trying with IS GIVEN and storing it on a dumb WiFiClient. + // // check the client connection: it should not immediately be closed + // // (make another '/dump' one to close the first) + // Serial.printf("\nTelling server to forget this connection\n"); + // static WiFiClient forgetme = *client; // stop previous one if present and transfer client refcounter + // return ESP8266WebServer::CLIENT_IS_GIVEN; + // } + // return ESP8266WebServer::CLIENT_REQUEST_CAN_CONTINUE; + // }); + + // Hook examples + ///////////////////////////////////////////////////////// + + // server.begin(); + // Serial.println("HTTP server started"); +} + + +void loop(void) { + // server.handleClient(); + // MDNS.update(); + + //循环中放置这个判断语句是否在一段时间内执行程序 + // if (runif == true) { + // if (millis() - lasttime > times) { + + // digitalWrite(relay1, 0); + // runif = false; + // } + // } + + // if (millis() - dhttime > dhtdelay) { + // //delay(dht.getMinimumSamplingPeriod()); + // humidity = dht.getHumidity(); + // temperature = dht.getTemperature(); + + // Serial.print(dht.getStatusString()); + // Serial.print("\t"); + // Serial.print(humidity, 1); + // Serial.print("\t\t"); + // Serial.println(temperature, 1); + // // Serial.print("\t\t"); + // // Serial.print(dht.toFahrenheit(temperature), 1); + // // Serial.print("\t\t"); + // // Serial.print(dht.computeHeatIndex(temperature, humidity, false), 1); + // // Serial.print("\t\t"); + // // Serial.println(dht.computeHeatIndex(dht.toFahrenheit(temperature), humidity, true), 1); + // //delay(2000); + + // Serial.println(hString + humidity); + // Serial.println(tString + temperature); + + // dhttime = millis(); + // } + + //温湿度监测 + uint32_t start = micros(); + int chk = DHT.read22(DHT22_PIN); + uint32_t stop = micros(); + + counter.total++; + switch (chk) { + case DHTLIB_OK: + counter.ok++; + Serial.print("OK,\t"); + break; + case DHTLIB_ERROR_CHECKSUM: + counter.crc_error++; + Serial.print("Checksum error,\t"); + break; + case DHTLIB_ERROR_TIMEOUT: + counter.time_out++; + Serial.print("Time out error,\t"); + break; + default: + counter.unknown++; + Serial.print("Unknown error,\t"); + break; + } + + // 显示数据 + temperature = DHT.getTemperature(); + humidity = DHT.getHumidity(); + Serial.print(humidity, 1); + Serial.print(",\t"); + Serial.print(temperature, 1); + Serial.print(",\t"); + Serial.print(stop - start); + Serial.println(); + + // 显示计数器 + if (counter.total % 20 == 0) { + Serial.println("\nTOT\tOK\tCRC\tTO\tUNK"); + Serial.print(counter.total); + Serial.print("\t"); + Serial.print(counter.ok); + Serial.print("\t"); + Serial.print(counter.crc_error); + Serial.print("\t"); + Serial.print(counter.time_out); + Serial.print("\t"); + Serial.print(counter.connect); + Serial.print("\t"); + Serial.print(counter.ack_l); + Serial.print("\t"); + Serial.print(counter.ack_h); + Serial.print("\t"); + Serial.print(counter.unknown); + Serial.println("\n"); + } + //屏幕 + tft.setTextSize(1.7); + tft.fillScreen(TFT_BLACK); + tft.setCursor(10, 20); // 坐标为文字的左上角 + tft.setTextColor(ST7735_YELLOW); + tft.println(hString + humidity); + // drawHanzi(10, 20, "温", ST7735_YELLOW); + // drawHanzi(26, 20, "度", ST7735_YELLOW); + // tft.drawFloat(temperature,10,40,20); + + // drawHanzi(10, 50, "湿", ST7735_GREEN); + // drawHanzi(26, 50, "度", ST7735_GREEN); + // tft.drawFloat(humidity,10,40,50); + tft.setCursor(10, 50); + tft.setTextColor(ST7735_GREEN); + tft.println(tString + temperature); + + delay(4000); +} \ No newline at end of file