ESP8266-01S DHT11 OLED显示程序-Arduino中文社区 - Powered by Discuz! Archiver

lwq1947 发表于 2021-8-25 18:50

ESP8266-01S DHT11 OLED显示程序

看到一些求助帖子中关于ESP8266-01SDHT11和IIC OLED无法工作的问题。这里首先说明的是8266默认SDA,SCL为GPIO4,GPIO5.若用ESP8266-01S的TX(GPIO1),RX(GPIO3)来代替就需在
void setup() 中添加 Wire.begin(1,3);语句。下面给出ESP8266-01SDHT11 OLED显示程序仅供参考。


#include <dht11.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 0
Adafruit_SSD1306 display(OLED_RESET);


#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2


#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH16
dht11 DHT11;
#define DHT11PIN 2
void setup() {
Wire.begin(1,3);
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
}

void loop() {
display.clearDisplay();
int chk = DHT11.read(DHT11PIN);
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Tem:");
display.setCursor(48,0);
display.println((float)DHT11.temperature);
display.setCursor(110,0);
display.println("C");
display.setCursor(0,18);
display.println("Hum:");
display.setCursor(48,18);
display.println((float)DHT11.humidity);
display.setCursor(110,18);
display.println("%");
display.display();
delay(1000);

}

kuratasZ 发表于 2021-8-27 15:00

感谢解决问题

tnn0220 发表于 2021-8-27 15:42

请问gpio2被dht11占用了还能用来控制继电器吗?

lwq1947 发表于 2021-8-27 18:41

tnn0220 发表于 2021-8-27 15:42
请问gpio2被dht11占用了还能用来控制继电器吗?

可以的,把上面程序中的int chk = DHT11.read(DHT11PIN);换成:
if (digitalRead(2)==LOW) digitalWrite(0,!digitalRead(0));
else int chk = DHT11.read(DHT11PIN);在 void setup()添加:
pinMode(2, INPUT);
pinMode(0, OUTPUT);
digitalWrite(0, LOW);
就可用接在pgio2上的按键来控制pgio0上的继电器了.

tonytcf 发表于 2021-10-23 16:05

谢谢分享,拆眼学习了
页: [1]
查看完整版本: ESP8266-01S DHT11 OLED显示程序