首先我们打开Arduino IDE的库管理搜索SimpleDHT并安装:
打开示例中的DHT11Default:
接线说明如下:
// for DHT11,
// VCC: 5V or 3V
// GND: GND
// DATA: 2
ESP8266 NodeMCU和Arduinod的引脚不是一样的,具体区别参考这篇文章:
NodeMCU has weird pin mapping.
Pin numbers written on the board itself do not correspond to ESP8266 GPIO pin numbers. We have constants defined to make using this board easier:
static const uint8_t D0 = 16;
static const uint8_t D1 = 5;
static const uint8_t D2 = 4;
static const uint8_t D3 = 0;
static const uint8_t D4 = 2;
static const uint8_t D5 = 14;
static const uint8_t D6 = 12;
static const uint8_t D7 = 13;
static const uint8_t D8 = 15;
static const uint8_t D9 = 3;
static const uint8_t D10 = 1;
所以二号角应该接到D4,我们将程序下载到NodeNCU中,可以看到已经正常工作了,可惜有时候会读取错误,遇到这种情况再次读取即可。
下载成功后,打开右上角的串口监视器,已经在读取了:
关于如何驱动OLED显示屏请看我另一篇博客
仅做一些修改,代码如下:
#include <Wire.h>
#include <SimpleDHT.h>
#include <ACROBOTIC_SSD1306.h>
int pinDHT11 = 2;
SimpleDHT11 dht11(pinDHT11);
void setup() {
Wire.begin();
oled.init(); // Initialze SSD1306 OLED display
oled.clearDisplay(); // Clear screen
oled.setTextXY(0,0); // Set cursor position
oled.putString("Temp: *C");
oled.setTextXY(1,0); // Set cursor position
oled.putString("Humi: %R");
}
void loop() {
// read without samples.
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
delay(1000);
return;
}
oled.setTextXY(0,5); // Set cursor position
oled.putString(" ");
oled.setTextXY(0,5);
oled.putNumber(int(temperature));
oled.setTextXY(1,5); // Set cursor position
oled.putString(" ");
oled.setTextXY(1,5);
oled.putNumber(int(humidity));
delay(1500);
}
接线和最终效果如图(ESP8266最引人关注的是网络功能,请关注我,下期推出和树莓派的网络通信):
如果你有什么疑问或者想法欢迎留言。
欢迎大家加入我自建的创客交流群,分享diy经验,一起学习,一起进步。群号:784939897,你也可以扫码加群