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学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

随机推荐

  1. java容器-Iterator

    1介绍 java中的容器主要是Collection<E>的子类型,即都实现了Iterable<E>接口,即使是Map类型,也有entrySet方法可以获得该Map的所有元素组成 ...

  2. PHP 判断手机端还是web端

    function isMobile(){ // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) re ...

  3. web网上书店总结(jsp+servlet)

    web网上书店总结 前端的首页.效果如下: 基本上按照页面有的内容对其实现功能.按照用户划分功能模块,有后台管理员和普通用户,登录的时候会判断账户的类别,例如0权限代表普通用户登录,1权限代表管理员登 ...

  4. Log4j配置按照文件大小和日期分割日志文件

    目录 Log4j 下载地址 文件大小分割日志文件 以日期分割每天产生一个日志文件 自定义信息输出到日志文件 Log4j 下载地址 Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控 ...

  5. 【函数分享】每日PHP函数分享(2021-1-19)

    substr 函数返回字符串的一部分.注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0. string substr (string $string ...

  6. LeetCode202. 快乐数

    题目 编写一个算法来判断一个数 n 是不是快乐数. 快乐数定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1, 也可能是 无限循环 但始终变不到 ...

  7. 创建并使用https证书

    目录 前言 产生证书 测试https服务器 用tls加密tcp连接 总结 前言 https要比http更安全些,因此可以配置Nginx服务器使用证书,客户端就会去第三方平台校验证书. 但是我们自己的服 ...

  8. 【MYSQL】DDL语句

    介绍:DDL语句,即数据定义语句,定义了不同的数据段,数据库表.表.列.索引等数据库对象:例如,create.drop.alter 适用对象:一般是由数据库管理员DBA使用 1.连接数据库 mysql ...

  9. 从软件(Java/hotspot/Linux)到硬件(硬件架构)分析互斥操作的本质

    先上结论: 一切互斥操作的依赖是 自旋锁(spin_lock),互斥量(semaphore)等其他需要队列的实现均需要自选锁保证临界区互斥访问. 而自旋锁需要xcmpchg等类似的可提供CAS操作的硬 ...

  10. 在vCenter Server中添加ESXi 主机失败的问题

    报错:出现了常规系统错误: Timed out waiting for vpxa to start 报错是这个,我看了下vcenter的版本是6.5,如图右上,这个报错是因为我ESXI主机是6.7的, ...