eeBud

Tablette murale dédiée à la domotique

Table des matières

Je récupère ma tablette Android pour en faire une tablette murale.

J’ai réussi à décrocher de Clash of clan!

J’ai donc une tablette Blackview Tab 12 de 10 pouces qui traine dans un tiroir!

Dommage, dommage… Quoi de mieux que d’en faire une tablette à accrocher au mur pour gérer ses appareils connectés et sa domotique en général?

Une nouvelle version basée sur ce module fait maison!

Principe

Pour cette tablette il faut une communication dans les deux sens:

  • La tablette doit pouvoir envoyer des informations à mon système domotique pour contrôler différents appareils manuellement.
  • Mon système domotique doit pouvoir contrôler la tablette pour par exemple afficher un clavier tactile lors de l’activation de l’alarme.

L’application Fully Kiosk remplira exactement ce besoin.

Pour l’accrocher au mur, je vais créer un cadre connecté, sur base ESP32 qui communiquera avec mon serveur domotique en wifi. Ce cadre gèrera la recharge de la tablette (<20% de batterie) et enverra, tant qu’à faire diverses informations à mon système domotique: Mouvement, température, luminosité. J’y rajoute quelques leds qui auront pour fonction, un éclairage d’ambiance blanc chaud ou un stroboscope rouge lorsque mon scénario d’alarme “présence confirmée”  sera déclenché.

Matériel utilisé

La programmation du cadre sera basé sur ma bibliothèque eeBud server manager. Vous pouvez la télécharger sur la page dédiée.

Schéma du montage

Le programme que j'ai téléversé dans l'ESP


#include <eeBudServerManager.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <BH1750.h>
#include <Adafruit_NeoPixel.h>
#define DS18B20_PIN 33
#define RELAIS 32
#define PIR 25
#define LEDS 26
//strip
#define NB_PIXELS 9
Adafruit_NeoPixel strip(NB_PIXELS, LEDS, NEO_GBR + NEO_KHZ800);
//Luminosite
BH1750 luxMetre;
float Memoire_Luminosite = 9999;
float Luminosite_Actuelle;
//Température
OneWire oneWire(DS18B20_PIN);
DallasTemperature DS18B20(&oneWire);
float Memoire_Temperature = 9999;
unsigned long Moment_Present = 0;
unsigned long Moment_Memorise = 0;
float Temperature_Actuelle;
DeviceAddress tempDeviceAddress;
int resolution = 12;
unsigned long lastTempRequest = 0;
int delayInMillis = 0;
float temperature = 0.0;
int idle = 0;
//Bouton
bool Etat_Relais;
//PIR
bool Etat_Mouvement;
int pirVal;
unsigned long Moment_PresentM = 0;
unsigned long Moment_MemoriseM = 0;
bool decompte = false;
//Serveur
eeBudServerManager Serveur("Cadre domotique");
int Info_Temperature;
int Info_Luminosite;
int Info_Mouvement;
int Bouton_Rechargement_Off;
int Bouton_Rechargement_On;
int Bouton_Nuit_Off;
int Bouton_Nuit_On;
int Bouton_Activation_Auto_Off;
int Bouton_Activation_Auto_On;
int Bouton_Lumiere_BC;
int Bouton_Lumiere_BF;
int Bouton_Lumiere_Alarme;
int Bouton_Lumiere_Rainbow;
int Bouton_Lumiere_Balayage;
int Bouton_Lumiere_Theatre;
int Bouton_Lumiere_TRainbow;
int Bouton_Lumiere_Off;
bool bool_Bouton_Lumiere_Alarme = false;
bool bool_Bouton_Lumiere_Rainbow = false;
bool bool_Bouton_Lumiere_Balayage = false;
bool bool_Bouton_Lumiere_Theatre = false;
bool bool_Bouton_Lumiere_TRainbow = false;
int Couleur_Lumiere_BC;
int Couleur_Lumiere_BF;
int Couleur_Alarme;
int Couleur_Alarme_1;
int Couleur_Balayage;
int Couleur_Balayage_1;
int Couleur_Theatre;
int Couleur_Theatre_1;
int Range_Luminosite;
int Etat_Lumiere;
bool Mode_Nuit = false;
int Event;
float Difference_Temperature_Parametree;
float Difference_Luminosite_Parametree;
int Sensibilite_Tactile;
String URL_Mouvement;
String URL_Temperature;
String URL_Rechargement;
String URL_Luminosite;
String URL_Lumiere_Etat;
String URL_Lumiere_Luminosite;
String URL_Fully;
bool Activation_Auto = true;
int BCR;
int BCG;
int BCB;
int BFR;
int BFG;
int BFB;
String Lumiere_Actuelle = "Off";
void setup() {
Serial.begin(115200);
Serial.println("------Cadre domotique------");
Serveur.Debug(true);
Serveur.Init();
//Paramètres
Serveur.AddParamText("Différence de température pour envoi", "0.5");
Serveur.AddParamText("Différence de luminosité pour envoi", "10");
Serveur.AddParamText("Sensibilité du tactile", "20");
Serveur.AddParamText("URL Mouvement", "");
Serveur.AddParamText("URL Température", "");
Serveur.AddParamText("URL Luminosité", "");
Serveur.AddParamText("URL Rechargement", "");
Serveur.AddParamText("URL Lumière Etat", "");
Serveur.AddParamText("URL Lumière Luminosité", "");
Serveur.AddParamText("URL FullyKiosk", "http://$$ADRESSE_IP$$/?cmd=#VALUE#&password=$$MDP$$"); //$$ADRESSE_IP$$ = Adresse IP de la tablette:Port(2323) $$MDP$$ = Mot de passe paramétré sur l'API Fully Kiosk
Difference_Temperature_Parametree = Serveur.GetParamText("Différence de température pour envoi").toFloat();
Difference_Luminosite_Parametree = Serveur.GetParamText("Différence de luminosité pour envoi").toFloat();
Sensibilite_Tactile = (Serveur.GetParamText("Sensibilité du tactile")).toInt();
URL_Mouvement = Serveur.GetParamText("URL Mouvement");
URL_Temperature = Serveur.GetParamText("URL Température");
URL_Luminosite = Serveur.GetParamText("URL Luminosité");
URL_Rechargement = Serveur.GetParamText("URL Rechargement");
URL_Lumiere_Etat = Serveur.GetParamText("URL Lumière Etat");
URL_Lumiere_Luminosite = Serveur.GetParamText("URL Lumière Luminosité");
URL_Fully = Serveur.GetParamText("URL FullyKiosk");
///////////////Mise en page de l'index///////////////
//Infos
Serveur.IndexBackgroundStart();
Serveur.IndexAddSegWhite();
Serveur.IndexAddTitle("Infos", "100");
Serveur.IndexAddSegWhite();
Info_Mouvement = Serveur.IndexAddInfo("Mouvement", "", "80");
Info_Temperature = Serveur.IndexAddInfo("Température", "°C", "50");
Info_Luminosite = Serveur.IndexAddInfo("Luminosité", "lux", "50");
Etat_Lumiere = Serveur.IndexAddInfo("Leds", "", "50");
int *Bouton_Rechargement = Serveur.IndexAddToogle("Rechargement", "Off", "On", "Off");
Bouton_Rechargement_Off = Bouton_Rechargement[0];
Bouton_Rechargement_On = Bouton_Rechargement[1];
int *Bouton_Nuit = Serveur.IndexAddToogle("Mode nuit", "Off", "On", "Off");
Bouton_Nuit_Off = Bouton_Nuit[0];
Bouton_Nuit_On = Bouton_Nuit[1];
int *Bouton_Activation_auto = Serveur.IndexAddToogle("Activation auto", "Off", "On", "On");
Bouton_Activation_Auto_Off = Bouton_Activation_auto[0];
Bouton_Activation_Auto_On = Bouton_Activation_auto[1];
Serveur.IndexBackgroundFinish();
//LEDS
Serveur.IndexAddSeg();
Serveur.IndexAddTitle("Leds", "100");
Serveur.IndexAddSeg();
Bouton_Lumiere_Off = Serveur.IndexAddButton("Off");
Bouton_Lumiere_BC = Serveur.IndexAddButton("Blanc chaud");
Bouton_Lumiere_BF = Serveur.IndexAddButton("Blanc froid");
Range_Luminosite = Serveur.IndexAddRange("Luminosité", 0, 255, 200);
Serveur.IndexAddSeg();
Serveur.IndexAddTitle("Animations", "100");
Serveur.IndexAddSeg();
Bouton_Lumiere_Alarme = Serveur.IndexAddButton("Alarme");
Bouton_Lumiere_Balayage = Serveur.IndexAddButton("Balayage");
Bouton_Lumiere_Theatre = Serveur.IndexAddButton("Théatre");
Bouton_Lumiere_Rainbow = Serveur.IndexAddButton("Arc-en-ciel");
Bouton_Lumiere_TRainbow = Serveur.IndexAddButton("Arc-en-ciel 2");
Serveur.IndexAddSeg();
Serveur.IndexAddTitle("Couleurs", "100");
Serveur.IndexAddSeg();
Couleur_Lumiere_BC = Serveur.IndexAddColor("Blanc chaud", 255, 95, 10);
Couleur_Lumiere_BF = Serveur.IndexAddColor("Blanc froid", 255, 255, 255);
Couleur_Alarme = Serveur.IndexAddColor("Couleur alarme 1", 255, 0, 0);
Couleur_Alarme_1 = Serveur.IndexAddColor("Couleur alarme 2", 50, 0, 0);
Couleur_Balayage = Serveur.IndexAddColor("Couleur balayage 1", 60, 110, 200);
Couleur_Balayage_1 = Serveur.IndexAddColor("Couleur balayage 2", 250, 120, 0);
Couleur_Theatre = Serveur.IndexAddColor("Couleur théatre 1", 60, 110, 200);
Couleur_Theatre_1 = Serveur.IndexAddColor("Couleur théatre 2", 250, 120, 0);
BCR = 255;
BCG = 95;
BCB = 10;
BFR = 255;
BFG = 255;
BFB = 255;
Serveur.IndexAddSeg();
///////////////Fin de mise en page de l'index///////////////
//RELAIS
pinMode(RELAIS, OUTPUT);
Relais_Off();
//PIR
pinMode(PIR, INPUT);
//Sonde Dallas
DS18B20.begin();
//Luminosité
Wire.begin();
luxMetre.begin();
//Strip
strip.begin();
strip.setBrightness(Serveur.IndexGetRange(Range_Luminosite));
strip_Off();
Serveur.IndexSetInfo(Etat_Lumiere, "Off");
Lumiere_Actuelle = "Off";
Post_Etat_Lumiere("Off");
}
void loop() {
//Gestion de la température et luminosité
Moment_Present = millis();
if ((Moment_Present - Moment_Memorise) > 30000 || (Memoire_Luminosite - Luminosite_Actuelle) >= Difference_Luminosite_Parametree || (Luminosite_Actuelle - Memoire_Luminosite) >= Difference_Luminosite_Parametree || (Memoire_Temperature - Temperature_Actuelle) >= Difference_Temperature_Parametree || (Temperature_Actuelle - Memoire_Temperature) >= Difference_Temperature_Parametree) {
Moment_Memorise = Moment_Present;
//Température
DS18B20.requestTemperatures();
Temperature_Actuelle = DS18B20.getTempCByIndex(0);
if ((Memoire_Temperature - Temperature_Actuelle) >= Difference_Temperature_Parametree || (Temperature_Actuelle - Memoire_Temperature) >= Difference_Temperature_Parametree) {
Memoire_Temperature = Temperature_Actuelle;
Serveur.IndexSetInfo(Info_Temperature, String(Temperature_Actuelle));
if (URL_Temperature != "") {
String Temporaire = URL_Temperature;
Temporaire.replace("#VALUE#", String(Temperature_Actuelle));
Serveur.HTTPPost(Temporaire);
delay(500);
}
}
//Luminosité
Luminosite_Actuelle = luxMetre.readLightLevel();
if ((Memoire_Luminosite - Luminosite_Actuelle) >= Difference_Luminosite_Parametree || (Luminosite_Actuelle - Memoire_Luminosite) >= Difference_Luminosite_Parametree) {
Memoire_Luminosite = Luminosite_Actuelle;
Serveur.IndexSetInfo(Info_Luminosite, String(Luminosite_Actuelle));
if (URL_Luminosite != "") {
String Temporaire = URL_Luminosite;
Temporaire.replace("#VALUE#", String(Luminosite_Actuelle));
Serveur.HTTPPost(Temporaire);
delay(500);
}
}
}
Event = Serveur.IndexGetEvent();
if (Event == Bouton_Lumiere_Off) {
Serveur.IndexResetEvent();
Serveur.IndexSetInfo(Etat_Lumiere, "Off");
Lumiere_Actuelle = "Off";
strip_Off();
Post_Etat_Lumiere("Off");
} else if (Event == Bouton_Lumiere_BC) {
Serveur.IndexResetEvent();
Serveur.IndexSetInfo(Etat_Lumiere, "Blanc chaud");
Lumiere_Actuelle = "Blanc chaud";
Post_Etat_Lumiere("Blanc%20chaud");
} else if (Event == Bouton_Lumiere_BF) {
Serveur.IndexResetEvent();
Serveur.IndexSetInfo(Etat_Lumiere, "Blanc froid");
Lumiere_Actuelle = "Blanc froid";
Post_Etat_Lumiere("Blanc%20froid");
} else if (Event == Bouton_Lumiere_Alarme) {
Serveur.IndexResetEvent();
Serveur.IndexSetInfo(Etat_Lumiere, "Alarme");
Lumiere_Actuelle = "Alarme";
Post_Etat_Lumiere("Alarme");
} else if (Event == Bouton_Lumiere_Balayage) {
Serveur.IndexResetEvent();
Serveur.IndexSetInfo(Etat_Lumiere, "Balayage");
Lumiere_Actuelle = "Balayage";
Post_Etat_Lumiere("Balayage");
} else if (Event == Bouton_Lumiere_Theatre) {
Serveur.IndexResetEvent();
Serveur.IndexSetInfo(Etat_Lumiere, "Théatre");
Lumiere_Actuelle = "Theatre";
Post_Etat_Lumiere("Théatre");
} else if (Event == Bouton_Lumiere_Rainbow) {
Serveur.IndexResetEvent();
Serveur.IndexSetInfo(Etat_Lumiere, "Arc-en-ciel");
Lumiere_Actuelle = "Rainbow";
Post_Etat_Lumiere("Arc-en-ciel");
} else if (Event == Bouton_Lumiere_TRainbow) {
Serveur.IndexResetEvent();
Serveur.IndexSetInfo(Etat_Lumiere, "Arc-en-ciel 2");
Lumiere_Actuelle = "TRainbow";
Post_Etat_Lumiere("Arc-en-ciel%202");
} else if (Event == Range_Luminosite) {
Serveur.IndexResetEvent();
strip.setBrightness(Serveur.IndexGetRange(Range_Luminosite));
Post_Etat_Luminosite(String(Serveur.IndexGetRange(Range_Luminosite)));
strip.show();
} else if (Event == Bouton_Rechargement_Off) {
//Gestion du relais depuis l'index
Relais_Off();
} else if (Event == Bouton_Rechargement_On) {
Relais_On();
} else if (Event == Bouton_Nuit_Off) {
Serveur.IndexResetEvent();
Serveur.IndexSetToogle(Bouton_Nuit_Off);
Mode_Nuit = false;
} else if (Event == Bouton_Nuit_On) {
Serveur.IndexResetEvent();
Serveur.IndexSetToogle(Bouton_Nuit_On);
Mode_Nuit = true;
} else if (Event == Bouton_Activation_Auto_Off) {
Serveur.IndexResetEvent();
Serveur.IndexSetToogle(Bouton_Activation_Auto_Off);
Activation_Auto = false;
} else if (Event == Bouton_Activation_Auto_On) {
Serveur.IndexResetEvent();
Serveur.IndexSetToogle(Bouton_Activation_Auto_On);
Activation_Auto = true;
} else if (Event == Couleur_Lumiere_BC) {
BCB = Serveur.IndexGetColor_B(Couleur_Lumiere_BC);
BCG = Serveur.IndexGetColor_G(Couleur_Lumiere_BC);
BCR = Serveur.IndexGetColor_R(Couleur_Lumiere_BC);
Serveur.IndexResetEvent();
}else if (Event == Couleur_Lumiere_BF) {
BFB = Serveur.IndexGetColor_B(Couleur_Lumiere_BF);
BFG = Serveur.IndexGetColor_G(Couleur_Lumiere_BF);
BFR = Serveur.IndexGetColor_R(Couleur_Lumiere_BF);
Serveur.IndexResetEvent();
}
if (Lumiere_Actuelle == "Blanc chaud") {
Anim_Lumiere(strip.Color(BCB, BCG, BCR));
}else if (Lumiere_Actuelle == "Blanc froid") {
Anim_Lumiere(strip.Color(BFB, BFG, BFR));
}else if (Lumiere_Actuelle == "Alarme") {
Anim_Alarm(strip.Color(Serveur.IndexGetColor_B(Couleur_Alarme), Serveur.IndexGetColor_G(Couleur_Alarme), Serveur.IndexGetColor_R(Couleur_Alarme)), 50);
Anim_Alarm(strip.Color(0, 0, 0), 50);
Anim_UnAlarm(strip.Color(Serveur.IndexGetColor_B(Couleur_Alarme_1), Serveur.IndexGetColor_G(Couleur_Alarme_1), Serveur.IndexGetColor_R(Couleur_Alarme_1)), 50);
Anim_UnAlarm(strip.Color(0, 0, 0), 50);
} else if (Lumiere_Actuelle == "Balayage" ) {
colorWipe(strip.Color(Serveur.IndexGetColor_B(Couleur_Balayage), Serveur.IndexGetColor_G(Couleur_Balayage), Serveur.IndexGetColor_R(Couleur_Balayage)), 25);
colorWipe(strip.Color(Serveur.IndexGetColor_B(Couleur_Balayage_1), Serveur.IndexGetColor_G(Couleur_Balayage_1), Serveur.IndexGetColor_R(Couleur_Balayage_1)), 25);
colorUnWipe(strip.Color(Serveur.IndexGetColor_B(Couleur_Balayage), Serveur.IndexGetColor_G(Couleur_Balayage), Serveur.IndexGetColor_R(Couleur_Balayage)), 25);
colorUnWipe(strip.Color(Serveur.IndexGetColor_B(Couleur_Balayage_1), Serveur.IndexGetColor_G(Couleur_Balayage_1), Serveur.IndexGetColor_R(Couleur_Balayage_1)), 25);
} else if (Lumiere_Actuelle == "Theatre" ) {
theaterChase(strip.Color(Serveur.IndexGetColor_B(Couleur_Theatre), Serveur.IndexGetColor_G(Couleur_Theatre), Serveur.IndexGetColor_R(Couleur_Theatre)), 50);
theaterChase(strip.Color(Serveur.IndexGetColor_B(Couleur_Theatre_1), Serveur.IndexGetColor_G(Couleur_Theatre_1), Serveur.IndexGetColor_R(Couleur_Theatre_1)), 50);
} else if (Lumiere_Actuelle == "Rainbow" ) {
rainbow(5);
} else if (Lumiere_Actuelle == "TRainbow") {
theaterChaseRainbow(50);
}
//PIR
pirVal = digitalRead(PIR);
if (pirVal == HIGH) {
if (Etat_Mouvement == true) {
Etat_Mouvement = false;
decompte = true;
Serial.println("Décompte");
Serveur.IndexSetInfo(Info_Mouvement, "0");
Moment_MemoriseM = millis();
if (URL_Mouvement != "") {
String Temporaire = URL_Mouvement;
Temporaire.replace("#VALUE#", "0");
Serveur.HTTPPost(Temporaire);
delay(500);
}
}
} else {
if (Etat_Mouvement == false) {
decompte = false;
Etat_Mouvement = true;
Serveur.IndexSetInfo(Info_Mouvement, "1");
if (Activation_Auto == true) {
if (URL_Fully != "") {
String Temporaire = URL_Fully;
Temporaire.replace("#VALUE#", "screenOn");
Serveur.HTTPPost(Temporaire);
}
}
if (Mode_Nuit == true) {
Serial.println("ON");
Anim_Lumiere(strip.Color(BCB, BCG, BCR));
Serveur.IndexSetInfo(Etat_Lumiere, "Blanc chaud");
Lumiere_Actuelle ="Blanc chaud";
}
if (URL_Mouvement != "") {
String Temporaire = URL_Mouvement;
Temporaire.replace("#VALUE#", "1");
Serveur.HTTPPost(Temporaire);
delay(500);
}
}
}
if (decompte == true) {
Moment_PresentM = millis();
if ((Moment_PresentM - Moment_MemoriseM) > 58000) {
decompte = false;
Serial.println("OFF");
if (Activation_Auto == true) {
if (URL_Fully != "") {
String Temporaire = URL_Fully;
Temporaire.replace("#VALUE#", "screenOff");
Serveur.HTTPPost(Temporaire);
}
}
if (Mode_Nuit == true) {
strip_Off();
Serveur.IndexSetInfo(Etat_Lumiere, "Off");
Lumiere_Actuelle ="Off";
}
}
}
}
void Post_Etat_Lumiere(String Etat) {
if (URL_Lumiere_Etat != "") {
String Temporaire = URL_Lumiere_Etat;
Temporaire.replace("#VALUE#", Etat);
Serveur.HTTPPost(Temporaire);
delay(500);
}
}
void Post_Etat_Luminosite(String Etat) {
if (URL_Lumiere_Luminosite != "") {
String Temporaire = URL_Lumiere_Luminosite;
Temporaire.replace("#VALUE#", Etat);
Serveur.HTTPPost(Temporaire);
delay(500);
}
}
void Relais_Off() {
digitalWrite(RELAIS, LOW);
Serveur.IndexSetToogle(Bouton_Rechargement_Off);
if (URL_Rechargement != "") {
String Temporaire = URL_Rechargement;
Temporaire.replace("#VALUE#", "0");
Serveur.HTTPPost(Temporaire);
delay(500);
}
Serveur.IndexResetEvent();
Etat_Relais = false;
}
void Relais_On() {
digitalWrite(RELAIS, HIGH);
Serveur.IndexSetToogle(Bouton_Rechargement_On);
if (URL_Rechargement != "") {
String Temporaire = URL_Rechargement;
Temporaire.replace("#VALUE#", "1");
Serveur.HTTPPost(Temporaire);
delay(500);
}
Serveur.IndexResetEvent();
Etat_Relais = true;
}
//Animation des leds
void strip_Off() {
for (int i = 4; i >= 0; i--) {
strip.setPixelColor(4 + i, strip.Color(0,0,0));
strip.setPixelColor(4 - i, strip.Color(0,0,0));
strip.show();
delay(20);
}
}
void Anim_Lumiere(uint32_t color) {
for (int i = 0; i <= 4; i++) {
strip.setPixelColor(4 + i, color);
strip.setPixelColor(4 - i, color);
strip.show();
delay(20);
}
/*for (int i = 0; i < 9; i++) {
strip.setPixelColor(i, color);
strip.show();
delay
}*/
}
void Anim_Alarm(uint32_t color, int wait) {
for (int i = 0; i <= 4; i++) {
strip.setPixelColor(4 + i, color);
strip.setPixelColor(4 - i, color);
strip.show();
delay(wait);
}
}
void Anim_UnAlarm(uint32_t color, int wait) {
for (int i = 4; i >= 0; i--) {
strip.setPixelColor(4 + i, color);
strip.setPixelColor(4 - i, color);
strip.show();
delay(wait);
}
}
void colorWipe(uint32_t color, int wait) {
for (int i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, color);
strip.show();
delay(wait);
}
}
void colorUnWipe(uint32_t color, int wait) {
for (int i = strip.numPixels() - 1; i >= 0; i--) {
strip.setPixelColor(i, color);
strip.show();
delay(wait);
}
}
void pulse(uint8_t wait) {
for (int j = 0; j <= 255; j++) {
strip.fill(strip.Color(strip.gamma8(j), strip.gamma8(j), strip.gamma8(j)));
strip.show();
delay(wait);
}
for (int j = 255; j >= 0; j--) {
strip.fill(strip.Color(strip.gamma8(j), strip.gamma8(j), strip.gamma8(j)));
strip.show();
delay(wait);
}
}
void rainbow(uint8_t wait) {
uint16_t i, j;
for (j = 0; j < 256; j++) {
for (i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel((i + j) & 255));
}
strip.show();
delay(wait);
}
}
void rainbowCycle(uint8_t wait) {
uint16_t i, j;
for (j = 0; j < 256 * 5; j++) {
for (i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
}
strip.show();
delay(wait);
}
}
void theaterChase(uint32_t c, uint8_t wait) {
for (int j = 0; j < 10; j++) {
for (int q = 0; q < 3; q++) {
for (uint16_t i = 0; i < strip.numPixels(); i = i + 3) {
strip.setPixelColor(i + q, c);
}
strip.show();
delay(wait);
for (uint16_t i = 0; i < strip.numPixels(); i = i + 3) {
strip.setPixelColor(i + q, 0);
}
}
}
}
void theaterChaseRainbow(uint8_t wait) {
for (int j = 0; j < 256; j++) {
for (int q = 0; q < 3; q++) {
for (uint16_t i = 0; i < strip.numPixels(); i = i + 3) {
strip.setPixelColor(i + q, Wheel((i + j) % 255));
}
strip.show();
delay(wait);
for (uint16_t i = 0; i < strip.numPixels(); i = i + 3) {
strip.setPixelColor(i + q, 0);
}
}
}
}
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if (WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if (WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

Quelques corrections après quelques temps d'utilisation.

  • L’allumage de l’écran n’est plus géré par Jeedom, mais directement par l’ESP par la fonction screenOn de l’API de fully kiosk lorsque le capteur de mouvement est actif. L’allumage est ainsi plus réactif.

Serveur.AddParamText("URL FullyKiosk", "http://$$ADRESSE_IP$$/?cmd=screenOn&password=$$MDP$$"); //$$ADRESSE_IP$$ = Adresse IP de la tablette:Port(2323) $$MDP$$ = Mot de passe paramétré sur l'API Fully Kiosk


  • Je crée un mode “nuit”. Jeedom active ce mode à l’aube. Et une fois ce mode activé, lorsque le cadre capte un mouvement, il allume les leds pendant 58 secondes (ligne 435)

if ((Moment_PresentM - Moment_MemoriseM) > 58000)

Articles similaires

0 0 votes
Évaluation
S’abonner
Notification pour
0 Commentaires
Commentaires en ligne
Afficher tous les commentaires
Retour en haut