物联网使得现实世界中的实体和数字世界比以往任何时候都更紧密地联系在一起。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. 特斯拉Tesla Model 3整体架构解析(上)

    特斯拉Tesla Model 3整体架构解析(上) 一辆特斯拉 Model 3型车在硬件改造后解体 Sensors for ADAS applications 特斯拉 Model 3型设计的传感器组件 ...

  2. 孟老板 BaseAdapter封装 (二) Healer,footer

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...

  3. Node.js使用本地依赖

    最近项目组写了几个模块,打算采用依赖的方式来使用它们. 因为敏感性问题,不打算发布到npm官方仓库:自行搭建一个npm仓库成本也大. 所以最后决定采用本地安装. 即在package.json中填写如下 ...

  4. 微软发布了Visual Studio 2022 Preview 1 以及.NET 6 Preview 5

    Microsoft 今天宣布了Visual Studio 2022 的第一个预览版,并且同时也发布了.NET 6 Preview 5. https://devblogs.microsoft.com/v ...

  5. leetcode5698.基本计算器

    给你一个整数数组 nums ,和两个整数 limit 与 goal .数组 nums 有一条重要属性:abs(nums[i]) <= limit . 返回使数组元素总和等于 goal 所需要向数 ...

  6. Scala语言笔记 - 第三篇(容器方法篇)

    Scala语言笔记 - 第三篇(容器方法篇) 目录 Scala语言笔记 - 第三篇(容器方法篇) map和flapMap方法: ​ 最近研究了下scala语言,这个语言最强大的就是它强大的函数式编程( ...

  7. 微信sdk上传图片大小1k,损坏的问题以及微信上传图片需要的配置

    微信公众号的appid和appsecret有问题,会导致上传图片大小为1k这个问题 微信上传图片需要设置公众号的'JS接口安全域名'

  8. Java 提效神器 Stream 的冷门技巧

    Stream 使用这个方法创建一个 Stream 对象. new ArrayList<>().stream() Filter 过滤器,里面传递一个函数,这个函数的返回结果如果为 true ...

  9. 流程自动化RPA,Power Automate Desktop系列 - 发布文档中心

    一.背景 内网中有一个基于VuePress搭建的静态文档中心,但是每次修改后都需要重新Build一次才行,之前都是手动执行命令,现在可以基于Power Automate Desktop来创建任务了. ...

  10. Vue(14)slot插槽的使用

    为什么使用slot slot(插槽) 在生活中很多地方都有插槽,电脑usb的插槽,插板当中的电源插槽 插槽的目的是为了让我们原来的设备具备更多的扩展性 比如电脑的USB我们可以插入U盘,手机,鼠标,键 ...