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. [开源软件] 腾讯云Linux服务器一键安装LAMP/LNMP/LANMP环境 转

    本帖最后由 我本戏子 于 2015-8-13 22:00 编辑OneinStack是非常优秀的一键PHP/JAVA安装脚本,提供以下环境:lnmp(Linux + Nginx+ MySQL+ PHP) ...

  2. R语言学习笔记-Corrplot相关性分析

    示例图像 首先安装需要的包 install.packages("Corrplot") #安装Corrplot install.packages("RColorBrewer ...

  3. 【Spring】Spring 入门

    Spring 入门 文章源码 Spring 概述 Spring Spring 是分层的 Java SE/EE 应用全栈式轻量级开源框架,以 IOC(Inverse Of Control,反转控制)和 ...

  4. 计算机考研真题 ZOJ问题

    题目描述 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. 是否AC的规则如下: 1. zoj能AC: 2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或 ...

  5. win10打开IIS服务并发布网站

    1.打开控制面板 win+x后点击控制面板 2.点击程序集下边的解除安装程式 3.点击开启或关闭windows功能 4.找到Internet information services并勾选前面的复选框 ...

  6. Nginx和Tomcat配置SSL实现https访问

    环境:CentOS 7 Nginx版本: nginx/1.18.0 1. 安装nginx 详细步骤可以参考如下官网:http://nginx.org/en/linux_packages.html#RH ...

  7. Trino总结

    文章目录 1.Trino与Spark SQL的区别分析 2.Trino与Spark SQL解析过程对比 3.Trino基本概念 4.Trino架构 5.Trino SQL执行流程 6.Trino Ta ...

  8. LuoguP5488 差分与前缀和

    题意 给定一个长为\(n\)的序列\(a\),求出其\(k\)阶差分或前缀和.结果的每一项都需要对\(1004535809\)取模. 打表找规律 先看前缀和,设\(n=5\),\(k=4\),按照阶从 ...

  9. floating point

    记录浮点数的单精度和双精度(IEEE754) 1.单精度(float) ​ 1.定义:单精度占4字节/32位,其中1号位符号位,其次是8位阶码/指数(阶符+阶数),23位尾数(小数). 2.双精度(d ...

  10. 深度学习DeepLearning技术实战(12月18日---21日)

    12月线上课程报名中 深度学习DeepLearning(Python)实战培训班 时间地点: 2020 年 12 月 18 日-2020 年 12 月 21日 (第一天报到 授课三天:提前环境部署 电 ...