在 ESP-IDF 中使用 Arduino 框架和Arduino的第三方库

在 ESP-IDF 中使用 Arduino 框架和Arduino的第三方库

ESP-IDF 是 Espressif 提供的官方开发框架,适用于其系列芯片(如 ESP32、ESP8266)。它提供了强大的底层功能,但学习曲线较陡。而 Arduino 框架则更加简洁易用,广受开发者欢迎。幸运的是,我们可以将 Arduino 框架 API 与 ESP-IDF 结合使用,既能享受 Arduino 的易用性,也能充分利用 ESP-IDF 的底层功能。

本篇博客将讲解如何在 ESP-IDF 中集成 Arduino 框架 API,并添加 Arduino 的第三方库,这样在开发过程中轻松使用这两者的优势。

一、在 ESP-IDF 中集成 Arduino 框架

1. 创建 ESP-IDF 项目并启用 Arduino 框架

在 ESP-IDF 中使用 Arduino 框架 API 需要进行一些设置。

步骤 1:创建一个 ESP-IDF 项目

我们先创建一个标准的IDf工程这里我起名esp_idf_to_arduino

步骤 2:添加 Arduino 组件

将 Arduino 作为 ESP-IDF 的组件使用,具体操作如下:

  1. 在项目目录下创建 components 文件夹,然后将 Arduino 库克隆到该目录中:

    cd your_project_name
    mkdir components
    cd components
    git clone https://github.com/espressif/arduino-esp32.git arduino
    

直接克隆文件大小太大,可能会失败,建议直接去github下载然后解压到components文件夹内,要注意不同版本的 arduino-esp32 SDK 对应的 ESP-IDF SDK 版本不同,版本直接的对应关系在此处查看arduino-esp32
在这里插入图片描述
我使用的ESP-IDF版本为4.4.7所以这里我应该下载的arduino组件为2.0.16

在这里插入图片描述

  1. 对工程配置选项做修改,以适配arduino

修改 sdkconfig 文件中的 CONFIG_FREERTOS_HZ 配置为 1000, 默认是 100,从这里可见arduino 对应的task是1ms

在这里插入图片描述

3. 示例代码

arduino组件配置完成就,就开始写代码了

在IDF中使用arduino的api,首先要使用initArduino();进行初始化

#include "Arduino.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"

extern "C" void app_main()
{
    initArduino();
    Serial.begin(115200);
    while(!Serial){
        //等待串口初始化完成
    }
    
    for(;;){
        Serial.print("Hello ");
        printf("World\n");
        ESP_LOGI("TAG", "Hello arduino");

        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }

}

同样也可以使用 Arduino 风格代码

在终端 执行 idf.py menuconfig 指令进入工程配置选项界面,开启 Autostart Arduino setup and loop on boot 配置选项

在这里插入图片描述
在这里插入图片描述

这下就可以执行 Arduino 风格代码了

#include "Arduino.h"

void setup() {
    pinMode(2, OUTPUT);  // 设置 GPIO 2 为输出
}

void loop() {
    digitalWrite(2, HIGH);  // 点亮 LED
    delay(1000);  // 延时 1 秒
    digitalWrite(2, LOW);  // 关闭 LED
    delay(1000);  // 延时 1 秒
}
4. 编译和运行项目
  1. 配置目标设备(以 ESP32 为例):

    idf.py set-target esp32
    
  2. 编译并烧写项目:

    idf.py build
    idf.py flash
    
  3. 启动串口监视器查看输出:

    idf.py monitor
    

二、在 ESP-IDF 中使用 Arduino 第三方库

Arduino 社区有大量的第三方库,可以大大简化开发工作。通过将这些库集成到 ESP-IDF 项目中,我们可以快速实现复杂功能。

1. 下载 Arduino 第三方库

你可以通过以下几种方式获取 Arduino 库:

假设我们使用 WS2812 库来点亮WS2812。

2 在 ESP-IDF 中使用 WS2812 库

WS2812 是一种广泛使用的 RGB LED 控制芯片,通过一个单线协议实现对多个 LED 灯的控制。许多 Arduino 开发者使用 FastLEDAdafruit NeoPixel 库来控制 WS2812。在 ESP-IDF 项目中,我们可以引入 Arduino 库来实现对 WS2812 灯带的控制。

1️⃣下载 WS2812 库

我们使用 Adafruit NeoPixel 库来控制 WS2812。你可以从 GitHub 下载库。

如果找不到库的地址,我们可以在arduino IDE上搜索,点击更多信息跳转到github仓库进行下载
在这里插入图片描述

2️⃣.将 WS2812 库添加到 ESP-IDF 项目中
  1. 创建库的目录

在项目的 components 目录下拉取Adafruit_NeoPixel库:

cd your_project_name/components
git clone https://github.com/adafruit/Adafruit_NeoPixel.git
  1. 配置 CMakeLists.txt

我们打开下载好的Adafruit_NeoPixel文件夹
在这里插入图片描述

记住源文件和头文件的路径,可见这个库Adafruit_NeoPixel.cpp和Adafruit_NeoPixel.h,还有一个esp.c依赖文件 都在Adafruit_NeoPixel文件夹下

your_project_name/components目录下创建CMakeLists.txt

idf_component_register(SRCS "Adafruit_NeoPixel.cpp" "esp.c"
                      INCLUDE_DIRS "."
                      REQUIRES arduino
                      )

重新编译项目: 使用 idf.py build 重新编译你的项目,确保所有新添加的库都能正确集成

⚠️如果编译失败,请清除构建后,在尝试

3️⃣使用 WS2812 库
  1. 在代码中包含 WS2812 库

在主程序文件 main.cpp中引入 Adafruit_NeoPixel 库:

#include "Arduino.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include <Adafruit_NeoPixel.h>

// 定义灯带引脚和 LED 数量
#define LED_PIN    4
#define LED_COUNT  16


Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

extern "C" void app_main()
{
    initArduino();
    Serial.begin(115200);
    while(!Serial){
        //等待串口初始化完成
    }

    strip.begin();
    strip.show();  // 初始化所有像素为"关"


    for(;;){
        // 设置所有 LED 为红色
        for (int i = 0; i < LED_COUNT; i++) {
            strip.setPixelColor(i, strip.Color(255, 0, 0));  // 红色
        }
        strip.show();  // 更新显示
        delay(1000);

        // 设置所有 LED 为绿色
        for (int i = 0; i < LED_COUNT; i++) {
            strip.setPixelColor(i, strip.Color(0, 255, 0));  // 绿色
        }
        strip.show();
        delay(1000);
    }

}
  1. 编译和运行

同样使用 idf.py build 编译项目,idf.py flash 将程序烧录到设备上。

总结

通过将 Arduino 框架 API 与 ESP-IDF 相结合,你可以简化开发工作,轻松使用 Arduino 的库和函数,同时享受 ESP-IDF 提供的强大功能。通过将 Arduino 的第三方库引入 ESP-IDF 项目,你还可以扩展项目的功能,快速实现复杂的硬件控制与数据处理。

无论你是想要简单的 Arduino 风格开发,还是需要 ESP-IDF 的底层控制和优化,这种结合都可以为你的 ESP32 项目带来更多灵活性与效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁子希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值