Asaf Matan
Published © GPL3+

FeedomBox

Inspiration design for Passover Jewish holiday.

BeginnerFull instructions provided5 hours362
FeedomBox

Things used in this project

Hardware components

Seeed Studio XIAO ESP32C3
Seeed Studio XIAO ESP32C3
×1
DFPlayer - A Mini MP3 Player
DFRobot DFPlayer - A Mini MP3 Player
×1
Adafruit Speaker - 3" Diameter - 4 Ohm 3 Watt
×1
Adafruit Massive Arcade Button - Red
×1
Adafruit USB Type A to Type C Cable - approx 1 meter
×1
10cm 2.54mm Female to Female Dupont Wire
×10
MDF 3mm 40X70
×1
Speaker Grill (need to be resized to 95.4% before printing
×1

Software apps and online services

Arduino IDE
Arduino IDE
Lightburn Laser Cut software

Hand tools and fabrication machines

Ortur Laser Master 3
Prusa i3 MK3S+ 3D printer

Story

Read more

Custom parts and enclosures

LaserCut DXF file

Engraved Images committed as they were purchased.

Schematics

Schematics

Breadboard representation

Code

Source Code.

C/C++
Arduino Source Code
/***************************************************
 This code utilize Freedom Box design based on example by 
 By [Angelo qiao](Angelo.qiao@dfrobot.com)

 Adaptations and xiao code by Asaf Matan

 GNU Lesser General Public License.
 ****************************************************/


#include "Arduino.h"
#include <HardwareSerial.h>
#include "DFRobotDFPlayerMini.h"

//Define two Serial devices mapped to the two internal UARTs
HardwareSerial MySerial0(0);
DFRobotDFPlayerMini myDFPlayer;

const int buttonPin = D2;

// State of the push button
int buttonState = 0;

void printDetail(uint8_t type, int value);

void setup()
{
  delay(5000);
  MySerial0.begin(9600, SERIAL_8N1, -1, -1);  
  Serial.begin(115200);

  pinMode(buttonPin, INPUT_PULLUP);

  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));

   
  if (!myDFPlayer.begin(MySerial0)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true);
  }
  Serial.println(F("DFPlayer Mini online."));


  myDFPlayer.volume(20);  //Set volume value. From 0 to 30
  
  myDFPlayer.play(1);  //Play the first mp3
}

void loop()
{
   buttonState = digitalRead(buttonPin);
   if (buttonState == LOW) 
   {
      myDFPlayer.play(1);
      if (myDFPlayer.available()) 
      {
         printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
      }
   }
   delay(500);
}

void printDetail(uint8_t type, int value){
  switch (type) {
    case TimeOut:
      Serial.println(F("Time Out!"));
      break;
    case WrongStack:
      Serial.println(F("Stack Wrong!"));
      break;
    case DFPlayerCardInserted:
      Serial.println(F("Card Inserted!"));
      break;
    case DFPlayerCardRemoved:
      Serial.println(F("Card Removed!"));
      break;
    case DFPlayerCardOnline:
      Serial.println(F("Card Online!"));
      break;
    case DFPlayerPlayFinished:
      Serial.print(F("Number:"));
      Serial.print(value);
      Serial.println(F(" Play Finished!"));
      break;
    case DFPlayerError:
      Serial.print(F("DFPlayerError:"));
      switch (value) {
        case Busy:
          Serial.println(F("Card not found"));
          break;
        case Sleeping:
          Serial.println(F("Sleeping"));
          break;
        case SerialWrongStack:
          Serial.println(F("Get Wrong Stack"));
          break;
        case CheckSumNotMatch:
          Serial.println(F("Check Sum Not Match"));
          break;
        case FileIndexOut:
          Serial.println(F("File Index Out of Bound"));
          break;
        case FileMismatch:
          Serial.println(F("Cannot Find File"));
          break;
        case Advertise:
          Serial.println(F("In Advertise"));
          break;
        default:
          break;
      }
      break;
    default:
      break;
  }
}

Source Code In GitLab

Arduino IDE source code in GitLab.

Credits

Asaf Matan

Asaf Matan

6 projects • 3 followers
⚡Hightech geek ⭐ Fusing hardware, software and Judaica or... Maker! 💫 Home automation expert

Comments