Код для поиска

ESP32 Урок 26/55 - Использование джойстика с Arduino: принятие мер | Набор SunFounder для ESP32 IoT

ESP32 Урок 26/55 - Использование джойстика с Arduino: принятие мер | Набор SunFounder для ESP32 IoT

В этом руководстве мы узнаем, как подключить XY-джойстик к микроконтроллеру ESP32 от SunFounder, что позволит нам определять его положение и реагировать на его ввод. Мы также интегрируем зуммер, который активируется при перемещении джойстика в определенное положение. Эта комбинация позволит нам создавать интерактивные проекты, реагирующие на ввод пользователя в реальном времени.

ESP32-26-xy-joystick-main

XY-джойстик обеспечивает два аналоговых выхода, соответствующих положениям X и Y, а также переключатель, который можно нажать для запуска действия. Считывая значения с джойстика, мы можем управлять различными элементами нашего проекта, такими как активация зуммера или отображение значений на экране. Чтобы полностью понять процесс, обязательно посмотрите видео для получения дополнительной информации (на видео в 00:00).

Объяснение аппаратного обеспечения

Основными компонентами этого проекта являются микроконтроллер ESP32, XY-джойстик и зуммер. ESP32 — это универсальная плата, поддерживающая Wi-Fi и Bluetooth, что делает ее идеальной для проектов IoT. XY-джойстик состоит из двух переменных резисторов для осей X и Y и кнопочного переключателя для дополнительного ввода.

joystick_schematic
ESP32-26-xy-joystick-schematic

Джойстик выдает аналоговые сигналы, соответствующие его положению, которые считываются аналоговыми выводами ESP32. Кнопка обеспечивает цифровой сигнал при нажатии. Зуммер подключен к цифровому выходному выводу ESP32, что позволяет активировать или деактивировать его в зависимости от положения джойстика.

Детали из технического описания

Производитель SunFounder
Номер детали Модуль XY-джойстика
Рабочее напряжение 3,3 В – 5 В
Значение резистора 10 кОм (на каждую ось)
Максимальный ток 20 мА
Тип переключателя Тактовая кнопка
Размеры Прибл. 50 мм x 50 мм

 

  • Убедитесь, что джойстик питается от 3,3 В для совместимости с ESP32.
  • Используйте подтягивающие резисторы для переключателя, чтобы избежать плавающих входов.
  • Подключите аналоговые выходы к выводам АЦП ESP32 (34 для X, 35 для Y).
  • Используйте механизм антидребезга для переключателя, чтобы предотвратить ложные срабатывания.
  • Контролируйте уровни напряжения, чтобы убедиться, что они остаются в безопасных рабочих пределах.

Инструкции по подключению

ESP32-26-xy-joystick-wiring

Чтобы подключить джойстик к ESP32, начните с соединения контакта заземления джойстика с контактом заземления на ESP32. Затем подключите контакт VCC джойстика к контакту 3,3 В на ESP32. Джойстик имеет два аналоговых выходных контакта: подключите выход оси X (обозначенный как VRX) к контакту 34 на ESP32, а выход оси Y (обозначенный как VRY) к контакту 35.

Для выхода переключателя подключите контакт переключателя к контакту 33 на ESP32. Этот контакт будет считывать нажатие кнопки как цифровой вход. Убедитесь, что соединения надежны, чтобы избежать периодических проблем. Если ваша проводка отличается от видео (на видео в 02:30), адаптируйтесь соответствующим образом, следуя тем же принципам для аналоговых и цифровых соединений.

Примеры кода и пояснения

В коде мы начинаем с определения констант для выводов джойстика. Идентификаторы xAxis, yAxis и btn установлены на 34, 35 и 33 соответственно. Это упрощает ссылки на эти выводы на протяжении всей программы.

#define xAxis 34
#define yAxis 35
#define btn 33

В функции setup() мы инициализируем последовательную связь и устанавливаем режим вывода кнопки на вход. Это подготавливает ESP32 к чтению данных с джойстика и отправке их в последовательный монитор.

void setup() {
  Serial.begin(115200);
  pinMode(btn, INPUT);  
}

Внутри loop() мы считываем аналоговые значения для осей X и Y джойстика с помощью analogRead() и сохраняем их в xValue и yValue. Состояние кнопки считывается с помощью digitalRead() и сохраняется в btnValue. Наконец, мы выводим эти значения в последовательный монитор.

void loop() {
  int xValue = analogRead(xAxis);
  int yValue = analogRead(yAxis); 
  int btnValue = digitalRead(btn);
  
  Serial.printf("Joystick value is %d , %d , %d \n",xValue,yValue,btnValue);
  delay(300);  // Задержка между чтениями
}

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

Демонстрация / Что ожидать

Когда настройка завершена и код загружен, последовательный монитор должен отображать значения X и Y вместе с состоянием кнопки. При перемещении джойстика значения будут соответствующим образом меняться, отражая его положение. Нажатие кнопки будет переключать ее состояние между высоким и низким уровнем.

К распространенным ошибкам относится неправильное подключение, которое может привести к плавающим входам или отсутствию реакции джойстика. Убедитесь, что используются правильные контакты и что для переключателя реализованы подтягивающие резисторы. Посмотрите видео для практической демонстрации этих поведений (в видео на 13:00).

Временные метки видео

  • 00:00 Начало
  • 1:47 Введение в XY-джойстик
  • 7:32 Измерение значений джойстика
  • 8:40 Объяснение подключения
  • 11:06 Объяснение кода Arduino для джойстика с ESP32
  • 14:43 Выбор платы ESP32 и COM-порта в Arduino IDE
  • 16:24 Демонстрация простого использования джойстика
  • 19:20 Определение положения джойстика с помощью кода и зуммера
  • 21:16 Демонстрация определения положения

Изображения

joystick_schematic
joystick_schematic
ESP32-26-xy-joystick-schematic
ESP32-26-xy-joystick-schematic
ESP32-26-xy-joystick-wiring
ESP32-26-xy-joystick-wiring
ESP32-26-xy-joystick-main
ESP32-26-xy-joystick-main
826-ESP32 Tutorial 26/55- Arduino code for XY Joystick
Язык: C++
/*
 * // Определите константы для осей x и y, а также для контактов кнопок
 */
#define xAxis 34
#define yAxis 35
#define btn 33


void setup() {
 // Инициализируйте последовательную связь на скорости 115200 бит в секунду:
  Serial.begin(115200);

 // Установите режим кнопочного пина на входной.
  pinMode(btn, INPUT);
}

void loop() {
 // Считайте аналоговое значение для осей x и y.
  int xValue = analogRead(xAxis);
  int yValue = analogRead(yAxis);

 // Считать цифровое значение с пина кнопки
  int btnValue = digitalRead(btn);

 // распечатать значения
  Serial.printf("Joystick value is %d , %d , %d \n",xValue,yValue,btnValue);

  delay(300); // Задержка между чтениями
}

Ресурсы и ссылки

Файлы📁

Нет доступных файлов.