ESP8266-01S驱动SHT40温湿度传感器

前几天弄了一个ESP8266-01S驱动DHT11的温湿度检测系统,但是DHT11误差太大了,精度也只到个位数。环境中实际湿度是70%,它居然测出来30%-50%,还时不时漂一下。我课程答辩的时候被这玩意儿狠狠坑了一把,于是买了一个精度较高的SHT40,据说是工业级的。 在网上找不到用ESP8266-01S的驱动SHT40的相关代码,倒是有很多ESP8266-12F(NodeMCU)和ESP32的。不过我还要用网页显示数据,于是直接拿之前的代码照着官方给的例程改改,效果不错。 接线 下载程序的时候像我上一篇文章所说的那样接线 下面给出的是程序运行的时候接线,下载完程序之后把GPIO0改成接SHT40的SDA蛤,ESP8266-01S引脚太少了所以勉为其难地复用一下 SHT40 ESP8266 VCC 3V3 GND GND SDA GPIO0 SCL GPIO2 代码 #ifdef ESP32 #include <WiFi.h> #include <ESPAsyncWebServer.h> #include <LittleFS.h> #else #include <Arduino.h> #include <ESP8266WiFi.h> #include <Hash.h> #include <ESPAsyncTCP.h> #include <ESPAsyncWebServer.h> #include <LittleFS.h> #include <FS.h> #endif #include <Wire.h> #include <SensirionI2cSht4x.h> #ifdef NO_ERROR #undef NO_ERROR #endif #define NO_ERROR 0 SensirionI2cSht4x sensor; static char errorMessage[64]; static int16_t error; // Replace with your network credentials const char* ssid = "TP-LINK_302"; const char* password = "302302302"; float aTemperature = 0.0; float aHumidity = 0.0; // Create AsyncWebServer object on port 80 AsyncWebServer server(80); String readSHT40Temperature() { // Read temperature as Celsius (the default) delay(20); error = sensor.measureLowestPrecision(aTemperature, aHumidity); if (error != NO_ERROR) { Serial.print("Error trying to execute measureLowestPrecision(): "); errorToString(error, errorMessage, sizeof errorMessage); Serial.println(errorMessage); return ""; } else { Serial.print("aTemperature: "); Serial.print(aTemperature); Serial.print("\t\n"); return String(aTemperature); } } String readSHT40Humidity() { delay(20); error = sensor.measureLowestPrecision(aTemperature, aHumidity); if (error != NO_ERROR) { Serial.print("Error trying to execute measureLowestPrecision(): "); errorToString(error, errorMessage, sizeof errorMessage); Serial.println(errorMessage); return ""; } else { Serial.print("aHumidity: "); Serial.print(aHumidity); Serial.print("\t\n"); return String(aHumidity); } } void setup(){ // Serial port for debugging purposes Serial.begin(115200); while (!Serial) { delay(100); } Wire.begin(0,2); sensor.begin(Wire, SHT40_I2C_ADDR_44); sensor.softReset(); delay(10); uint32_t serialNumber = 0; error = sensor.serialNumber(serialNumber); if (error != NO_ERROR) { Serial.print("Error trying to execute serialNumber(): "); errorToString(error, errorMessage, sizeof errorMessage); Serial.println(errorMessage); return; } Serial.print("serialNumber: "); Serial.print(serialNumber); Serial.println(); // Initialize LittleFS if(!LittleFS.begin()){ Serial.println("An Error has occurred while mounting LittleFS"); return; } // Connect to Wi-Fi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi.."); } // Print ESP32 Local IP Address Serial.println(WiFi.localIP()); // Route for root / web page server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ request->send(LittleFS, "/index.html"); }); server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/plain", readSHT40Temperature().c_str()); }); server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/plain", readSHT40Humidity().c_str()); }); // Start server server.begin(); } void loop() { } 如果你也需要在网页上显示请参照上一篇文章,不需要的话可以把与网页相关的代码删掉。 ...

September 24, 2024 · 2 min · 299 words · LiHuihua

ESP8266网页显示温湿度曲线

本项目参考了这篇文章:ESP32/ESP8266 Plot Sensor Readings in Real Time Charts – Web Server 这个项目的灵感来源于单片机课程设计,我做了一个将温湿度上传到阿里云物联网平台的系统。中期汇报的时候,老师说,为什么不同时把温湿度曲线展现出来呢?嗯…我也想。但是阿里云不能同时展示现在的温湿度和历史曲线,需要手动点击,展示曲线的页面也不美观。而且阿里云功能比较多,界面不简洁,但我只需要其中很少一部分功能。 于是我有了用网页展示温湿度的想法。自己写的网页有比较大的自由度,可以根据自己的审美修改,界面更简洁。但是到了画曲线的地方,我卡住了,画曲线需要用到Java Script的库,我对此不熟悉。于是我上网找了篇文章,根据需要改动了一下。 用到的东西 硬件: ESP8266-01S USB-TTL DHT11 软件: Arduino 步骤 1. Arduino安装ESP8266的包 在Arduino的文件-首选项-其他开发板管理器地址中,粘贴此链接:http://arduino.esp8266.com/stable/package_esp8266com_index.json 2. 在Arduino中选择你的板子 我使用的是ESP8266-01S,所以在开发板这里选择的是Generic ESP8266 Module,通用ESP8266模块。如果使用ESP8266-12,可以选择Generic ESP8266 Module,也可以选择Node MCU。 3. Arduino安装库 如果是ESP32,在Library中搜索并安装这些库 <WiFi.h> <ESPAsyncWebServer.h> 如果是ESP8266,在Library中搜索并安装这些库 <ESP8266WiFi.h> <Hash.h> <ESPAsyncTCP.h> <ESPAsyncWebServer.h> DHT11使用的库: <DHT11.h> 4. 使用LittleFS储存网页文件 一开始我尝试直接在Arduino的文件里写网页,但是网页代码量太大了,而ESP8266的内存比较小,只是写写很简单的网页还是可以的,但我们还需要展示曲线。于是直接把整个网页文件放在LittleFS里。只需要在开头加上一句 #include <LittleFS.h> 就可以读取了 4.1 安装LittleFS上传插件 点进这个网站:arduino-littlefs-upload 下载vsix文件 打开文件夹,找到.arduinoIDE这个文件,一般放在这个地方: C:\Users\YourUserName\.arduinoIDE *YourUserName是你自己起的名字 然后创建一个文件夹,命名为plugins 把刚刚下载的vsix文件放进plugins ...

September 23, 2024 · 4 min · 659 words · LiHuihua