ESP32 DevKit v1 · pinport
готово
⋮

Робот-собака Pin: пульт на GyverLibs/Settings

Pin на ESP32 управляется со страницы Settings: переключатель «Идти», ползунки шага и времени полшага, поворот и кнопка «Прыжок». Страница открывается кнопкой «Веб-интерфейс».

Что на схеме

Плата ESP32 DevKit v1, к ней подключены:

  • Робот-собака Pin — r1, площадка «Ровный пол»

Задействованы выводы платы: GND, D21, D22. Всего соединений на схеме: 3.

Как смотреть

Нажмите ▶ Запустить — после сборки откроется окно робота (потом его открывает кнопка 🤖 над схемой). Мышью камеру можно повернуть, колесом — приблизить; щелчок по суставу показывает номер привода, канал PCA9685 и строку кода для него. Кнопка ⏺ над схемой записывает сцену в GIF — с теми поворотами камеры, что вы делаете.

Робот — не анимация, а модель с массами, шарнирами и трением: скетч только шлёт импульсы приводам и читает датчики, а встанет робот, пойдёт или упадёт — решает физика. Как она устроена — на странице «Физика сцен с роботами».

Как это работает

Рысь и прыжок — те же, что в примерах «Pin идёт рысью» и «Pin прыгает», только параметры не зашиты в скетч, а лежат в переменных, которые меняет страница. Скетч в build() перечисляет, что стоит на странице: переключатель Switch, ползунки Slider, выбор Select и кнопку Button. Библиотека Settings сама рисует страницу, принимает действия и записывает новое значение по указателю.

Откройте панель кнопкой «Веб-интерфейс» над схемой. «Идти» плавно разгоняет рысь за полторы секунды и так же плавно останавливает. Поворот («Влево», «Вправо») меняет разницу шага левых и правых лап; при «Прямо» курс держит гироскоп. «Прыжок» работает только у стоящей собаки.

Что попробовать

  • Поставьте длину шага 20 см и время полшага 15 сотых — получится бег; следите за наклоном корпуса.
  • «Влево» с силой 10 см и шагом 0 — собака разворачивается на месте.
  • Добавьте на страницу ползунок высоты стойки (H сейчас константа).

Почему кадрами

На ESP32 каждая передача Wire - это драйвер ESP-IDF с очередью и прерыванием, тысячи команд процессора. Если слать двенадцать передач на каждом проходе loop(), ядро занято целиком, и эмулятор не успевает за настоящим временем. Поэтому скетч копит углы в кадр и раз в 10 мс отправляет все 12 каналов одной передачей (у PCA9685 включён автоинкремент регистра), а между кадрами спит в delay(): сон эмулятор проскакивает, не считая по такту.

Библиотеки

Пример собирается с библиотеками:

  • WiFi
  • LittleFS
  • Settings

Они уже установлены на сервере сборки — отмечать их в проекте вручную не нужно, список приезжает вместе с примером.

Как это устроено в коде

Основное, чем пользуется скетч:

  • MPU6050 — акселерометр и гироскоп по I²C
  • micros() — микросекунды с запуска, для коротких интервалов
  • millis() — миллисекунды с запуска: на них строят работу без остановки
  • Serial.printf() — печатает в монитор порта с форматированием
  • WiFi.begin() — подключается к точке доступа виртуального Wi-Fi
  • delay() — пауза, на время которой ядро занято ожиданием
  • WiFi.softAP() — поднимает собственную точку доступа
  • Serial.println() — печатает строку в монитор порта
  • Serial.begin() — открывает монитор порта на заданной скорости
  • Wire.begin() — поднимает шину I²C, по ней говорят датчики и дисплеи
  • constrain() — зажимает значение в границах

В скетче 265 строк; свои функции: reg(), setJoint(), sendFrame(), paw(), readImu(), stateText(), build(), update(); подключено заголовков: 5. Сам скетч открыт на соседней вкладке — его можно менять и запускать заново.

Что попробовать изменить

  • Поменяйте период в константе и посмотрите на анализаторе, как меняется картина на выводе.
  • Проверьте, что делает скетч, когда сеть недоступна: обрыв связи — обычное состояние, а не исключение.
  • Добавьте свои Serial.println() в интересных местах — монитор порта здесь и есть отладчик.
  • Перенесите деталь на другой вывод — на схеме и в коде — и убедитесь, что пример работает так же.

Смотрите также

← Все примеры галереи

Схема
Проект из галереи — запускать можно, менять нельзя.

      
Сборка ещё не запускалась.

    Печатайте в Serial числа — они станут графиком. Serial.println(t); — один ряд, Serial.printf("t:%.1f h:%.1f\n", t, h); — два с подписями. Формат тот же, что понимает плоттер Arduino IDE.