物联网如此简单:带有NODEMCU和OLED的家庭气象站

释放双眼,带上耳机,听听看~!

在本项目中,我们将开发一个家庭气象站,将显示室内信息,如温度和空气湿度。

那么 ,我们开始吧。

第一步 准备材料

物联网如此简单:带有NODEMCU和OLED的家庭气象站
  • NodeMCU ESP8266-12E开发板
  • 0.96“I2C IIC SPI串行128X64白色OLED显示模块
  • DHT22 AM2302温湿度传感器
  • USB数据线
  • 若干杜邦线
  • 外部5V电源或电池

第三步 硬件搭建

物联网如此简单:带有NODEMCU和OLED的家庭气象站

SSD1306,其主要特点是:

显示尺寸:0.96“

I2C IIC SPI串行

128X64

白色OLED

将OLED引脚连接到NodeMCU,如上面的电路图所示:

SDA ==> D1(5)

SCL * ==> D2(4)

VCC ==> SSD1306可以直接从NodeMCU模块用5V(外部)或3.3V供电。

GND ==> GND

显示器连接完整之后,就需要进入编程的时间了。

第四步 开始编程

首先,这个项目的SSD1306需要使用一个针对ESP8266的库来进行驱动,你需要把它下载下来并且安装上去。

下载地址:

该库支持I2C协议,使用内置的Wire.h库访问OLED显示器:

#include    
#include "SSD1306.h"
SSD1306  display(ADDRESS, SDA, SDC);

接下来将列出一些一些将与我们的OLED显示器一起使用的重要API:

A.显示控制:

B.像素绘图:

C.文本操作:

D.框架(“UI库”):

Ui库用于提供一组基本的Ui元素,称为帧和叠加。Frame用于提供信息,默认行为是在定义的时间内显示Frame,然后移动到下一个(如“Pages”)。该库还提供了相应更新的指标。另一方面,覆盖是始终在相同位置显示的一条信息(例如,时钟)。

一旦安装了OLED库,我们可以编写一个简单的“Hello World”程序来测试它。在IDE上输入以下代码,结果应该是显示,如下图所示:

物联网如此简单:带有NODEMCU和OLED的家庭气象站
/* Hello World OLED Test */
#include   // Only needed for Arduino 1.6.5 and earlier
#include "SSD1306.h" // alias for `#include "SSD1306Wire.h"`
SSD1306  display(0x3c, 5, 4); // Initialise the OLED display using Wire library
void setup() 
{
  Serial.begin(115200);
  display.init(); // Initialising the UI will init the display too.
  display.flipScreenVertically();
  
  display.clear();
  drawHelloWorld(); 
  display.display();
}
void loop() 
{
  
}
void drawHelloWorld() 
{
    display.setTextAlignment(TEXT_ALIGN_LEFT);
    display.setFont(ArialMT_Plain_10);
    display.drawString(0, 0, "Hello world");
    display.setFont(ArialMT_Plain_16);
    display.drawString(0, 10, "Hello world");
    display.setFont(ArialMT_Plain_24);
    display.drawString(0, 26, "Hello world");
}

上传程序之前,需要把程序里面的OLED的引脚连接改过来:

// Initialise the OLED display using Wire library
SSD1306  display(0x3c, 5, 4);

上面的结果输出正确的话,我们就可以开始进入真正的项目了。

第四步 获取室内数据

首先,你需要把其它几个传感器连接好:

物联网如此简单:带有NODEMCU和OLED的家庭气象站

我们将安装数字温度/湿度型传感器。可以是DHTxx(DHT11或DHT22)系列的温湿度传感器。

连接方式请看上图。

原理说明:

概观

低成本的DHT温度和湿度传感器非常普通,而且速度也比较慢,但对于想要进行基本数据记录的业余爱好者来说非常棒。DHT传感器由两部分组成,电容式湿度传感器和热敏电阻。内部还有一个非常简单的芯片可以进行模拟到数字量的转换,并在检测温度和湿度下发出数字信号。使用任何微控制器都可以轻松读取数字信号。

DHT11与DHT22

我们有两个版本的DHT传感器,它们看起来有点相似并具有相同的引脚排列,但具有不同的特性。以下是规格:

DHT11:

  • 超低成本
  • 3至5V电源和I / O.
  • 转换期间使用2.5mA最大电流(同时请求数据)
  • 适用于20-80%湿度读数,准确度为5%
  • 适用于0-50°C温度读数±2°C精度
  • 采样率不超过1 Hz(每秒一次)
  • 尺寸15.5mm x 12mm x 5.5mm
  • 4个引脚,间距为0.1“

DHT22:

  • 低成本
  • 3至5V电源和I / O.
  • 转换期间使用2.5mA最大电流(同时请求数据)
  • 适用于0-100%湿度读数,精度为2-5%
  • 适用于-40至125°C的温度读数±0.5°C精度
  • 采样率不超过0.5 Hz(每2秒一次)
  • 尺寸15.1mm x 25mm x 7.7mm
  • 4个引脚,间距为0.1“

正如您所看到的,DHT22在更大的范围内更准确,更好。两者都使用单个数字引脚并且数据检测“缓慢”,因为您不能每秒查询一次(DHT11)或两次(DHT22)。

两个传感器都能正常工作,以便在我们的家庭气象站上显示室内信息。

物联网如此简单:带有NODEMCU和OLED的家庭气象站

DHTxx有4个引脚(面向传感器,引脚1最左边):

  1. VCC(我们可以从NodeMCU连接外部5V或3.3V);
  2. 数据输出;
  3. 未连接
  4. 接地。

数据和VCC引脚之间应连接一个10K欧姆的电阻。输出引脚将连接到NodeMCU引脚D3(参见上图)。

让我们定义我们的传感器参数及其相关变量(我们将首先使用DHT22):

/* DHT22 */
#include "DHT.h"
#define DHTPIN D3  
#define DHTTYPE DHT22 
DHT dht(DHTPIN, DHTTYPE);
int localHum = 0;
int localTemp = 0;

现在,让我们创建一个函数来读取它的数据:

获得数据后,让我们将它们呈现在OLED显示屏上:

/***************************************************
* Draw Indoor Page
****************************************************/
void drawDHT() 
{
  int x=0;
  int y=0;
  display.setFont(ArialMT_Plain_10);
  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.drawString(0 + x, 5 + y, "Hum");
  
  display.setFont(ArialMT_Plain_10);
  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.drawString(43 + x, y, "INDOOR");

  display.setFont(ArialMT_Plain_24);
  String hum = String(localHum) + "%";
  display.drawString(0 + x, 15 + y, hum);
  int humWidth = display.getStringWidth(hum);

  display.setFont(ArialMT_Plain_10);
  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.drawString(95 + x, 5 + y, "Temp");

  display.setFont(ArialMT_Plain_24);
  String temp = String(localTemp) + "°C";
  display.drawString(70 + x, 15 + y, temp);
  int tempWidth = display.getStringWidth(temp);
}

下面的图片显示了数据在显示屏上的显示方式。

物联网如此简单:带有NODEMCU和OLED的家庭气象站

完整的程序代码:

第五步 室内数据获取演示

物联网如此简单:带有NODEMCU和OLED的家庭气象站

给TA打赏
共{{data.count}}人
人已打赏
Arduino

Arduino颜色检测

2018-10-17 16:26:29

Arduino

基于nodemcu的简单点阵时钟

2018-10-18 9:57:18

12 条回复 A文章作者 M管理员
  1. node小学徒

    这个可以用DH11来实现么?

    • Luca

      可以哦 DHT11也是可以的 不懂的话看一下教程里的DHT11的怎么获取温度 替换一下就可以

  2. 刀光剑影等风停

    找不到SSD1306库怎么办

    • Luca

      在arduino的库管理里面下载,nodemcu的这个库,可能会有版本的问题,多换几个库试试

  3. ESP8266EX

    可以用51实现吗

    • Luca

      可以,但是联网部分,还是要采用esp8266之类的,本身esp8266就可以作为mcu,再加上51有点多此一举。

  4. 王凡

    大佬,如果我用的是1.3寸屏幕,程序该怎么改呀

    • Luca

      IIC地址搞对,程序传上去看看对不对,我忘了1.3寸的行不行,只用0.96的屏幕试过,不行的话你就换个arduino IDE自带的OLED例程去改改,我记得例程里有可以配置屏幕大小的

    • 王凡

      我昨天成功把显示屏点亮了,然后不知道怎么该把dht11显示到的数据显示在屏幕上,我试着套了下您的代码,然后在display哪里没运行下去,不知道为啥

  5. 王凡

    是因为st7789的库不能用display 函数嘛

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
'); })();