Radiomaster RP2 ELRS Nano Receiver + Arduino Nano (переходимо до практики)

 За відсутності під рукою Arduino Mega планувалося піти шляхом виведення інформації на монітор з послідовним підключенням до компютера для онолення програми та приймачем ELRS. Але несподівано знайшлась Mega і тому пішов простішим шляхом (так думав) для швидкого отримання результату.

а nano почекає коли проект вийде з стадії прототипу

Arduino Mega має кілька апаратних серійних портів, що робить її ідеальною для проектів, де потрібно одночасне підключення до декількох серійних пристроїв.

Підключення Radiomaster RP2 до Arduino Mega

Arduino Mega має три додаткові серійні порти, крім основного порту Serial:

  • Serial1 на пінах 19 (RX) і 18 (TX)
  • Serial2 на пінах 17 (RX) і 16 (TX)
  • Serial3 на пінах 15 (RX) і 14 (TX)

Можемо обрати будь-який з цих додаткових портів для підключення RP2. Наприклад, якщо використовувати Serial3 необхідно підключитись до наступних пінів:
  • TX пін з RP2 до RX піна 15 на Arduino Mega.
  • RX пін з RP2 до TX піна 14 на Arduino Mega.
Але як виявилося вірно підключити та використати раніше вказану біблотеку протоколу Crossfire https://github.com/Sam4uk/CRSF недостатньо, щоб система запрацювала. Тому продемся послідовно з урахування всього "підводгого каміння":
  1. Необхідно "забіндити" пульт з приймачем, а для цього і на пульті і на приймачі мають стояти однакові прошивки ELRS (скачати останню версію, та прошити нею пульт і приймач можна з офіційного сайту, офіційним додатком https://www.expresslrs.org/quick-start/installing-configurator/).
  2. Baudrate на приймачі має стояти такий же як і в обміні по серійному порту, а саме головне - вказати в змінній CrsfSerial коду, який йде як приклад в біблотеці (замість параметру CRSF_BAUDRATE). Тобто має бути чітко вказано: CrsfSerial crsf(Serial3, 115200)
  3. Живлення для RP2 беремо безпосередньо з Arduino Megas підключившись до піна 5v та GND (відповідно + та -).
Та розберемо код прикладу, який йде в комплекті з бібліотекою (внесемо незначні коригування, через які за замовлуванням все не завелося).
/**
 * @file PickChennel.ino
 * @author Sam4uk
 * @version 0.1
 * @date 2024-01-02
 *
 * @copyright Copyright (c) 2024
 *
 */
#include <CrsfSerial.h>
#if defined(__AVR_ATmega2560__)
CrsfSerial crsf(Serial3, CRSF_BAUDRATE); 
#else
#error NOT MEGA2560
#endif

/**
 * @brief The function that will be called upon receiving data via control
 * channels
 */
void packetChannels();

/**
 * @brief Executed once on power-up or reboot
 */
void setup() {
  Serial.begin(115200);
  crsf.begin();
  crsf.onPacketChannels = &packetChannels;
}

/**
 * @brief Executes cyclically while the power is on
 */
void loop() { crsf.loop(); }

void packetChannels() {
  for (auto ch{1}; ch <= CRSF_NUM_CHANNELS; ++ch) {
    Serial.print(crsf.getChannel(ch));
    if (ch != CRSF_NUM_CHANNELS) Serial.print(", ");
  }
  Serial.println();
}
Пояснення Коду
  • Підключення Бібліотеки та Ініціалізація CRSF: імпортуємо бібліотеку CrsfSerial та ініціалізуємо об'єкт crsf, використовуючи Serial3 та встановлену швидкість передачі даних CRSF_BAUDRATE - який варто вказати безпосередньо (в моєму випадку це 115200). Це дозволяє використовувати спеціальні можливості протоколу CRSF з Arduino Mega.
  • Перевірка Плати: Макро #if defined(__AVR_ATmega2560__) гарантує, що код компілюється тільки для Arduino Mega 2560, захищаючи від спроби використання коду з несумісними платами.
  • Функція packetChannels: Ця функція викликається кожного разу, коли приймається новий пакет даних з каналами управління. Вона перебирає всі канали (зазвичай CRSF протокол передбачає до 16 каналів) і виводить значення кожного каналу через серійний порт.
  • Функції setup і loop: У setup ініціалізуємо серійний порт та запускаємо crsf. В loop викликається метод crsf.loop(), який обробляє вхідні дані і, при необхідності, викликає packetChannels.
Використання
Цей приклад коду демонструє, як використовувати протокол CRSF для отримання та обробки даних з каналів управління у реальному часі. Він дозволяє легко інтегрувати протокол для зв'язку з приймачами, такими як Radiomaster RP2 ELRS Nano.

Успішно "забіндивши" пульт Radiomaster BOXER з приймачем RP2 ELRS Nano (про що свідчить постіне зелене світло на діоді приймача), та заливши на Maga наш тестовий код на виході в моніторі серійного порту побачимо безперервний потік стану кожного каналу і якщо це відобразити (за допогою штатних функцій Arduino IDE) у вигляді графіку, то бобачимо чудову картину зміни стану показників на різних каналах.
Отже наша спроба підключити приймач Elrs сигналу до Arduino та отримати стани каналів пройшла успішно і наступним завданням буде орацювати отримані дані та перетворити на команди для керування нашим піддослідним Elrs-мобілем. Про що в наступній публікації. Дякую за увагу! 

Немає коментарів:

Дописати коментар