ESP32 芯片包含两个硬件定时器组。每组有两个通用硬件定时器。它们都是基于 16 位预分频器和 64 位自动重载功能的向上/向下计数器的 64 位通用定时器。
hw_timer_t * timerBegin(uint8_t num, uint16_t divider, bool countUp)
参数:
返回值:
返回一个计时器结构体指针 hw_timer_t *,后续操作均需带上这个指针。
hw_timer_t* tim1= NULL;
tim1 = timerBegin(0,80,true); //80MHZ, ESP32主频80MHz
void timerEnd(hw_timer_t *timer)
参数:
void timerAttachInterrupt(hw_timer_t timer, void (fn)(void), bool edge){}
参数:
timerAttachInterrupt(tim1,tim1Interrupt,true);
void timerDetachInterrupt(hw_timer_t *timer)
void timerAlarmWrite(hw_timer_t *timer, uint64_t alarm_value, bool autoreload){}
参数:
timerAlarmWrite(tim1, 100000, true);
void timerAlarmEnable(hw_timer_t *timer){}
void timerAlarmDisable(hw_timer_t *timer)
bool timerAlarmEnabled(hw_timer_t *timer)
Serial.println(timerAlarmEnabled(tim1));
#include <Arduino.h>
hw_timer_t *tim1 = NULL;
int tim1_IRQ_count = 0;
void tim1Interrupt()
{
Serial.println("haha");
tim1_IRQ_count++;
Serial.println(timerAlarmEnabled(tim1));
}
void setup()
{
Serial.begin(115200);
tim1 = timerBegin(0, 80, true);
timerAttachInterrupt(tim1, tim1Interrupt, true);
timerAlarmWrite(tim1, 100000, true);
timerAlarmEnable(tim1);
}
void loop()
{
if (tim1_IRQ_count > 10)
{
Serial.println("count trigger");
tim1_IRQ_count = 0;
}
}
GPIO 是指单片机(微控制器)主板上的一组引脚,这些引脚可以发送或接收电信号,但它们不是为任何特定目的而设计的,这就是为什么它们被称为“通用”IO。
相信很多人都有把绿植给养死的经历,可能是浇水过多、忘记浇水、较长时间不在家不能浇水等,本文介绍一种可以灵活定制的智能浇花方案。
MicroPython 在 ESP32 上支持线程(Thread)功能,通过_thread模块实现。线程允许程序并发执行多个任务,适合处理需要同时运行的场景,例如传感器数据采集和网络通信。
掌控板3.0升级了主控,还主打AI。带有双麦克风阵列,增加了音频解码芯片,板载了一个1W喇叭,还把之前的单色屏幕换成了1.47寸的彩色屏幕,有更多的可玩性。
使用了 MicroPython 库,通过 定时器(Timer) 和 ADC(模数转换器) 功能来实时读取传感器数据。使用定时器可以实现高精度、非阻塞、低资源消耗的周期性任务,保证实时性和可靠性,特别适用于嵌入式系统中的多任务处理和低功耗场景。
ESP32的DAC函数可以实现真正的模拟输出。
ESP32 没有Arduino输出 PWM 的 analogWrite(pin, value) 方法,取而代之的 ESP32 有一个 LEDC 来实现PWM功能。
本文学习如何使用ESP32开发板来进行多线程的开发。
ESP8266有三种工作模式,分别为:AP,STA,AP混合STA
ESP32有四个SPI外设,分别为SPI0、SPI1、HSPI和VSPI。
ESP32有2个硬件I2C总线接口,接口可以配置为主机或从机模式。