ESP32 有强大的超低功耗协处理器 (ULP co-processor)
ULP 协处理器是一个功耗极低的协处理器设备,无论主 CPU 是处于正常运行模式还是 Deep-sleep 模式,ULP 协处理器都可以独立运行。超低功耗协处理器的补充使得 ESP32 能够胜任一些对低功耗要求较高的应用场合。
ULP 协处理器的主要特性有:
采用 8 MHz 频率和 8 KB 内存
内建 ADC 和 I2C 接口
支持正常模式和 Deep-sleep 模式
可唤醒主 CPU 或向主 CPU 发送中断
能够访问主 CPU 的外围设备、内部传感器及 RTC 寄存器
鉴于以上的特性,ULP 协处理器能够在消耗较低电流的情况下,完成 ADC 采样,进行 I2C Sensor 的读写,驱动 RTC GPIO 口动作,可以在某些超低功耗场景中完全替代主 CPU。
参考文档: https://blog.csdn.net/espressif/article/details/79131076
可以看到ESP32在深睡眠模式下可以启动或停止ULP协处理器
这是一个ESP-IDF的原生方法, 如果我们想用, 需要引入头文件
注意: #include <esp_deep_sleep.h>即将被弃用, 所以不要再用这个头文件了
返回: 被唤醒原因码:
ESP32有8KB的RTC存储器
在RTC memory里的变量不会因为deepsleep被清除, 创建方法:
注意, RTC memory会被硬件reset清除
参数:
例子:
首先,并不是每个GPIO都是RTC_GPIO, 详见下表
注意: 我们填写的GPIO引脚号是真正的引脚号 不是其RTC_GPIO编号
思考一个问题, 如果我们有8个GPIO引脚想唤醒ESP32, 难道要用上一节的方法 *** 作8遍吗?
当然不是, 我们可以直接 *** 作引脚集合, (我们用一个mask片选想 *** 作的引脚,然后这些引脚都具有了唤醒ESP32的能力)
我们可以设置这些引脚是 每个都能触发(每个葫芦娃都能自己去救爷爷), 还是一起共同发力才能触发(集齐七龙珠??)
参数:
如: 我们想让 32 33 35 39触发, 这样计算mask
注意: 我们不要使用 37 38
值得注意的是,
这个要做一个专门的ULP专题
首先真正停止Arduino的程序执行是不可能的,一般是使用一个死循环的方式让程序不再执行下去。最基本的方法是用while循环,比如:
while(1){}
这样当程序执行到这一段代码后,就会在里面死循环,不再跳出来。
如果需要跳出也可以在while条件里面增加跳出的判断,比如可以增加从串口到数据后跳出,某一个信号脚被按下跳出等等
int sensorPin1 = A0 // 传感器Aint sensorPin2 = A1 // 传感器B
int ledPin = 13 // LED
int MPin1 = 9 // 电机1
int MPin2 = 10 // 电机2
int sensorValue1 = 0 //
int sensorValue2 = 0; //
void setup() {
pinMode(sensorPin1, INPUT)
pinMode(sensorPin2, INPUT)
pinMode(ledPin, OUTPUT)
pinMode(MPin1, OUTPUT)
pinMode(MPin2, OUTPUT)
}
void loop() {
sensorValue1 = analogRead(sensorPin1)
sensorValue2 = analogRead(sensorPin2)
if (sensorValue1 == sensorValue2) {
digitalWrite(ledPin, HIGH)
digitalWrite(MPin1, LOW)
digitalWrite(MPin2, LOW)
}
if (sensorValue1 <sensorValue2) {
digitalWrite(ledPin, LOW)
digitalWrite(MPin1, LOW)
digitalWrite(MPin2, HIGH)
}
if (sensorValue1 >sensorValue2) {
digitalWrite(ledPin, LOW)
digitalWrite(MPin1, HIGH)
digitalWrite(MPin2, LOW)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)