简介

该Wiki为FireBeetle 2 ESP32-C6及Beetle ESP32-C6的基础教程

如需了解FireBeetle 2 ESP32-C6简介及硬件详情,点击此处

如需了解Beetle ESP32-C6简介及硬件详情,点击此处

如需了解FireBeetle 2 ESP32-C6及Beetle ESP32-C6的进阶教程,点击此处

如需了解Arduino基础,点击此处

电池电压测量

电压计算代码

void setup() {
  // initialize serial communication at 115200 bits per second:
  Serial.begin(115200);

  //set the resolution to 12 bits (0-4096)
  analogReadResolution(12);
}

void loop() {
  // read the analog / millivolts value for pin 0:
  int analogValue = analogRead(0);
  int analogVolts = analogReadMilliVolts(0);

  // print out the values you read:
  Serial.print("ADC analog value = ");
  Serial.println(analogValue);
  Serial.print("ADC millivolts value = ");
  Serial.print(analogVolts);
  Serial.println("mV");
  // Please adjust the calculation coefficient according to the actual measurement.
  Serial.print("BAT millivolts value = ");
  Serial.print(analogVolts * 2);
  Serial.println("mV");
  Serial.println("--------------");
  delay(500);
}

PWM输出

ESP32的PWM功能需要提前定义声明

  • ledcAttach(uint8_t pin, uint32_t freq, uint8_t resolution);
    说明:设置PWM引脚参数

    参数:

    • pin: 产生PWM信号的引脚
    • freq: PWM频率
    • resolution: PWM分辨率(范围1-14位)
  • ledcWrite(uint8_t pin, uint32_t duty);
    说明:输出PWM信号

    参数:

    • pin: 选择引脚
    • duty: 设置占空比
  • ledcWrite(uint8_t pin, uint32_t duty);
    说明:输出PWM信号

    参数:

    • pin: 选择引脚
    • duty: 设置占空比

更多API解释

示例

ESP32的PWM由于其可以自由映射到其它端口进行输出,您需要进行几步设置,该案例将使用帮助您理解其中的步骤
该案例你可以看到LED灯逐渐变亮变暗

/*
 * LED呼吸灯示例
 */
const int ledPin = 15;  // PWM生成后实际输出引脚

//设置PWM参数
const int freq = 5000;//PWM频率
const int ledChannel = 0;//信号生成GPIO
const int resolution = 8;//8位分辨率

void setup(){
  //PWM引脚参数设置
  ledcAttach(ledPin,1000,8);
}

void loop(){
  //逐渐变亮
  for(int dutyCycle = 0; dutyCycle <= 100; dutyCycle++){   
    // changing the LED brightness with PWM
    ledcWrite(ledPin, dutyCycle);
    delay(15);
  }

  //逐渐变暗
  for(int dutyCycle = 100; dutyCycle >= 0; dutyCycle--){
    // changing the LED brightness with PWM
    ledcWrite(ledPin, dutyCycle);   
    delay(15);
  }
}
/*
 * LED呼吸灯示例
 */
const int ledPin = 15;  // PWM生成后实际输出引脚

void setup(){
  
}

void loop(){
  //逐渐变亮
  for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){   
    analogWrite(ledPin, dutyCycle);
    delay(15);
  }

//  //逐渐变暗
  for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
    analogWrite(ledPin, dutyCycle);
    delay(15);
  }
}

中断

ESP32中断可自由分配

  • pinMode(GPIO,INPUT_PULLUP);

    说明:外部中断引脚定义

    参数
    • GPIO:ESP32想要作为中断的引脚号。
    • INPUT_PULLINGUP:设置为上拉模式。
  • attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)

    说明:外部中断

    参数
    • pin:Arduino引脚号。
    • ISR:发生中断时要调用的ISR;此函数必须不带任何参数,并且不返回任何内容。有时将此功能称为中断服务程序。
    • mode:定义何时触发中断。预定义了三个常数作为有效值:
      • CHANGE 当引脚电平发生变化时触发中断引脚
      • RISING 当引脚电平由低电平变为高电平时触发中断引脚
      • FALLING 当引脚电平由高电平变为低电平时触发中断引脚
  • detachInterrupt(digitalPinToInterrupt(pin))
    说明:关闭给定的中断。

    参数
    • pin:需要禁用的中断引脚
  • interrupts()

    说明:重新启用中断(在被noInterrupts()禁用之后。中断允许某些重要任务在后台发生并默认启用。当禁用中断时,某些功能将不起作用,并且传入通信可能会被忽略。可能会稍微破坏代码的时序,但是对于特别关键的代码部分可能会被禁用。
  • noInterrupts()

    说明:禁用中断(您可以使用来重新启用它们interrupts())。中断允许某些重要任务在后台发生,并且默认情况下启用。禁用中断时,某些功能将不起作用,并且传入的通信可能会被忽略。但是,中断可能会稍微破坏代码的时序,并且可能会在代码的特别关键的部分将其禁用。

串口

ESP32串口初始化需要映射,可使用的串口有Serial、Serial1

  • Serial1.begin(baud, config, rxPin, txPin);

    说明:Serial1初始化

    参数
    • baud:波特率。
    • config:数据位和停止位设置。
    • rxPin:RX引脚
    • txPin:TX引脚
Serial1.begin(9600,SERIAL_8N1,/*rx =*/0,/*Tx =*/1);  

舵机

ESP32不能通过Servo库驱动舵机,需要在项目->加载库->管理库中搜索安装ESP32Servo库驱动舵机

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,然后松开BOOT按键,即可烧录。

串口无打印

解决办法

  • 检查USB CDC是否处于Enable状态
  • 使用其他的串口调试助手查看打印信息

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

更多

FireBeetle 2 ESP32-C6简介

Beetle ESP32-C6简介

FireBeetle 2 ESP32-C6及Beetle ESP32-C6进阶教程