1. 简介
该Wiki为FireBeetle-ESP32-S3的基础教程
如需了解FireBeetle-ESP32-S3简介及硬件详情,点击此处
如需了解FireBeetle-ESP32-S3进阶教程,点击此处
如需了解Arduino基础,点击此处
2. PWM输出
ESP32-S3的PWM功能需要提前定义声明
-
ledcSetup(Channel, freq, resolution)
说明:设置PWM通道参数
参数:- LedChannel: 产生PWM信号的通道
- freq: PWM频率
- resolution: PWM分辨率
-
ledcAttachPin(GPIO, Channel)
说明:将PWM通道绑定到GPIO
参数:- GPIO: 输出PWM信号的GPIO
- Channel: 产生PWM信号的通道
-
ledcWrite(Channel, dutyCycle)
说明:输出PWM信号
参数:- Channel: 产生PWM信号的通道
- dutyCycle: PWM值
示例
ESP32-S3的PWM由于其可以自由映射到其它端口进行输出,您需要进行几步设置,该案例将使用帮助您理解其中的步骤
该案例你可以看到LED灯逐渐变亮变暗
/*
* LED呼吸灯示例
*/
const int ledPin = 21; // PWM生成后实际输出引脚
//设置PWM参数
const int freq = 5000;//PWM频率
const int ledChannel = 0;//信号生成GPIO
const int resolution = 8;//8位分辨率
void setup(){
//PWM参数设置
ledcSetup(ledChannel, freq, resolution);
//将生成信号通道绑定到输出通道上
ledcAttachPin(ledPin, ledChannel);
}
void loop(){
//逐渐变亮
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// changing the LED brightness with PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
//逐渐变暗
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// changing the LED brightness with PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
}
3. 中断
ESP32-S3中断可自由分配
-
pinMode(GPIO,INPUT_PULLUP);
说明:外部中断引脚定义
参数: -
GPIO:ESP32-S3想要作为中断的引脚号。
-
INPUT_PULLINGUP:设置为上拉模式。
-
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)
说明:外部中断
参数: -
pin:Arduino引脚号。
-
ISR:发生中断时要调用的ISR;此函数必须不带任何参数,并且不返回任何内容。有时将此功能称为中断服务程序。
-
mode:定义何时触发中断。预定义了三个常数作为有效值:
-
CHANGE 当引脚电平发生变化时触发中断引脚
-
RISING 当引脚电平由低电平变为高电平时触发中断引脚
-
FALLING 当引脚电平由高电平变为低电平时触发中断引脚
-
detachInterrupt(digitalPinToInterrupt(pin))
说明:关闭给定的中断。
参数:- pin:需要禁用的中断引脚
-
interrupts()
说明:重新启用中断(在被noInterrupts()禁用之后。中断允许某些重要任务在后台发生并默认启用。当禁用中断时,某些功能将不起作用,并且传入通信可能会被忽略。可能会稍微破坏代码的时序,但是对于特别关键的代码部分可能会被禁用。 -
noInterrupts()
说明:禁用中断(您可以使用来重新启用它们interrupts())。中断允许某些重要任务在后台发生,并且默认情况下启用。禁用中断时,某些功能将不起作用,并且传入的通信可能会被忽略。但是,中断可能会稍微破坏代码的时序,并且可能会在代码的特别关键的部分将其禁用。
3. 串口
ESP32-S3串口初始化需要映射,可使用的串口有Serial、Serial1、Serial2
- Serial1.begin(baud, config, rxPin, txPin);
说明:Serial1初始化
参数: - baud:波特率。
- config:数据位和停止位设置。
- rxPin:RX引脚
- txPin:TX引脚
Serial1.begin(9600,SERIAL_8N1,/*rx =*/0,/*Tx =*/1);
4. 舵机
ESP32-S3不能通过Servo库驱动舵机,需要在项目->加载库->管理库中搜索安装ESP32_ISR_Servo库驱动舵机
5. SD库
SD类
-
begin(cspin)
说明:初始化SD卡库和 SD卡。当使用SD.begin()时﹐默认将Arduino SPI的SS引脚连接到SD卡的CS使能选择端;也可以使用begin(cspin)指定一个引脚连接到SD卡的CS使能选择端,但仍需保证 SPI 的SS引脚为输出模式,否则SD卡库将无法运行。
参数:- cspin:连接到SD 卡CS端的Arduino引脚。
返回值: boolean型值,为 true表示初始化成功;为 false表示初始化失败。
-
exists()
说明:检查文件或文件夹是否存在于SD卡中。语法:SD. exists(filename)
参数:- filename:需要检测的文件名。其中可以包含路径,路径用“/”分隔。
返回值: boolean型值,为 true表示文件或文件夹存在;为false表示文件或文件夹不存在。
-
open()
说明:打开SD卡上的一个文件。如果文件不存在,且以写入方式打开,则Arduino会创建一个指定文件名的文件。(所在路径必须事先存在)
语法:SD.open(filename,mode)
参数:- filename:需要打开的文件名。其中可以包含路径,路径用“/”分隔。
- mode(可选):打开文件的方式,默认使用只读方式打开。也可以使用以下两种方式打开文件:
FILE_READ:只读方式打开文件; FILE_WRITE,写入方式打开文件。
返回值:返回被打开文件对应的对象﹔如果文件不能打开,则返回false。
-
remove()
说明:从SD卡移除一个文件。如果文件不存在,则函数返回值是不确定的,因此在移除文件之前,最好使用SD. exists(filename)先检测文件是否存在。
语法:SD.remove(filename)
参数:- filename,需要移除的文件名。其中可以包含路径,路径用“!”分隔。
返回值: boolean型值,为true表示文件移除成功;为false表示文件移除失败。
-
mkdir(filename)
说明:创建文件夹。
参数:- filename,需要创建的文件夹名。其中可以包含路径,路径用“/”分隔。
返回值: boolean型值,为 true表示创建成功;为false表示创建失败。
-
rmdir(filename)
说明:移除文件夹。被移除的文件夹必须是空的。语法:SD.rmdir( filename)
参数:- filename,需要移除的文件夹名。其中可以包含路径,路径用“/”分隔。
返回值 : boolean型值,为 true表示移除成功;为false表示移除失败。
File类
File类提供了读/写文件的功能,该类的功能与之前使用的串口相关函数的功能非常类似。其成员函数如下。
-
available()
说明:检查当前文件中可读数据的字节数。语法:file. available()
参数:- file:一个 File类型的对象。返回值:可用字节数。
-
close()
说明:关闭文件,并确保数据已经被完全写入SD卡中。语法:file. close()
参数:- file:一个 File类型的对象。返回值:无。
-
flush()
说明:确保数据已经写入SD卡。当文件被关闭时,flush()会自动运行。语法: file.flush
参数:- file:一个File类型的对象。返回值:无。
-
peek()
说明:读取当前所在字节,但并不移动到下一个字节。
参数- file:一个 File类型的对象。
返回值:下一个字节或者下一个字符。如果没有可读数据,则返回一1。
-
position( )
说明:获取当前在文件中的位置(即下一个被读/写的字节的位置)。语法:file. position()
参数:- file:一个 File类型的对象。返回值:在当前文件中的位置。
-
print()
说明:输出数据到文件。要写入的文件应该已经被打开,且等待写入。语法:file. print(data)file. print(data,BASE)
参数:- file:一个 File类型的对象。
- data,要写入的数据(可以是类型char, byte ,int .long 或 String)。
- BASE(可选),指定数据的输出形式:BIN(二进制);oCT(八进制);DEC(十进制);HEX(十六进制)。
返回值;发送的字节数。
-
println()
说明:输出数据到文件,并回车换行。语法:file. println(data)file,println(data,BASE)
参数:- file:一个 File类型的对象。
- data:要写入的数据(类型可以是char , byte , int , long或String)。
- BASE(可选),指定数据的输出形式:BIN(二进制>;OCT(八进制);DECK十进制;HEX(十六进制)返回值;发送的宇节数。
-
seek()
说明;跳转到指定位置。该位置必须在·到该文件大小之间。语法:file. seek( pos)
参数:- file:一个 File类型的对象。pos,需要查找的位置。
返回值: boolean型值,为 true表示跳转成功;为false表示跳转失败。
-
size()
说明:获取文件的大小。语法:filue. size()
参数:- file:一个File类型的对象。
返回值:以字节为单位的文件大小。
-
read()
说明:读取1B数据。语法:file.read参数:- file:一个 File类型的对象。
返回值:下一个字节或者字符;如果没有可读数据,则返回一1。
-
write()
说明;写入数据到文件。语法:file. write(data)file. write(buf,len)
参数:- file:一个File类型的对象。
- data:要写入的数据,类型可以是 byte ,char或字符串(char * ) 。buf,一个字符数组或者宁节数据。
- len:buf数组的元素个数。
返回值:发送的字节数。
-
isDirectory()
说明:判断当前文件是否为目录。语法:file.isDirectory()
参数:- file:一个File类型的对象。
返回值: boolcan型值;为 true表示是目录;为 false表示不是目录。
-
openNextFile()
说明:打开下一个文件。语法:file.openNextFile()
参数: -
file:一个 File类型的对象。
返回值:下一个文件对应的对象。
- rewindDirectory()
说明:回到当前目录中的第一个文件。语法:file.rewindDirectory()
参数:
file,一个File类型的对象。返回值:无。
####示例
示例请看File > Examples > SD > SD_Test
常见问题
烧录报错
原因
-
如果Loop中延时过短或者不加延时会导致烧录超时
-
错误的调用一些函数会导致计算机不能识别USB
解决办法
- 按住BOOT,再按下RST,然后松开两个按键,再烧录。
串口无打印
解决办法
- 检查USB CDC是否处于Enable状态
- 使用其他的串口调试助手查看打印信息
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。