物联网使得现实世界中的实体和数字世界比以往任何时候都更紧密地联系在一起。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. CVPR2020:三维点云无监督表示学习的全局局部双向推理

    CVPR2020:三维点云无监督表示学习的全局局部双向推理 Global-Local Bidirectional Reasoning for Unsupervised Representation L ...

  2. 用java实现图书管理系统。

    图书管理系统. 一.项目设计到的知识 1.MVC设计模式思想(分包) >项目分包 >MVC简单介绍 2.GUI(图形化界面) 3.JDBC连接MySql数据库 4.I/O流 5.面向对象思 ...

  3. java后端知识点梳理——MySQL

    MySQL的索引 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息,就像一本书的目录一样,可以加快查询速度.InnoDB 存储引擎的索引模型底层实现数据结构为 ...

  4. 如何基于 String 实现同步锁?

    如何基于String实现同步锁? 在某些时候,我们可能想基于字符串做一些事情,比如:针对同一用户的并发同步操作,使用锁字符串的方式实现比较合理. 因为只有在相同字符串的情况下,并发操作才是不被允许的. ...

  5. Pytest学习笔记3-fixture

    前言 个人认为,fixture是pytest最精髓的地方,也是学习pytest必会的知识点. fixture用途 用于执行测试前后的初始化操作,比如打开浏览器.准备测试数据.清除之前的测试数据等等 用 ...

  6. Golang控制子gorutine退出,并阻塞等待所有子gorutine全部退出

    Golang控制子gorutine退出,并阻塞等待所有子gorutine全部退出 需求 程序有时需要自动重启或者重新初始化一些功能,就需要退出之前的所有子gorutine,并且要等待所有子goruti ...

  7. 温故知新,CSharp遇见字符串比较(String Comparison),更佳科学的比较字符串

    背景 在C#中,我们经常会遇到需要比较字符串的场景,有时候甚至因为外部输入的不确定性,我们需要忽略大小写来进行比较,以达到判断业务的述求. 对字符串用法的建议 使用.NET进行开发时,请遵循以下简要建 ...

  8. 非静态的字段、方法或属性“System.Web.UI.Page.ClientScript.get”要求对象引用

    解决Response.Write("<script>alert('修改失败,请稍后再试!');</script>");布局错误的问题 在后台CS代码(不是C ...

  9. 集合类线程安全吗?ConcurrentModification异常遇到过吗?如何解决?

    集合类不安全的问题 1. ArrayList的线程不安全问题 1.1 首先回顾ArrayList底层 ArrayList的底层数据结构是数组 底层是一个Object[] elementData的数组, ...

  10. css 小细节

    1.div 设置background-image 图片,显示不全问题:background-size:100% 100%;