Дека Adafruit с esp32

Правление: Совет по развитию ESP32

Я пытаюсь заставить код деки adafruit работать на ESP32. Я установил espSoftwareSerial, но я продолжаю получать ошибки с их примером кода.

Я получаю

testcode:13:50: error: use of deleted function 'SoftwareSerial::SoftwareSerial(const SoftwareSerial&)'
SoftwareSerial ss = SoftwareSerial(SFX_TX, SFX_RX);
    /* 
      Меню управляемое управление звуковой платы над UART.
      Команды для игры по # или по имени (полное имя 11-char)
      Жесткий сброс и список файлов (когда не воспроизводится аудио)
      Vol + и - (только если не воспроизводится аудио)
      Пауза, отмена паузы, прекращение воспроизведения (при воспроизведении звука)
      Текущее время воспроизведения и оставшиеся байты и общее количество байтов (при воспроизведении аудио)

      Подключите UG к земле, чтобы звуковая плата загрузилась в режим UART
    */

    #include <SoftwareSerial.h>
    #include "Adafruit_Soundboard.h"


    // Выберите любые два контакта, которые можно использовать с SoftwareSerial для RX & TX
    #define SFX_TX 5
    #define SFX_RX 6

    // Подключение к первому контакту на звуковой панели
    #define SFX_RST 4

    // Вы также можете следить за контактом ACT во время воспроизведения звука!

    // мы будем использовать программное обеспечение последовательный
    SoftwareSerial ss = SoftwareSerial(SFX_TX, SFX_RX);

     // передайте последовательный код программного обеспечения Adafruit_soundboard, второй
    // аргумент-это отладочный порт (на самом деле не используется) и третий 
    // arg-это контакт сброса
    Adafruit_Soundboard sfx = Adafruit_Soundboard(&ss, NULL, SFX_RST);
    // также можно попробовать аппаратный последовательный порт с помощью
    // Adafruit_Soundboard sfx = Adafruit_Soundboard(&Serial1, NULL, SFX_RST);

    void setup() {
      Serial.begin(115200);
      Serial.println("Adafruit Sound Board!");
      
      // softwareserial at 9600 baud
      ss.begin(9600);
      // can also do Serial1.begin(9600)

      if (!sfx.reset()) {
        Serial.println("Not found");
        while (1);
      }
      Serial.println("SFX board found");
    }


    void loop() {
      flushInput();
      
      Serial.println(F("What would you like to do?"));
      Serial.println(F("[r] - reset"));
      Serial.println(F("[+] - Vol +"));
      Serial.println(F("[-] - Vol -"));
      Serial.println(F("[L] - List files"));
      Serial.println(F("[P] - play by file name"));
      Serial.println(F("[#] - play by file number"));
      Serial.println(F("[=] - pause playing"));
      Serial.println(F("[>] - unpause playing"));
      Serial.println(F("[q] - stop playing"));
      Serial.println(F("[t] - playtime status"));
      Serial.println(F("> "));
      
      while (!Serial.available());
      char cmd = Serial.read();
      
      flushInput();
      
      switch (cmd) {
        case 'r': {
          if (!sfx.reset()) {
            Serial.println("Reset failed");
          }
          break; 
        }
        
        case 'L': {
          uint8_t files = sfx.listFiles();
        
          Serial.println("File Listing");
          Serial.println("========================");
          Serial.println();
          Serial.print("Found "); Serial.print(files); Serial.println(" Files");
          for (uint8_t f=0; f<files; f++) {
            Serial.print(f); 
            Serial.print("\tname: "); Serial.print(sfx.fileName(f));
            Serial.print("\tsize: "); Serial.println(sfx.fileSize(f));
          }
          Serial.println("========================");
          break; 
        }
        
        case '#': {
          Serial.print("Enter track #");
          uint8_t n = readnumber();

          Serial.print("\nPlaying track #"); Serial.println(n);
          if (! sfx.playTrack((uint8_t)n) ) {
            Serial.println("Failed to play track?");
          }
          break;
        }
        
        case 'P': {
          Serial.print("Enter track name (full 12 character name!) >");
          char name[20];
          readline(name, 20);

          Serial.print("\nPlaying track \""); Serial.print(name); Serial.print("\"");
          if (! sfx.playTrack(name) ) {
            Serial.println("Failed to play track?");
          }
          break;
       }

       case '+': {
          Serial.println("Vol up...");
          uint16_t v;
          if (! (v = sfx.volUp()) ) {
            Serial.println("Failed to adjust");
          } else {
            Serial.print("Volume: "); Serial.println(v);
          }
          break;
       }

       case '-': {
          Serial.println("Vol down...");
          uint16_t v;
          if (! (v=sfx.volDown()) ) {
            Serial.println("Failed to adjust");
          } else { 
            Serial.print("Volume: "); 
            Serial.println(v);
          }
          break;
       }
       
       case '=': {
          Serial.println("Pausing...");
          if (! sfx.pause() ) Serial.println("Failed to pause");
          break;
       }
       
       case '>': {
          Serial.println("Unpausing...");
          if (! sfx.unpause() ) Serial.println("Failed to unpause");
          break;
       }
       
       case 'q': {
          Serial.println("Stopping...");
          if (! sfx.stop() ) Serial.println("Failed to stop");
          break;
       }  

       case 't': {
          Serial.print("Track time: ");
          uint32_t current, total;
          if (! sfx.trackTime(&current, &total) ) Serial.println("Failed to query");
          Serial.print(current); Serial.println(" seconds");
          break;
       }  

       case 's': {
          Serial.print("Track size (bytes remaining/total): ");
          uint32_t remain, total;
          if (! sfx.trackSize(&remain, &total) ) 
            Serial.println("Failed to query");
          Serial.print(remain); Serial.print("/"); Serial.println(total); 
          break;
       }  

      }
    }






    /************************ MENU HELPERS ***************************/

    void flushInput() {
      // Read all available serial input to flush pending data.
      uint16_t timeoutloop = 0;
      while (timeoutloop++ < 40) {
        while(ss.available()) {
          ss.read();
          timeoutloop = 0;  // If char was received reset the timer
        }
        delay(1);
      }
    }

    char readBlocking() {
      while (!Serial.available());
      return Serial.read();
    }

    uint16_t readnumber() {
      uint16_t x = 0;
      char c;
      while (! isdigit(c = readBlocking())) {
        //Serial.print(c);
      }
      Serial.print(c);
      x = c - '0';
      while (isdigit(c = readBlocking())) {
        Serial.print(c);
        x *= 10;
        x += c - '0';
      }
      return x;
    }

    uint8_t readline(char *buff, uint8_t maxbuff) {
      uint16_t buffidx = 0;
      
      while (true) {
        if (buffidx > maxbuff) {
          break;
        }

        if (Serial.available()) {
          char c =  Serial.read();
          //Serial.print(c, HEX); Serial.print("#"); Serial.println(c);

          if (c == '\r') continue;
          if (c == 0xA) {
            if (buffidx == 0) {  // the first 0x0A is ignored
              continue;
            }
            buff[buffidx] = 0;  // null term
            return buffidx;
          }
          buff[buffidx] = c;
          buffidx++;
        }
      }
      buff[buffidx] = 0;  // null term
      return buffidx;
    }
    /************************ MENU HELPERS ***************************

, 👍1

Обсуждение

Держу пари, что код деки Adafruit не для ESP32. Но вам не обязательно использовать SoftwareSerial на ESP32! Он имеет множество “реальных” (аппаратных) последовательных портов. Вместо этого используйте "Сериал1` или "Сериал2". Для некоторых простых примеров кода [см. Здесь](https://circuits4you.com/2018/12/31/esp32-hardware-serial2-example/). Вам также придется изменить "ПЕРВЫЙ" контакт на контакт, который фактически доступен на ESP32 (GPIO4 нет)., @StarCat