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 ...
随机推荐
- eclipse中把spring源码关联至当前工程
1.下载并导入spring的相关jar包下载对应版本的spring 2.在当前工程中,选择Referenced Libraries,展开后,选择相应的jar包,右击并选择Properties 3. 在 ...
- CentOS8_在线安装_网络源_网络镜像源填写格式_以及其他笔记
CentOS8_在线安装_网络源_网络镜像源填写格式_以及其他笔记 转载注明来源: 本文链接 来自osnosn的博客,写于 2020-10-1. 参考: Centos8.0.1905 在线安装源选择 ...
- 电脑加载有文件的CD、DVD驱动器图标修改
CD的图标有一定限制,不知道你说的是有盘状态还是默认的状态.插入光盘状态:用autorun.inf格式:[autorun]open=Install.exe 点击光盘时的起动程序icon=Autorun ...
- 转载-notepad++ zend-coding使用
转载-notepad++ zend-coding使用 zen-Coding是一款快速编写HTML,CSS(或其他格式化语言)代码的编辑器插件,这个插件可以用缩写方式完成大量重复的编码工作,是web ...
- keycloak集成微信登陆~解决国内微信集成的问题
之前看了国内写的微信集成keycloak的文章,然后拿来就用了,但我的是jboss部署的keycloak,然后使用他的包之后,会出现类无法找到的问题,之后找了很多资料,多数都是国外的,在今天终于找到了 ...
- leetcode 940. 不同的子序列 II (动态规划 ,字符串, hash,好题)
题目链接 https://leetcode-cn.com/problems/distinct-subsequences-ii/ 题意: 给定一个字符串,判断里面不相同的子串的总个数 思路: 非常巧妙的 ...
- 09--Docker 安装tomcat9
1.在hub.docker.com中获取tomcat拉取地址 docker pull tomcat:9.0.41-jdk8-corretto 2.查看Dockerfile 中WORKDIR 为/use ...
- Spring Aop中四个重要概念,切点,切面,连接点,通知
1. 通知: 就是我们编写的希望Aop时执行的那个方法.我们通过Aop希望我们编写的方法在目标方法执行前执行,或者执行后执行.2. 切点:切点就是我们配置的满足我们条件的目标方法.比如我们规定:名字前 ...
- DSL是什么?Elasticsearch的Query DSL又是什么?
1.DSL简介 DSL 其实是 Domain Specific Language 的缩写,中文翻译为领域特定语言.而与 DSL 相对的就是 GPL,这里的 GPL 并不是我们知道的开源许可证(备注:G ...
- elasticsearch-head:5连接elasticsearch 6.x无法显示浏览数据的解决方案
问题 在docker安装了elasticsearch-head:5和elasticsearch:6.3.2 打开界面连接es时发现数据无法展示. 解决方案 因docker使用的版本问题,可能名称略有变 ...