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状态
  • 使用其他的串口调试助手查看打印信息

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

更多

FireBeetle-ESP32-S3简介
FireBeetle-ESP32-S3进阶教程