物联网使得现实世界中的实体和数字世界比以往任何时候都更紧密地联系在一起。NodeMCU作为其中的一个重要设备,作用之一就是与传感器相连以实现万物互联通讯。这篇关于NodeMCU的实操篇以土壤湿度传感器和DHT传感器为例,详细介绍了如何使用ESP8266获取传感器的值及相应的示例代码。之所以选择这两个传感器作为示例进行讲解,是因为土壤传感器输出值的信号引脚输出模拟信号,而DHT传感器的信号引脚输出数字信号,在使用过程中也需要引入库(也可以不使用库,代码相对复杂)。当你理解了这篇文章后,NodeMCU与其它大多数传感器的通信也就迎刃而解了。

一、实验所需设备及环境

二、连线方式和示例代码

三、延伸拓展及注意事项

一、实验所需设备及环境

(一)NodeMCU ESP8266

首先你需要了解ESP8266 NodeMCU是什么及其该设备的基本操作环境,如果你没有接触过的话,请先查看NodeMCU小白手把手入门。最好选择ESP-12E型号,关于各个不同型号的NodeMCU的区别看解惑篇的第一部分。

在NodeMCU的引脚图中包含一些GPIO(通用输入输出 general purpose Input Output)引脚,通过它们,可以实现NodeMCU与传感器的通信。GPIO是集成电路的一种数字引脚,可作为接口设备的输入或输出。 如果我们想要控制LED亮度,电机状态等,那么我们需要将其配置为输出。反正,如果我们想要读取开关的状态,传感器数据等,那么我们就要把GPIO配置为输入。  很明显,在本教程中,我们需要配置GPIO为输入,注意在代码中,如需配置GPIO为输入,相关代码pinMode(GPIO, INPUT)可写可不写,如配置GPIO为输出,则把必须使用pinMode(GPIO, OUTPUT)说明。

NodeMCU ESP8266的引脚图(图源:lastminuteengineers.com)

(二)土壤传感器YL-69

土壤传感器用于获取土壤湿度参数,即土壤中的水分百分比。常见的土壤传感器分为两类,电阻型和电容型土壤湿度传感器。它们的原理大同小异,都是用于测量土壤中水分的体积含量,并以传感器输入GPIO(0-1024)的电压值表示水分的多少,电压值越小,表明水分多,土壤越湿;电压值越大,表明导电性不好,土壤越干。详细的关于土壤传感器的知识请查看如何用树莓派获取土壤传感器的值中的土壤传感器部分。在本教程中,使用任一土壤传感器即可,价格低廉。

(三)DHT11传感器

用于获取空气中的温度和湿度数据。详细的关于DHT11的知识请查看如何用树莓派获取DHT传感器的值

(四)Arduino IDE

二、连线方式和示例代码

在Arduino IDE中进行如下设置:开发板:NodeMCU 1.0(ESP-12E Module);上传速度:115200(与代码一致);端口:板子所连端口

(一)土壤传感器与NodeMCU的通信

(1)连线方式

(2) 示例代码:

#define soilPin A0

//存储中间值
int soilValue;
//定义土壤湿度
int soilMoisture;
void setup()
{
Serial.begin(115200);
//这句代码写不写都可
//pinMode(soilPin, INPUT);
}
void loop()
{
//读取土壤传感器上的电压值
soilValue = analogRead(soilPin);
//把电压值按照[0,1023]映射到[100,0]
soilMoisture = map(soilValue,0,1023,100,0);
//每隔一秒输出一次值
delay(1000);
Serial.print("soilMositure: ");
Serial.print(soilMoisture);
Serial.println("%");
}

 (3)输出结果

(二)DHT11与NodeMCU的通信

(1)连线方式

(2)下载库。打开库管理器,搜索DHT,下载DHT sensor libraray。

(3)代码实现

#include "DHT.h"

#define DHTPIN D4     // Digital pin connected to the DHT sensor

#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301) // Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor // Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors. This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs. DHT dht(DHTPIN, DHTTYPE); void setup() {
Serial.begin(115200);
dht.begin();
} void loop() {
// Wait a few seconds between measurements.
delay(1000); // Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature(); //如果温度湿度有一个为空,则输出“获=获取值失败”
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
} //输出温度
Serial.print(t);
Serial.print("℃");
Serial.print(",");
//输出湿度
Serial.print(h);
Serial.println("%"); }

(4)输出结果

三、延伸拓展及注意事项

所有应用于NodeMCU的代码可以直接用于Arduino,更改相应的参数和引脚名称即可。

NodeMCU只有一个模拟引脚,只能同时获取一个输出模拟信号的传感器的值,这是它的局限性。

ESP8266 NodeMCU小白手把手入门(实操篇)以土壤湿度和DHT传感器为例讲解读取传感器的值的更多相关文章

  1. Arduino杀手在此!!ESP 8266 NodeMCU小白手把手入门(二)(解惑篇)

    上一次更新主要是简单介绍了NodeMCU的基本知识并且进行了一次简单的实操演示,最近有一些读者向我提出了一些小问题,所以决定出一期解惑篇,主要针对的是基础知识不是太牢固,或是喜欢刨根问底的小可爱们.里 ...

  2. HDFS集群PB级数据迁移方案-DistCp生产环境实操篇

    HDFS集群PB级数据迁移方案-DistCp生产环境实操篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 用了接近2个星期的时间,终于把公司的需要的大数据组建部署完毕了,当然,在部 ...

  3. GitLab-CI/CD入门实操

    以Spring boot项目为例.传统方式是本地生成jar包,FTP上传服务器,重启服务:如果是内网测试服,也可以在服务器上安装git,在服务器上编译打包.但这都需要人为干预,于是CI/CD就出现了. ...

  4. 02_Linux实操篇

    第五章 VI和VIM编辑器 5.1. VI和VIM基本介绍 Vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器.由于对Unix及Linux系统的任何版本,Vi ...

  5. lightweight openpose 入门实操笔记(pytorch环境)

    最近有个小项目要搞姿态识别,简单调研了一下2D的识别: 基本上是下面几种 (单人)single person 直接关键点回归 heatmap,感觉其实就是把一个点的标签弄成一个高斯分布 (多人)mul ...

  6. nodejs概论(实操篇)

    什么是模块? 模块分为原生模块(node.jsAPI提供的原生模块,在启动时已经被加载)和 文件模块(动态加载模块,主要由原生模块module来实现和完成.通过调 用node.js的require方法 ...

  7. Linux实操篇

    一:用户管理.群组管理 增: 1.指定群组添加账户: groupadd test 创建test用户组useradd -g test(用户组) xiaoming(用户名)       ---- 创建us ...

  8. Linux实操篇 vi和vim编辑器

    vi和vim的基本介绍 所有的Linux系统都会内建vi文本编辑器. vim具有程序编辑的能力,可以看做是vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计.代码补完.编译及错误跳转等 ...

  9. python 学习分享-购物车实操篇

    程序要求如下: '''购物车程序: 启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就直接扣款,不够就 ...

随机推荐

  1. Ascend Pytorch算子适配层开发

    Ascend Pytorch算子适配层开发 适配方法 找到和PyTorch算子功能对应的NPU TBE算子,根据算子功能计算出输出Tensor的size,再根据TBE算子原型构造对应的input/ou ...

  2. Python小白的数学建模课-07 选址问题

    选址问题是要选择设施位置使目标达到最优,是数模竞赛中的常见题型. 小白不一定要掌握所有的选址问题,但要能判断是哪一类问题,用哪个模型. 进一步学习 PuLP工具包中处理复杂问题的字典格式快捷建模方法. ...

  3. Luat Inside | 多功能YAP物联网终端机,你不会还不知道吧?

    简洁高效是合宙产品的一个重要特点,合宙的工程师们用Demo取代繁杂的说明书,以便于开发者快速上手. 有没有可能把这个学习的过程变得更有趣,并且把技术入门难度进一步降低?作为一名Luat技术爱好者,我对 ...

  4. WPF中ListView控件怎么添加新的tiem时滚动条一直在最下面

    listBox.ScrollIntoView(listBox.Items[listBox.Items.Count - 1])

  5. 基于ABP落地领域驱动设计-04.领域服务和应用服务的最佳实践和原则

    目录 系列文章 领域服务 应用服务 学习帮助 系列文章 基于ABP落地领域驱动设计-00.目录和前言 基于ABP落地领域驱动设计-01.全景图 基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践 ...

  6. Unity中各种查找物体的方法

    本文转自博主:Teng的世界 https://blog.csdn.net/teng_ontheway/article/details/47188141 GameObject.Find().Transf ...

  7. Android系统Bitmap内存分配原理与优化

    一.前言 笔者最近致力于vivo游戏中心稳定性维护,在分析线上异常时,发现有相当一部分是由OutOfMemory引起.谈及OOM,我们一般都会想到内存泄漏,其实,往往还有另外一个因素--图片,如果对图 ...

  8. 跟我一起学Go系列:Go gRPC 安全认证机制-SSL/TLS认证

    Go gRPC 系列: 跟我一起学Go系列:gRPC 拦截器使用 跟我一起学Go系列:gRPC 入门必备 第一篇入门说过 gRPC 底层是基于 HTTP/2 协议的,HTTP 本身不带任何加密传输功能 ...

  9. 浅析富文本编辑器框架Slate.js

    浅析富文本编辑器框架Slate.js 本文不是关于Slate.js使用入门的文章,如果还不了解该框架,建议先阅读下官方的文档:Slate官网文档 关于Slate的一些特性 不同于其他编辑器类的库,Sl ...

  10. Exponentiation java大数

    Exponentiation 大数a的n次幂,直到读到EOF(文件结尾)为止,其中忽略小数后面的0 1 import java.util.*; 2 import java.math.*; 3 impo ...