Shield per DFPlayer Mini – Collaudo

 

In un precedente articolo Shield con DFPlayer Mini – Costruzione abbiamo analizzato il nostro progetto.
Vedremo ora di effettuare un primo collaudo Shield DFPlayer Mini connesso ad Arduino per verificarne il suo corretto funzionamento.

Fasi del collaudo

In questo test si potrà verificare il funzionamento dei seguenti componenti:

Lo schema elettrico e il PCB può essere trovato scaricato dal sito OSHWLab a questo link

Librerie necessarie per i test

Per il test occorre caricare, se non lo avete già fatto, delle librerie che renderanno più facile la gestione dei componenti, queste sono:

  • DFRobotDFPlayerMini per gestire il modulo audio tramite Arduino
  •  Adafruit NeoPixel per gestire il Led RGB WS2812B.
  • Adafruit_SSD1306 gestire il display OLED

Libreria per DFPLayer mini

Per il collaudo Shield DFPlayer Mini la cui descrizione potere trovare nell’articolo DFPlayer Mini Riproduttore MP3 per Arduino , dovremo caricare la relativa libreria, quindi preparare una MicroSD con dei file audio da riprodurre attraverso l’altoparlante.

Per cui aprire sotto il menù Sketch, #include libreria, “Gestore Librerie”

e inserire nel campo ricerca “DFRobotDFPlayerMini” e quando apparirà basterà premere il tasto Installa,

Per altre informazioni su come installare le librerie vedete l’articolo Arduino – Tutorial, come installare una libreria

Preparazione della SD Card per il DFPlayer mini

La scheda di memoria utilizzata dal DFPLayer mini è del tipo MicroSD contrazione di Micro Secure Digital , per maggiori informazioni relative al tipo di memoria vedere il seguente link.

La scheda dovrà avere le seguenti caratteristiche: dimensioni massime di 23Gb ed essere formattate con file system (Fat16 o Fat32 ) oppure se possedete un Mac OS X, selezionare ExFat e poi copiare i file MP3

Sarà sufficiente trasferire i file presenti nel link, nella memoria MicroSD

Libreria gestione led RGB

Per la gestione del led WS2812B occorre istallare la libreria NeoPixel realizzata dalla ditta Adafruit .

ws2812bAnche in questo caso aprire sotto il menù Sketch, #include libreria, “Gestore Librerie” e inserire nel campo ricerca “neopixel” e quando apparirà basterà premere il tasto Installa,

RGB WS2812B ESP32 Devkit

Scelta dei colori da mostrare dal red RGB

I Led tradizionali possono emettere un solo tipo di luce. All’interno di un led RGB sono presenti  tre Led montati nello stesso involucro : Led rosso, verde e blu. Infatti RGB sta per Red, Green e Blue.
Miscelando i colori con le diverse intensità e, sovrapponendo quindi un colore sull’altro, si può avere una luce caratterizzata da diverse tonalità.
Per fare questo all’interno della libreria NeoPixel è possibile cambiare i colori tramite questa riga di codice

pixels.setPixelColor(0, pixels.Color(R, G, B));

All’interno delle parentesi tonde abbiamo i valori per R(red), G(green) e B(blue) separati da una virgola.
Il valore da inserire è compreso tra 0 e 255.
Per realizzare la  tonalità che ci interessa possiamo usare l’applicazione fornita da questo sito.

Una volta scelto il colore voluto l’applicazione ci restituisce i tre valori (per esempio 0, 240, 60) che dovremo inserire del comando

pixels.setPixelColor(0, pixels.Color(0, 240, 60));

Libreria per gestione display OLED

Per utilizzare il display OLED è necessario installare l’apposita libreria. Può essere cercata tra le librerie installabili nell’IDE, basterà inserire nel campo di ricerca “Adafruit_SSD1306“.

Sarà anche mostrata una finestra che segnala che la libreria ha una dipendenza con la libreria grafica “Adafruit GFX Library“.  Procedete premendo su “Install all”.

Schema equivalente del test

Sotto vediamo lo schema equivalente del collegamento dei componenti.
Utilizzando lo speciale shield, in realtà non è necessario effettuare nessun collegamento.
Il led RGB è saldato direttamente sul PCB, e sarà sufficiente inserire il modulo DFPlayer e il Display OLED nei rispettivi connettori.

Codice utilizzato

Sotto è riportato il codice utilizzato. All’inizio sono incluse tutte le librerie necessarie, abbiamo poi la definizione dei pin per la gestione della comunicazione seriale tra Arduino e il modulo DFPLayer mini e il led RGB.
Sono poi impostati il display OLED, il Led RGB e il DFPLayer Mini.
Nella sezione Setup()  sono inizializzati i vari dispositivi utilizzando i valori precedentemente impostati. Viene visualizzato sul display un messaggio di presentazione e trasmesso un primo messaggio.
Nella sezione Loop() si ripete la routine test_DFPLayer () che accenderà in sequenza il led RGB di vari colori, con il nome mostrato sul display comunicato tramite il messaggio presente nella memoria MicroSD.
Come visibile, non è necessario indicare il nome completo del file, ma la sua posizione nell’elenco.

#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_NeoPixel.h>

#define PIN_RGB 7 //pin comando led RGB
#define PIN_RX 2
#define PIN_TX 3

// Impostazione OLED
#define OLED_ADDR   0x3C
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

//IMPOSTAZIONE LED RGB
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(1, PIN_RGB, NEO_GRB + NEO_KHZ800);

//IMPOSTAZIONE DFPlayerMini
SoftwareSerial ss(PIN_RX, PIN_TX); //RX, TX
DFRobotDFPlayerMini mp3;

int pausa = 300;

void setup() {
  Serial.begin(9600);

  // initializza e pulisce display
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  delay(20);
  display.clearDisplay();

  //Inizializza la libreria NeoPixel.
  pixels.begin();

  //Inizializza modulo DFPlayer
  ss.begin(9600);
  if (!mp3.begin(ss)) {
    Serial.println("errore mp3");
    for (;;);
  }
  mp3.volume(20); //Impsta il volume

  //Messaggio iniziale
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.println(" ADRIROBOT");
  display.setCursor(0, 20);
  display.println("Shield for");
  display.setCursor(0, 40);
  display.println(" DFPlayer");
  display.display();
  mp3.play(7);
  delay (6000);
}

void loop() {
  test_DFPLayer ();
}

void test_DFPLayer () {
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.clearDisplay();
  display.setCursor(40, 0);
  display.println("TEST");
  display.setCursor(20, 20);
  display.println("DFPlayer");
  display.setTextSize(1);
  display.setCursor(15, 55);
  display.println ("www.adrirobot.it");
  display.display();
  delay (2000);

  //colore verde
  display.setTextSize(2);
  display.setCursor(30, 40);
  display.println("VERDE");
  display.display();
  int pausa = 20;
  verde ();
  mp3.play(1);
  delay (3000);

  //colore bianco
  display.fillRect(0, 40, 128, 15, SSD1306_BLACK);
  display.display();
  display.setCursor(30, 40);
  display.println("BIANCO");
  display.display();
  bianco ();
  mp3.play(2);
  delay (3000);

  //colore rosso
  display.fillRect(0, 40, 128, 15, SSD1306_BLACK);
  display.display();
  display.setCursor(30, 40);
  display.println("ROSSO");
  display.display();
  rosso ();
  mp3.play(3);
  delay (3000);

  //colore giallo
  display.fillRect(0, 40, 128, 15, SSD1306_BLACK);
  display.display();
  display.setCursor(30, 40);
  display.println("GIALLO");
  display.display();
  giallo();
  mp3.play(6);
  delay (3000);

  //colore blu
  display.fillRect(0, 40, 128, 15, SSD1306_BLACK);
  display.display();
  display.setCursor(30, 40);
  display.println("BLU");
  display.display();
  blu();
  mp3.play(4);
  delay (3000);

  //colore ciano
  display.fillRect(0, 40, 128, 15, SSD1306_BLACK);
  display.display();
  display.setCursor(30, 40);
  display.println("CIANO");
  display.display();
  ciano ();
  mp3.play(5);
  delay (3000);
}

//Colore rosso
void rosso () {
  pixels.setPixelColor(0, pixels.Color(255, 0, 0));
  pixels.show();
  delay(pausa);
}
//Colore verde
void verde () {
  pixels.setPixelColor(0, pixels.Color(0, 255, 0));
  pixels.show();
  delay(pausa);
}
//Colore blu
void blu () {
  pixels.setPixelColor(0, pixels.Color(0, 0, 255));
  pixels.show();
  delay(pausa);
}
//Colore bianco
void bianco () {
  pixels.setPixelColor(0, pixels.Color(255, 255, 255));
  pixels.show();
  delay(pausa);
}
//Colore giallo
void giallo () {
  pixels.setPixelColor(0, pixels.Color(255, 255, 0));
  pixels.show();
  delay(pausa);
}
//Colore ciano
void ciano () {
  pixels.setPixelColor(0, pixels.Color(0, 204, 255));
  pixels.show();
  delay(pausa);
}
//Led spento
void spento () {
  pixels.setPixelColor(0, pixels.Color(0, 0, 0));
  pixels.show();
  delay(pausa);
}

Video del test