合宙ESP32C3 Demo

相关资料

合宙ESP32-C3资料链接


引脚笔记

建议直接使用的引脚

GPIO2、GPIO3、GPIO4、GPIO5、GPIO7、GPIO10、GPIO0、GPIO1

开机默认电平

  • 开机3v3的引脚
    6、8、9、11、19、EN、TX0、RX0

  • 开机1.71V引脚
    12、13

  • 开机低电平引脚
    2、3、4、5、7、10、0、1、18

特殊引脚

BOOT(IO09)管脚上电前不能下拉,ESP32会进入下载模式。

使用到IO08管脚进行设计,不建议外部直接下拉,因为在下载烧录时,IO08管脚为低电平,不能使用串口进行下载。

IO12(GPIO12)、IO13(GPIO13)在QIO模式下为SPI信号SPIHD和SPIWP复用,为了增加可用GPIO数量,开发板选择采用2线SPI的DIO模式,IO12、IO13并未连接flash,使用自己编译的软件时需要注意配置flash为DIO模式。

外置SPI flash的VDD已链接至3.3V电源系统,使用时不需再配置其他电源,采用普通2线SPI通信方式,对应管脚如表4-3。

GPIO11默认为SPI flash的VDD引脚,需要配置后才能作为GPIO使用。解锁后不可恢复,建议不要使用此引脚。

GPIO18/19,精简版开发板,无(CH340串口芯片),用板载TYPEC虚拟串口进行刷机和日志查看会用到18和19.请勿使用作为输出输入。

  • 若程序上传使用的是Arduino IDE,选择开发板型号为AirM2M Core ESP32C3 或 XIAO ESP32 C3

引脚BOM

  • 任意GPIO均可作为PWM脚, 编号与GPIO一致, 但同时只能开启4路PWM,务必注意
引脚 主要功能 其他功能 备注
GPIO0 UART1_TX ADC_0 可直接用
GPIO02 SPI2_CK ADC_2 可直接用
GPIO03 SPI2_MOSI ADC_3 可直接用
GPIO04 I2C_SDA ADC_4 可直接用
GPIO05 I2C_SCL ADC_5 可直接用
GPIO06 可直接用
GPIO07 SPI2_CS 可直接用
GPIO08 拉低时,芯片不能进入下载模式
GPIO09 BOOTMODE 板载按钮(按下拉低) 拉低时,芯片进入下载模式
GPIO1 UART1_RX ADC_1 可直接用
GPIO10 SPI2_MISO 可直接用
GPIO11 VDD_SPI 默认为SPI flash的VDD引脚,需要配置后才能作为GPIO使用
GPIO12 SPIHD 板载LED左(高电平亮) 可直接用
GPIO13 板载LED右(高电平亮) 可直接用
GPIO18 USB_D- 可直接用
GPIO19 USB_D+ 可直接用
GPIO20 UART0_RX 默认串口0
GPIO21 UART0_TX 默认串口0

板载按钮控制板载LED

代码功能,按下板载按钮boot切换左右LED亮灯显示

#include <Arduino.h>

const int board_btn = 9;
const int board_led_left = 12;
const int board_led_right = 13;

void setup()
{
  Serial.begin(9600);
  pinMode(board_btn, INPUT);
  pinMode(board_led_left, OUTPUT);
  pinMode(board_led_right, OUTPUT);
}

void loop()
{
  if (digitalRead(board_btn) == HIGH)
  //默认为高电平
  {
    digitalWrite(board_led_left, HIGH);
    digitalWrite(board_led_right, LOW);
  }
  else
  // 按下按钮为低电平
  {
    digitalWrite(board_led_left, LOW);
    digitalWrite(board_led_right, HIGH);
  }
  Serial.println(digitalRead(board_btn));
  delay(200);
}

控制舵机

由于esp32c3不支持自带舵机库,因此使用延时方式实现控制舵机

#include <Arduino.h>

const int pin_servo = 10;
const int servo_speed = 5;

unsigned long angle_cur = 0;
bool direction1 = true;

void servo_move(const int pin_servo, unsigned int angle, const int servo_speed = 5)
{
  if (angle > 180 || angle < 0)
  {
    angle = 0;
  }
  uint32_t time_servo = map(angle, 180, 0, 2400, 544);
  digitalWrite(pin_servo, HIGH);
  delayMicroseconds(time_servo);
  digitalWrite(pin_servo, LOW);
  delay(servo_speed);
}

void setup()
{
  pinMode(pin_servo, OUTPUT);

  servo_move(pin_servo, 0, 5);
}

void loop()
{
  if (direction1)
  {
    angle_cur++;
    servo_move(pin_servo, angle_cur, 5);
    delay(5);
    if (angle_cur >= 180)
      direction1 = false;
  }
  else
  {
    angle_cur--;
    servo_move(pin_servo, angle_cur, 5);
    delay(5);
    if (angle_cur <= 0)
      direction1 = true;
  }
}

设置PWM示例

可通过串口控制引脚输出PWM的频率和占空比

点击查看代码
#include <Arduino.h>

#define LED_PIN 6

// 定义串口输入缓冲区大小
#define INPUT_BUFFER_SIZE 64

void setup()
{
  // 初始化串口
  Serial.begin(115200);

  // 初始化GPIO8引脚为输出模式
  pinMode(LED_PIN, OUTPUT);

  // 串口发送命令提示
  Serial.println("Enter frequency and duty cycle (in %) separated by a comma (e.g. 1000,50)");
  // 提示输入范围 (1Hz - 10000Hz, 0% - 100%)
  Serial.println("Frequency range: 1Hz - 10000Hz ; Duty cycle range: 0% - 100%");

}

void loop()
{
  // 定义串口输入缓冲区
  char inputBuffer[INPUT_BUFFER_SIZE];

  // 如果收到串口输入
  if (Serial.available() > 0)
  {
    // 读取串口输入到缓冲区
    Serial.readBytesUntil('\n', inputBuffer, INPUT_BUFFER_SIZE);

    // 提取频率和占空比
    int frequency = atoi(strtok(inputBuffer, ","));
    int dutyCycle = atoi(strtok(NULL, ","));

    // 限制频率和占空比在合理范围内 (1Hz - 10000Hz, 0% - 100%)
    frequency = constrain(frequency, 1, 10000);
    dutyCycle = constrain(dutyCycle, 0, 100);

    // 计算PWM频率
    int pwmFrequency = map(frequency, 1, 10000, 1, 1000000);

    // 设置PWM频率
    ledcSetup(0, pwmFrequency, 8);
    ledcAttachPin(LED_PIN, 0);

    // 计算PWM占空比
    int pwmDutyCycle = map(dutyCycle, 0, 100, 0, 255);

    // 设置PWM占空比
    ledcWrite(0, pwmDutyCycle);
    Serial.printf("Frequency: %d, Duty Cycle: %d\n", pwmFrequency, pwmDutyCycle);
  }
  delay(2);
}

此外在ESP32 Arduino SDK 2.0.6中,乐鑫官方更新并支持了pwm的Arduino api,因此如果你的环境ESP32 Arduino SDK更新至2.0.6,则可以直接使用Arduino的指定API,具体如下

analogWrite(pin, dutycycle):在指定的引脚上启用软件PWM。占空比在0到PWMRANGE之间,默认为1023。

analogWrite(pin, 0):禁用指定引脚上的PWM。

analogWriteResolution(new_range):该功能用于改变PWM分辨率。

analogWriteFrequency(new_frequency):调用此功能可将其更改为新频率.PWM频率范围为1 - 1000hz。

使用platform IO编译

如果使用platformIO编译,则需在platformio.ini文件中添加以下内容


[env:esp32-c3-devkitm-1]
platform = espressif32
board = esp32-c3-devkitm-1
framework = arduino
board_build.flash_mode = dio

或在platform文件夹中自定义luat开发板,就不同每次都修改platformio.ini
具体方法参考

posted @ 2022-05-28 23:51  Dapenson  阅读(2110)  评论(0编辑  收藏  举报