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 ...
随机推荐
- java容器-Iterator
1介绍 java中的容器主要是Collection<E>的子类型,即都实现了Iterable<E>接口,即使是Map类型,也有entrySet方法可以获得该Map的所有元素组成 ...
- PHP 判断手机端还是web端
function isMobile(){ // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) re ...
- web网上书店总结(jsp+servlet)
web网上书店总结 前端的首页.效果如下: 基本上按照页面有的内容对其实现功能.按照用户划分功能模块,有后台管理员和普通用户,登录的时候会判断账户的类别,例如0权限代表普通用户登录,1权限代表管理员登 ...
- Log4j配置按照文件大小和日期分割日志文件
目录 Log4j 下载地址 文件大小分割日志文件 以日期分割每天产生一个日志文件 自定义信息输出到日志文件 Log4j 下载地址 Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控 ...
- 【函数分享】每日PHP函数分享(2021-1-19)
substr 函数返回字符串的一部分.注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0. string substr (string $string ...
- LeetCode202. 快乐数
题目 编写一个算法来判断一个数 n 是不是快乐数. 快乐数定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1, 也可能是 无限循环 但始终变不到 ...
- 创建并使用https证书
目录 前言 产生证书 测试https服务器 用tls加密tcp连接 总结 前言 https要比http更安全些,因此可以配置Nginx服务器使用证书,客户端就会去第三方平台校验证书. 但是我们自己的服 ...
- 【MYSQL】DDL语句
介绍:DDL语句,即数据定义语句,定义了不同的数据段,数据库表.表.列.索引等数据库对象:例如,create.drop.alter 适用对象:一般是由数据库管理员DBA使用 1.连接数据库 mysql ...
- 从软件(Java/hotspot/Linux)到硬件(硬件架构)分析互斥操作的本质
先上结论: 一切互斥操作的依赖是 自旋锁(spin_lock),互斥量(semaphore)等其他需要队列的实现均需要自选锁保证临界区互斥访问. 而自旋锁需要xcmpchg等类似的可提供CAS操作的硬 ...
- 在vCenter Server中添加ESXi 主机失败的问题
报错:出现了常规系统错误: Timed out waiting for vpxa to start 报错是这个,我看了下vcenter的版本是6.5,如图右上,这个报错是因为我ESXI主机是6.7的, ...