Введение

В мире разработки встраиваемых систем ESP-IDF (Espressif IoT Development Framework) является популярным выбором для создания приложений для микроконтроллеров ESP32 и ESP8266. В этой статье мы рассмотрим, как создать простую светодиодную мигалку RGB с использованием ESP-IDF, используя его возможности для управления GPIO и управления задачами.

Для кого эта статья

Эта статья предназначена для всех, кто имеет опыт работы с Rust, встроенными системами и электроникой. Но для тех, у кого нет предварительных знаний, я рекомендую:

  1. Изучите язык программирования Rust.
  2. Напишите и запустите программу Rust на персональном компьютере.
  3. Изучите разработку встроенных систем и электронику.

Требования

Прежде чем мы начнем, убедитесь, что у вас есть следующие предварительные условия:

  1. Плата разработки ESP32.
  2. Настроена среда Rust Programming.
  3. RGB-светодиод.
  4. Базовые знания программирования Rust и встроенных систем.

Настройка проекта/Создание шаблона проекта

Мы создадим проект Rust для нашей светодиодной мигалки RGB, используя ESP-IDF. Убедитесь, что у вас настроена необходимая среда Rust с поддержкой ESP-IDF. Вы можете использовать крейт esp-idf-sys для доступа к функциям ESP-IDF из Rust. В этой статье мы будем использовать ESP-IDF-Template.

Установите необходимые компоненты здесь и введите команду ниже, чтобы сгенерировать шаблон проекта, или отметьте здесь.

cargo generate esp-rs/esp-idf-template cargo

Теперь приступим к объяснению кода.

1. Импорт зависимостей

use esp_idf_sys as _; // If using the `binstart` feature of `esp-idf-sys`, always keep this module imported
use log::*;

use esp_idf_hal::delay::FreeRtos;
use esp_idf_hal::gpio::*;
use esp_idf_hal::peripherals::Peripherals;

В приведенном выше фрагменте кода мы импортируем необходимые ящики и модули для нашего проекта, включая управление GPIO и задержки на основе FreeRTOS.

2. Инициализация регистратора и link_patches

Мы будем использовать крейт log для регистрации сообщений, что упростит отладку нашего приложения. Инициализируйте регистратор следующим образом:

esp_idf_sys::link_patches();
esp_idf_svc::log::EspLogger::initialize_default();

esp_idf_sys::link_patches(); является необходимым шагом инициализации при разработке с использованием ESP-IDF в Rust, поскольку он гарантирует, что ваш код Rust сможет правильно взаимодействовать с системой ESP-IDF и в полной мере использовать преимущества аппаратных функций, предоставляемых микроконтроллером.

3. Настройка контактов GPIO

Далее нам нужно настроить контакты GPIO для управления светодиодом RGB. Мы предполагаем, что вы подключили светодиод RGB к контактам GPIO 2 (красный), 4 (зеленый) и 5 ​​(синий). Мы назначим эти контакты как выходы.

let peripherals = Peripherals::take().unwrap();
let mut r_pin = PinDriver::output(peripherals.pins.gpio2).expect("Error: Unable to set pin(r) gpio2 Output");
let mut g_pin = PinDriver::output(peripherals.pins.gpio4).expect("Error: Unable to set pin(g) gpio4 Output");
let mut b_pin = PinDriver::output(peripherals.pins.gpio5).expect("Error: Unable to set pin(b) gpio5 Output");

4. Создание петли светодиодных мигалок

Теперь самое интересное — создание петли светодиодных мигалок. Будем чередовать цвета светодиода RGB с интервалом в одну секунду.

loop{
        r_pin.set_high().expect("Error: Unable to set pin r high");
        FreeRtos::delay_ms(1000);
        r_pin.set_low().expect("Error: Unable to set pin r low");
        g_pin.set_high().expect("Error: Unable to set pin g high");
        FreeRtos::delay_ms(1000);
        g_pin.set_low().expect("Error: Unable to set pin g low");
        b_pin.set_high().expect("Error: Unable to set pin b high");
        FreeRtos::delay_ms(1000);
        b_pin.set_low().expect("Error: Unable to set pin b low");
    }

В цикле последовательно включаем красный, зеленый и синий светодиоды каждый на одну секунду, а затем выключаем их. Это создает простой эффект мерцания светодиодов RGB.

Получите полный код здесь

5. Установите наборы инструментов Rust & Clang для SoC Espressif (с espup)

В каталоге проекта выполните следующие команды:

espup install
.~/export-esp.sh

6. Сборка и прошивка проекта

Чтобы собрать и записать проект на плату ESP32, убедитесь, что вы находитесь в корне сгенерированного проекта, и используйте приведенные ниже команды:

cargo build
espflash flash target/xtensa-esp32-espidf/debug/your-project-name

7. Заключение

В этой статье мы узнали, как создать простую светодиодную мигалку RGB с использованием Rust и ESP-IDF. Мы настроили контакты GPIO, настроили петлю мигания светодиодов и создали базовое встроенное приложение. Вы можете расширить этот проект, добавив более сложные схемы светодиодов или интегрировав другие датчики и модули. ESP-IDF и Rust представляют собой мощную комбинацию для разработки встроенных систем, позволяющую создавать надежные и эффективные приложения для ваших проектов микроконтроллеров.

Если вы хотите увидеть результат в действии, посмотрите это видео на YouTube, демонстрирующее проект светодиодной мигалки RGB на плате ESP32. Приятного кодирования!