Bonjour, je viens ici pour avoir de l'aide. Je passe mon oral de BTS mercredi 05/06/2024 (Oui, je suis légèrement en retard ^^'). Suite à un souci de commande, j'ai reçu mon ESP32 un peu tard et je me suis donc rendu compte que l'ESP32 n'est pas compatible avec la bibliothèque "DmxSimple.h". Je vous mets en lien mon programme qui marche avec un HC-05 connecté en Bluetooth et l'application AppInventor.
// Déclaration des variables pour les couleurs
int coulRouge;
int coulVert;
int coulBleu;
int coulBlanc;
#include <DmxSimple.h> // Inclusion de la bibliothèque DMXSimple pour le contrôle DMX
// Déclaration des broches pour le Bluetooth (non utilisées dans ce code)
const int btRxPin = 0;
const int btTxPin = 1;
const unsigned long displayTempo = 500; // Intervalle de 500 ms pour l'affichage
unsigned long displayMillis = millis(); // Chrono initialisé à l'heure actuelle
void setup() {
Serial.begin(9600); // Initialisation de la communication série à 9600 bauds
DmxSimple.write(1, 255); // Initialisation du canal DMX 1 à la valeur maximale (255)
}
void loop() {
// Lecture des données série
while (Serial.available()) {
String btRx = Serial.readStringUntil('\n'); // Lecture jusqu'à nouvelle ligne
btRx.trim(); // Nettoyage de la chaîne
btRx.toUpperCase(); // Conversion en majuscule
btRx.replace(" ", ""); // Suppression des espaces
// Analyse de la commande reçue et mise à jour des variables de couleur
if (btRx.startsWith("BLANC")) {
btRx.replace("BLANC", ""); // On efface "BLANC" pour ne garder que la valeur
coulBlanc = btRx.toInt(); // Conversion de la chaîne en entier
}
if (btRx.startsWith("BLEU")) {
btRx.replace("BLEU", ""); // On efface "BLEU" pour ne garder que la valeur
coulBleu = btRx.toInt(); // Conversion de la chaîne en entier
}
if (btRx.startsWith("VERT")) {
btRx.replace("VERT", ""); // On efface "VERT" pour ne garder que la valeur
coulVert = btRx.toInt(); // Conversion de la chaîne en entier
}
if (btRx.startsWith("ROUGE")) {
btRx.replace("ROUGE", ""); // On efface "ROUGE" pour ne garder que la valeur
coulRouge = btRx.toInt(); // Conversion de la chaîne en entier
}
}
// Affichage des valeurs de couleur toutes les 500 ms
if (millis() - displayMillis >= displayTempo) {
Serial.println("");
Serial.println("Rouge =\t" + String(coulRouge));
Serial.println("Vert =\t" + String(coulVert));
Serial.println("Bleu =\t" + String(coulBleu));
Serial.println("Blanc =\t" + String(coulBlanc));
displayMillis = millis(); // Redémarrage du chrono
}
}
Et je transfère aussi mon programme qui permet de modifier les couleurs sur le spot mais manuellement en ayant recréé la liaison DMX.
// Déclaration d'un tableau de 192 éléments pour stocker les valeurs DMX.
int TabDMX[192];
void setup()
{
// Initialisation de toutes les valeurs du tableau à 0.
for (int i = 0; i < 192; i++)
TabDMX[i] = 0;
// Configuration du pin 1 en mode sortie.
pinMode(1, OUTPUT);
// Initialisation des couleurs.
// Couleur Rouge :
TabDMX[1]=0;
// Couleur Vert :
TabDMX[2]=0;
// Couleur Bleu :
TabDMX[3]=0;
// Couleur Blanche :
TabDMX[4]=0;
}
void loop()
{
// Début du message DMX (MBB).
digitalWrite(1, 1);
delay(10);
// Pause entre le message DMX et le BREAK.
digitalWrite(1, 0);
delayMicroseconds(88);
// Début du BREAK.
digitalWrite(1, 1);
delayMicroseconds(8);
// Envoi des canaux DMX via la communication série.
Serial.begin(250000, SERIAL_8N2); // Début de la communication série à 250000 bauds.
for(int n = 0; n < 192; n++)
{
Serial.write(TabDMX[n]); // Envoi de chaque valeur du tableau DMX.
}
Serial.end(); // Fin de la communication série.
// Fin du message DMX (MBB).
digitalWrite(1, 1);
delay(5);
}
Je ne sais pas si c'est compréhensible, mais pour faire court, je voudrais gérer le spot grâce à l'application sur AppInventor avec un Upesy ESP32 Wroom DevKit. V2_DMX.zip (28,7 Ko)
(application AppInventor)
Bonsoir Dfgh,
J'imagine que c'est une bibliotèque pour remplacer DmxSimple, je vais me pencher dessus s'en doute ce soir mais le soucis c'est que le temps est très limité donc je ne sais pas si la possibilité de reprendre tous ca seras possible ^^'
Bonsoir autentic
Pour ce qui est de la compatibilité de la bibliothèque, je ne peut rien faire pour toi
J'ai mixé tes 2 programmes sans pouvoir essayer, j'ai compilé avec un Mega.
Le seul problème est que la liaison Bluetooth et DMX utilisent le même port Serial, à toi, en fonctions de ta machine d'attribuer le bon port Serial.
Ler programme:
int TabDMX[192];
// Déclaration des variables pour les couleurs
int coulRouge;
int coulVert;
int coulBleu;
int coulBlanc;
#include <DmxSimple.h> // Inclusion de la bibliothèque DMXSimple pour le contrôle DMX
// Déclaration des broches pour le Bluetooth (non utilisées dans ce code)
const int btRxPin = 0;
const int btTxPin = 1;
const unsigned long displayTempo = 500; // Intervalle de 500 ms pour l'affichage
unsigned long displayMillis = millis(); // Chrono initialisé à l'heure actuelle
void setup()
{
Serial.begin(9600); // Initialisation de la communication série à 9600 bauds
DmxSimple.write(1, 255); // Initialisation du canal DMX 1 à la valeur maximale (255)
// Initialisation de toutes les valeurs du tableau à 0.
for (int i = 0; i < 192; i++)
{
TabDMX[i] = 0;
}
// Configuration du pin 1 en mode sortie.
pinMode(1, OUTPUT);
// Initialisation des couleurs.
// Couleur Rouge :
TabDMX[1]=0;
// Couleur Vert :
TabDMX[2]=0;
// Couleur Bleu :
TabDMX[3]=0;
// Couleur Blanche :
TabDMX[4]=0;
}
void loop() {
// Lecture des données série
while (Serial.available()) {
String btRx = Serial.readStringUntil('\n'); // Lecture jusqu'à nouvelle ligne
btRx.trim(); // Nettoyage de la chaîne
btRx.toUpperCase(); // Conversion en majuscule
btRx.replace(" ", ""); // Suppression des espaces
// Analyse de la commande reçue et mise à jour des variables de couleur
if (btRx.startsWith("BLANC")) {
btRx.replace("BLANC", ""); // On efface "BLANC" pour ne garder que la valeur
coulBlanc = btRx.toInt(); // Conversion de la chaîne en entier
TabDMX[4] = coulBlanc;
}
if (btRx.startsWith("BLEU")) {
btRx.replace("BLEU", ""); // On efface "BLEU" pour ne garder que la valeur
coulBleu = btRx.toInt(); // Conversion de la chaîne en entier
TabDMX[3] = coulBleu;
}
if (btRx.startsWith("VERT")) {
btRx.replace("VERT", ""); // On efface "VERT" pour ne garder que la valeur
coulVert = btRx.toInt(); // Conversion de la chaîne en entier
TabDMX[2] = coulVert;
}
if (btRx.startsWith("ROUGE")) {
btRx.replace("ROUGE", ""); // On efface "ROUGE" pour ne garder que la valeur
coulRouge = btRx.toInt(); // Conversion de la chaîne en entier
TabDMX[1] = coulRouge;
}
}
// Affichage des valeurs de couleur toutes les 500 ms
if (millis() - displayMillis >= displayTempo) {
Serial.println("");
Serial.println("Rouge =\t" + String(coulRouge));
Serial.println("Vert =\t" + String(coulVert));
Serial.println("Bleu =\t" + String(coulBleu));
Serial.println("Blanc =\t" + String(coulBlanc));
displayMillis = millis(); // Redémarrage du chrono
}
}
void envoiDmx()
{
// Début du message DMX (MBB).
digitalWrite(1, 1);
delay(10);
// Pause entre le message DMX et le BREAK.
digitalWrite(1, 0);
delayMicroseconds(88);
// Début du BREAK.
digitalWrite(1, 1);
delayMicroseconds(8);
// Envoi des canaux DMX via la communication série.
Serial.begin(250000, SERIAL_8N2); // Début de la communication série à 250000 bauds.
for(int n = 0; n < 192; n++)
{
Serial.write(TabDMX[n]); // Envoi de chaque valeur du tableau DMX.
}
Serial.end(); // Fin de la communication série.
// Fin du message DMX (MBB).
digitalWrite(1, 1);
delay(5);
}
Salut Jpbbricole,
Je viens de regarder en détail le programme et la bibliothèque DmxSimple n'est pas compatible avec l'ESP32 et mon deuxième programme remplace cette bibliothèque, il correspond a la trame DMX.
Le premier programme correspond au programme pour un HC-05 il faut donc pouvoir modifier la couleurs avec l'esp.
Je vais regarder un peu la bibliothèque qu'on ma envoyer plus haut.