ESP32-C6-GEEK 使用教程

ESP32-C6-GEEK


ESP32-C6-GEEK 是一款微雪 (Waveshare) 为极客设计的开发板,板载 USB-A 公口、1.14 英寸 LCD 屏幕、Micro SD 卡槽等外设,支持 2.4GHz WiFi 6 和 BLE 5,集成 16MB Flash ,提供 I2C 接口、UART 接口和 GPIO 接口,可以为你的项目提供更多可能。

产品特性

  • 主芯片采用乐鑫 ESP32-C6
  • 搭载 高性能 32 位 RISC-V 处理器,主频高达 160MHz
  • 内置 512 KB SRAM,320 KB ROM,板载 16MB Flash
  • 板载 1.14 英寸 240×135 像素的 65K 彩色 IPS LCD 显示屏
  • 集成 2.4 GHz Wi-Fi 6 和 Bluetooth 5 (LE) 双模无线通信
  • 板载 Micro SD 卡座,可外接 SD 卡存储图片或文件
  • 板载 3PIN UART、3PIN GPIO 及 4PIN I2C 接口
  • 配备塑料外壳以及相关连接线材
  • 提供完善的开源例程资料,方便编程学习和开发项目

板载资源


  1. ESP32-C6 支持 Wi-Fi 和蓝牙 SoC,160MHz 运行频率
  2. 16MB NOR-Flash 用于存储数据
  3. Micro SD 卡槽
  4. USB-A 接口
  5. UART 接口 可用于实现 USB 串口转接器的功能
  6. GPIO 接口 引出可用 IO 功能引脚,方便扩展使用
  7. I2C 接口 可用于测试目标板
  8. BOOT 按键 用于设备启动和功能调试
  9. 板载贴片天线 支持 2.4GHz Wi-Fi 6 (802.11 b/g/n) 和 Bluetooth 5 (LE)

LCD 屏幕参数

工作电压3.3V / 5V分辨率240 × 135 pixels
通信接口4-wire SPI显示尺寸24.91 × 14.86 (mm)
显示面板IPS像素大小0.1101 × 0.1035 (mm)
控制芯片ST7789产品尺寸61.00 × 24.50 (mm)

SPI 通信协议:

注:此处的 SPI 接口专为屏幕显示设计,因此省略了从机到主机的数据线 (MISO)。

  • RESX 为复位,模块上电时拉低,通常情况下置 1;

  • CSX 为从机片选, 仅当 CS 为低电平时,芯片才会被使能。

  • D/CX 为芯片的数据/命令控制引脚,当 DC = 0 时写命令,当 DC = 1 时写数据

  • SDA 为传输的数据,即 RGB 数据;

  • SCL 为 SPI 通信时钟。

对于 SPI 通信而言,数据是有传输时序的,即时钟相位(CPHA)与时钟极性(CPOL)的组合:

  • CPHA 的高低决定串行同步时钟是在第一时钟跳变沿还是第二个时钟跳变沿数据被采集,当 CPHA = 0,在第一个跳变沿进行数据采集;

  • CPOL 的高低决定串行同步时钟的空闲状态电平,CPOL = 0,为低电平。

从图中可以看出,当 SCL 第一个下降沿时开始传输数据,一个时钟周期传输 1 bit 数据,使用 SPI0,按位传输,高位在前,低位在后。

产品尺寸


开发方式

ESP32-C6-Touch-LCD-1.83 支持 Arduino IDE 和 ESP-IDF 两种开发框架,为开发者提供灵活的选择,您可以根据项目需求和个人偏好选择合适的开发工具。

两种开发方式各有优势,开发者可根据自身需求和技能水平选择。Arduino 简单易学、上手快,适合初学者和非专业人士;ESP-IDF 则提供更高级的开发工具和更强的控制能力,适合有专业背景或对性能要求较高的开发者,更适用于复杂项目开发。

  • Arduino IDE 是一款便捷灵活、易于上手的开源电子原型平台。无需太多基础知识,简单学习后即可快速开发。Arduino 拥有庞大的全球用户社区,提供海量开源代码、项目示例和教程,以及丰富的库资源,封装了复杂功能,让开发者能够快速实现各种功能。您可以参考 Arduino IDE 开发环境搭建教程 完成初始设置,教程中同时提供了相关示例程序供参考。

  • ESP-IDF 全称 Espressif IoT Development Framework,是乐鑫科技为 ESP 系列芯片推出的专业开发框架。它基于 C 语言开发,包含编译器、调试器、烧录工具等,支持命令行或集成开发环境(如 Visual Studio Code 配合 Espressif IDF 插件)开发,插件提供代码导航、项目管理、调试等功能。我们推荐使用 VS Code 进行开发,具体配置过程可参考 ESP-IDF (VS Code) 开发环境搭建教程,教程中同时提供了相关示例程序供参考。

    Arduino 开发

    配置开发环境

    1. 安装和配置 Arduino IDE

    请参考 安装和配置 Arduino IDE 教程 下载安装 Arduino IDE 并添加 ESP32 支持。

    2. 安装库

    要运行示例,需要安装对应的库。

    可从 此链接 下载 ESP32-C6-GEEK 开发板的示例程序包。包内的 Arduino\libraries 目录已包含本教程所需的全部库文件。

    库或文件名称说明版本安装方式
    ESP32-BLE-Keyboard-masterESP32 的蓝牙键盘库v0.3.2手动安装
    PubSubClientMQTT 消息订阅发布库v2.8.0通过库管理器或手动安装
    JPEGDecoderJPEG 图像解码库v2.0.0通过库管理器或手动安装
    OneButton单按钮事件处理库v2.5.0通过库管理器或手动安装
    BME68x Sensor libraryBME68x 传感器驱动库v1.1.40406通过库管理器或手动安装
    ArduinoJson轻量 JSON 库v7.2.1通过库管理器或手动安装
    版本兼容性说明

    LVGL 及其驱动库的版本之间存在较强的依赖关系。例如,为 LVGL v8 编写的驱动可能不兼容 LVGL v9。为确保示例能够稳定复现,推荐使用上表列出的特定版本。混合使用不同版本的库可能导致编译失败或运行时异常。

    安装步骤:

    1. 解压已下载的 示例程序包

    2. 将其 Arduino\libraries 目录下的所有文件夹(Arduino_DriveBus、GFX_Library_for_Arduino 等)复制到 Arduino 的库文件夹中。

      信息

      Arduino 库文件夹的路径通常是:c:\Users\<用户名>\Documents\Arduino\libraries

      也可以在 Arduino IDE 中通过 文件 > 首选项,查看“项目文件夹位置”来定位。库文件夹就是此路径下的 libraries 文件夹。

    3. 其他安装方式请参考:Arduino 库管理教程

    3. 其他提示

    ESP32-C6-GEEK 需要选择及配置开发板。


    1. ESP32-C6-GEEK 需要选择 ESP32C6 Dev Module。

    2. 选择 USB 端口

    3. ESP32-C6-GEEK 使用 ESP32-C6 原生 USB 接口,而非 UART 转 USB。对于串口通信:

      • printf() 函数可直接使用;

      • 若要使用 Serial.println() 函数,需要额外配置:在 IDE 工具菜单中启用"USB CDC On Boot"选项,或在代码中声明 HWCDC 对象处理 USB 串口通信。

    4. 选择 16MB flash

    5. 选择合适大小的分区表

    示例程序

    Arduino 示例程序位于 示例程序包 的 Arduino/examples 目录中。

    示例程序基础例程说明依赖库
    01_OneButton按钮交互与 LCD 显示OneButton
    02_ADC_ReadADC 采样
    03_IIC_BME68X_Sensor驱动 I2C 模块BME68x Sensor libraryXPowersLib
    04_UART0串口通信
    05_LCD_Button按钮操作切换图像、控制背光OneButton
    06_LCD_Time在 LCD 显示日期时间
    07_SD_Test对 SD 卡的文件进行增删改查
    08_SD_LCD读取 SD 卡上 JPEG 图片并在屏幕显示JPEGDecoder
    09_BLE_LCDESP32-C6 与 BLE 和 LCD 交互,可作为 BLE 服务器收发数据并在 LCD 显示ESP32-BLE-Keyboard-master
    10_BLE_UARTESP32-C6 与 BLE 交互,可作为 BLE 服务器收发数据并使用 UART 显示消息内容ESP32-BLE-Keyboard-master
    11_BLE_Keyboard模拟 BLE 键盘ESP32-BLE-Keyboard-master
    12_WIFI_AP_LCD与 Wi-Fi 和 LCD 交互,可作为 Wi-Fi 接入点与客户端通信并在 LCD 显示
    13_WIFI_TCP_Client与 Wi-Fi 和 LCD 交互,连接 Wi-Fi 后尝试连接服务器,收发数据并在 LCD 显示
    14_WIFI_TCP_Server与 Wi-Fi 和 LCD 交互,作为 Wi-Fi 服务器,接收客户端数据并在 LCD 显示
    15_WIFI_Web_Server与 Wi-Fi 和 LCD 交互,作为 Wi-Fi 接入点服务器,处理客户端请求
    16_MQTT_sub_pub与 Wi-Fi 和 LCD 交互,作为 Wi-Fi 接入点服务器,处理客户端请求ArduinoJson,PubSubClient
    17_MQTT_BLE_Keyboard集成 BLE 键盘、Wi-Fi 和 MQTT,控制 LCD 显示ArduinoJson,PubSubClient,ESP32-BLE-Keyboard-master

    01_OneButton

    该例程可使用 ESP32-C6-GEEK 的 boot 按键变成一个多功能按键,可进行单击、双击或者长按以执行不同的操作。适用于学习 ESP32-C6 的按钮交互与 LCD 显示,可通过按钮操作观察 LCD 变化,测试其可靠性


    代码

    01_OneButton.ino

    代码解释

    • 按钮事件绑定:

      button.attachLongPressStart(LongPressStart, &button);
      button.attachClick(Click, &button);
      button.attachDoubleClick(DoubleClick, &button);
      button.setLongPressIntervalMs(1000);
    • 持续监测 :

      void loop() {
      // keep watching the push button:
      button.tick();
      delay(10);
      }
    • 按钮事件回调 :

      void LongPressStart(void *oneButton)
      {
      LCD_Clear(BLACK);
      Paint_DrawString_EN(50, 50, "LongPress", &Font24, BLACK, RED);
      }

      void Click(void *oneButton)
      {
      LCD_Clear(BLACK);
      Paint_DrawString_EN(75, 50, "Click", &Font24, BLACK, YELLOW);
      }

      void DoubleClick(void *oneButton)
      {
      LCD_Clear(BLACK);
      Paint_DrawString_EN(35, 50, "DoubleClick", &Font24, BLACK, BLUE);
      }

    02_ADC_Read

    该例程使用 ESP32-C6-GEEK 的 GPIO 接口,进行 ADC 采样,读取 3.3V 范围内的电压,使用时注意共地与不可超出测量范围。适用于学习 ESP32-C6 的模拟输入,可读取特定引脚模拟值,观察变化并测试稳定性


    硬件连接

    将 SH1.0 3PIN 杜邦线的两端分别连接到开发板和待测电压源

    • 开发板 GPIO6 所连引脚用于读取所测电压
    • 开发板 GND 引脚(IIC 或 UART 接口的 GND 都可以)连接到待测电压源 GND 引脚 ,确保与待测电压源的地端连接在一起

    代码

    02_ADC_Read.ino

    代码解释

    • 初始化背光控制引脚为低电平

    • 开启串口通信,设置波特率为 115200

    • 设置 ADC 分辨率为 12 位

        void setup() {
      analogWrite(DEV_BL_PIN,0);
      Serial.begin(115200); //The serial port is initially configured
      analogReadResolution(12); //Set ADC resolution to 12 bits (0-4096)
      }
    • 定义变量存储 ADC 的原始值和电压值

    • 读取指定引脚的 ADC 原始值和电压值

    • 通过串口输出 ADC 值

        void loop() {
      //Define two variables to hold the original value and the voltage value (millivolts) collected by the ADC
      int analogOriginalValue = 0;
      int analogVoltsValue = 0;

      analogOriginalValue = analogRead(ADC1_CHANNEL_0); // Read the ADC raw value
      analogVoltsValue = analogReadMilliVolts(ADC1_CHANNEL_0); // Read ADC voltage values (millivolt range)

      // Upload read ADC values:
      Serial.printf("ADC analog value = %d\n",analogOriginalValue);
      Serial.printf("ADC millivolts value = %d mV\n",analogVoltsValue);

      delay(3000);
      }

    03_IIC_BME68X_Sensor

    该例程可使用 ESP32-C6-GEEK 的 IIC 硬件接口驱动 I2C 模块,例程使用 BME680 传感器进行演示,通过串口输出打印数据。适用于学习 ESP32-C6 与 BME68X 传感器交互,可设置引脚和通信模式,读取多种数据,测试兼容性与稳定性


    硬件连接


    代码

    03_IIC_BME68X_Sensor.ino

    代码解释

    • 使用 analogWrite 将背光控制引脚 PIN_BL 设置为 0,关闭背光。

    • 使用 Wire.begin(PIN_SDA, PIN_SCL) 初始化 I2C 通信(注释中的 SPI.begin() 表示也可以使用 SPI 模式,但这里未启用)。

    • 初始化串口通信,设置波特率为 115200。

    • 等待串口连接准备好。

    • 根据配置的通信方式(这里是 I2C)初始化 BME68X 传感器。如果初始化过程中出现错误或警告,会在串口输出相应的信息。

    • 设置传感器的温度、压力和湿度测量配置,并设置加热器配置。

    • 在串口输出数据的标题行,包括时间戳、温度、压力、湿度、气体电阻和状态

      void setup(void)
      {
      analogWrite(PIN_BL,0);
      Wire.begin(PIN_SDA, PIN_SCL); //I2C mode
      //SPI.begin(); //SPI mode
      Serial.begin(115200);
      delay(100);
      Serial.println(PIN_SDA);
      Serial.println(PIN_SCL);

      while (!Serial)
      delay(10);

      /* initializes the sensor based on SPI library */
      //bme.begin(PIN_CS, SPI); //SPI mode
      bme.begin(ADD_I2C, Wire); //I2C mode

      if(bme.checkStatus())
      {
      if (bme.checkStatus() == BME68X_ERROR)
      {
      Serial.println("Sensor error:" + bme.statusString());
      return;
      }
      else if (bme.checkStatus() == BME68X_WARNING)
      {
      Serial.println("Sensor Warning:" + bme.statusString());
      }
      }

      /* Set the default configuration for temperature, pressure and humidity */
      bme.setTPH();

      /* Set the heater configuration to 300 deg C for 100ms for Forced mode */
      bme.setHeaterProf(300, 100);

      Serial.println("TimeStamp(ms), Temperature(deg C), Pressure(Pa), Humidity(%), Gas resistance(ohm), Status");
      }

    04_UART0

    该例程可使用 ESP32-C6-GEEK 打开串口 UART0,打开串口调试助手,可以进行串口通信。适用于学习 ESP32-C6 串口通信,可接收数据并输出


    硬件连接


    代码

    04_UART0.ino

    代码解释

    • 检查串口是否有数据可读。如果有数据可读,进入循环处理输入数据。

    • 创建一个字符数组 buffer 用于存储输入数据,以及一个变量 bufferSize 用于记录缓冲区中的数据大小。

    • 在循环中,每次读取一个字符并存储到缓冲区中,同时增加缓冲区大小。

    • 当缓冲区已满(达到数组大小)或者读取到换行符时,将缓冲区中的数据通过串口输出,然后延迟 10 毫秒。

    • 最后,重置缓冲区大小为 0,并使用 memset 函数将缓冲区清零,为下一次输入做准备

      void loop() {
      if (Serial.available()) {
      char buffer[256]; // Buffer to store input data
      size_t bufferSize = 0; // Current size of data in buffer

      while (Serial.available() > 0) {
      char input = Serial.read();
      buffer[bufferSize++] = input; // Store input in buffer
      // Check if the buffer is full, or a newline character is received
      if (bufferSize >= sizeof(buffer) || input == '\n') {
      // Send the entire buffer via Serial2
      Serial.println(buffer);
      delay(10);
      // Reset buffer and size for the next input
      bufferSize = 0;
      memset(buffer, 0, sizeof(buffer));
      }
      }
      }
      }

    05_LCD_Button

    该例程可使用 ESP32-C6-GEEK 的 boot 按键实现短按点亮 LCD 并切换下一张图片,长按熄灭 LCD。适用于学习 ESP32-C6 的按钮交互和 LCD 图像显示,可通过按钮操作切换图像、控制背光,测试稳定性


    代码

    05_LCD_Button.ino

    代码解释

    • 当按钮被点击时,此函数被调用,根据不同的 click 值切换显示不同的图像(gImage_pic1、gImage_pic2、gImage_pic3):

        void Click(void *oneButton)
      {
      LCD_SetBacklight(1000);
      Paint_NewImage(LCD_WIDTH, LCD_HEIGHT, 0, BLACK);
      click++;
      if(click >= 4)click = 1;
      switch(click)
      {
      case 1:
      Paint_DrawImage(gImage_pic1, 0, 0, 135, 240);
      break;
      case 2:
      Paint_DrawImage(gImage_pic2, 0, 0, 135, 240);
      break;
      case 3:
      Paint_DrawImage(gImage_pic3, 0, 0, 135, 240);
      break;
      }
      }

    06_LCD_Time

    该例程可使用 ESP32-C6-GEEK 连接 WIFI 获取当前时间并且把时间日期显示在 LCD 与串口调试助手上。适用于学习 ESP32-C6 的 Wi-Fi 连接与时间同步,可连接特定网络并同步时间,在 LCD 显示日期时间,测试稳定性与准确性


    其余准备

    使用 PC 打开热点,网络频带选择“任何可用频率”,将 ssid 与 password 修改成要连接的 WIFI 名称和密码。utcOffsetInSeconds 为我们需要获取时间的时区,例如:北京,东八区,则为 8 * 60 *60=28800


    在此说明:ESP32-C6-GEEK 作为 STA 模式与 PC 连接同一个 WIFI 网络时,ESP32-C6-GEEK 连接的 WIFI 需要有 2.4GHz 频带的,如果没有 2.4GHz 频带,那网络频带就选择“任何可用频率”,这边我们直接选择“任何可用频率”

    代码

    06_LCD_Time.ino

    代码解释

    • 在 LCD 上显示 “Wifi Connecting...”,向用户提示设备正在尝试连接 Wi-Fi,通过 WiFi.begin(ssid, password) 使用指定的网络名称和密码启动连接过程,进入循环等待连接成功,在这个过程中,每隔 1000 毫秒就在串口打印 “Connecting to WiFi...”,让用户了解连接进度。一旦连接成功,就清空 LCD 屏幕并显示 “Wifi Connected”,为后续依赖网络的操作做好准备

        void setup() {
      Serial.begin(115200);

      Config_Init();
      LCD_Init();
      LCD_SetBacklight(100);
      Paint_NewImage(LCD_WIDTH, LCD_HEIGHT, 90, WHITE);
      Paint_SetRotate(90);
      LCD_Clear(BLACK);
      delay(1000);

      while (!Serial);
      Paint_DrawString_EN(20, 50, "Wifi Connecting...", &Font20, BLACK, GREEN);
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
      delay(1000);
      Serial.println("Connecting to WiFi...");
      }
      LCD_Clear(BLACK);
      Paint_DrawString_EN(20, 50, "Wifi Connected", &Font20, BLACK, GREEN);
      Serial.println("Connected to WiFi");
      //Acquisition time
      configTime(utcOffsetInSeconds, 0, ntpServer);
      while (!time(nullptr)) {
      delay(1000);
      Serial.println("Waiting for time sync...");
      }
      LCD_Clear(BLACK);
      Serial.println("Time synced successfully");
      }

    07_SD_Test

    该例程可使用 ESP32-C6-GEEK 的 SD 卡槽,将 SD 卡插入卡槽,打开串口调试助手,可以看到 ESP32-C6-GEEK 对 SD 卡的文件进行增删改查。适用于学习 ESP32-C6 与 SD 卡交互,可进行多种文件操作,测试稳定性与可靠性


    代码

    07_SD_Test.ino

    代码解释

    • 初始化串口通信,启动 HSPI 总线并设置时钟分频,然后尝试初始化连接在特定引脚上的 SD 卡,若成功,确定 SD 卡类型并显示其容量大小。之后进行一系列对 SD 卡的文件系统操作,如列出目录、创建和删除目录、读写文件、重命名文件以及测试读写性能,同时输出 SD 卡总空间和已用空间

        void setup() {
      Serial.begin(115200);
      while (!Serial) {
      delay(10);
      }

      #ifdef REASSIGN_PINS
      SPI.begin(sck, miso, mosi, cs);
      if (!SD.begin(cs)) {
      #else
      if (!SD.begin()) {
      #endif
      Serial.println("Card Mount Failed");
      return;
      }
      uint8_t cardType = SD.cardType();

      if (cardType == CARD_NONE) {
      Serial.println("No SD card attached");
      return;
      }

      Serial.print("SD Card Type: ");
      if (cardType == CARD_MMC) {
      Serial.println("MMC");
      } else if (cardType == CARD_SD) {
      Serial.println("SDSC");
      } else if (cardType == CARD_SDHC) {
      Serial.println("SDHC");
      } else {
      Serial.println("UNKNOWN");
      }

      uint64_t cardSize = SD.cardSize() / (1024 * 1024);
      Serial.printf("SD Card Size: %lluMB\n", cardSize);

      listDir(SD, "/", 0);
      createDir(SD, "/mydir");
      listDir(SD, "/", 0);
      removeDir(SD, "/mydir");
      listDir(SD, "/", 2);
      writeFile(SD, "/hello.txt", "Hello ");
      appendFile(SD, "/hello.txt", "World!\n");
      readFile(SD, "/hello.txt");
      deleteFile(SD, "/foo.txt");
      renameFile(SD, "/hello.txt", "/foo.txt");
      readFile(SD, "/foo.txt");
      testFileIO(SD, "/test.txt");
      Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024));
      Serial.printf("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024));
      }

    08_SD_LCD

    该例程可使用 ESP32-C6-GEEK 的 SD 卡槽读取 SD 卡中的图片,将照片图片存入 SD 卡后,把 SD 卡插入卡槽,ESP32-C6-GEEK 可将 SD 卡中的照片读取并且显示在 LCD 上。适用于学习 ESP32-C6 与 SD 卡及 TFT 屏交互,可读取 SD 卡上 JPEG 图片并在屏幕显示,测试稳定性与可靠性

    SD 卡准备

    可将 .\ESP32-C6-GEEK-Demo\Arduino\pic 路径下的照片用读卡器存入 SD 卡中,或者存入自己的照片,将图片尺寸修改成 240×135,显示效果最佳

    硬件连接

    将 SH1.0 3PIN 杜邦线的两端分别连接到开发板和待测电压源

    • 开发板 GPIO6 所连引脚用于读取所测电压
    • 开发板 GND 引脚(IIC 或 UART 接口的 GND 都可以)连接到待测电压源 GND 引脚 ,确保与待测电压源的地端连接在一起

    代码

    08_SD_LCD.ino

    代码解释

    • 解码 JPEG 图片并居中绘制到 TFT 显示屏上

        void renderJPEG() {
      uint16_t *pImg;
      uint16_t mcu_w = JpegDec.MCUWidth;
      uint16_t mcu_h = JpegDec.MCUHeight;
      uint32_t jpeg_width = JpegDec.width;
      uint32_t jpeg_height = JpegDec.height;

      Serial.print("270 度旋转:");
      Serial.print(jpeg_width);
      Serial.print(" x ");
      Serial.println(jpeg_height);

      uint16_t rotated_width = jpeg_height; // 135
      uint16_t rotated_height = jpeg_width; // 240

      uint16_t x_pos = (LCD_WIDTH - rotated_width) / 2;
      uint16_t y_pos = (LCD_HEIGHT - rotated_height) / 2;

      Paint_Clear(WHITE);

      while (JpegDec.read()) {
      pImg = JpegDec.pImage;

      uint16_t mcu_x = JpegDec.MCUx * mcu_w;
      uint16_t mcu_y = JpegDec.MCUy * mcu_h;

      for (int y = 0; y < mcu_h; y++) {
      for (int x = 0; x < mcu_w; x++) {
      uint16_t orig_x = mcu_x + x;
      uint16_t orig_y = mcu_y + y;

      if (orig_x >= jpeg_width || orig_y >= jpeg_height) continue;

      // 旋转公式:
      uint16_t screen_x = x_pos + (jpeg_height - orig_y - 1);
      uint16_t screen_y = y_pos + orig_x;

      if (screen_x < LCD_WIDTH && screen_y < LCD_HEIGHT) {
      uint16_t color = pImg[x + y * mcu_w];
      Paint_SetPixel(screen_x, screen_y, color);
      }
      }
      }
      }

      JpegDec.abort();
      }

    09_BLE_LCD

    该例程可使用 ESP32-C6-GEEK 打开蓝牙 BLE,使用手机打开蓝牙调试助手,连接 ESP32-C6-GEEK,与手机进行蓝牙 BLE 通讯,发送与接收的消息在 LCD 上显示。适用于学习 ESP32-C6 与 BLE 和 LCD 交互,可作为 BLE 服务器收发数据并在 LCD 显示,测试稳定性与可靠性

    代码

    09_BLE_LCD.ino

    运行效果

    BLEDevice::init("Waveshare_ESP32C6_GEEK") 中 Waveshare_ESP32C6_GEEK 为蓝牙名称


    • 使用手机端打开手机蓝牙调试助手扫描连接设备


    • 使用手机蓝牙调试助手发送蓝牙消息至 ESP32-C6-GEEK,ESP32-C6-GEEK 接收到消息会把消息显示在 LCD 上,串口调试助手打印消息内容




    • 手机端的蓝牙调试助手打开接收设置,ESP32-C6-GEEK 使用 USB 转 UART 连接 PC,打开串口调试助手,发送串口消息转为蓝牙消息至手机,注意发送时要勾选上回车加换行,发送的消息内容会显示在 LCD 上,在手机端观察是否接收到蓝牙消息





    10_BLE_UART

    该例程可使用 ESP32-C6-GEEK 打开蓝牙 BLE,使用手机打开蓝牙调试助手,连接 ESP32-C6-GEEK,与手机进行蓝牙 BLE 通讯,发送与接收的消息在串口上显示。操作与 09_BLE_LCD 相同,但是没有开启 LCD,使用 UART 显示消息内容,较大程度将功耗降低。操作请看 09_BLE_LCD

    11_BLE_Keyboard

    • 该例程可将 ESP32-C6-GEEK 作为蓝牙键盘使用,使用 PC 蓝牙连接 ESP32-C6-GEEK,可以进行一系列键盘单键或组合操作。适用于 ESP32-C6-GEEK 模拟 BLE 键盘,可发送文本和按键指令,测试稳定性与可靠性
    • 按下 boot 键重新上电便可退出程序

    代码

    11_BLE_Keyboard.ino

    代码解释

    • 蓝牙名称

        BleKeyboard bleKeyboard("ESP32-C6-GEEK", "Waveshare", 100);

      判断蓝牙键盘是否连接,如果连接:

      • 在串口输出提示信息 “Sendin 'Waveshare'...”,然后使用 print 方法发送字符串 “waceshare”。
      • 在串口输出提示信息 “Sendin Enter key...”,然后使用 write 方法发送回车键(KEY_RETURN)。
      • 在串口输出提示信息 “Sendin Ctrl+Alt+Delete...”,依次按下左 Ctrl、左 Alt 和 Delete 键,延迟 100 毫秒后释放所有按键。
      • 在串口输出提示信息 “Waiting 5 seconds...”,然后延迟 5000 毫秒,等待下一次循环
        void loop() {
      if(bleKeyboard.isConnected()) {
      Serial.println("Sending 'Waveshare'...");
      bleKeyboard.print("waveshare");

      delay(500);

      Serial.println("Sending Enter key...");
      bleKeyboard.write(KEY_RETURN);

      delay(500);

      Serial.println("Sending Ctrl+Alt+Delete...");
      bleKeyboard.press(KEY_LEFT_CTRL);
      bleKeyboard.press(KEY_LEFT_ALT);
      bleKeyboard.press(KEY_DELETE);
      delay(100);
      bleKeyboard.releaseAll();
      }

      Serial.println("Waiting 5 seconds...");
      delay(5000);
      }

    运行效果

    • 使用 PC 打开蓝牙扫描连接设备
    • 连接成功后会每隔 5 秒会进行一系列键盘操作(输出 “Waveshare”、Ctrl+Alt+Delete)
    • 按下 boot 键重新上电便可退出程序
    • 可在 libraries 文件夹中的 BleKeyboard.h 文件中查看各个单键的值

    12_WIFI_AP_LCD

    该例程可使用 ESP32-C6-GEEK 打开 WIFI 的 AP 模式,PC 连接其 WIFI 后,可以登录 IP,在网页端进行控制 ESP32-C6-GEEK 的 LCD 显示图片。适用于学习 ESP32-C6-GEEK 与 Wi-Fi 和 LCD 交互,可作为 Wi-Fi 接入点与客户端通信并在 LCD 显示,测试稳定性与可靠性

    代码

    12_WIFI_AP_LCD.ino

    代码解释

    • 初始化相关配置和 LCD 显示屏

    • 调用 WIFI_AP_Init() 初始化 Wi-Fi 接入点

        void setup()
      {
      Config_Init();
      LCD_Init();
      Serial.begin(115200);
      LCD_SetBacklight(100);
      Paint_NewImage(LCD_WIDTH, LCD_HEIGHT, 90, WHITE);
      Paint_SetRotate(90);
      LCD_Clear(0x000f);

      WIFI_AP_Init();
      }
    • 通过 WiFiClient client = server.available(); 监听是否有客户端连接到服务器。

    • 调用 WIFI_LCD_Control(client) 函数处理连接的客户端,可能进行与 LCD 显示相关的操作,具体功能取决于该函数的实现

      void loop()
      {
      WiFiClient client = server.available(); // listen for incoming clients
      WIFI_LCD_Control(client);
      }

    运行效果

    ssid 是 ESP32-C6-GEEK 创建的 AP 名称 (ESP32-C6-GEEK),password 则是连接 AP 的密码 (Waveshare)


    • 使用 PC 连接 ESP32-C6-GEEK 的 AP,输入密码 Waveshare

    • 烧录成功但 PC 识别不到 wifi 时,给开发板重新上电再尝试

    • LCD 会显示 HTTP 服务器的 IP 地址


    使用浏览器进行登录 IP:192.168.4.1,通过服务器上的按钮对 ESP32-C6-GEEK 的 LCD 进行控制,按下不同按钮,观察 LCD 变化,更多 LCD 的显示函数具体可以看 LCD 程序说明


    13_WIFI_TCP_Client

    该例程可使用 ESP32-C6-GEEK 打开 WIFI 的 STA 模式,与 PC 端或者手机端连接同一个 WIFI 后,作为 TCP Client 访问 PC 或手机创建的 TCP Server,并且与 PC 或手机建立 TCP 通讯,在 LCD 上显示接收内容。适用于学习 ESP32-C6-GEEK 与 Wi-Fi 和 LCD 交互,连接 Wi-Fi 后尝试连接服务器,收发数据并在 LCD 显示,测试稳定性与可靠性

    代码修改

    1. 使用 PC 打开热点,网络频带选择“任何可用频率”,程序中 ssid 与 password 与要连接的 WIFI 名称和密码保持一致

    2. 下载 网络调试助手,修改为你的本地 IP 地址(以下的 192.168.137.1 为示例 IP 地址)


    代码

    13_WIFI_TCP_Client.ino

    代码解释

    • 使用 sprintf 函数将传入的 IP 地址整数按照点分十进制的格式转换为字符串,并存储在 result 指针指向的字符数组中

        void intToIpAddress(uint32_t ip, char *result) {
      sprintf(result, "%d.%d.%d.%d", ip & 255,(ip >> 8) & 255,(ip >> 16) & 255,(ip >> 24) & 255);
      }

    运行效果

    • 此时 LCD 屏幕显示尝试连接,片刻之后显示已连接

    • 修改 NetAssist 参数,协议类型为 TCP Server,本地 IP 地址与程序中保持一致,本地端口号为 8080,点击“连接”,用于和 ESP32-C6-GEEK(TCP Client) 进行连接与 TCP 通讯


    • 连接成功后,TCP Server 会收到 ESP32-C6-GEEK 发送的 TCP 消息"Hello world",LCD 会显示“Access successful”


    • 通过 PC 端 TCP Server 发送 TCP 消息给 ESP32-C6-GEEK,若发送成功,ESP32-C6-GEEK 作为 TCP Client 接收到消息会将消息内容显示在 LCD 上,可以观察到 LCD 显示消息


    • 还可以使用手机打开热点,热点名称与密码同上,选择 2.4GHz 频带

    • 打开热点后使用 TCP 调试助手与 ESP32-C6-GEEK 进行 TCP 通讯


    • 烧录代码,连接成功后,TCP Server 会收到 ESP32-C6-GEEK 发送的 TCP 消息"Hello world",LCD 会显示“Access successful”,可通过手机端 TCP Server 发送 TCP 消息给 ESP32-C6-GEEK,若发送成功,ESP32-C6-GEEK 作为 TCP Client 接收到消息会将消息内容显示在 LCD 上,可以观察到 LCD 显示消息


    14_WIFI_TCP_Server

    该例程可使用 ESP32-C6-GEEK 打开 WIFI 的 STA 模式,连接 PC 端打开的热点后,创建 TCP Server,PC 创建 TCP Client 访问 ESP32-C6-GEEK,两者建立 TCP 通讯,GEEK 在 LCD 上显示接收内容。适用于学习 ESP32-C6-GEEK 与 Wi-Fi 和 LCD 交互,作为 Wi-Fi 服务器,接收客户端数据并在 LCD 显示,测试稳定性与可靠性

    代码修改

    • 使用 PC 打开热点,网络频带选择“任何可用频率”,程序中 ssid 与 password 与要连接的 WIFI 名称和密码保持一致

    代码

    14_WIFI_TCP_Server.ino

    代码解释

    • 使用 sprintf 函数将传入的 IP 地址整数按照点分十进制的格式转换为字符串,并存储在 result 指针指向的字符数组中

        void intToIpAddress(uint32_t ip, char *result) {
      sprintf(result, "%d.%d.%d.%d", ip & 255,(ip >> 8) & 255,(ip >> 16) & 255,(ip >> 24) & 255);
      }

    运行效果

    • 烧录成功,LCD 显示

    • Wi-Fi 连接后,LCD 上会显示 TCP ServerIP,使用串口调试助手打开 TCP Client,用于和 ESP32-C6-GEEK(TCP Server) 进行连接与 TCP 通讯
      • ①. 修改端口号为"TCPClient" ,修改远程地址为 LCD 屏幕上显示的 IP,端口号 8080,点击连接
      • ②. 加回车换行
      • ③. 输入信息
      • ①. 发送信息

    • 消息成功发送,LCD 屏幕显示

    15_WIFI_Web_Server

    该例程可使用 ESP32-C6-GEEK 打开 WIFI 的 AP 模式,PC 端连接其 WIFI 后,打开串口调试助手,通过 ESP32-C6-GEEK 创建的 HTTP 网页端发送消息给 GEEK,观察串口调试助手与 LCD 上的接收内容。适用于学习 ESP32-C6-GEEK 与 Wi-Fi 和 LCD 交互,作为 Wi-Fi 接入点服务器,处理客户端请求,测试稳定性与可靠性

    硬件连接

    • 使用 ESP32-C6-GEEK 的 UART 接口通过 USB 转 UART 工具与 PC 连接,打开串口调试助手


    代码

    15_WIFI_Web_Server.ino

    代码解释

    • 初始化相关配置和 LCD 显示屏

    • 调用 WIFI_AP_Init() 初始化 Wi-Fi 接入点

        void setup()
      {
      Config_Init();
      LCD_Init();
      Serial.begin(115200);
      LCD_SetBacklight(100);
      Paint_NewImage(LCD_WIDTH, LCD_HEIGHT, 90, WHITE);
      Paint_SetRotate(90);
      LCD_Clear(0x000f);

      WIFI_AP_Init();
      }

    运行效果

    • 烧录成功,使用 PC 连接 ESP32-C6-GEEK 的 AP

    • LCD 会显示 HTTP 服务器的 IP 地址,使用浏览器进行登录 IP:192.168.4.1

    • 使用 ESP32-C6-GEEK 的 UART 接口通过 USB 转 UART 工具与 PC 连接,打开串口调试助手

    • 可在 HTTP Web 上输入文本内容并且发送 HTTP 请求至 ESP32-C6-GEEK,可在串口调试助手与 LCD 上显示接收内容




    16_MQTT_sub_pub

    该例程可使用 ESP32-C6-GEEK 打开 WIFI 的 STA 模式,连接 WIFI 后,使用微雪云平台,进行 MQTT 通讯,订阅与发布主题,实现远距离传输信息。适用于学习 ESP32-C6-GEEK 与 Wi-Fi、MQTT 和 LCD 交互,连接 Wi-Fi 和 MQTT 服务器,收发 JSON 数据并在 LCD 显示,测试稳定性与可靠性

    代码

    16_MQTT_sub_pub.ino

    代码解释

    • 将接收到的字节数组转换为字符串 inputString

    • 在字符串中查找特定的 JSON 字段,如"data""key"(可根据实际情况修改为特定的数据标识符)。

    • 提取出"builtIn"字段的值,并根据该值进行不同的操作。如果值为 0,则在 LCD 上显示 “close!”,否则显示 “open!”,同时在串口输出相应信息

      void callback(char* topic, byte* payload, unsigned int length) {
      String inputString;
      for (int i = 0; i < length; i++) {
      inputString += (char)payload[i];
      }
      Serial.println(inputString);
      int dataBegin = inputString.indexOf("\"data\"");
      if (dataBegin == -1) {
      Serial.println(F("Missing 'data' field in JSON."));
      return;
      }
      int builtInBegin = inputString.indexOf("\"key\"", dataBegin); // Please change to your data identifier
      if (builtInBegin == -1) {
      Serial.println(F("Missing 'builtIn' field in 'data' object."));
      return;
      }
      int valueBegin = inputString.indexOf(':', builtInBegin);
      int valueEnd = inputString.indexOf('}', valueBegin);
      if (valueBegin == -1 || valueEnd == -1) {
      Serial.println(F("Invalid 'builtIn' value."));
      return;
      }
      String builtInValueStr = inputString.substring(valueBegin + 1, valueEnd);
      int builtInValue = builtInValueStr.toInt();
      if (builtInValue == 0) {
      LCD_Clear(BLACK);
      Paint_DrawString_EN(75, 55, "close!", &Font24, BLACK, GREEN);
      Serial.println("close!");
      } else {
      LCD_Clear(BLACK);
      Paint_DrawString_EN(75, 55, "open!", &Font24, BLACK, GREEN);
      Serial.println("open!");
      }
      }
    • 在 LCD 上显示 “Wifi Connecting...”。

    • 在串口输出正在连接的 Wi-Fi 网络名称。

    • 连接成功后,清空 LCD 屏幕并显示 “Wifi Connected”,同时在串口输出本地 IP 地址

      void setup_wifi() {
      Paint_DrawString_EN(20, 50, "Wifi Connecting...", &Font20, BLACK, GREEN);
      Serial.println();
      Serial.print("Connecting to ");
      Serial.println(ssid);
      WiFi.mode(WIFI_STA);
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
      }
      LCD_Clear(BLACK);
      Paint_DrawString_EN(20, 50, "Wifi Connected", &Font20, BLACK, GREEN);
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
      }

    代码修改

    开启的热点名称与密码要与代码中一致 微雪云平台 账号注册与创建设备后,根据微雪云上新建设备的"查看地址"可以看到设备的 Client ID、Pub Topic、Sub Topic,将它们写入例程中进行赋值,用于 ESP32-C6-GEEK 连接自己的云平台设备



    在 callback 函数中可以修改识别的标识符为我们自己在云平台上创建的设备属性标识符



    运行效果

    • 烧录代码,连接上 WIFI 后,观察微雪云平台上设备是否进入 online 状态,若没有可以尝试刷新网页与使用 USB 转 UART 连接 PC 通过串口调试助手查看 WIFI 与 MQTT 连接情况,并且在 LCD 屏上也会显示 WIFI 与 MQTT 的连接情况


    • ESP32-C6-GEEK 连接微雪云成功之后即可通过 Dashboard 进行发送 MQTT 消息

    • 我们能在 LCD 和串口调试助手中看到我们对设备属性值(例:"key") 的变化进行了不同的反馈,并且在微雪云的设备接收值中看到 ESP32-C6-GEEK 发送至微雪云设备的数据(接受值为自己的 Client ID,后续自己可将 key 的返回值或者状态发送回微雪云),至此实现了 MQTT 的数据上行与下行、订阅主题与发布主题

    17_MQTT_BLE_Keyboard

    该例程可使用 ESP32-C6-GEEK 打开 WIFI 的 STA 模式与蓝牙,连接 WIFI 与蓝牙后,使用微雪云平台,可实现远程蓝牙锁屏与输入密码开屏,还有更多组合键等待您的开发。适用于 ESP32-C6-GEEK 集成 BLE 键盘、Wi-Fi 和 MQTT,控制 LCD 显示,测试稳定性与可靠性

    代码

    17_MQTT_BLE_Keyboard.ino

    代码解释

    • 作为 MQTT 订阅的回调函数,用于处理接收到的消息。

    • 打印接收到的消息的主题,然后将接收到的字节数组转换为字符串。

    • 在字符串中查找特定的 JSON 字段 “key”,如果你的标识符不是 “key”,需要修改代码。

    • 提取出 “key” 字段的值,并根据值为 “1” 或其他情况分别调用 Screen_ON 或 Screen_OFF 函数

        void callback(char* topic, byte* payload, unsigned int length) {
      Serial.print("Message arrived [");
      Serial.print(topic);
      Serial.println("] ");
      String payloadString = "";
      for (int i = 0; i < length; i++) {
      Serial.print((char)payload[i]);
      payloadString += (char)payload[i];
      }

      int keyPosition = payloadString.indexOf("\"key\""); // Locate to "key",If your identifier is not "key", change it to your own!
      char keyChar1 = payloadString.charAt(keyPosition + (strlen("\"key\"")+1)); // extract the first digit of the "key" value
      // char keyChar2 = payloadString.charAt(keyPosition + (strlen("\"key\"")+2)); // If the extracted value is greater than one digit, add another digit

      if (keyChar1 == '1') Screen_ON();
      else Screen_OFF();
      }
    • 在串口输出正在连接的 Wi-Fi 网络名称

    • 设置 Wi-Fi 模式为 STA(客户端模式),并使用指定的 SSID 和密码尝试连接。

    • 在连接过程中,通过循环不断在串口输出连接状态信息,直到连接成功。

    • 连接成功后,清空 LCD 屏幕并显示 “Wifi Connected”,同时在串口输出本地 IP 地址

        void setupWiFi() {
      Paint_DrawString_EN(20, 50, "Wifi Connecting...", &Font20, BLACK, GREEN);
      Serial.print("Connecting to WiFi: ");
      WiFi.setSleep(true);
      WiFi.begin(SSID, PASSWORD);
      while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
      }
      LCD_Clear(BLACK);docs
      Paint_DrawString_EN(20, 50, "Wifi Connected", &Font20, BLACK, GREEN);
      Serial.println("\nWiFi connected");
      Serial.println("IP address: " + WiFi.localIP().toString());
      }

    代码修改

    • 开启的热点名称与密码要与代码中一致(2.4GHZ 或任何可用频率)

    • 微雪云平台 账号注册与创建设备后,根据微雪云上新建设备的"查看地址"可以看到设备的 Client ID、Sub Topic,将它们写入例程中进行赋值,用于 ESP32-C6-GEEK 连接自己的云平台设备

    • 连接的蓝牙名称与密码要与代码中一致

    • 在 callback 函数中可以修改识别的标识符为我们自己在云平台上创建的 设备属性标识符

    • 修改为自己要输入的文本或者密码

    运行效果

    • 烧录代码,连接上 WIFI 后,打开 PC 的蓝牙功能以配对连接设备,观察微雪云平台上设备是否进入 online 状态,若没有可以尝试刷新网页与使用 USB 转 UART 连接 PC 通过串口调试助手查看 WIFI 与 MQTT 连接情况,并且在 LCD 屏上也会显示 WIFI 与 MQTT 的连接情况

    • ESP32-C6-GEEK 连接微雪云成功之后,可通过手机端登录微雪云 Dashboard 进行远程控制

    • 我们能在 LCD 和串口调试助手中看到我们对设备属性值(例:"key") 的变化进行了不同的反馈,后续还可以在 callback 函数中将按键修改成 Ctrl+CCtrl+V 等组合键,自己 DIY 属于你的远程控制蓝牙键盘

    • 还可通过 键盘测试 的网站来测试 ESP32-C6-GEEK 蓝牙控制按下了哪些按键

    • 打开键盘测试此界面,用手机端控制,键盘测试界面可显示按下了哪些按键


    ESP-IDF 开发

    本章节包含以下两部分,请按需阅读:

    配置开发环境

    备注

    以下环境设置适用于 Windows 10/11 系统,Mac/Linux 用户请参考 官方说明

    1. 下载并安装 Visual Studio Code

    2. 在 VS Code 中,通过点击 VS Code 侧边活动栏中的 扩展图标 或使用快捷键(Ctrl+Shift+X)来打开 扩展 视图。然后,搜索 ESP-IDF 扩展并安装。

      在 VS Code 中搜索并安装 ESP-IDF 扩展

    3. 安装扩展后,VS Code 左侧活动栏中会出现 Espressif 图标 图标,点击该图标可查看 ESP-IDF 扩展的基本命令列表,在 Advanced 中选择 配置 ESP-IDF 扩展

      选择“配置 ESP-IDF 拓展”

    4. 选择 Express 进入快速配置模式:

      选择快速配置模式

    5. 根据需要修改以下选项。

      • 选择下载服务器
        • Espressif:使用乐鑫中国服务器,下载速度更快。
        • Github:使用 GitHub 官方发布链接。
      • ESP-IDF 版本:通常根据开发板要求选择对应版本,如无特殊要求建议使用最新的正式版本。对于 ESP32-C6-GEEK ,建议 Espressif IDF 版本 ≥ v5.3.1。
      • ESP-IDF 容器安装地址:建议使用默认地址,或使用纯英文路径且路径中不包含空格。
      • ESP-IDF 所需的工具安装地址:建议使用默认地址,或使用纯英文路径且路径中不包含空格。

      ESP-IDF 拓展快速配置模式选项

    6. 点击 Install 开始安装。你将看到一个显示安装进度的页面,包括 ESP-IDF 下载、ESP-IDF 工具下载安装以及 Python 虚拟环境创建的进度状态。

      安装进度

    7. 如果安装正确,你会看到所有设置已配置完成的提示,即可开始使用该扩展程序。

      安装成功

    注意

    注意:如果 ESP-IDF 安装失败或需要重新安装,可以尝试删除 C:\Users\%Username%\esp 和 C:\Users\%Username%\.espressif 文件夹后重试。

    示例程序

    ESP-IDF 示例程序位于 示例程序包 的 ESP-IDF 目录中。

    01_SD_Card

    本示例演示了 ESP32-C6-GEEK 测试 SD 卡的读写功能

    ESP32-C6-GEEK ESP-IDF 示例 1 图 1

    其余准备

    • 将 Micro SD 卡插入卡槽(SD 卡需要格式化为 FAT32)

    代码解释

    • 使用 SDSPI 方式初始化 SD 卡 :

        SD_card_Init();
    • 测试 SD 卡读写功能 :

       example_sdcard_task();

    02_WIFI_AP

    该示例可将开发板设置为热点,允许手机或其他处于 STA 模式的设备连接到开发板。

    ESP32-C6-GEEK ESP-IDF 示例 2 图 1

    代码解释

    • 在 softap_example_main.c 文件找到 SSID 和 PASSWORD,然后手机或其他处于 STA 模式的设备即可使用该 SSID 和 PASSWORD 连接到开发板。

        #define EXAMPLE_ESP_WIFI_SSID      "waveshare_esp32"
      #define EXAMPLE_ESP_WIFI_PASSWORD "wav123456"

    03_WIFI_STA

    该示例可将开发板配置为 STA 设备,以连接路由器,从而接入系统网络。

    ESP32-C6-GEEK ESP-IDF 示例 3 图 1

    代码解释

    • 在 esp_wifi_bsp.c 文件找到 ssid 和 password,然后将其修改为当前环境中可用路由器的 SSID 和 Password

        wifi_config_t wifi_config = {
      .sta = {
      .ssid = "PDCN",
      .password = "1234567890",
      },
      };

    04_Button

    该示例可将 boot 按键变成一个多功能按键,可进行单击、双击或者长按以执行不同的操作

    ESP32-C6-GEEK ESP-IDF 示例 4 图 1

    代码解释

    • 初始化 boot 按钮,绑定按钮事件函数 :

        void button_init(void)
      {
      button_config_t btn_cfg = {0};
      button_gpio_config_t gpio_cfg = {
      .gpio_num = BOOT_BUTTON_NUM,
      .active_level = 0,
      .enable_power_save = true,
      };

      esp_err_t ret = iot_button_new_gpio_device(&btn_cfg, &gpio_cfg, &boot_btn);
      assert(ret == ESP_OK);
      ret |= iot_button_register_cb(boot_btn, BUTTON_SINGLE_CLICK, NULL, button_event_cb, NULL);
      ret |= iot_button_register_cb(boot_btn, BUTTON_DOUBLE_CLICK, NULL, button_event_cb, NULL);
      ret |= iot_button_register_cb(boot_btn, BUTTON_LONG_PRESS_START, NULL, button_event_cb, NULL);
      }

    05_lvgl_example

    通过移植 LVGL,在屏幕上实现一些多功能的 GUI 界面。

    ESP32-C6-GEEK ESP-IDF 示例 5 图 1

    相关资料

    1. 硬件资料

    开发板设计文件

    2. 技术手册

    3. 示例程序

    4. 软件工具


    技术支持

    周一-周五(9:30-6:30)周六(9:30-5:30)

    手机:13434470212

    邮箱:services04@spotpear.cn

    QQ:202004841