NodeMCU学习笔记
NodeMCU学习笔记
引脚连通
| 引脚 | 连通 |
|---|---|
| D3 | FLASH按键 |
| D0 | 模组上的LED |
| D4 | 芯片的LED |
FLASH按键
D3引脚已经与开发板上的FLASH按键开关连接
我们可以通过NodeMCU开发板上的FLASH按键控制D3引脚的电平。当我们没有按下该按键时,D3引脚将会保持高电平状态。当按下该按键后,D3引脚会变为低电平。
板载LED
D0就是模组上的LED
D4连通芯片的LED
示例程序
按下FLASH按键,D3置低,模组LED(D0)闪烁
松开FLASH按键,D3置高,芯片LED(D4)闪烁
/**********************************************************************
程序名称/Program name : led_test
作者/Author : Dapenson
日期/Date(YYYYMMDD) : 20200422
程序目的/Purpose :
用于演示2个板载LED与FLASH按键的效果
按下FLASH按键,模组LED亮,没有按下则芯片LED亮
(请注意下方"其它说明"中重要信息!)
-----------------------------------------------------------------------
修订历史/Revision History
日期/Date 作者/Author 参考号/Ref 修订说明/Revision Description
-----------------------------------------------------------------------
其它说明:
D3----FLASH按键
D4----ESP8266芯片LED
D0----NodeMCU模组LED
***********************************************************************/
void setup() {
//初始化引脚及串口
pinMode(D3, INPUT);
pinMode(D0, OUTPUT);
pinMode(D4, OUTPUT);
Serial.begin(115200);
//由于NodeMCU引脚置低时灯亮(与UNO相反),因此我们开始时关闭两个灯
digitalWrite(D4, LOW);
digitalWrite(D0, LOW);
}
void loop() {
if ( digitalRead(D3) == HIGH)
{
mblink(D4);
Serial.println("D4 blink");
}
else
{
mblink(D0);
Serial.println("D0 blink");
}
}
void mblink(int pin) {
int i;
for (i = 0; i <= 3; i++) {
digitalWrite(pin, HIGH);
delay(500);
digitalWrite(pin, LOW);
delay(500);
}
}
中断函数
在NodeMCU的D0-D8引脚上可用,经过测试D2~D8都没问题
关于中断函数的说明,详情可查看太极创客 - 中断函数
//设置中断
attachInterrupt(digitalPinToInterrupt(D3), IntCallback, CHANGE);
//取消中断
detachInterrupt(D3);
//停止中断
noInterrupts();
//启用中断
interrupts();
注意
- 2.5.2以后版本需要增加
ICACHE_RAM_ATTR标识 ,否则将发生ISR崩溃,(我在这里排查了很久) - 在中断服务程序中,不能使用delay()函数和millis()函数。因为他们无法在中断服务程序中正常工作。delayMicroseconds()可以在中断服务程序中正常工作。
- 中断服务程序应尽量保持简单短小。否则可能会影响Arduino工作。
- 中断服务程序中涉及的变量应声明为volatile类型。
- 中断服务程序不能返回任何数值。所以应尽量在中断服务程序中使用全局变量。
示例程序
/**********************************************************************
程序名称/Program name : attachInterrupt_test_01
作者/Author : Dapenson
日期/Date(YYYYMMDD) : 20200422
程序目的/Purpose :
用于演示NodeMCU的中断效果
按下或松开FLASH按键触发中断,数字增大,主函数将一直将数字打印到串口
(请注意下方"其它说明"中重要信息!)
-----------------------------------------------------------------------
修订历史/Revision History
日期/Date 作者/Author 参考号/Ref 修订说明/Revision Description
-----------------------------------------------------------------------
其它说明:
***********************************************************************/
volatile int i = 0 ;
void ICACHE_RAM_ATTR IntCallback();
void setup() {
Serial.begin(115200);
attachInterrupt(digitalPinToInterrupt(D3), IntCallback, CHANGE);
}
void loop() {
Serial.println(i);
delay(100);
}
void IntCallback() {
i++;
}
/**********************************************************************
程序名称/Program name : attachInterrupt_test_02
作者/Author : Dapenson
日期/Date(YYYYMMDD) : 20200422
程序目的/Purpose :
用于演示NodeMCU的中断效果
按下或松开FLASH按键触发中断,将信息打印到串口
(请注意下方"其它说明"中重要信息!)
-----------------------------------------------------------------------
修订历史/Revision History
日期/Date 作者/Author 参考号/Ref 修订说明/Revision Description
-----------------------------------------------------------------------
其它说明:
***********************************************************************/
void setup() {
Serial.begin(115200);
//将中断触发引脚设置为INPUT_PULLUP(输入上拉)模式
pinMode(D3, INPUT_PULLUP);
attachInterrupt(D3, FunctionName, CHANGE);
}
void loop() {
}
ICACHE_RAM_ATTR void FunctionName()
{
//停止中断
//detachInterrupt(D3);
noInterrupts();
if (digitalRead(D3) == 0) {
Serial.print(digitalRead(D3)); Serial.println("{\"human\":true}");
}
else if (digitalRead(D3) == 1) {
Serial.print(digitalRead(D3)); Serial.println("{\"human\":false}");
}
delayMicroseconds(500000);
//启用中断
interrupts();
//attachInterrupt(D3, FunctionName, CHANGE);
}
NodeMCU学习笔记的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
随机推荐
- 七、Elasticsearch+elasticsearch-head的安装+Kibana环境搭建+ik分词器安装
一.安装JDK1.8 二.安装ES 三个节点:master.slave01.slave02 1.这里下载的是elasticsearch-6.3.1.rpm版本包 https://www.elastic ...
- 神经网络中的降维和升维方法 (tensorflow & pytorch)
大名鼎鼎的UNet和我们经常看到的编解码器模型,他们的模型都是先将数据下采样,也称为特征提取,然后再将下采样后的特征恢复回原来的维度.这个特征提取的过程我们称为"下采样",这个恢复 ...
- Second_week_mofangzhen
第二周 奇数阶魔方阵 一.上节回顾 1.数组的基本操作 数组:若干个相同类型变量的集合. 声明:数据类型 数组名称[]; (在栈内存分配空间,存储的是数组的引用地址.数组首元素在堆内存 中的地址) 初 ...
- 白日梦的Elasticsearch笔记(一)基础篇
目录 一.导读 1.1.认识ES 1.2.安装.启动ES.Kibana.IK分词器 二.核心概念 2.1.Near Realtime (NRT) 2.2.Cluster 2.3.Node 2.4.In ...
- 最新最简洁Spring Cloud Oauth2.0 Jwt 的Security方式
因为Spring Cloud 2020.0.0和Spring Boot2.4.1版本升级比较大,所以把我接入过程中的一些需要注意的地方告诉大家 我使用的版本是Spring boot 2.4.1+Spr ...
- Java 设置Excel条件格式(高亮条件值、应用单元格值/公式/数据条等类型)
概述 在Excel中,应用条件格式功能可以在很大程度上改进表格的设计和可读性,用户可以指定单个或者多个单元格区域应用一种或者多种条件格式.本篇文章,将通过Java程序示例介绍条件格式的设置方法,设置条 ...
- Linux学习笔记 | docker基本命令
Docker的三大核心概念:镜像.容器.仓库 镜像:类似虚拟机的镜像.用俗话说就是安装文件. 容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例,可以将其启动.开始.停止.删除.而这些容器都是相 ...
- Java高并发与多线程(三)-----线程的基本属性和主要方法
今天,我们开始Java高并发与多线程的第三篇,线程的基本属性和主要方法. [属性] 编号(ID) 类型long 用于标识不同的线程,编号唯一,只存在java虚拟机的一次运行 名称(Name) 类型St ...
- Navicat linux 官方最新版安装破解
我们直接去官网下载linux版navicat 下载好之后执行命令打开软件 chmod +x navicat15-premium-cs.AppImage ./navicat15-premium-cs.A ...
- 微服务网关2-搭建Gateway服务
一.创建父模块infrastructure 1.创建模块 在guli_parent下创建普通maven模块 Artifact:infrastructure 2.删除src目录 二.创建模块api_ga ...