[Résolu] Conception d'une télécommande pour spectacle

Conception d'une télécommande pour spectacle [Résolu] - Conception, dépannage, mods - Electronique, domotique, DIY

Marsh Posté le 24-05-2023 à 18:53:27    

Bonjour à toutes et à tous,
Je suis compositeur de musique acousmatique et, en septembre 2023, je présenterai mon oeuvre “Hydrophonia" https://www.instagram.com/p/CrxvHQ5MggL/ au festival Nautil’Art https://www.instagram.com/nautilart/ de Rouen.
Il s’agit d’une boucle musicale d’une heure, qui se répète à l’infini, sur le thème de l’eau.
C’est une installation électroacoustique comprenant 6 enceintes amplifiées, 1 table de mixage, 2 Raspberry Pi et 1 écran. Elle devra fonctionner pendant deux semaines, six jours par semaine, de 10h à 19h.
 
Partant du principe que, si je confie à un béotien le soin d’allumer et d’éteindre mon installation musicale chaque matin et chaque soir (je ne peux pas être là tous les matins et tous les soirs), ça devra être simple, fonctionnel et sécurisé, je me lance un défi : concocter un boîtier unique avec un seul interrupteur ON/OFF pour tout faire.
 
Oui mais… C’est plus compliqué qu’il n’y paraît !
À l’allumage, il faut mettre sous tension :

  • la table de mixage
  • les enceintes amplifiées
  • le Raspberry Pi 4 (qui est en mode serveur WiFi et qui contient la musique et la vidéo temps réel sous PureData)
  • le Raspberry Pi Zéro WH (qui affiche la vidéo transmise par l’ordinateur principal sur l’écran via VNC)

et dans cet ordre-là ! Sinon, bonjour les dégâts.
Quant à l’extinction, c’est pire. Il faut :

  • prévenir l’ordinateur principal qu’il doit dire au secondaire de cesser la transmission et s’éteindre
  • que l’ordinateur principal quitte le programme PureData et s’éteigne
  • mettre hors tension les enceintes amplifiées
  • mettre hors tension la table de mixage.

Toujours dans cet ordre là sinon les enceintes reçoivent un PLOP monstrueux qui peut les flinguer !
 
J’imagine un système sur la base d’un ESP-8266 couplé à un émetteur radio-fréquences qui piloterait des prises électriques Chacon. Il enverrait à l’ordinateur principal des commandes par WiFi.
 
Quelqu’un serait-il partant pour m’aider à réaliser ce montage ? et la programmation qui va avec, bien sûr.

Merci d’avance


Message édité par Arthur Gyl le 10-06-2023 à 09:22:30

---------------
Compositeur de musique acousmatique (électroacoustique)
Reply

Marsh Posté le 24-05-2023 à 18:53:27   

Reply

Marsh Posté le 24-05-2023 à 19:14:47    

Voici le schéma que j'ai imaginé :
https://drive.google.com/file/d/15v [...] clkd-/view
 
Et voici le code que j'ai écrit :

Code :
  1. #include <RCSwitch.h>
  2. #include <ESP8266WiFi.h>
  3. #include <WiFiUdp.h>
  4. #include <SoftwareSerial.h>
  5. // initialisation des variables WiFi pour la connexion au serveur
  6. const char* ssid = "xxx";
  7. const char* password = "xxx";
  8. unsigned int sendport = xxx; // port d'envoi
  9. IPAddress ip(xxx, xxx, xxx, xxx); // adresse IP du serveur
  10. WiFiUDP Udp; // initialisation WiFi en mode Udp
  11. // attribution des ports d'entrée/sortie
  12. const int led1_pin = 5; // WeMos pin D1 : LED 1
  13. const int led2_pin = 4; // WeMos pin D2 : LED 2
  14. const int led3_pin = 0; // WeMos pin D3 : LED 3
  15. const int switch_pin = 15; // WeMos pin D8 : switch SPDT
  16. // initiation de la communication RF
  17. RCSwitch mySwitch = RCSwitch();
  18. void setup() {
  19.   WiFi.enableAP(0); // désactive le mode serveur de l'ESP8266
  20.  
  21.   // connexion du transmeteur RF au WeMos pin D4
  22.   mySwitch.enableTransmit(2);
  23.   // initialisation des ports
  24.   pinMode(led1_pin, OUTPUT);
  25.   pinMode(led2_pin, OUTPUT);
  26.   pinMode(led3_pin, OUTPUT);
  27.   pinMode(switch_pin, INPUT);
  28.  
  29.   // initialisation des données
  30.   int data = 0; // donnée envoyée à PureData (0 = rien, 1 = ordre d'extinction)
  31.   }
  32. void loop() {
  33.    
  34.   switch_val = digitalRead(switch_pin);   // lecture du switch
  35.  
  36.   if(switch_val == HIGH)      // séquence d'allumage
  37.     {
  38.       data = 0;
  39.      
  40.         // transmission RF en décimal : interrupteur 1 ON : mélangeur XR-18
  41.       mySwitch.send(xxx, 24);
  42.       delay(1000);
  43.       digitalWrite(led1_pin, HIGH);
  44.      
  45.         // transmission RF en décimal : interrupteur 2 ON : enceintes gauche + subwoofer
  46.       mySwitch.send(xxx, 24);
  47.       delay(1000);
  48.         // transmission RF en décimal : interrupteur 3 ON : enceintes droite
  49.       mySwitch.send(xxx, 24);
  50.       delay(1000);
  51.       digitalWrite(led2_pin, HIGH);
  52.      
  53.         // transmission RF en décimal : interrupteur 4 ON : enceinte centrale + ordinateurs
  54.       mySwitch.send(xxx, 24);
  55.       delay(8000); // délai suffisant au boot du serveur
  56.         // connexion WiFi au serveur
  57.       Serial.begin(9600);
  58.       Serial.println();
  59.       Serial.printf("Connecting to %s ", ssid);
  60.       WiFi.begin(ssid, password);
  61.       while (WiFi.status() != WL_CONNECTED)
  62.       {
  63.         delay(500);
  64.         Serial.print("." );
  65.       }
  66.       Serial.println(" connected" );
  67.       delay(500);
  68.       digitalWrite(led3_pin, HIGH);
  69.      
  70.         // attente d'un changement d'état du switch
  71.       while (digitalRead(switch_pin) == HIGH)
  72.       {
  73.         delay(1000);
  74.       }
  75.     }
  76.   else                        // séquence d'extinction
  77.     {
  78.       data = 1;
  79.      
  80.       // envoi de l'ordre d'extinction au serveur (qui relaie l'ordre à l'ordinateur secondaire)
  81.       Udp.beginPacket(ip, sendport);
  82.       Udp.write(data);
  83.       Udp.endPacket();
  84.       delay(5000);
  85.       digitalWrite(led3_pin, LOW);
  86.      
  87.       // extinction des prises 2, 3 et 4
  88.         // transmission RF en décimal : interrupteur 2 OFF : enceintes gauche + subwoofer
  89.       mySwitch.send(xxx, 24);
  90.       delay(1000);
  91.         // transmission RF en décimal : interrupteur 3 OFF : enceintes droite
  92.       mySwitch.send(xxx, 24);
  93.       delay(1000);
  94.         // transmission RF en décimal : interrupteur 4 OFF : enceinte centrale + ordinateurs
  95.       mySwitch.send(xxx, 24);
  96.       delay(1000);
  97.       digitalWrite(led2_pin, LOW);
  98.      
  99.         // transmission RF en décimal : interrupteur 1 OFF : mélangeur XR-18
  100.       mySwitch.send(xxx, 24);
  101.       delay(1000);
  102.       digitalWrite(led1_pin, LOW);
  103.      
  104.       // attente d'un changement d'état du switch
  105.       while (digitalRead(switch_pin) == LOW)
  106.       {
  107.         delay(1000);
  108.       }
  109.       data = 0;
  110.     } 
  111. }
  112. void chutier()
  113. {
  114.     // transmission RF en décimal
  115.   mySwitch.send(5393, 24);
  116.   delay(1000);
  117.   // envoi des data au serveur
  118.   Udp.beginPacket(ip, sendport);
  119.   Udp.write(data);
  120.   Udp.endPacket();
  121.   delay(10);
  122.   // allumage de la led1
  123.   digitalWrite(led1_pin, HIGH);
  124. }

Reply

Marsh Posté le 24-05-2023 à 19:22:43    

Déjà pour info pour éviter les malentendus, on ne fait pas le boulot des gens ici mais on les aide à faire eux-mêmes.
 
Tu peux mettre ton schéma ailleurs, p.ex. sur https://img.super-h.fr/ ? Je ne suis pas fan de Google.
 
Je regarderai ton code si tu veux avoir des retours, mais perso je dirais il faut prévoir quelque sécurités, p.ex. que se passe-t-il si quelqu'un a débranché quelque chose car il avait besoin d'une prise pour passer l'aspirateur ou si les ordres RF ne passent pas pour une raison X ou Y? Perso je ferais tout ça en filaire et commandé depuis l'ordi principal, mais c'est plus complexe, surtout vu qu'il y a du 230V à gérer... Les prises sans fil ont l'énorme avantage d'avoir une isolation entre la partie puissance et la partie commande vu que c'est du sans fil...


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 25-05-2023 à 09:59:20    

rat de combat a écrit :

Déjà pour info pour éviter les malentendus, on ne fait pas le boulot des gens ici mais on les aide à faire eux-mêmes.
 
Tu peux mettre ton schéma ailleurs, p.ex. sur https://img.super-h.fr/ ? Je ne suis pas fan de Google.
 
Je regarderai ton code si tu veux avoir des retours, mais perso je dirais il faut prévoir quelque sécurités, p.ex. que se passe-t-il si quelqu'un a débranché quelque chose car il avait besoin d'une prise pour passer l'aspirateur ou si les ordres RF ne passent pas pour une raison X ou Y? Perso je ferais tout ça en filaire et commandé depuis l'ordi principal, mais c'est plus complexe, surtout vu qu'il y a du 230V à gérer... Les prises sans fil ont l'énorme avantage d'avoir une isolation entre la partie puissance et la partie commande vu que c'est du sans fil...


Merci, @rat de combat, pour ta réponse. C'est bien de l'aide que je sollicite et non quelqu'un pour faire le travail à ma place ; juste vérifier que je ne fais pas d'erreurs et me suggérer d'autres solutions, comme tu le fais.
Voici un autre lien pour mon schéma : https://img.super-h.fr/image/schema [...] ande.SPXlq
Les prises sont réservées à l'usage exclusif des exposants ; pas de risques qu'on les débranche. Faire tout en filaire n'est pas possible car j'occupe deux murs opposés entre lesquels le public passe.
Je viens de recevoir quatre prises Chacon avec leur télécommande. J'attends le module émetteur/récepteur RF pour tester la communication par logiciel. L'idée de tout commander depuis l'ordinateur principal est intéressante : il suffirait alors de l'allumer pour déclencher la chaîne de commandes. Pas bête !


---------------
Compositeur de musique acousmatique (électroacoustique)
Reply

Marsh Posté le 25-05-2023 à 16:09:37    

Merci pour le schéma. Quelque remarques en vrac, sachant que je connais les µC mais pas les ESP ni vraiment le monde Arduino, mais au pire d'autres personnes sauront te renseigner sur tel ou tel détail.
 
Déjà je vois que tu utilises des fils rouges pour GND (masse) et des fils bleus pour le 5V. On peut, les fils s'en fichent :o , mais attention à ne pas se tromper!
 
Ton interrupteur me semble mal câblé (pas évident de s'y retrouver vu la couleur des fils), la résistance de tirage doit aller vers Vcc. D'ailleurs ce Vcc, je suppose que ton machin Wemos accepte les 5V comme alimentation mais utilise 3,3V en interne non? Alors prudence, il ne faut surtout pas mettre du 5V sur les entrées!!
 
Parlant de ça, il faudrait vérifier si ton émetteur accepte un signal 3,3V avec une alim à 5V. Ou alors faut l'alimenter en 3,3V aussi si c'est possible. Par ailleurs il manque l'antenne qu'il faudra souder. Pour du 433MHz un bête bout de fil de 17cm environ devrait suffir. Aussi tu es certain que cet émetteur soit adapté pour tes prises sans fil? Car pour en avoir utilisé un tel émetteur dans un projet récemment, c'est vraiment du basique de chez basique. Si il y a différent codes pour l'allumage et l'extinction (et pas un même code à envoyer qui change simplement l'état actuel de la prise) je conseille d'envoyer chaque ordre genre 3 fois avec 3s d'intervalle histoire d'être (plus ou moins) certain que l'ordre arrive. A voir.
 
J'ai pas vérifié la valeur des résistances vu que je vois mal les couleurs. En gros pour ta résistance de tirage, si il y en a pas en interne au Wemos, tu prend entre 10k et 100k et pour les LED quelque centaines de Ohm voir plus selon la luminosité que tu veux. Par contre attention à la couleur, une LED blanche p.ex. risque de ne pas s'allumer ou que très faiblement avec du 3,3V. Si la couleur n'importe pas prend du rouge (Vf=1,6V).
 
Je vais regarder ton code...


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 25-05-2023 à 16:21:15    

Quelque remarques concernant ton code, sans être trop critique (car après on rentre vite dans des discussions de style aussi...):
 
Ligne 21 il faut bien déclarer la variable mais l'initialisation doit se faire à l'intérieur de setup() vu qu'il s'agit visiblement d'un appel de fonction.
 
Ligne 36 il faudra sortir ça de la fonction pour en faire une variable globale.
 
Ligne 42 attention au phénomène de rebond. Après vu ta boucle ligne 79 ça pourrait/devrait le faire, mais c'est pas franchement élégant. En principe on ne bloque pas la fonction loop() pendant des heures potentiellement. Si tu veux je te file un bout de code comment faire ça autrement.
 
Ligne 65 je pense que cela se fait qu'une seul fois -> à mettre dans setup().
 
Ligne 90 tu envoyes une trame UDP avec juste un 1 dedans, c'est bien ce que tu veux? J'ai comme un doute si tu utilises bien la lib', mais je n'ai pas vérifié la doc. :o  
 
Ligne 113 Meme remarque que plus haut.
 
Ligne 121 Fonction non utilisée à priori donc à virer (ou pas, ça ne dérange pas non plus...)
 
Perso je rajouterai une étape, à savoir un RTC (real time clock) pour entièrement automatiser le truc, comme ça pas besoin de quelqu'un qui va actionner l'interrupteur matin et soir. RTC car à priori le Wemos n'est pas connecté au net pour récupérer l'heure par NTP ou similaire. Après sur un µC genre AVR (comme sur les Arduino classiques) on peut se passer d'un RTC si on a un quartz pour la précision, pour le Wemos/ESP bah je ne sais pas. :o  


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 25-05-2023 à 16:22:59    

rat de combat a écrit :

Merci pour le schéma. Quelque remarques en vrac, sachant que je connais les µC mais pas les ESP ni vraiment le monde Arduino, mais au pire d'autres personnes sauront te renseigner sur tel ou tel détail.
 
Déjà je vois que tu utilises des fils rouges pour GND (masse) et des fils bleus pour le 5V. On peut, les fils s'en fichent :o , mais attention à ne pas se tromper!
 
Ton interrupteur me semble mal câblé (pas évident de s'y retrouver vu la couleur des fils), la résistance de tirage doit aller vers Vcc. D'ailleurs ce Vcc, je suppose que ton machin Wemos accepte les 5V comme alimentation mais utilise 3,3V en interne non? Alors prudence, il ne faut surtout pas mettre du 5V sur les entrées!!
 
Parlant de ça, il faudrait vérifier si ton émetteur accepte un signal 3,3V avec une alim à 5V. Ou alors faut l'alimenter en 3,3V aussi si c'est possible. Par ailleurs il manque l'antenne qu'il faudra souder. Pour du 433MHz un bête bout de fil de 17cm environ devrait suffir. Aussi tu es certain que cet émetteur soit adapté pour tes prises sans fil? Car pour en avoir utilisé un tel émetteur dans un projet récemment, c'est vraiment du basique de chez basique. Si il y a différent codes pour l'allumage et l'extinction (et pas un même code à envoyer qui change simplement l'état actuel de la prise) je conseille d'envoyer chaque ordre genre 3 fois avec 3s d'intervalle histoire d'être (plus ou moins) certain que l'ordre arrive. A voir.
 
J'ai pas vérifié la valeur des résistances vu que je vois mal les couleurs. En gros pour ta résistance de tirage, si il y en a pas en interne au Wemos, tu prend entre 10k et 100k et pour les LED quelque centaines de Ohm voir plus selon la luminosité que tu veux. Par contre attention à la couleur, une LED blanche p.ex. risque de ne pas s'allumer ou que très faiblement avec du 3,3V. Si la couleur n'importe pas prend du rouge (Vf=1,6V).
 
Je vais regarder ton code...


J'ai refait le schéma en suivant tes indications : https://img.super-h.fr/image/schema [...] rev1.SPo8f. C'est mieux comme ça ?

Reply

Marsh Posté le 25-05-2023 à 16:36:07    

rat de combat a écrit :

Ligne 65 je pense que cela se fait qu'une seul fois -> à mettre dans setup().
 
Ligne 90 tu envoyes une trame UDP avec juste un 1 dedans, c'est bien ce que tu veux? J'ai comme un doute si tu utilises bien la lib', mais je n'ai pas vérifié la doc. :o  


Le problème qui se pose pour la connexion WiFi au serveur (lignes 35 à 74) , c’est que le serveur est éteint, au début. Il ne s'allume qu'à la ligne 62, d'où le delay(8000) ligne 63 pour lui laisser le temps de booter.
 
Quant à l'UDP, j'ai l'habitude de faire comme ça avec PureData ; c'est encore ce qu'il comprend le mieux.
 
Pour le reste de tes conseils, je vais faire les modifications.

Reply

Marsh Posté le 25-05-2023 à 16:38:23    

Oui mais je parlais du Serial.begin(9600); ligne 65. ;)
 
Ok pour l'UDP, tant que ça fonctionne...


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 25-05-2023 à 16:42:46    

Arthur Gyl a écrit :

J'ai refait le schéma en suivant tes indications : https://img.super-h.fr/image/schema [...] rev1.SPo8f. C'est mieux comme ça ?

Oui. :jap:  
 
Par contre reste la question du module TX, est-ce que 3,3V lui suffisent come signal pour Vcc 5V? Tu peux donner le lien vers le module? Pour info, si c'est Aliexpress il faut virer tout ce qui vient après le "?" car c'est que du tracking.
 
Et les LED sont des LED vertes à priori? Ca donne quelque mA donc, ok à priori sauf si le ESP est très "faible" au niveau sortie (Je n'ai jamais utilisé d'ESP; pour les AVR sur les Arduino "classiques" une sortie c'est 20mA donc ça serait large).


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 25-05-2023 à 16:42:46   

Reply

Marsh Posté le 25-05-2023 à 17:03:54    

rat de combat a écrit :

Oui. :jap:  
 
Par contre reste la question du module TX, est-ce que 3,3V lui suffisent come signal pour Vcc 5V? Tu peux donner le lien vers le module? Pour info, si c'est Aliexpress il faut virer tout ce qui vient après le "?" car c'est que du tracking.
 
Et les LED sont des LED vertes à priori? Ca donne quelque mA donc, ok à priori sauf si le ESP est très "faible" au niveau sortie (Je n'ai jamais utilisé d'ESP; pour les AVR sur les Arduino "classiques" une sortie c'est 20mA donc ça serait large).


J'ai pris celui-là : https://www.amazon.fr/dp/B00G23NW6S [...] CE_3p_dp_1 c'est bon ?
 
Les LED seront vertes, oui, pour une raison de logique : vert = ok !

Reply

Marsh Posté le 25-05-2023 à 17:16:05    

Oh purée, 5€! J'ai dû payer ça 1-2€ sur Ali...

 

Sinon internet me dit que ça semble adapté pour tes prises Chacon. Après faut savoir quoi envoyer et reste la question du niveau d'entrée. Soit on alimente le module en 3,3V aussi soit on rajoute un convertisseur de niveaux (un truc tout bête à base de MOSFET typiquement vendu/utilisé pour l'I2C) devrait le faire.

 

Perso je dirais vu la distance à priori faible tenter d'alimenter le module en 3,3V et voir si ça fonctionne... J'ai plus "mon" module sinon je testerais un peu.

 

EDIT: Par contre j'insiste, il faut souder une antenne au module, sinon ça ne fonctionnera pas! Tu as de quoi souder et tu sais t'en servir?


Message édité par rat de combat le 25-05-2023 à 17:18:14

---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 25-05-2023 à 18:22:41    

Oui je sais souder.

Reply

Marsh Posté le 27-05-2023 à 16:16:59    

Ça fait une heure que je me bats avec ma carte ESP et l'IDE Arduino me répond :  
 
Arduino : 1.8.19 (Linux), Carte : "LOLIN(WEMOS) D1 R2 & mini, 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, 4MB (FS:2MB OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 921600"
 
/home/jcploquin/snap/arduino/85/.arduino15/packages/esp8266/hardware/esp8266/3.1.2/tools/mkbuildoptglobals.py
Minimal supported version of Python is 3.7
exit status 1
Erreur de compilation pour la carte LOLIN(WEMOS) D1 R2 & mini
java.lang.Exception: Programmer not responding
Make sure that FirmwareUpdater sketch is loaded on the board.
 at cc.arduino.plugins.wifi101.flashers.java.FlasherSerialClient.hello(FlasherSerialClient.java:108)
 at cc.arduino.plugins.wifi101.flashers.Flasher.testConnection(Flasher.java:90)
 at cc.arduino.plugins.wifi101.UpdaterImpl$1.run(UpdaterImpl.java:190)
java.lang.Exception: Programmer not responding
Make sure that FirmwareUpdater sketch is loaded on the board.
 at cc.arduino.plugins.wifi101.flashers.java.FlasherSerialClient.hello(FlasherSerialClient.java:108)
 at cc.arduino.plugins.wifi101.flashers.java.WINCFlasher.updateFirmware(WINCFlasher.java:55)
 at cc.arduino.plugins.wifi101.UpdaterImpl$2.run(UpdaterImpl.java:234)
 

Reply

Marsh Posté le 27-05-2023 à 16:46:10    

Faut pas appuyer un bouton à la mise sous tension pour entrer dans le mode prog' ou similaire? Je te conseille de faire une recherche et si tu ne trouves pas on a un sujet Arduino dédié, tu auras une réponse plus rapidement là-bas (mais d'abord une recherche :o ).

Reply

Marsh Posté le 27-05-2023 à 18:04:56    

J'ai fait comme ça des dizaines de fois... je ne comprends pas pourquoi là ça ne marche pas... mais tu as raison : alors je cherche...

Reply

Marsh Posté le 27-05-2023 à 18:09:21    

Ah ok... Tu as débranché/rebranché juste pour tester?


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 27-05-2023 à 18:26:13    

Oui, j'ai aussi changé de câble, changé de prise USB...

Reply

Marsh Posté le 27-05-2023 à 19:02:30    

Tu as redémarré l'environnement Arduino? Il faut peut-être choisir un port et/ou une vitesse etc?

 

EDIT:
>Make sure that FirmwareUpdater sketch is loaded on the board.
Tu aurais pas écrasé un bootloader ou quelque chose par inattention? Dans ce cas tu as potentiellement briqué ton bidule je crains.

Message cité 1 fois
Message édité par rat de combat le 27-05-2023 à 19:04:24

---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 28-05-2023 à 16:16:21    

rat de combat a écrit :

Tu as redémarré l'environnement Arduino? Il faut peut-être choisir un port et/ou une vitesse etc?
 
EDIT:
>Make sure that FirmwareUpdater sketch is loaded on the board.  
Tu aurais pas écrasé un bootloader ou quelque chose par inattention? Dans ce cas tu as potentiellement briqué ton bidule je crains.


Je recommence avec une carte ESP-8266 toute neuve, au cas où...
En faisant lsusb, j'ai bien

Code :
  1. Bus 001 Device 007: ID 1a86:7523 QinHeng Electronics CH340 serial converter

donc la carte est reconnue par l'ordinateur.
Mais sur l'IDE Arduino, je n'ai que le port /dev/ttyS0 et pas le port USB sur lequel est branché la carte. Du coup, l'IDE ne peut pas la voir. Logique.
Si je débranche et rebranche la carte pendant que l'IDE est actif, le port /dev/ttyUSB0 apparaît ! et je peux alors faire reconnaître ma carte par l'IDE.
Le problème viendrait-il de mon ordinateur et sa gestion des ports USB ? Il est tout neuf de quelques semaines. Je n'avais jamais eu ce genre de problèmes avec l'ancien...
 
Je poursuis... et je téléverse l'exemple 'blink' pour ESP-8266 : ça marche !
 
Je poursuis... et je téléverse mon code 'commande_nautilart' : l'IDE me renvoie

Code :
  1. . Variables and constants in RAM (global, static), used 29040 / 80192 bytes (36%)
  2. ║   SEGMENT  BYTES    DESCRIPTION
  3. ╠══ DATA     1512     initialized variables
  4. ╠══ RODATA   1112     constants     
  5. ╚══ BSS      26416    zeroed variables
  6. . Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 61223 / 65536 bytes (93%)
  7. ║   SEGMENT  BYTES    DESCRIPTION
  8. ╠══ ICACHE   32768    reserved space for flash instruction cache
  9. ╚══ IRAM     28455    code in IRAM   
  10. . Code in flash (default, ICACHE_FLASH_ATTR), used 243028 / 1048576 bytes (23%)
  11. ║   SEGMENT  BYTES    DESCRIPTION
  12. ╚══ IROM     243028   code in flash


Jamais vu ça... Kézako ? D'autant que l'ESP-8266 continue à faire clignoter sa led interne selon le programme 'blink'... Que dois-je comprendre ?
 
C'est dans ces grands moments de solitude que je mesure l'étendue de mon ignorance...

Reply

Marsh Posté le 28-05-2023 à 16:45:36    

Tu es sous Linux, ok, c'est bon à savoir.
 
Vu ce que tu dis je dirais le soucis c'est plutôt l'IDE qui doit déjà tourner quand tu branches ta carte.
 
Le truc compliqué que te renvoie l'IDE c'est l'organisation internet de la mémoire de la carte on dirait. Ca peut apparaître pendant le compilation ou à la fin, mais normalement - Arduino - tu dois avoir un message clair disant "tout va bien"/"problème". Après comme je disais je ne connais pas l'IDE Arduino. Tu peux poster sur le topic dédié, à voir si ça parle à quelqu'un... Peut-être ton install IDE est malade?
 

Citation :

C'est dans ces grands moments de solitude que je mesure l'étendue de mon ignorance...

C'est poétique. :o ;)


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 28-05-2023 à 17:22:27    

J'ai désinstallé l'IDE (sudo snap remove --purge arduino) et réinstallé avec Discover : ça a l'air de mieux marcher.

Reply

Marsh Posté le 29-05-2023 à 17:18:30    

J'ai un peu avancé : j'ai suivi le tuto sur https://tutox.fr/2017/12/29/piloter [...] s-arduino/ et réussi à récupérer les commandes envoyées par la télécommande des prises Chacon (lesquelles fonctionnent très bien) avec l'exemple ReceiveDemo_Advanced de rc-switch.
Ça donne ça :
 
Decimal: 2387838464 (32Bit) Binary: 10001110010100111000011000000000 Tri-State: not applicable PulseLength: 700 microseconds Protocol: 2
Raw data: 7051,1296,521,726,1131,707,1143,703,1159,1288,579,1272,600,1202,684,589,1271,588,1262,1186,664,580,1240,1232,647,616,1287,562,1288,1181,718,1159,704,1154,693,551,1287,577,1246,613,1258,598,1250,1216,678,1192,678,599,1262,571,1278,573,1257,588,1282,556,1342,535,1268,608,1279,591,1285,593,1237,
 
pour chaque commande ON ou OFF, avec des données différentes, bien sûr. Je les ai notées dans un coin pour plus tard.
 
Donc les commandes sont en 32Bit. Et c'est là que je coince à nouveau, car le tuto parle de commandes en 24Bit ! et c'est pas pareil... "Y'en a qu'ont essayé... y z'ont eu des problèmes..." Pas sûr que j'y arrive avec RCSwitch...
Alors je cherche...

Reply

Marsh Posté le 29-05-2023 à 18:47:30    

Désolé, je ne pourrais t'aider la dessus, je ne connais pas tout ce monde Arduino (je programme en C "pur" sans Arduino) et je suis occupé pour ne pas dire emmerdé avec d'autres trucs. Je te conseille de demander sur le topic Arduino.


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 29-05-2023 à 20:12:47    

Merci pour ton aide. J'y vais de ce pas. Bon courage avec tes trucs emmerdants.

Reply

Marsh Posté le 29-05-2023 à 22:43:06    

J'ai jete un oeil rapide au code de RCSwitch. Ca semble basé sur la classification des données dans différents protocoles, autrement dit un poil complexe.
 
Après il y a un truc pour visualiser la série de nombres que tu as posté et à priori c'est tout bête. Donc si tu t'en sors vraiment pas même avec l'aide du sujet Arduino tu me files les différents codes (comme séries de nombres comme précédemment) et en indiquant clairement quel code correspond à quoi et - si j'ai le temps - je te file un bout de code (pur C mais ça devrait pas poser de soucis) pour faire tes transmissions. Evidemment ça serait sans garantie etc.


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 31-05-2023 à 20:28:36    

Bon, après quelque recherches internet et un coup-d'oeil au code Arduino du ESP j'ai identifié une autre source potentielle d'ennuis: Les ESP sont des bidules bien complexes qui (f)ont du Wifi aussi et semblent utiliser tout un (RT?)OS en arrière-plan, du coup ça peut être très délicat de gérer des timings dans les µs. Tu as désactivé le Wifi sur ton module si jamais c'est possible?

 

Par contre digitalWrite() est assez "direct", donc on peut l'utiliser.

 

Aussi je me demande (pour la raison évoquée tout en haut notamment) si tes valeurs reçus avec l'autre sketch sont bonnes, car je vois du 600µs, du 700µs mais aussi tout et n'importe quoi entre les deux. Il faudrait connaître la valeur réelle, mais pour ça il faut un scope ou un LA comme je disais.

 

Bref. Tu peux déjà tester le code suivant qui envoye la trame "ON" toutes les 5s. Si ça ne fonctionne pas tu modifies la valeur initiale (INITIAL_VAL_DATA_TX) de 0 à 1 et tu refais un test. Si ça ne fonctionne toujours pas commande l'appareil dont je parlais, sinon on ne va pas avancer. Le code est sans garantie, j'ai pas la possibilité de le tester la. C'est un "sketch" Arduino entier, sauf peut-être les #include qu'il faut rajouter, je ne sais pas.

Code :
  1. #define PIN_DATA_TX 2 //PIN D4 ON WEMOS - DOUBLE-CHECK THIS!
  2. #define INITIAL_VAL_DATA_TX 0
  3. void setup()
  4. {
  5.     pinMode(PIN_DATA_TX, OUTPUT);
  6.     digitalWrite(PIN_DATA_TX, INITIAL_VAL_DATA_TX);   
  7. }
  8. void loop()
  9. {
  10.     const unsigned short data[]={7051,1296,521,726,1131,707,1143,703,1159,1288,579,1272,600,1202,684,589,1271,588,1262,1186,664,580,1240,1232,647,616,1287,562,1288,1181,718,1159,
  11.         704,1154,693,551,1287,577,1246,613,1258,598,1250,1216,678,1192,678,599,1262,571,1278,573,1257,588,1282,556,1342,535,1268,608,1279,591,1285,593,1237};
  12.    
  13.     unsigned short i;
  14.     unsigned byte value=INITIAL_VAL_DATA_TX;
  15.     for(i=0; i<sizeof(data)/sizeof(unsigned short); i++)
  16.     {
  17.         delayMicroseconds(data[i]);
  18.         digitalWrite(PIN_DATA_TX, value);
  19.         value^=1;
  20.     }
  21.    
  22.     delay(5000); //5s
  23. }


Message édité par rat de combat le 31-05-2023 à 20:31:22

---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 31-05-2023 à 21:11:12    

J'ai fait quelque recherches supplémentaires: Il semblerait que Chacon utilise un protocole nommé "DiO 1.0" qui utilise l'encodage Manchester. Or je ne sais pas à quel point c'est pris en compte/charge par les lib' Arduino. Pour en revenir à ta série de nombres, ce que sors ce site de visualisation n'est clairement pas du Manchester. Soit c'est le signal déjà "décodé", soit c'est n'importe quoi... Y'a toutes les chances que mon code du haut ne fonctionne pas, mais dans ce cas comme je disais, achète un LA et quelque câbles "Dupont" (mais tu dois en avoir je suppose?) pour vraiment savoir ce que reçois ton bidule RF.

 

lien intéressant: https://www.pofilo.fr/post/2021/01/ [...] io-433mhz/

 

EDIT: Quoi que. :o
J'avais remarqué rapidement que si on vire la première valeur (7051) et qu'on groupe les valeurs deux par deux la somme est toujours presque identique (1858,75 en moyenne) et la transition se fait (en moyenne) exactement à 1/3 ou 2/3 du signal. C'est pas exactement ce que j'appellerai du Manchester mais c'est un bricolage que a un certain sens. Peut-être finalement mon code peut fonctionner, tout dépend des tolérances dans ce cas. A voir, je suis curieux. En tout cas j'arrive à retrouver la même valeur binaire que ce que sort RC-Switch. Maintenant il faudrait vraiment connaître la durée exacte d'un bit.

 

EDIT2: Question bête, mais avec la télécommande tu arrives bien à commander la prise? Juste pour être sûr...


Message édité par rat de combat le 31-05-2023 à 21:28:18

---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 01-06-2023 à 09:41:59    

Citation :

Bon, après quelque recherches internet et un coup-d'oeil au code Arduino du ESP j'ai identifié une autre source potentielle d'ennuis: Les ESP sont des bidules bien complexes qui (f)ont du Wifi aussi et semblent utiliser tout un (RT?)OS en arrière-plan, du coup ça peut être très délicat de gérer des timings dans les µs. Tu as désactivé le Wifi sur ton module si jamais c'est possible?

Non car il devait communiquer avec le RPi pour commander la sortie du programme PureData et le shutdown. Mais si je fais tout sur le RPi comme tu le suggères, plus besoin d'ESP ! Le RPi 4 doit également communiquer avec le RPi Zéro WH afin de recopier la vidéo temps réel sur l'écran qui est déporté (sur un "totem" au centre de la pièce).
Peut-être ferais-je mieux de faire un plan détaillé de l'installation pour être plus clair, non ?

Citation :

Aussi je me demande (pour la raison évoquée tout en haut notamment) si tes valeurs reçus avec l'autre sketch sont bonnes, car je vois du 600µs, du 700µs mais aussi tout et n'importe quoi entre les deux. Il faudrait connaître la valeur réelle, mais pour ça il faut un scope ou un LA comme je disais.

Ça, je peux me l'acheter.

Citation :

Bref. Tu peux déjà tester le code suivant qui envoye la trame "ON" toutes les 5s. Si ça ne fonctionne pas tu modifies la valeur initiale (INITIAL_VAL_DATA_TX) de 0 à 1 et tu refais un test. Si ça ne fonctionne toujours pas commande l'appareil dont je parlais, sinon on ne va pas avancer. Le code est sans garantie, j'ai pas la possibilité de le tester la. C'est un "sketch" Arduino entier, sauf peut-être les #include qu'il faut rajouter, je ne sais pas.


Merci beaucoup pour le script : je vais l'essayer.

Reply

Marsh Posté le 01-06-2023 à 11:31:33    

Code :
  1. #define PIN_DATA_TX 2 //PIN D4 ON WEMOS - DOUBLE-CHECK THIS!
  2. #define INITIAL_VAL_DATA_TX 0
  3. void setup()
  4. {
  5.     pinMode(PIN_DATA_TX, OUTPUT);
  6.     digitalWrite(PIN_DATA_TX, INITIAL_VAL_DATA_TX);   
  7. }
  8. void loop()
  9. {
  10.     const unsigned short data[]={7051,1296,521,726,1131,707,1143,703,1159,1288,579,1272,600,1202,684,589,1271,588,1262,1186,664,580,1240,1232,647,616,1287,562,1288,1181,718,1159,
  11.         704,1154,693,551,1287,577,1246,613,1258,598,1250,1216,678,1192,678,599,1262,571,1278,573,1257,588,1282,556,1342,535,1268,608,1279,591,1285,593,1237};
  12.    
  13.     unsigned short i;
  14.     unsigned byte value=INITIAL_VAL_DATA_TX;
  15.     for(i=0; i<sizeof(data)/sizeof(unsigned short); i++)
  16.     {
  17.         delayMicroseconds(data[i]);
  18.         digitalWrite(PIN_DATA_TX, value);
  19.         value^=1;
  20.     }
  21.    
  22.     delay(5000); //5s
  23. }

Euh... ça refuse de compiler...

Citation :

/home/jcploquin/Arduino/test_chacon_rat_de_combat/test_chacon_rat_de_combat.ino: In function 'void loop()':
test_chacon_rat_de_combat:15:19: error: expected initializer before 'value'
   17 |     unsigned byte value=INITIAL_VAL_DATA_TX;
        |                            ^~~~~
test_chacon_rat_de_combat:19:35: error: 'value' was not declared in this scope
   21 |         digitalWrite(PIN_DATA_TX, value);
        |                                                      ^~~~~
exit status 1
expected initializer before 'value'



Message édité par Arthur Gyl le 01-06-2023 à 12:06:54
Reply

Marsh Posté le 01-06-2023 à 12:14:50    

J'ai trouvé (non sans mal) ligne 17 : unsigned byte n'existe pas ; fallait-il écrire unsigned char ? Ou pas ? ou byte seul ? ou unsigned autre chose ? No sé...
Avec unsigned char, ça compile... mais ça ne fait rien.
Un coup d'épée dans l'eau ?


Message édité par Arthur Gyl le 01-06-2023 à 12:21:29
Reply

Marsh Posté le 01-06-2023 à 16:07:24    

Ah autant pour moi, j'avais pourtant vérifié sur le site Arduino.

 

unsigned char est correct. Ok, ça ne fonctionne pas, je m'en doutais. Au pif tu peux remplacer le 0 par un 1 ligne 3 et ré-essayer, mais j'y crois pas. Comme je disais, si tu peux prend toi un analyseur logique 24MHz à 10€, sinon on n'avancera pas. Et juste pour confirmer, avec la télécommande ça fonctionne?

 

EDIT: Pas vu l'autre réponse. Oui, fais donc un plan, on y vera plus clair. Et pour info, l'autre suggestion ne venait pas de moi mais de froggycorp (si j'écris bien :o ). ;)

Message cité 2 fois
Message édité par rat de combat le 01-06-2023 à 16:08:59

---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 01-06-2023 à 16:09:01    

uint8_t ou char
 
(c'est un ESP, osef de definir un byte ou long  :D )

Reply

Marsh Posté le 01-06-2023 à 16:09:21    

rat de combat a écrit :

Et juste pour confirmer, avec la télécommande ça fonctionne?


Oui, parfaitement jusqu'à plus de 10 mètres.
 
Et si je piratais directement la télécommande pour la faire actionner par l'ESP ?

Reply

Marsh Posté le 01-06-2023 à 16:21:19    

rat de combat a écrit :

Au pif tu peux remplacer le 0 par un 1 ligne 3 et ré-essayer, mais j'y crois pas.


...et tu fais bien : ça ne marche pas  :pt1cable:

Reply

Marsh Posté le 01-06-2023 à 16:41:53    

Bon, je pense que à ce niveau il y a un choix à faire, notamment au niveau temps qu'il te reste et/ou que tu veux investir.
-Soit on reste sur la solution ESP, dans ce cas il faudra un analyseur logique pour avancer; mais j'ai des doutes si le ESP est adapté pour des timings "serrés" (µs) comme je disais.
-Soit tu pars sur une autre solution d'après les propositions de Froggycorp.
-Soit tu reste sur l'ESP mais tu modifies la télécommande d'origine. Ca peut en effet se faire et sans risque, mais il faudra des composants (optocoupleurs+résistance ou module relais) adaptés et faire de la soudure potentiellement très délicate car les télécommandes ne sont pas prévus pour être bricolés évidemment.
 
Voilà. A toi de voir en fonction de tes impératifs.


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 01-06-2023 à 16:45:14    

Franchement, il reste 6 programmateurs hebdomadaires Chacon à 7€ pièce au Leroy Merlin près de chez moi.
J'ai bien envie de lâcher l'affaire et m'en remettre à la sagesse de feu mon père : "Le mieux est l'ennemi du bien." :jap:

Reply

Marsh Posté le 01-06-2023 à 16:48:05    

En effet. :o Donc tu pars sur la solution programmateur hebdo + modifications proposés par froggycorp si je comprend bien?


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 01-06-2023 à 16:58:13    

rat de combat a écrit :

En effet. :o Donc tu pars sur la solution programmateur hebdo + modifications proposés par froggycorp si je comprend bien?


J'hésite encore... je n'aime pas m'avouer vaincu...
Mais avec une programmation simple (ssh, crontab, shutdown...), je pourrai planifier le tout suivant les jours d'ouverture.
CQFD

Reply

Marsh Posté le 01-06-2023 à 17:00:48    

Je comprend très bien, je suis très têtu personnellement, mais parfois faut pas pousser trop. Et comme je disais, peut-être le ESP n'est simplement pas adapté à ces histoires de timing précis, je ne sais pas. Dans ce cas tu risque de perdre beaucoup de temps pour au final rien...


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed