Catégories
Liens
Ceci est une ancienne révision du document !
Olo en version 220v….
Sur une interface representant les differentes lumieres.
On peut enregistrer une sequence en appuyant sur des boutons (ou interface photoresitance)
Pour le dimmer il faut utiliser la lib https://github.com/RobotDynOfficial/RBDDimmer
Ca clignote un peu quand on est pres du zero… il faut plutot se ballader entre 5% et 100% pour eviter ces clignotements…
[[https://github.com/reso-nance/thisIsNotOLO]|repo du projet]
Les ESP se connectent sur un routeur dédié et attendent de recevoir en OSC /[hostname]/light [valeur] : où [hostname] est light_ suivi d'un numéro (ex: light_10) [value] la valeur d'éclairage de 0 à 100 Ils répondent /ACK avec en premier argument leur nom d'hôte et en second la valeur changée. Ça permet de leur renvoyer automatiquement une valeur qui n'aurait pas été reçue en cas de wifi pas tip top. Par défaut les ESP envoient en broadcast, sauf s'il reçoivent l'OSC “/whoIsThere” : ils enverront alors à la dernière IP qui leur aura envoyé ce message et répondent en se présentant (/myID avec leur hostname)
Un Raspberry Pi est utilisé pour servir une interface web via un script python3 utilisant flask et socketIO. L'interface présente 12 fenêtres sous forme de deux rangées de six cases. Si les ESP8266 représentant une fenêtre ne sont pas branchés, la case reste inactive.
La déclaration des ESP8266 attendus se fait dans le fichier config.py où il est possible d'entrer sous forme de liste les identifiants des ESP8266 connectés : activeWindows = [0, 1, 2, 4, 5, 6, 7, 8, 10, 11]
les numéros de 0 à 11 correspondant aux identifiants donnés aux lampes.
La génération de son côté client se fait par la librairie Tone.js qui permet de créer un oscillateur multiple et d'y ajouter de la réverb. Les réglages de l'oscillateur (ADSR, nombre d'oscillateurs, déphasage, forme d'onde) sont stockés dans le fichier static/js/index.js :
var synth = new Tone.PolySynth(3, Tone.Synth, { "oscillator" : { "type" : "fatsine", "count" : 3, "spread" : 30 }, "envelope" : { "attack" : 0.1, "decay" : 0.1, "sustain" : 0.5, "release" : 0.4, "attackCurve" : "exponential" }, }).toMaster();
Les notes utilisées pour chaque fenêtre sont réglable dans le fichier config.py :
notes = ["C", "D", "E", "G", "A"] # list of notes that will be played on the UI startOctave = 3 # lowest octave to be played playNotesOnUI = True # play sounds corresponding to lights on the UI when sequences are played
notes contient la liste des notes jouées (dans l'ordre) startOctave correspond à l'octave la plus grave qui sera jouée playNotesOnUI permet au serveur de faire jouer sur l'ensemble des téléphones connectés à l'interface web les notes correspondants à la séquence lue
Il est totalement impossible de garantir une lecture synchrone de ces sons avec les lumières sur le téléphone de chaque participant connecté. Le tout peut devenir cacophonique très vite
Idée design tasseau + conserve.. :ololamp.blend
Materiaux