Напиши программу для ардуионо есп32 с3 зеро, Суть...

تم الإنشاء في: ١١ نوفمبر ٢٠٢٦

تمت الإجابة باستخدام GPT-6 Thinking بواسطة Chat01

سؤال

Напиши программу для ардуионо есп32 с3 зеро,
Суть программы после нажатия кнопки на 1 секунду загорается светодиод одновременно с этим на динамике идёт звук рыка

Система всегда в ожидании нажатия кнопки

Пин - объект
2- кнопка
13 -динамик
10-светодиод

А так же распиши для меня что и как загрузить на плату как для дурака

الفكرة

Проверяю распиновку

Я уточняю совместимость ESP32-C3 Zero, потому что GPIO13 может быть занят или отсутствовать на разъёме. Затем подготовлю схему для кнопки на GPIO2, динамика на GPIO13 и светодиода на GPIO10, с учётом типа динамика.

Checked the pinout

الإجابة

Проверю распиновку ESP32-C3-Zero и подготовлю готовый код: кнопка запускает свет и звук на 1 секунду, затем плата снова ждёт нажатия. После этого распишу подключение и загрузку через Arduino IDE по шагам.

الفكرة

Упрощая логику

Я использую однократное срабатывание: нажатие запускает секундный низкий «рычащий» звук и красное свечение, затем устройство ждёт отпускания кнопки. Так повторное нажатие не складывается в очередь.

Упростил логику

Собирая рабочий пример

Я дополняю программу готовым кодом Arduino: кнопка запускает эффект, пассивный пьезоизлучатель получает меняющуюся частоту, а встроенный RGB-светодиод GPIO10 светится красным. Для динамика потребуется усилитель, не прямое подключение.

Собрал рабочий пример

الفكرة

Завершая инструкцию

Я могу оформить финальный вариант с распиновкой, схемой подключения, готовым скетчем и предупреждением о GPIO13. Для точной совместимости остаётся подтвердить, что плата именно Waveshare ESP32-C3-Zero, а не другая версия C3 Zero.

Подготавливая финальную схему

Я уточняю обозначения GPIO2, GPIO4 и GPIO10 на плате, чтобы не перепутать физические контакты. Также учитываю, что GPIO2 лучше не удерживать нажатой во время включения питания.

Финализируя программу

Я выбираю более простой скетч: он легче проверяется и объясняется. При нажатии GPIO2 запускается секундный нисходящий «рык», GPIO10 загорается красным, затем звук выключается до следующего полного отпускания кнопки.

Оформляя готовый скетч

Я превращаю выбранную логику в законченный пример с понятными комментариями: GPIO2 запускает эффект, GPIO4 формирует звук, GPIO10 управляет встроенным RGB-светодиодом, а повтор разрешается только после отпускания кнопки.

Finalized and formatted the complete sketch program scheme

الفكرة

Компилируя пример

Я проверяю итоговую структуру скетча: настройки GPIO2 и GPIO4, управление встроенным RGB-светодиодом через GPIO10, секундный звуковой эффект, остановку и ожидание отпускания кнопки.

Финализируя пример

Я собираю простой скетч с точным секундным эффектом: GPIO2 запускает звук, GPIO4 управляет пьезоизлучателем, GPIO10 включает встроенный RGB-светодиод, а повтор разрешается только после отпускания кнопки.

Compiled and finalized the example

Searched 14 websites

الفكرة

Created ESP32-C3 electronic roar sketch

Worked for 3m 49s

الإجابة

Сделаем! Ниже будет готовая программа для ESP32-C3-Zero и подробная инструкция для новичка: что подключить, какую программу установить на компьютер, куда вставить код и на какую кнопку нажать, чтобы всё заработало.

1. Как будет работать устройство

  1. ESP32 постоянно ждёт нажатия кнопки.
  2. Ты нажимаешь кнопку.
  3. Светодиод загорается, а динамик одновременно издаёт рычащий звук.
  4. Через ровно 1 секунду светодиод гаснет, звук прекращается.
  5. Устройство снова готово к нажатию.

При удержании кнопки звук не будет повторяться бесконечно. Для нового запуска нужно отпустить кнопку и нажать снова.

Важный момент с пинами

Если у тебя именно Waveshare ESP32-C3-Zero, у неё есть две особенности:

  • GPIO2 — подойдёт для кнопки.
  • GPIO10 — уже подключён к встроенному цветному светодиоду. Будем использовать его.
  • GPIO13 — использовать для динамика нельзя: он занят встроенной Flash-памятью и не выведен на контакты платы. Поэтому я заменю его на GPIO4.

Это подтверждается официальной распиновкой Waveshare. (docs.waveshare.com nuttx.apache.org)

2. Что нужно подключить

Твоя плата ESP32-C3-Zero. На обратной стороне подписаны контакты.

ДетальКуда подключить
Кнопка, первый контактGPIO2
Кнопка, второй контактGND
Пассивный пьезозуммер, плюс (+)GPIO4
Пассивный пьезозуммер, минус (−)GND
СветодиодВстроенный, GPIO10

GND — это общий минус.

Для начала рекомендую использовать пассивный пьезозуммер (пищалку без встроенного генератора). Он сможет воспроизводить звук изменяющейся частоты.

Важно: если у тебя обычный динамик на 4–8 Ом, его нельзя напрямую подключать к GPIO платы. Для него нужен усилитель. Если у тебя отдельный обычный светодиод, а не встроенный, лучше подключить его к GPIO3 через резистор 220–330 Ом и немного изменить код.

3. Готовая программа

Я уже сделал файл, который можно открыть в Arduino IDE.

Скачать готовую программу ZIP

Или скачать только файл ESP32_C3_Zero_Roar.ino.

Если не хочешь скачивать, просто скопируй этот код в Arduino IDE:

cpp
#include <Arduino.h> // Номера контактов const int BUTTON_PIN = 2; const int SOUND_PIN = 4; const int LED_PIN = 10; // Длительность рыка в миллисекундах const unsigned long EFFECT_TIME_MS = 1000; // Переменные для работы программы bool effectActive = false; bool readyForPress = true; unsigned long effectStartedAt = 0; unsigned long lastToneChangeAt = 0; // Включение и выключение светодиода void setLight(bool enabled) { rgbLedWrite(LED_PIN, enabled ? 100 : 0, 0, 0); } void setup() { // Кнопка подключена к GND pinMode(BUTTON_PIN, INPUT_PULLUP); // Настраиваем звук ledcAttach(SOUND_PIN, 400, 10); ledcWriteTone(SOUND_PIN, 0); // Светодиод выключен setLight(false); } void loop() { unsigned long now = millis(); bool buttonPressed = (digitalRead(BUTTON_PIN) == LOW); // Если кнопка отпущена, // разрешаем новое нажатие if (!buttonPressed && !effectActive) { readyForPress = true; } // Если кнопку нажали if (buttonPressed && readyForPress && !effectActive) { readyForPress = false; effectActive = true; effectStartedAt = now; lastToneChangeAt = now; // Одновременно включаем свет и звук setLight(true); ledcWriteTone(SOUND_PIN, 650); } // Пока работает эффект if (effectActive) { unsigned long elapsed = now - effectStartedAt; // Через секунду всё выключаем if (elapsed >= EFFECT_TIME_MS) { ledcWriteTone(SOUND_PIN, 0); setLight(false); effectActive = false; } // Создаём электронное рычание else if (now - lastToneChangeAt >= 20) { lastToneChangeAt = now; int baseHz = 600 - (elapsed * 350 / EFFECT_TIME_MS); int raspHz = ((elapsed / 20) % 2 == 0) ? 65 : -65; int wobbleHz = ((elapsed / 100) % 3) * 15; ledcWriteTone( SOUND_PIN, baseHz + raspHz + wobbleHz ); } } }

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

4. Как загрузить программу на ESP32

Шаг 1. Установи Arduino IDE

Arduino IDE

Скачать с официального сайта

Открой сайт, скачай версию для своей системы (например, Windows 10/11), установи её как обычную программу и запусти.

Шаг 2. Добавь поддержку ESP32

  1. В Arduino IDE открой File → Preferences (Файл → Настройки).
  2. Найди поле Additional Boards Manager URLs (Дополнительные ссылки для менеджера плат).
  3. Вставь туда эту ссылку:

https://espressif.github.io/arduino-esp32/package_esp32_index.json

  1. Нажми OK.
  2. Слева нажми значок платы (Boards Manager).
  3. В поиске напиши esp32.
  4. Найди esp32 by Espressif Systems.
  5. Нажми Install. Используй актуальную стабильную версию 3.x.

После установки перезапусти Arduino IDE. (docs.espressif.com docs.espressif.com)

Шаг 3. Подключи плату к компьютеру

Возьми кабель USB Type-C, который поддерживает передачу данных, и подключи плату.

В Arduino IDE выбери:

НастройкаЗначение
Tools → BoardESP32C3 Dev Module
Tools → USB CDC On BootEnabled
Tools → PortCOM-порт твоей платы
Tools → Upload Speed115200, если возникают ошибки

Например, порт может называться COM3 или COM5. Номер у каждого компьютера свой.

Если плата не появляется в списке портов, зажми на ней BOOT, подключи USB, затем отпусти BOOT. Это переводит плату в режим загрузки. (docs.espressif.com www.waveshare.com)

Шаг 4. Открой мою программу

Если скачал ZIP-файл:

  1. Распакуй архив.
  2. Открой папку ESP32_C3_Zero_Roar.
  3. Дважды щёлкни файл ESP32_C3_Zero_Roar.ino.
  4. Он должен открыться в Arduino IDE.

Либо создай новый проект в Arduino IDE, удали имеющийся текст и вставь код из раздела 3.

Шаг 5. Загрузи код на плату

В левом верхнем углу Arduino IDE есть две основные кнопки.

Проверка

Загрузка

Сначала нажми галочку — программа проверит код на ошибки.

Затем нажми стрелку вправо — начнётся загрузка на ESP32.

Если появляется сообщение Done uploading, значит программа успешно записана. Если она не запускается сразу, нажми RESET на плате.

Если Arduino пишет Failed to connect, зажми BOOT, кратко нажми RESET, отпусти BOOT и повтори загрузку.

5. Проверяем работу

Демонстрация логики (1 секунда)

[Проверить подключение]

Это схема поведения, а не управление настоящей платой. Кнопка откроет инструкцию по проверке.

Когда настоящая плата подключена и прошита, нажми свою внешнюю кнопку на GPIO2: встроенный светодиод должен загореться красным, а зуммер — издать звук примерно на секунду. Затем всё выключится.

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

سؤال

Напиши программу для ардуионо есп32 с3 зеро,
Суть программы после нажатия кнопки на 1 секунду загорается светодиод одновременно с этим на динамике идёт звук рыка

Система всегда в ожидании нажатия кнопки

Пин - объект
2- кнопка
13 -динамик на 8 ом
10-светодиод подключённый последовательно резистору

Если есть ошибки по подключению скажи что нужно поменять

الفكرة

Checking ESP32-C3 wiring

I’m verifying the board’s pin labels before recommending changes. GPIO12–17 are typically reserved for flash, while GPIO10 may drive the onboard WS2812. I’m also ensuring the speaker uses an amplifier rather than a GPIO directly.

Checked ESP32-C3 wiring

الفكرة

Designing the revised program

I’m choosing a safe pin arrangement, keeping GPIO13 away from flash functions, and using an amplifier for the 8-ohm speaker. The synthesized growl will be raspier than a simple beep, while the onboard LED remains separately controlled.

Clarifying pin assignments

I’m distinguishing GPIO numbers from physical header positions, because “13” may mean either. GPIO13 is unavailable for normal use on this board, so I’m selecting exposed GPIO4 for audio and avoiding conflicts with the onboard LED.

Designed the revised program and clarified pin assignments

الفكرة

Writing the firmware

I’m preparing a nonblocking sketch with debounced button handling, one trigger per press, a one-second LED effect, and a variable-frequency rasp through GPIO4. I’m keeping GPIO10 separate for the onboard LED and avoiding GPIO13.

Wrote the firmware

الفكرة

Finalizing the sound circuit

I’m keeping the sound intentionally synthetic: a changing square-wave pitch will create a raspy roar, while a PAM8403 amplifier safely drives the 8-ohm speaker. I’ll include shared ground, USB-powered 5V, and differential speaker wiring.

Assembling the complete setup

I’m ready to present the corrected wiring, beginner-friendly upload steps, and complete sketch. I’ll clearly mark the amplifier connections, LED resistor, GPIO assignments, and the limitation that the sound is synthetic.

Finishing the wiring guide

I’m presenting the corrected setup with amplifier input and differential speaker outputs clearly labeled. I’ll also include debouncing, a current-limiting resistor for the LED, upload steps, and the note that the roar is synthesized rather than recorded.

Finalized the sound circuit setup and wiring guide

Searched 15 websites

الفكرة

Created ESP32 roar button schematic and code

Worked for 2m 53s

الإجابة

Для твоей ESP32-C3-Zero можно сделать именно такую программу: нажал кнопку — на 1 секунду загорается светодиод и раздаётся рык. Затем светодиод гаснет, звук прекращается, и система снова ждёт нажатия.

Но в подключении есть две важные проблемы, которые нужно исправить, чтобы не повредить плату.

1. Проверка твоего подключения

ДетальТвой пинЧто рекомендую
КнопкаGPIO2Оставить GPIO2
Динамик 8 ОмGPIO13Перенести на GPIO4 через усилитель
Светодиод с резисторомGPIO10Можно оставить GPIO10

Почему нужно переделать динамик:

  • На Waveshare ESP32-C3-Zero GPIO13 занят Flash-памятью и не выведен наружу. (docs.waveshare.com www.waveshare.com)
  • Динамик сопротивлением 8 Ом нельзя подключать непосредственно к GPIO4 или любому другому GPIO. Выход ESP32 не рассчитан на такую нагрузку.
  • Для динамика понадобится небольшой усилитель, например PAM8403 на 5 В.

GPIO10 уже используется встроенным RGB-светодиодом платы. Твой отдельный обычный светодиод с резистором можно подключить к этому же контакту, но встроенный RGB-светодиод при этом может вести себя непредсказуемо. Более чистый вариант — перенести внешний светодиод на GPIO3.

GPIO2 подходит для кнопки, но при включении или перезагрузке платы её лучше не удерживать нажатой: это один из контактов, участвующих в настройке загрузки ESP32-C3. (docs.espressif.com)

2. Как правильно подключить

Тебе понадобятся усилитель PAM8403, резистор 1 кОм, неполярный конденсатор 1 мкФ и резистор 220–330 Ом для светодиода.

Схема соединений

text
ESP32-C3-Zero ├── GPIO2 ── Кнопка ─────── GND │ ├── GPIO10 ── Резистор 330 Ом │ │ │ └── (+) Светодиод │ (-) ── GND │ ├── GPIO4 ── Резистор 1 кОм │ │ │ └── Конденсатор 1 мкФ │ │ │ └── PAM8403 L-IN │ ├── 5V ───────────────── PAM8403 VCC │ └── GND ──────────────── PAM8403 GND PAM8403 ├── L+ ─── (+) Динамик 8 Ом └── L- ─── (-) Динамик 8 Ом

Питание усилителя — 5 В, например от контакта 5V платы при питании через USB. Все соединения GND общие.

Важно: минус динамика подключай к L- усилителя, а не к GND. Конденсатор на входе усилителя нужен для отсечения постоянной составляющей сигнала.

3. Готовая программа Arduino

ESP32_C3_Zero_Ryk.ino

Готовый проект для Arduino IDE

[Скачать ZIP]

Скачать файл программы .ino

Код для ESP32 Arduino Core 3.x. Никаких дополнительных библиотек не требуется.

cpp
#include <Arduino.h> // Контакты const int BUTTON_PIN = 2; const int SOUND_PIN = 4; const int LED_PIN = 10; // Время работы в миллисекундах const unsigned long EFFECT_TIME = 1000; // Состояния bool playing = false; bool lastButton = HIGH; bool stableButton = HIGH; unsigned long debounceTime = 0; unsigned long startTime = 0; unsigned long soundTime = 0; void setup() { // Кнопка между GPIO2 и GND pinMode(BUTTON_PIN, INPUT_PULLUP); // Внешний светодиод pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LOW); // Генератор звука ledcAttach(SOUND_PIN, 500, 10); ledcWriteTone(SOUND_PIN, 0); } void loop() { unsigned long now = millis(); bool button = digitalRead(BUTTON_PIN); // Устранение дребезга кнопки if (button != lastButton) { debounceTime = now; lastButton = button; } if (now - debounceTime >= 30) { if (button != stableButton) { stableButton = button; // Новое нажатие if (button == LOW && !playing) { playing = true; startTime = now; soundTime = now; // Свет и звук одновременно digitalWrite(LED_PIN, HIGH); ledcWriteTone(SOUND_PIN, 530); } } } // Эффект рычания if (playing) { unsigned long elapsed = now - startTime; // Завершаем через 1 секунду if (elapsed >= EFFECT_TIME) { ledcWriteTone(SOUND_PIN, 0); digitalWrite(LED_PIN, LOW); playing = false; } // Изменяем частоту для имитации рыка else if (now - soundTime >= 20) { soundTime = now; int baseFrequency = 550 - (elapsed * 320 / EFFECT_TIME); int roughness = random(-75, 76); int wobble = ((elapsed / 60) % 2 == 0) ? 35 : -35; int frequency = constrain( baseFrequency + roughness + wobble, 130, 700 ); ledcWriteTone(SOUND_PIN, frequency); } } }

Что делает программа: после нажатия кнопки одновременно запускает свет и электронное рычание, плавно снижая основную частоту и добавляя хриплые колебания. Через секунду всё выключается. Пока кнопка удерживается, повторных запусков нет. После отпускания система готова к следующему нажатию.

Если решишь перенести светодиод с GPIO10 на GPIO3, достаточно заменить одну строку:

cpp
const int LED_PIN = 3;

4. Как загрузить программу

  1. Установи Arduino IDE.
  2. В File → Preferences добавь адрес https://espressif.github.io/arduino-esp32/package_esp32_index.json в поле Additional Boards Manager URLs.
  3. В Boards Manager установи esp32 by Espressif Systems версии 3.x.
  4. Подключи ESP32-C3-Zero к компьютеру кабелем USB-C для передачи данных.
  5. В меню Tools → Board выбери ESP32C3 Dev Module, а USB CDC On Boot установи Enabled. (www.waveshare.com docs.espressif.com)
  6. Выбери порт платы в Tools → Port.
  7. Распакуй ZIP, открой файл .ino и нажми кнопку со стрелкой вправо — Upload.

Если прошивка не загружается, зажми BOOT, кратко нажми RESET, отпусти BOOT и повтори загрузку.

5. Насколько реалистичным будет рык?

Есть существенное различие между электронной имитацией и настоящей записью рыка.

PAM8403 — для этой программы

С ним получится низкий, хриплый электронный звук. Подходит для простой игрушки или звукового эффекта.

MAX98357A — для настоящей записи рыка

Позволяет ESP32 воспроизводить цифровые аудиозаписи через 8-омный динамик, но потребуется другая программа.

Я бы рекомендовал MAX98357A, если ты хочешь реалистичный рык животного, а не электронное жужжание.

Уточни одну вещь: тебе нужен настоящий рык динозавра/льва, как в игрушке, или достаточно электронного хриплого рычания? От этого зависит окончательный выбор усилителя и программы.

سؤال

Напиши программу для ардуионо есп32 с3 зеро,
Суть программы после нажатия кнопки на 1 секунду загорается светодиод одновременно с этим на динамике идёт звук рыка

Система всегда в ожидании нажатия кнопки

Пин - объект
2- кнопка
13 -динамик на 8 ом
10-светодиод последовательно резистору

Если есть ошибки по подключению скажи что поменять

الفكرة

Planning an audio solution

I’m checking whether the amplifier can accept the microcontroller’s PWM directly. A filtered, attenuated signal should reduce distortion, while a varying low-frequency tone can imitate a roar; a digital audio amplifier would sound more realistic.

Planned an audio solution

الإجابة

Проверю распиновку ESP32-C3-Zero и уточню подключение 8-омного динамика. Затем дам код для Arduino IDE с запуском по кнопке и автоматическим выключением через секунду.

الفكرة

Refining the wiring

I’m keeping the PAM8403 approach simple: attenuate and AC-couple the PWM before the input, then begin at low volume because small 8-ohm speakers can be damaged. A varying tone will imitate a roar, not reproduce a recording.

Building the control logic

I’m designing a non-blocking one-second effect with debounce and release-to-rearm behavior. The code will vary the tone for a rough roar, illuminate GPIO10, and stop the amplifier cleanly afterward.

Checking hardware details

I’m verifying the pin choices before writing the sketch. GPIO13 appears unsuitable on this board, GPIO10 may conflict with the onboard addressable LED, and GPIO3 is a cleaner choice for an external indicator.

Refined wiring, built control logic, and checked hardware details

الفكرة

Validating the sketch

I’m checking the final structure now: debounced input, one-second timing, tone variation, LED control, and clean shutdown. I’m also keeping the pin assignments easy to change near the beginning.

Finalizing the circuit

I’m keeping the PWM approach transparent: it produces a synthetic roar, not a recorded growl. I’m also attenuating the signal before amplification and recommending a small series resistor for the LED.

Validated the sketch and finalized the circuit

Searched 15 websites

الفكرة

Created ESP32-C3 Roar Arduino sketch

Worked for 2m 34s

الإجابة

Для Waveshare ESP32-C3-Zero сделаем программу со следующей логикой:

Нажимаешь кнопку → светодиод загорается, динамик издаёт рык → через 1 секунду свет и звук выключаются → плата снова ждёт нажатия.

Если держать кнопку нажатой, эффект не будет повторяться. Для повторного запуска нужно отпустить кнопку и нажать ещё раз.

1. Что нужно исправить в подключении

УстройствоТвой GPIOРешение
Кнопка2Оставить
Динамик 8 Ом13Заменить на GPIO4 через усилитель
Светодиод с резистором10Можно оставить, но есть нюанс

Почему нужны изменения:

  • GPIO13 на этой плате не выведен на контакты и используется Flash-памятью. Вместо него возьмём GPIO4.
  • Динамик 8 Ом нельзя подключать напрямую к ESP32. Нужен усилитель, например PAM8403 на 5 В. Иначе можно повредить микроконтроллер.
  • GPIO10 уже соединён со встроенным RGB-светодиодом платы. Отдельный обычный светодиод с резистором 330 Ом можно оставить на этом контакте, но он будет делить линию со встроенным светодиодом. Если возникнут проблемы, лучше перенести внешний светодиод на GPIO3. (docs.waveshare.com nuttx.apache.org)

Для GPIO2 кнопку подключаем между GPIO2 и GND. В программе включим внутреннюю подтяжку, поэтому дополнительный резистор для кнопки не нужен. При включении платы кнопку лучше не удерживать.

2. Правильная схема подключения

Для электронного рычания на твоём 8-омном динамике предлагаю использовать усилитель PAM8403.

Усилитель PAM8403

Подключается между ESP32 и динамиком. Питается от 5 В. Для одного динамика используем только левый канал.

Подключай так:

text
КНОПКА: GPIO2 ─── Кнопка ─── GND СВЕТОДИОД: GPIO10 ── Резистор 330 Ом ── (+) LED (-) LED ── GND ЗВУК: GPIO4 ── Резистор 10 кОм ──┬── Конденсатор │ 0,1 мкФ ── PAM8403 L-IN Резистор 1 кОм │ GND ПИТАНИЕ УСИЛИТЕЛЯ: 5V ─── PAM8403 VCC GND ─── PAM8403 GND ДИНАМИК: PAM8403 L+ ─── (+) динамика 8 Ом PAM8403 L- ─── (-) динамика 8 Ом

Конденсатор используй керамический неполярный. Резисторы на входе усилителя уменьшают громкость до более безопасного начального уровня. Если динамик маломощный, следи, чтобы звук не был слишком громким или искажённым.

3. Готовая программа

ESP32_C3_Zero_Roar.ino

Файл для Arduino IDE

[Скачать ZIP]

Скачать только программу .ino

Или можешь скопировать этот код:

cpp
#include <Arduino.h> // Назначение контактов const int BUTTON_PIN = 2; const int SPEAKER_PIN = 4; const int LED_PIN = 10; // Продолжительность рыка - 1 секунда const unsigned long ROAR_TIME = 1000; // Переменные bool playing = false; bool lastRawButton = HIGH; bool stableButton = HIGH; unsigned long debounceTime = 0; unsigned long startTime = 0; unsigned long lastSoundTime = 0; void setup() { // Кнопка между GPIO2 и GND pinMode(BUTTON_PIN, INPUT_PULLUP); // Внешний светодиод pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LOW); // Выход звука на усилитель ledcAttach(SPEAKER_PIN, 500, 10); ledcWriteTone(SPEAKER_PIN, 0); randomSeed(micros()); } void loop() { unsigned long now = millis(); bool button = digitalRead(BUTTON_PIN); // Защита от дребезга контактов if (button != lastRawButton) { lastRawButton = button; debounceTime = now; } if (now - debounceTime >= 30) { if (button != stableButton) { stableButton = button; // Новое нажатие кнопки if (button == LOW && !playing) { playing = true; startTime = now; lastSoundTime = now; // Включаем свет и звук digitalWrite(LED_PIN, HIGH); ledcWriteTone(SPEAKER_PIN, 540); } } } // Пока воспроизводится рык if (playing) { unsigned long elapsed = now - startTime; // Через секунду выключаем все if (elapsed >= ROAR_TIME) { ledcWriteTone(SPEAKER_PIN, 0); digitalWrite(LED_PIN, LOW); playing = false; } // Создаем хриплое рычание else if (now - lastSoundTime >= 18) { lastSoundTime = now; int baseFreq = 540 - (340 * (int)elapsed) / ROAR_TIME; int vibration = ((elapsed / 55) % 2 == 0) ? 55 : -55; int noise = random(-70, 71); int freq = constrain( baseFreq + vibration + noise, 130, 700 ); ledcWriteTone(SPEAKER_PIN, freq); } } }

Программа использует функции ledcAttach() и ledcWriteTone() из Arduino ESP32 Core версии 3.x. (docs.espressif.com)

Что будет происходить: при нажатии кнопки появится хриплый электронный звук с понижением частоты и одновременно загорится светодиод. Через 1000 миллисекунд они выключатся. Затем система будет ждать нового нажатия.

Это имитация рыка, а не настоящий записанный рёв животного.

4. Как загрузить программу на плату

  1. Скачай Arduino IDE и установи.
  2. В Arduino IDE открой File → Preferences.
  3. В поле Additional Boards Manager URLs вставь адрес:

https://espressif.github.io/arduino-esp32/package_esp32_index.json

  1. Открой Boards Manager, найди esp32 by Espressif Systems и установи версию 3.x.
  2. Подключи плату к компьютеру кабелем USB-C.
  3. Выбери Tools → Board → ESP32C3 Dev Module.
  4. В Tools → USB CDC On Boot выбери Enabled, а в Tools → Port — порт платы.
  5. Открой скачанный .ino и нажми кнопку Upload (стрелка вправо).

Если компьютер не видит плату, отключи USB, зажми BOOT, подключи USB обратно и отпусти BOOT. После загрузки при необходимости нажми RESET.

5. Если хочешь настоящий рык

Если нужен именно реалистичный рык льва, динозавра или другого животного, я рекомендую другой вариант: модуль MAX98357A с цифровой аудиозаписью. Он тоже подходит для динамика 8 Ом, но требует другой программы.

Тогда после нажатия кнопки ESP32 будет воспроизводить настоящий заранее записанный звук, а светодиод будет включаться на ту же секунду.

Пока для проверки кнопки, светодиода и динамика подойдёт программа выше. Если твоя плата выглядит не как на изображении распиновки, пришли её фотографию — важно убедиться, что номера контактов действительно совпадают.

مشاركة هذا السؤال والجواب