Microcontroller speeltjes 4

Door enermax op zondag 16 februari 2020 21:21 - Reacties (4)
Categorie: -, Views: 2.551

Wil je uitbreiden door een mp3tje af te spelen via wifi, of je Robot RD2geluiden laten maken? Ik ben heel erg te spreken over de esp32 bordjes daarom heb ik even vandaag uitgezocht, hoe je er geluid uit krijgt met de TTGO-display. Dit heb ik snel in elkaar geprutst (video). Voor de arduino raad ik aan deze te gebruiken.
ttgoArduino dfplayer 3volt
Als basis dient de dfplayer mini. €1.32
https://tweakers.net/ext/f/SOh0vKaeZh2lvFh1L2jgZVvg/full.jpg
Daarbij heb je nog een geheugenkaart nodig. Ik zelf heb de Kingston Canvas 64GB gebruikt.. Maar je kan natuurlijk ook een andere gebruiken.

Daarnaast heb je nog een speaker nodig. Mocht je er geen hebben, kijk eens in een oude pc. Daar vind je een betere dan in de link. Uiteindelijk komt het er zo uit te zien als je een passieve speaker gebruikt.
ttgo display passieve speaker.
Optioneel kun je nog de jackplug nog gebruiken.. Ik heb nog een mobiel speakertje liggen met batterij en jackplug stekkertje, vandaar deze bestelling.
Actieve speaker.
Aansluitschema
Je kunt kiezen voor de speaker, of de mini-jack of zelfs allebei.
TTgo-display DF player
Geheugenkaart voorbereiden
Maak een mapje mp3 aan op de (lege)geheugenkaart.
Zet daarin de liedjes met de naam: 0001.mp3, 0002.mp3 etc

Code
Onderstaande code zal 2 geluiden afspelen. Het beeld wordt niet aangestuurd. De mp3 speler heb ik in de software op pin 26 en 27 gezet. Mag je aanpassen.Eerst moet je de 2 librarys aanvinken in Arduino.
  • espsoftwareserial library
  • DFPlayer_Mini_Mp3_by_Makuna library
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// this example will play a track and then 
// every five seconds play another track
//
// it expects the sd card to contain these two files
// but doesn't care whats in them
//
// sd:/mp3/0001.mp3
// sd:/mp3/0002.mp3


#include <SoftwareSerial.h> //espsoftwareserial library
#include <DFMiniMp3.h>      //DFPlayer_Mini_Mp3_by_Makuna library

// implement a notification class,
// its member methods will get called 
//
class Mp3Notify
{
public:
  static void OnError(uint16_t errorCode)
  {
    // see DfMp3_Error for code meaning
    Serial.println();
    Serial.print("Com Error ");
    Serial.println(errorCode);
  }

  static void OnPlayFinished(uint16_t globalTrack)
  {
    Serial.println();
    Serial.print("Play finished for #");
    Serial.println(globalTrack);   
  }

  static void OnCardOnline(uint16_t code)
  {
    Serial.println();
    Serial.print("Card online ");
    Serial.println(code);     
  }

  static void OnUsbOnline(uint16_t code)
  {
    Serial.println();
    Serial.print("USB Disk online ");
    Serial.println(code);     
  }

  static void OnCardInserted(uint16_t code)
  {
    Serial.println();
    Serial.print("Card inserted ");
    Serial.println(code); 
  }

  static void OnUsbInserted(uint16_t code)
  {
    Serial.println();
    Serial.print("USB Disk inserted ");
    Serial.println(code); 
  }

  static void OnCardRemoved(uint16_t code)
  {
    Serial.println();
    Serial.print("Card removed ");
    Serial.println(code);  
  }

  static void OnUsbRemoved(uint16_t code)
  {
    Serial.println();
    Serial.print("USB Disk removed ");
    Serial.println(code);  
  }
};

// instance a DFMiniMp3 object, 
// defined with the above notification class and the hardware serial class
//
//DFMiniMp3<HardwareSerial, Mp3Notify> mp3(Serial1);

// Some arduino boards only have one hardware serial port, so a software serial port is needed instead.
// comment out the above definition and uncomment these lines
SoftwareSerial secondarySerial(26, 27); // RX, TX
DFMiniMp3<SoftwareSerial, Mp3Notify> mp3(secondarySerial);

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

  Serial.println("initializing...");
  
  mp3.begin();

  uint16_t volume = mp3.getVolume();
  Serial.print("volume ");
  Serial.println(volume);
  mp3.setVolume(24);
  
  uint16_t count = mp3.getTotalTrackCount();
  Serial.print("files ");
  Serial.println(count);
  
  Serial.println("starting...");
}

void waitMilliseconds(uint16_t msWait)
{
  uint32_t start = millis();
  
  while ((millis() - start) < msWait)
  {
    // calling mp3.loop() periodically allows for notifications 
    // to be handled without interrupts
    mp3.loop(); 
    delay(1);
  }
}

void loop() 
{
  Serial.println("track 1"); 
  mp3.playMp3FolderTrack(1);  // sd:/mp3/0001.mp3
  
  waitMilliseconds(5000);
  
  Serial.println("track 2"); 
  mp3.playMp3FolderTrack(2); // sd:/mp3/0002.mp3
    
  waitMilliseconds(5000); 
}

Volgende: Microcontroller speeltjes 3 16-02 Microcontroller speeltjes 3

Reacties


Door Tweakers user breew, maandag 17 februari 2020 08:57

coole projectjes...
Ik heb ik de keuken twee passieve speakers in het plafond zitten, welke niet (meer) in gebruik zijn.. Ik zie mogelijkheden ;-)

vraagje: Hoe stuur je deze speler nu aan over WIFI?
Mis ik nu een stukje uitleg, of ben ik technisch te beperkt?
vraagje2: klopt het dat de bovenstaande code elke 5000ms van nummer switcht? Waarom zou je dat willen? Omdat het kan?

Door Tweakers user elhopo, maandag 17 februari 2020 09:56

breew schreef op maandag 17 februari 2020 @ 08:57:
coole projectjes...
Ik heb ik de keuken twee passieve speakers in het plafond zitten, welke niet (meer) in gebruik zijn.. Ik zie mogelijkheden ;-)

vraagje: Hoe stuur je deze speler nu aan over WIFI?
Mis ik nu een stukje uitleg, of ben ik technisch te beperkt?
vraagje2: klopt het dat de bovenstaande code elke 5000ms van nummer switcht? Waarom zou je dat willen? Omdat het kan?
De ESP8266 en de ESP32 hebben WIFI ingebouwd. Door zelf een servertje te starten op zo'n bordje kan je met wat programmeren een webpagina tonen die na het drukken op een button in die webpagina een muziekje gaat afspelen. Mocht je dit willen gaan gebruiken houdt dan even rekening met de volgende puntjes:

1. De DFplayer mini heeft wel een versterkertje, maar dit is mono geluid. Wil je stereo, dan moet je zelf een versterkertje toevoegen.

2. De kwaliteit is absoluut bagger. Je kan het prima horen, maar wat verwacht je voor net iets meer dan een euro. Voor een geluidje in een project is het wel okee, want dan telt hifi kwaliteit niet, maar gebruik het niet als standaard muziekspeler.

Waarom hij om de 5000 ms switcht? Omdat dit een standaard stukje broncode is wat hij ge-copy-paste heeft, Een voorbeeldje van internet hoe je hem kan aansturen.

Door Tweakers user enermax, maandag 17 februari 2020 10:07

Eigenlijk ben ik 20 jaar geleden gestopt met elektronica. Ik vind het uitzoeken leuk maar het bouwen niet. Om een lang verhaal kort te maken. Vorige week zijn een aantal modules binnen gekomen uit China. Als ik ze individueel aan de praat heb dan is het nog een kwestie van de code bij elkaar stoppen. Dat moet je zelf doen.

vraagje: Hoe stuur je deze speler nu aan over WIFI?
In het 2e blog staat de code hoe je een ESP32 module met internet kunt verbinden. Via de website kun je op een knop drukken en de onboard lamp aan en uitzetten.

In dit blog staat een voorbeeld code. Als je een liedje kunt wisselen om de 5 seconde kun je hem ook anders aansturen. In de video speel ik een RD2 muziekje af met een foto.

Je hebt wel een beetje ervaring nodig, dus begin bij stap 1, led van een arduino laten knipperen.

[Reactie gewijzigd op maandag 17 februari 2020 10:25]


Door Tweakers user sebastius, vrijdag 21 februari 2020 19:00

ESP32 + random I2S dac werkt ook prima. Zit in onze badge.team firmware ingebouwd. https://github.com/badgeteam/ESP32-platform-firmware << scheelt je wat tijd qua firmware :)

Om te kunnen reageren moet je ingelogd zijn. Via deze link kun je inloggen als je al geregistreerd bent. Indien je nog geen account hebt kun je er hier één aanmaken.