🤖Have you ever tried Chat.M5Stack.com before asking??😎
    M5Stack Community
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    ATOM SPK SPEAKER KIT

    Atom
    1
    1
    2.7k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • F
      frangimeno2000
      last edited by

      Hello, some example of how to use SPK with the library: github

      How do I configure the output to use the spk chip?
      I have modified an example in the ide, but I don't know if it is correct.

      This example in theory plays an mp3 station

      Thanks for the help
      All the best
      Francisco

      #include <Arduino.h>
      #include <M5Atom.h>
      #include <WiFi.h>
      #include "AudioFileSourceICYStream.h"
      #include "AudioFileSourceBuffer.h"
      #include "AudioGeneratorMP3.h"
      //#include "AudioOutputI2SNoDAC.h"
      #include "AudioOutputI2S.h"

      // Enter your WiFi setup here:
      #ifndef STASSID
      #define STASSID "TESTWIFI"
      #define STAPSK "TEST"
      #endif

      // Digital I/O used
      #define I2S_DOUT 25 // DIN connection
      #define I2S_BCLK 22 // Bit clock
      #define I2S_LRC 21 // Left Right Clock

      const char* ssid = STASSID;
      const char* password = STAPSK;

      // Randomly picked URL
      const char* URL = "http://kvbstreams.dyndns.org:8000/wkvi-am";

      AudioGeneratorMP3* mp3;
      AudioFileSourceICYStream* file;
      AudioFileSourceBuffer* buff;
      //AudioOutputI2SNoDAC* out;
      AudioOutputI2S* out = NULL;
      //AudioOutputI2S* out

      void setup()
      {
      M5.begin();

      Serial.begin(9600);
      delay(1000);
      Serial.println("Connecting to WiFi");
      
      WiFi.disconnect();
      WiFi.softAPdisconnect(true);
      WiFi.mode(WIFI_STA);
      
      WiFi.begin(ssid, password);
      
      // Try forever
      while (WiFi.status() != WL_CONNECTED) {
      	Serial.println("...Connecting to WiFi");
      	delay(1000);
      }
      Serial.println("Connected");
      
      audioLogger = &Serial;
      file = new AudioFileSourceICYStream(URL);
      file->RegisterMetadataCB(MDCallback, (void*)"ICY");
      buff = new AudioFileSourceBuffer(file, 2048);
      buff->RegisterStatusCB(StatusCallback, (void*)"buffer");
      //out = new AudioOutputI2SNoDAC();
      
      out = new AudioOutputI2S(0, 1, 32);
      out->begin();
      
      
      
      mp3 = new AudioGeneratorMP3();
      mp3->RegisterStatusCB(StatusCallback, (void*)"mp3");
      mp3->begin(buff, out);
      

      }

      void loop()
      {
      static int lastms = 0;

      if (mp3->isRunning()) {
      	if (millis() - lastms > 1000) {
      		lastms = millis();
      		Serial.printf("Running for %d ms...\n", lastms);
      		Serial.flush();
      	}
      	if (!mp3->loop()) mp3->stop();
      }
      else {
      	Serial.printf("MP3 done\n");
      	delay(1000);
      }
      

      }

      // Called when a metadata event occurs (i.e. an ID3 tag, an ICY block, etc.
      void MDCallback(void* cbData, const char* type, bool isUnicode, const char* string)
      {
      const char* ptr = reinterpret_cast<const char*>(cbData);
      (void)isUnicode; // Punt this ball for now
      // Note that the type and string may be in PROGMEM, so copy them to RAM for printf
      char s1[32], s2[64];
      strncpy_P(s1, type, sizeof(s1));
      s1[sizeof(s1) - 1] = 0;
      strncpy_P(s2, string, sizeof(s2));
      s2[sizeof(s2) - 1] = 0;
      Serial.printf("METADATA(%s) '%s' = '%s'\n", ptr, s1, s2);
      Serial.flush();
      }

      // Called when there's a warning or error (like a buffer underflow or decode hiccup)
      void StatusCallback(void* cbData, int code, const char* string)
      {
      const char* ptr = reinterpret_cast<const char*>(cbData);
      // Note that the string may be in PROGMEM, so copy it to RAM for printf
      char s1[64];
      strncpy_P(s1, string, sizeof(s1));
      s1[sizeof(s1) - 1] = 0;
      Serial.printf("STATUS(%s) '%d' = '%s'\n", ptr, code, s1);
      Serial.flush();
      }

      Thanks for the help
      All the best
      Francisco

      1 Reply Last reply Reply Quote 0
      • First post
        Last post