Je vous présente encore un montage simple à moins de 10€ qui permet de donner de la voix de qualité à la eedomus en jouant des MP3/WAW (alarmes, sirène, aboiements, musique, gongs d’horloge, consignes, …).
Ce montage amène un vrai plus pour la eedomus. Il lui donne la possibilité de produire des sons (voix ou autres) d’une qualité remarquable, et en plus, ce montage s’installe où vous le désirez, donc le son ne provient plus de la boite eedomus.
Cette solution se base sur le matériel suivant
•Un module « NodeMCU ESP8266 », acheté sur Wish pour 3€
•Un module « DFPlayer MP3 » acheté aussi sur Wish pour 2€
•Un module alimentation 5V, mais pouvez utiliser un chargeur USB
•Un haut-parleur (trouvé aux poubelles)
•Un module amplificateur, facultative, suivant la puissance que vous désirez. Ce module a coûté 2€
Prérequis: le circuit « NodeMCU ESP8266 » fonctionne par Wifi, et donc, une couverture Wifi est nécessaire là où vous placerez ce module.
Le montage hardware
Pour mettre en route l’environnement de développement du NodeMCU ESP8266, je me suis basé sur les mini tutos que vous trouverez à cette adresse :
https://easycoding.tn/index.php/nodemcu/
La mise en œuvre de l’environnement de développement du NodeMCU est simple et rapide : en moins d’une heure, je pouvais déjà actionner la led interne du NodeMCU, et une heure plus tard, je pouvais faire la même chose, mais par Wifi. Bref, c’est un module assez impressionnant, qui vient avec toute une série de librairies.
Voici le schéma, relativement simple, qui montre comment le module DFPlayer MP3 est connecté au NodeMCU :
L’amplificateur 35W est facultatif. Dans mon cas, je voulais pouvoir faire hurler mon système, mais si un volume « ordinaire » vous convient, vous pouvez très bien connecter directement le haut-parleur sur la sortie du DFPlayer
Le boitier
Pour le boitier, j’ai « dégotté » un haut-parleur à la déchetterie de mon village, et j’ai fixé tout ce montage à l’intérieur.
Memory Card
•La carte peut être de 2GB ou 4GB, formattée en FAT16 or FAT32
•Créer un répertoire "mp3" dans la racine de la carte et installer les fichiers MP3 ainsi:
o [3 digits][anything_else].mp3. e.g.:
o 001.mp3
o 002.morceau2.mp3
o etc
Surprenant, mais il faut formatter la carte à chaque changement, sinon le DFPlayer continue à voir les fichiers effacés et donc, et jouera d’autres morceaux que ceux désirés. Ce bug m’a « coûté » pas mal d’heures…
La librarie du DFPlayer
Library “DFRobotDFPlayerMini-1.0.2” sur le lien suivant
http://www.arduinolibraries.info/librar ... layer-mini
https://www.dfrobot.com/wiki/index.php/ ... KU:DFR0299
Le programme du NodeMCU
Il vous faudra modifier ce programme ainsi
•Fixer vos informations WiFi : adresse IP, gateway et subnet, SSID et mot de passe
•A regarder, j’ai mis des XXX là où il faut adapter
Quelques informations sur ce programme. Bien sûr, tout peut être modifié à votre guise
•On peut tester le module sans la boîte eedomus, il suffit d’entrer les commandes ci-dessus dans un Explorer
•Le module est programmé pour attendre les commandes suivantes : Song, SongLoop, Volume, Stop, Reset :
o http://192.168.0.41/Song=001..999 pour jouer les morceaux 000, 002, …
o http://192.168.0.41/SongLoop=001..999 pour jouer les morceaux 001, 002, … en boucle, utile pour les aboiements de chien, sirène, etc
o http://192.168.0.41/Volume=0..30 pour régler le volume, 30=max
o http://192.168.0.41/Stop pour stopper la lecture
o http://192.168.0.41/Reset pour resetter le DFPlayer
•On peut passer le volume en même temps que le morceau à jouer, par exemple http://192.168.0.41/Song=001&Volume = 15
•Attention, respecter les majuscules ou minuscules pour les commandes
•Une commande non connue affiche la liste des commandes disponibles
- Code : Tout sélectionner
//Play the MP3 according to the commands received
//Required for WIFI
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
//Required for DFPlayer
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
//////////////////////////////////////////////////////////////
//For debug purpose, compiler commands
#define DEBUG //Comment this line to remove all debug lines
#ifdef DEBUG
#define DEBUG_PRINT(x) Serial.print(x)
#define DEBUG_PRINTLN(x) Serial.println(x)
#else
#define DEBUG_PRINT(x)
#define DEBUG_PRINTLN(x)
#endif
const char* ssid = "XXX"; //WiFi ID
const char* password = "XXX"; //WiFi PWD
String ParamS; //Contain the parameter of the command
int ParamI; //Contain the parameter, but translated inn Integer
//Static IP, Gateway and Subnet
IPAddress staticIP (XXX, XXX, XXX, XXX);
IPAddress gateway (XXX, XXX, XXX, XXX);
IPAddress subnet(XXX, XXX, XXX, XXX);
//Initialisation DFPlayer
SoftwareSerial mySoftwareSerial(5, 4); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
//Start server
WiFiServer server(80);
void setup() {
Serial.begin(115200); delay(10); //Debug serial line
mySoftwareSerial.begin(9600); //DFPlayer serial line, RX + TX
// Connect to Wi-Fi network with SSID and password
Serial.print("Connecting to "); Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {delay(500); Serial.print("."); }
Serial.println(" WiFi connected, "); Serial.println("IP address: "); Serial.println(WiFi.localIP());
// Start the server
server.begin();
DEBUG_PRINTLN("Server started");
// Start the DFPlayer
DEBUG_PRINTLN(""); DEBUG_PRINTLN("Initializing DFPlayer ...");
if (!myDFPlayer.begin(mySoftwareSerial)) DEBUG_PRINTLN("ERROR: Unable to initialize DFPlayer!"); //Use softwareSerial to communicate with mp3.
DEBUG_PRINTLN("DFPlayer Ready");
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
//Client has connected. Treat request
if (client) {
DEBUG_PRINTLN("Command received...");
// Read the first line of the request
String request = client.readStringUntil('\r');
DEBUG_PRINTLN(request); client.flush();
//Initialize variables used for the parameter
ParamS=""; ParamI=0;
//Check the volume
if (request.indexOf("Volume=") != -1) {
ParamS=request.substring(request.indexOf("Volume=")+7,request.indexOf("Volume=")+9);
ParamI=ParamS.toInt();
DEBUG_PRINT("VolumeI=");DEBUG_PRINTLN(ParamI);
if (ParamI >=0 && ParamI <=30) myDFPlayer.volume(ParamI); //Set volume value. From 0 to 30
}
//Then, check the other commands, could be Song, SongLoop, Stop, Reset
if (request.indexOf("Song=") != -1) {
ParamS=request.substring(request.indexOf("Song=")+5,request.indexOf("Song=")+9);
ParamI=ParamS.toInt();
DEBUG_PRINT("Song number ");DEBUG_PRINTLN(ParamI);
myDFPlayer.play(ParamI);
} else if (request.indexOf("SongLoop=") != -1) {
ParamS=request.substring(request.indexOf("SongLoop=")+9,request.indexOf("SongLoop=")+13);
ParamI=ParamS.toInt();
DEBUG_PRINT("Songloop number ");DEBUG_PRINTLN(ParamI);
myDFPlayer.loop(ParamI);
} else if (request.indexOf("/Stop") != -1) {
DEBUG_PRINTLN("Stop");
myDFPlayer.stop();
} else if (request.indexOf("/Reset") != -1) {
DEBUG_PRINTLN("Reset");
myDFPlayer.reset();
} else {
client.println("Use one of these commands:");
client.print("http://"); client.print(WiFi.localIP()); client.print("/"); client.println("Song=001..999: Play Song 001 to 999");client.println();
client.print("http://"); client.print(WiFi.localIP()); client.print("/"); client.println("SongLoop=001..999: Play in loop Song 001 to 999");client.println();
client.print("http://"); client.print(WiFi.localIP()); client.print("/"); client.println("Stop: Pause device");client.println();
client.print("http://"); client.print(WiFi.localIP()); client.print("/"); client.println("Volume=0..30: Set the volume, 0=min, 30=Max");client.println();
client.print("http://"); client.print(WiFi.localIP()); client.print("/"); client.println("Reset: Reset the MP3 player (only the MP3, not the ESP)");client.println();
}
client.println("HTTP/1.1 200 OK"); //Acknowledge command. Without that, eedomus keep sending the command
delay(100);
} //if (client)
delay(1); //Wait 1 before next loop
}
La configuration eedomus
Il suffit de créer un actionneur HTTP, comme cela
• Nom: ModuleMP3 Actionneur
• Pièce: Séjour
• Usage: Autre
• Avec les états suivants. Mettre évidemment votre adresse IP
o Morceau 1 : URL suivante: http://192.168.0.41/Song=001&Volume=10
o Morceau 2 : URL suivante: http://192.168.0.41/Song=002&Volume=15
o Morceau 3 : URL suivante: http://192.168.0.41/Song=003&Volume=20
o Morceau 4 : URL suivante: http://192.168.0.41/Song=004&Volume=5
o Morceau 5 : URL suivante: http://192.168.0.41/Song=005&Volume=6
o Morceau 1 : URL suivante: http://192.168.0.41/SongLoop=001&Volume=30
o Volume : URL suivante: http://192.168.0.41/Volume=20
o Stop : URL suivante: http://192.168.0.41/Stop
o Etc etc
Voici les copies d’écrans, la premier contient les informations pour la création de l’actionneur http, et le deuxième un exemple d’utilisation dans une règle. J’ai mis ma sonnette d’entrée comme exemple;
Conclusions
Ce circuit NodeMCU ESP8266 est vraiment impressionnant. Il se programme comme un Arduino, offre des possibilités énormes, et cela pour quelques euros. En le connectant avec deux fils (RX/TX) au module DFPlayer MP3, on a presque immédiatement un module son pilotable par WIFI, et donc, depuis la boite eedomus. Il permet de donner un son de qualité à la eedomus, au lieu de ce son nasillard, et de le placer ailleurs que proche de la boite.
Chez moi, ce montage fait office d’alarme et me donne tous les sons que la eedomus jouait avant, mais donc, avec une super qualité et un volume très fort ! J’ai pu monter les circuits imprimés directement dans le haut-parleur, et donc, la solution est bien intégrée, il suffit de connecter le haut-parleur à une prise 220V !
A nouveau (voir mes autres tutos pour l’ouverture/fermeture du garage, gamelles, consommation de mazout, …), j’ai été agréablement surpris de pouvoir faire un montage en quelques heures de travail seulement!
Avez-vous d’autres idées ?