Введение
В мире разработки встраиваемых систем ESP-IDF (Espressif IoT Development Framework) является популярным выбором для создания приложений для микроконтроллеров ESP32 и ESP8266. В этой статье мы рассмотрим, как создать простую светодиодную мигалку RGB с использованием ESP-IDF, используя его возможности для управления GPIO и управления задачами.
Для кого эта статья
Эта статья предназначена для всех, кто имеет опыт работы с Rust, встроенными системами и электроникой. Но для тех, у кого нет предварительных знаний, я рекомендую:
- Изучите язык программирования Rust.
- Напишите и запустите программу Rust на персональном компьютере.
- Изучите разработку встроенных систем и электронику.
Требования
Прежде чем мы начнем, убедитесь, что у вас есть следующие предварительные условия:
- Плата разработки ESP32.
- Настроена среда Rust Programming.
- RGB-светодиод.
- Базовые знания программирования 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. Приятного кодирования!