首页 » 软件开发 » ESP 12系列arduino环境开发基础(电压引脚中断调用函数)

ESP 12系列arduino环境开发基础(电压引脚中断调用函数)

少女玫瑰心 2024-07-24 06:54:19 0

扫一扫用手机浏览

文章目录 [+]

今天我们先来学习ESP12系列的基础功能和应用。

中断功能

基于ESP8266的NodeMcu的数字IO的中断功能是通过attachInterrupt,detachInterrupt函数所支持的。
除了D0/GPIO16,中断可以绑定到任意GPIO的引脚上。
所支持的标准中断类型有:CHANGE(改变沿,电平从低到高或者从高到低)、RISING(上升沿,电平从低到高)、FALLING(下降沿,电平从高到低)。

ESP 12系列arduino环境开发基础(电压引脚中断调用函数) 软件开发
(图片来自网络侵删)

1.attachInterrupt() 该功能用于在将指定引脚设置为响应中断。

函数: attachInterrupt(pin, function, mode);

参数:

pin:要设置中断的端口编号,注意,这里不是引脚编号。

function:中断发生时运行的函数, 这个函数不带任何参数,不返回任何内容。

Interrupt type/mode:它定义中断被触发的条件方式。

CHANGE:改变沿,引脚电平从低变为高或者从高变为低时触发中断。

RISING:上升沿,引脚电平从低变为高时触发中断。

FALLING:下降沿,引脚电平从高变为低时触发中断。

返回值: 无;

2.detachInterrupt() 该功能用于禁用指定GPIO引脚上的中断。

函数: detachInterrupt(pin)

参数:

pin:要禁用的中断的GPIO引脚。

返回值: 无;

3.digitalPinToInterrupt() 该功能用于获取指定GPIO引脚的中断号。

函数: digitalPinToInterrupt(pin)

参数:

pin:要获取中断号的GPIO引脚。

void setup() { Serial.begin(115200);//设置串口波特率 attachInterrupt(digitalPinToInterrupt(D2), InterruptFunc, RISING);//设置中断号、响应函数、触发方式 } void loop() { } / 中断响应函数 / void InterruptFunc(){ Serial.println(\"Hello ESP8266\"); }

模拟输入(ADC)

1.测量外部电压:analogRead(A0),用于读取施加在模块的ADC引脚上的外部电压;

输入电压范围:0 - 1.0V之间;

测量精度:由于ADC具有10位分辨率,因此会给出0-1023的值范围;

注意点: 为了支持外部电压范围(0-3.3v),NodeMcu做了一个电阻分压器,如图所示:

编写一个读取NodeMcu的ADC引脚上的模拟电压。
我们这里使用电位器在ADC引脚上提供0-3.3V的可变电压。
如下图连接线:

void setup() { Serial.begin(115200);//配置波特率}void loop() { Serial.print(\"ADC Value: \"); Serial.println(analogRead(A0));//输出0-1023 对应 外部输入电压 0-1.0v //延时1s delay(1000);}

2 测量系统电压

ESP.getVcc(),读取NodeMCU模块的VCC电压,单位是mV;

注意点

ADC引脚必须保持悬空;在读取VCC电源电压之前,应更改ADC模式以读取系统电压。

在#include行后面使用ADC_MODE(mode)

模式是ADC_TOUT(对于外部电压),ADC_VCC(对于系统电压)。
默认情况下,它读取外部电压。

例程

编写ESP8266读取系统电压,代码如下:

ADC_MODE(ADC_VCC);//设置ADC模式为读取系统电压void setup() { Serial.begin(115200);}void loop() { Serial.print(\"ESP8266当前系统电压(mV): \"); Serial.println(ESP.getVcc()); delay(1000);}

模拟输出(PWM)

NodeMcu PWM引脚:基本上数字IO都可以作为PWM复用引脚,除了D0。
不过需要注意的是,D3尽量不用,它内部连接ESP8266 GPIO0。

NodeMcu PWM有关Arduino函数

1.analogWrite()不解释

2.analogWriteRange() 该功能用于改变PWMRANGE数值。
可以理解为PWM精度范围。
同样的PWM频率下,默认占空数值0-123。
如果你改变PWMRANGE为2047,那么占空数值就变成0-2047。
精度高了一倍。

函数: analogWriteRange(new_range)

analogWriteFreq()该功能用于改变PWM频率。
默认是1kHZ。
可控PWM频率范围应该是100Hz-40KHz。

函数: analogWriteFreq(new_frequency)

串口通信(Serial)

NodeMcu上有两组串口,Serial和Serial1。
Serial使用UART0,默认对应引脚是GPIO1(TX)和GPIO3(RX)。
在Serial.begin执行之后,调用Serial.swap()可以将Serial重新映射到GPIO15(TX)和GPIO13(RX)。
再次调用Serial.swap()将Serial重新映射回GPIO1和GPIO3。
不过,一般情况下,默认就好。

void setup() { // 这里开始写初始化代码,只会执行一次 Serial.begin(115200); Serial.println(\"GPIO1(TX),GPIO3(RX)\"); //调用映射方法 Serial.swap(); Serial.println(\"GPIO15(TX),GPIO13(RX)\"); //重新映射回来 Serial.swap(); Serial.println(\"GPIO1(TX),GPIO3(RX)\");}void loop() { //这里写运行代码,重复执行}

Serial1使用UART1,默认对应引脚是GPIO2(TX)。
Serial1不能用于接收数据,因为它的RX引脚被用于flash芯片连接。
要使用Serial1,请调用Serial.begin(baudrate)。
代码如下:

void setup() { // 这里开始写初始化代码,只会执行一次 Serial.begin(115200); Serial.println(\"Hello Serial\"); Serial1.begin(115200); Serial1.println(\"Hello Serial1\");}void loop() { //这里写运行代码,重复执行}

如果不使用Serial1并且不映射串口,可以将UART0的TX映射到GPIO2,具体操作是:在Serial.begin()之后调用Serial.set_tx(2)或者直接调用Serial.begin(baud,config,mode,2)。

默认情况下,当调用Serial.begin后,将禁用WiFi库的诊断输出。
要想再次启动调试输出,请调用Serial.setDebugOutput(true)。
要将调试输出映射到Serial1时,需要调用Serial1.setDebugOutput(true)。

调用Serial.setRxBufferSize(size_t size)允许定义接收缓冲区的大小,默认值是256(缓冲区也是使用内存,意味着不能一味地去增大这个值)。

Serial和Serial1对象都支持5,6,7,8个数据位,奇数(O)、偶数(E)和无(N)奇偶校验,以及1或者2个停止位。
要设置所需的模式,请调用Serial.begin(baudrate, SERIAL_8N1), Serial.begin(baudrate, SERIAL_6E2)等。

Serial和Serial1都实现了一种新方法用来获取当前的波特率设置。
要获取当前的波特率,请调用Serial.baudRate(),Serial1.baudRate()。
代码如下:

void setup() { // 这里开始写初始化代码,只会执行一次 // 设置当前波特率为57600 Serial.begin(57600); // 获取当前波特率 int br = Serial.baudRate(); // 将打印 \"Serial is 57600 bps\" Serial.printf(\"Serial is %d bps\", br);}void loop() { //这里写运行代码,重复执行}

Serial和Serial1都属于硬件串口(HardwareSerial)的实例,如果读者需要使用ESP8266 软件串口的功能,请参考以下库:https://github.com/plerup/espsoftwareserial。

标签:

相关文章

语言中的借用,文化交融的桥梁

自古以来,人类社会的交流与发展离不开语言的传播。在漫长的历史长河中,各民族、各地区之间的文化相互碰撞、交融,产生了许多独特的语言现...

软件开发 2025-01-01 阅读1 评论0

机顶盒协议,守护数字生活的新卫士

随着科技的飞速发展,数字家庭逐渐走进千家万户。在这个时代,机顶盒成为了连接我们与丰富多彩的数字世界的重要桥梁。而机顶盒协议,作为保...

软件开发 2025-01-01 阅读1 评论0

语言基础在现代社会的重要性及方法步骤

语言是人类沟通的桥梁,是社会发展的基础。语言基础作为语言学习的基石,对于个人、社会乃至国家的发展具有重要意义。本文将从语言基础在现...

软件开发 2025-01-01 阅读2 评论0

粤语电影,传承文化,点亮时代之光

粤语电影,作为中国电影产业的一朵奇葩,以其独特的地域特色、丰富的文化内涵和鲜明的艺术风格,赢得了广大观众的喜爱。本文将从粤语电影的...

软件开发 2025-01-01 阅读3 评论0

苹果游戏语言,塑造未来娱乐体验的基石

随着科技的飞速发展,游戏产业逐渐成为全球娱乐市场的重要支柱。在我国,游戏产业更是蓬勃发展,吸引了无数玩家和投资者的目光。而在这其中...

软件开发 2025-01-01 阅读1 评论0