Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Jouer avec Fire via Wi-Fi (ESP8266, NeoPixels et application Android)

Composants et fournitures

ElectroPeak ESP8266 Serial WIFI Witty Cloud Board
× 1
Bande LED intelligente Neopixels (bande 60LED/m)
× 3
Convertisseur de niveau logique ElectroPeak
× 1
Câble de raccordement ElectroPeak 21cm 40P mâle à femelle
× 1
Tuyau PVC 60cm taille 2"
× 1
Papier calque
× 1
Cylindre en verre
× 1
Alimentation 5V (au moins 9A)
× 1
Arduino Nano R3
× 1

Outils et machines nécessaires

Pistolet à colle chaude (générique)
Fer à souder (générique)

Applications et services en ligne

Arduino IDE

À propos de ce projet

Vous pouvez lire ceci et d'autres tutoriels étonnants sur Site officiel d'ElectroPeak

Créez un effet de simulation de feu cool avec le contrôle sans fil Wi-Fi. Une application mobile (pour smartphones Android) avec une belle interface est prête à être installée pour jouer avec votre création ! Nous utiliserons également Arduino et ESP8266 pour contrôler la flamme. À la fin de ce projet, vous apprendrez :

  • Comment fonctionnent les NeoPixels.
  • Comment programmer l'ESP8266 et contrôler les variables via Wi-Fi
  • Comment créer un effet de feu sympa avec NeoPixels

Une introduction aux NeoPixels

Les LED adressables individuellement ou souvent appelées NeoPixels existent depuis un certain temps maintenant et vous les connaissez probablement, mais si vous ne les connaissez pas, elles ressemblent à des LED RVB normales, mais comme leur nom l'indique, la couleur de chacune d'entre elles peut être adressée individuellement , permettant de créer des motifs et des animations infiniment cool. Pour le WS2812b, vous n'avez besoin que de 3 fils, 2 pour l'alimentation et 1 pour les données. Cela signifie que vous n'avez besoin que d'une broche Arduino gratuite pour contrôler une tonne de LED !

Dans ce projet, nous allons utiliser ces LED intelligentes pour créer un effet de feu. Pour contrôler les LED, nous allons utiliser l'impressionnante bibliothèque FastLED. Nous utiliserons l'exemple d'esquisse Fire2012 de la bibliothèque écrite par Mark Kriegsman. Nous utilisons 6 bandes de LED ayant chacune 30 LED (un total de 180 LED) nous collons ces LED sur un morceau de tuyau en PVC et les plaçons dans un cylindre en verre (ces cylindres en verre sont généralement utilisés comme vases). Nous devons diffuser la lumière des LED pour leur donner un aspect continu, pour cela nous avons utilisé du papier calque qui laisse passer la lumière et diffuse la lumière.

Bâtiment

Tout d'abord, procurez-vous un cylindre en verre approprié, notre cylindre a une longueur de 60 cm et un diamètre de 12 cm.

Si vous pouvez trouver un cylindre en verre dépoli qui sera agréable, mais s'il s'agit d'un verre transparent, vous pouvez utiliser du papier calque pour couvrir la surface du cylindre (surface intérieure ou extérieure), le papier calque diffuse bien la lumière et donne de bons résultats.

Après avoir obtenu un cylindre en verre, mesurez sa longueur interne, puis coupez le tuyau en PVC pour qu'il s'adapte à l'intérieur du cylindre. Notre cylindre de verre a une hauteur de 60cm (hors socle il a une longueur interne de 59cm) nous avons donc coupé notre tuyau PVC à 59cm. Vous collerez des bandes LED sur ce tuyau, un tuyau de 4cm de diamètre serait parfait.

Ensuite, nous devons couper notre bande led en 6 parties égales ici, nous utilisons une bande de densité 60LEDs/m (vous pouvez utiliser des densités plus élevées pour de meilleurs effets si vous le souhaitez) nous utilisons six longueurs de 50 cm, ce qui signifie que nous avons besoin de 3 mètres. Espacez également les six longueurs autour du tuyau en PVC et collez les bandes sur le tuyau. Voici à quoi cela devrait ressembler.

Aux bandes LED, vous pouvez soit souder directement des fils à la bande selon le schéma suivant, soit d'abord souder les en-têtes de broches aux bandes, puis utiliser des fils de maquette pour les connecter.

Lorsque toutes les connexions des bandes LED sont terminées, vous devez placer le tuyau à l'intérieur du cylindre. Pour centrer le tuyau à l'intérieur du cylindre, vous pouvez utiliser de la mousse pour couper un cercle qui a un diamètre extérieur égal au diamètre intérieur du cylindre de verre et un diamètre intérieur égal au diamètre extérieur du tuyau en PVC. Préparez-en deux pour chaque côté du tuyau. Attachez ces pièces aux extrémités et placez délicatement le tuyau à l'intérieur du cylindre.

Code

Nous utilisons Arduino IDE pour le codage et le téléchargement vers ESP8266. Vous devez utiliser une carte dotée d'un ESP8266 avec 3 Mo de SPIFFS si vous souhaitez télécharger les fichiers du logiciel du contrôleur sur le SPIFFS. SPIFFS est l'abréviation de «Serial Peripheral Interface Flash File System», vous pouvez télécharger les fichiers du contrôleur dans cette mémoire pour servir les fichiers à partir de cet emplacement. En faisant cela, vous pouvez ouvrir votre navigateur (sur votre téléphone ou votre ordinateur portable) et accéder à l'adresse de votre ESP (la valeur par défaut est 192.168.4.1) et vous obtiendrez l'interface du contrôleur dans votre navigateur sans avoir à installer l'application, si vous avoir un iPhone ou un iPad, c'est votre seul choix.

Téléchargez le croquis suivant sur votre tableau ESP. Nous avons besoin de la bibliothèque FastLED, alors ajoutez-la d'abord à votre IDE Arduino si vous ne l'avez pas déjà fait (vous pouvez la télécharger ici). Le code de simulation d'incendie est le croquis fire2012 de Mark Kriegsman que vous pouvez trouver dans les exemples. Cet exemple est pour une bande de led mais, ici, nous avons modifié le code pour utiliser un nombre variable de bandes. Plus le nombre de bandes/leds est important, plus l'effet sera important.

La logique de la simulation d'incendie est clairement décrite dans le fichier d'exemple. Si vous voulez savoir comment cela fonctionne, lisez le code source de l'exemple.

#include #include #include "FastLED.h"#include "EEPROM.h"#include "FS.h" //requis pour SPIFFS#define DATA_PIN 5 #define LED_TYPE WS2811#define COLOR_ORDER GRB#define NUM_LEDS 30#define NUM_STRIPS 6#define CHIPSET WS2812B//adresses pour enregistrer les données dans l'EEPROM pour préserver l'état de la simulation d'incendie#define cs0Adr 0#define cs1Adr 3#define# cs2Adr3 6 9#define BriAdr 15#define FpsAdr 16#define SparkingAdr 17#define CoolingAdr 18#define EEPROMCheckAdr 20 //si cette valeur est 250, nous supposons que nous avons précédemment enregistré dans l'EEPROM et chargeons les données de ces leds CRGB[NUM_STRIPS * NUM_LEDS];String inData;uint8_t FPS =100; //FRAMES_PER_SECONDuint8_t ÉTINCELLE =150;uint8_t REFROIDISSEMENT =90; uint8_t LUMINOSITÉ =100;uint8_t csRGB[4][3] ={{0, 0, 0}, {255, 0, 0}, {255, 127, 0}, {255, 255, 255}};unsigned long previousMillis =0;bool change =false; //si vrai, nous allons enregistrer dans EEprom.unsigned long changeMillis =0; //les modifications seront enregistrées 1 minute après qu'aucune modification ne soit appliquée pour éviter l'usure de l'EEPROM.bool initSetup =true;CRGBPalette16 gPal;ESP8266WebServer server(80); //Objet serveur Web. Écoutera sur le port 80 (par défaut pour HTTP)void setup(){ EEPROM.begin(200); cWiFi(); setupFastLED(); loadConfig(); gPal =CRGBPalette16( CRGB(csRGB[0][0],csRGB[0][1],csRGB[0][2]), CRGB(csRGB[1][0],csRGB[1][1],csRGB [1][2]), CRGB(csRGB[2][0],csRGB[2][1],csRGB[2][2]), CRGB(csRGB[3][0],csRGB[3][ 1],csRGB[3][2]));}configuration d'annulation en ligneFastLED(){ delay(1000); // délai de validité FastLED.addLeds(leds, NUM_STRIPS * NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(LUMINOSITÉ);}boucle vide(){ server.handleClient(); //Traitement des requêtes entrantes if (change) { if (millis() - changeMillis> 60000) { change =false; saveToEEPROM(); } } Feu(); FastLED.show(); FastLED.delay(1000 / FPS);}void Fire2012WithPalette(int stripNo){ static byte heat[NUM_STRIPS][NUM_LEDS]; // Étape 1. Refroidissez un peu chaque cellule pour( int i =0; i =2; k--) { heat[stripNo][k] =(heat[stripNo] [k - 1] + heat[stripNo][k - 2] + heat[stripNo][k - 2] ) / 3 ; } // Étape 3. Allumez au hasard de nouvelles « étincelles » de chaleur près du bas if( random8() =period * 1000) { // enregistre la dernière fois que vous avez fait clignoter la LED previousMillis =currentMillis ; renvoie vrai ; } else { return false; }}void EEPROMupdate(adresse d'octet, valeur d'octet){ if (EEPROM.read(adresse) !=valeur) { EEPROM.write(adresse, valeur); EEPROM.commit(); } return;}void saveToEEPROM(){ EEPROMupdate(BriAdr, BRIGHTNESS); EEPROMupdate (Adr Fps, FPS); EEPROMupdate(SparkingAdr, SPARKING); EEPROMupdate(CoolingAdr, COOLING); pour (uint8_t i =0; i <4; i++) { pour (uint8_t j =0; j <3; j++) { EEPROMupdate((i * 3 + j), csRGB[i][j]); } }} void handleCS0Change(){ csRGB[0][0] =str2int(server.arg("R")); csRGB[0][1] =str2int(server.arg("G")); csRGB[0][2] =str2int(server.arg("B")); gPal =CRGBPalette16( CRGB(csRGB[0][0],csRGB[0][1],csRGB[0][2]), CRGB(csRGB[1][0],csRGB[1][1],csRGB [1][2]), CRGB(csRGB[2][0],csRGB[2][1],csRGB[2][2]), CRGB(csRGB[3][0],csRGB[3][ 1],csRGB[3][2])); changeMillis =millis(); change =true;}void handleCS1Change(){ csRGB[1][0] =str2int(server.arg("R")); csRGB[1][1] =str2int(server.arg("G")); csRGB[1][2] =str2int(server.arg("B")); gPal =CRGBPalette16( CRGB(csRGB[0][0],csRGB[0][1],csRGB[0][2]), CRGB(csRGB[1][0],csRGB[1][1],csRGB [1][2]), CRGB(csRGB[2][0],csRGB[2][1],csRGB[2][2]), CRGB(csRGB[3][0],csRGB[3][ 1],csRGB[3][2])); changeMillis =millis(); change =true;}void handleCS2Change(){ csRGB[2][0] =str2int(server.arg("R")); csRGB[2][1] =str2int(server.arg("G")); csRGB[2][2] =str2int(server.arg("B")); gPal =CRGBPalette16( CRGB(csRGB[0][0],csRGB[0][1],csRGB[0][2]), CRGB(csRGB[1][0],csRGB[1][1],csRGB [1][2]), CRGB(csRGB[2][0],csRGB[2][1],csRGB[2][2]), CRGB(csRGB[3][0],csRGB[3][ 1],csRGB[3][2])); changeMillis =millis(); change =true;}void handleCS3Change(){ csRGB[3][0] =str2int(server.arg("R")); csRGB[3][1] =str2int(server.arg("G")); csRGB[3][2] =str2int(server.arg("B")); gPal =CRGBPalette16( CRGB(csRGB[0][0],csRGB[0][1],csRGB[0][2]), CRGB(csRGB[1][0],csRGB[1][1],csRGB [1][2]), CRGB(csRGB[2][0],csRGB[2][1],csRGB[2][2]), CRGB(csRGB[3][0],csRGB[3][ 1],csRGB[3][2])); changeMillis =millis(); change =true;}void handleConf(){ if (server.arg("luminosité") !="") { LUMINOSITÉ =str2int(server.arg("luminosité")); FastLED.setBrightness(LUMINOSITÉ); changeMillis =millis(); changement =vrai ; } if (server.arg("fps") !="") { FPS =str2int(server.arg("fps")); changeMillis =millis(); changement =vrai ; } if (server.arg("étincelles") !="") { SPARKING =str2int(server.arg("étincelles")); changeMillis =millis(); changement =vrai ; } if (server.arg("refroidissement") !="") { REFROIDISSEMENT =str2int(server.arg("refroidissement")); changeMillis =millis(); changement =vrai ; } server.sendHeader("Connexion", "fermer"); server.sendHeader("Access-Control-Allow-Origin", "*"); server.send(200, "text/plain", ""); // Renvoie la réponse HTTP}void loadConfig(){ if (EEPROM.read(EEPROMCheckAdr) ==250) { BRIGHTNESS =EEPROM.read(BriAdr); ÉTINCELLE =EEPROM.read(SparkingAdr); REFROIDISSEMENT =EEPROM.read(CoolingAdr); FPS =EEPROM.read(FpsAdr); si (FPS ==0) FPS =100 ; pour (uint8_t i =0; i <4; i++) { pour (uint8_t j =0; j <3; j++) { csRGB[i][j] =EEPROM.read(i * 3 + j); } } }else{ EEPROMupdate(BriAdr,LUMINOSITÉ); EEPROMupdate(FpsAdr,FPS); EEPROMupdate(CoolingAdr,COOLING); EEPROMupdate(SparkingAdr, SPARKING); pour (uint8_t i =0; i <4; i++) { pour (uint8_t j =0; j <3; j++) { EEPROMupdate((i*3+j) , csRGB[i][j]); } } EEPROMupdate(EEPROMCheckAdr, 250); }}void cWiFi(){ WiFi.softAP("ElectroPeak's Flame", ""); //définissez un mot de passe ici si vous le souhaitez, par exemple WiFi.softAP("ElectroPeak's Flame", "12345678"); Adresse IP monIP =WiFi.softAPIP(); server.on("/cs0", handleCS0Change); server.on("/cs1", handleCS1Change); server.on("/cs2", handleCS2Change); server.on("/cs3", handleCS3Change); server.on("/conf", handleConf); server.serveStatic("/", SPIFFS, "/", "max-age=86400"); serveur.begin(); //Démarrer le serveur} 

Pour contrôler « l'apparence et la convivialité » du feu, il y a deux variables avec lesquelles jouer :L'ÉTINCELLE et le REFROIDISSEMENT, que vous pouvez contrôler dynamiquement dans le logiciel du contrôleur téléchargé sur le SPIFFS ou l'application Android que vous pouvez télécharger. Vous pouvez également contrôler le FPS ici.

La couleur du feu est contrôlée avec une palette de couleurs qui est également modifiable via le logiciel du contrôleur (via 4 arrêts de couleur). Cliquez/appuyez simplement sur chaque cercle de couleur représentant un arrêt de couleur pour définir la couleur, après avoir défini la couleur, appuyez sur fermer pour fermer la boîte de dialogue et voir le changement.

Comment télécharger sur SPIFFS ?

Pour télécharger les fichiers dans la mémoire SPIFFS à l'aide d'Arduino IDE, vous devez d'abord créer un dossier appelé « données » dans le dossier de l'esquisse et placer tous les fichiers que vous souhaitez télécharger dans ce dossier. Le fichier téléchargé ici contient à la fois le croquis et ce dossier.

Ensuite, vous avez besoin du plugin de téléchargement de système de fichiers Arduino ESP8266 pour Arduino. Suivez les instructions sur sa page Github et installez le plugin. Une fois installé, vous trouverez ESP8266 Sketch Data Upload sous outils menu. Mettez votre ESP en mode programmation et cliquez dessus. Soyez patient et laissez les fichiers se télécharger, cela peut prendre un peu de temps. Remarque :définissez la « vitesse de téléchargement » sur 921600 pour l'accélérer.

Comment ça marche ?

L'esquisse téléchargée sur la carte ESP8266 crée un serveur Web sur celui-ci, qui répond aux demandes envoyées depuis l'application. L'application envoie simplement des requêtes GET au serveur (ESP8266). Les données de couleur pour créer la palette sont envoyées en arguments dans la requête get, il en est de même pour les autres paramètres tels que les paramètres Sparking et Cooling.

Par exemple, pour régler la luminosité, la requête suivante est envoyée par l'application

http://192.168.4.1/conf?brightness=224

il existe un gestionnaire pour cette demande dans l'esquisse qui, lorsqu'il obtient cette demande, définit la luminosité. Consultez le code pour en savoir plus.

Application Android

L'application Android est créée à l'aide de Phonegap. Il s'agit d'une technologie qui permet de créer des applications mobiles multiplateformes en utilisant les technologies Web (HTML, CSS, Javascript). Vous pouvez obtenir le code source en visitant cette page

Vous pouvez lire ceci et d'autres tutoriels étonnants sur Site officiel d'ElectroPeak

Code

  • Code d'effet de feu
  • Dossier d'esquisse et de données
Code d'effet de feuArduino
#include #include #include "FastLED.h"#include "EEPROM.h"#include "FS.h" //requis pour SPIFFS#define DATA_PIN 5#define LED_TYPE WS2811#define COLOR_ORDER GRB#define NUM_LEDS 30# define NUM_STRIPS 6#define CHIPSET WS2812B//addresses pour enregistrer les données dans l'EEPROM pour préserver l'état de la simulation d'incendie#define cs0Adr 0#define cs1Adr 3#define cs2Adr 6#define cs3Adr 9#define BriAdr 15#define FpsAdr 16#define SparkingAdr 17 #define CoolingAdr 18#define EEPROMCheckAdr 20 //si cette valeur est de 250, nous supposons que nous avons précédemment enregistré dans l'EEPROM et que nous chargeons les données de ces leds CRGB[NUM_STRIPS * NUM_LEDS];String inData;uint8_t FPS =100; //FRAMES_PER_SECONDuint8_t ÉTINCELLE =150;uint8_t REFROIDISSEMENT =90; uint8_t LUMINOSITÉ =100;uint8_t csRGB[4][3] ={{0, 0, 0}, {255, 0, 0}, {255, 127, 0}, {255, 255, 255}};unsigned long previousMillis =0;bool change =false; //si vrai, nous allons enregistrer dans EEprom.unsigned long changeMillis =0; //les modifications seront enregistrées 1 minute après qu'aucune modification ne soit appliquée pour éviter l'usure de l'EEPROM.bool initSetup =true;CRGBPalette16 gPal;ESP8266WebServer server(80); //Objet serveur Web. Écoutera sur le port 80 (par défaut pour HTTP)void setup(){ EEPROM.begin(200); cWiFi(); setupFastLED(); loadConfig(); gPal =CRGBPalette16( CRGB(csRGB[0][0],csRGB[0][1],csRGB[0][2]), CRGB(csRGB[1][0],csRGB[1][1],csRGB [1][2]), CRGB(csRGB[2][0],csRGB[2][1],csRGB[2][2]), CRGB(csRGB[3][0],csRGB[3][ 1],csRGB[3][2])); }inline void setupFastLED(){ delay(1000); // délai de validité FastLED.addLeds(leds, NUM_STRIPS * NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(LUMINOSITÉ);}boucle vide(){ server.handleClient(); //Traitement des requêtes entrantes if (change) { if (millis() - changeMillis> 60000) { change =false; saveToEEPROM(); } } Feu(); FastLED.show(); FastLED.delay(1000 / FPS);}void Fire2012WithPalette(int stripNo){ static byte heat[NUM_STRIPS][NUM_LEDS]; // Étape 1. Refroidissez un peu chaque cellule pour( int i =0; i =2; k--) { heat[stripNo][k] =(heat[stripNo] [k - 1] + heat[stripNo][k - 2] + heat[stripNo][k - 2] ) / 3 ; } // Étape 3. Allumez au hasard de nouvelles « étincelles » de chaleur près du bas if( random8() =period * 1000) { // enregistre la dernière fois que vous avez fait clignoter la LED previousMillis =currentMillis ; renvoie vrai ; } else { return false; }}void EEPROMupdate(adresse d'octet, valeur d'octet){ if (EEPROM.read(adresse) !=valeur) { EEPROM.write(adresse, valeur); EEPROM.commit(); } return;}void saveToEEPROM(){ EEPROMupdate(BriAdr, BRIGHTNESS); EEPROMupdate(FpsAdr, FPS); EEPROMupdate(SparkingAdr, SPARKING); EEPROMupdate(CoolingAdr, COOLING); pour (uint8_t i =0; i <4; i++) { pour (uint8_t j =0; j <3; j++) { EEPROMupdate((i * 3 + j), csRGB[i][j]); } }} void handleCS0Change(){ csRGB[0][0] =str2int(server.arg("R")); csRGB[0][1] =str2int(server.arg("G")); csRGB[0][2] =str2int(server.arg("B")); gPal =CRGBPalette16( CRGB(csRGB[0][0],csRGB[0][1],csRGB[0][2]), CRGB(csRGB[1][0],csRGB[1][1],csRGB [1][2]), CRGB(csRGB[2][0],csRGB[2][1],csRGB[2][2]), CRGB(csRGB[3][0],csRGB[3][ 1],csRGB[3][2])); changeMillis =millis(); change =true;}void handleCS1Change(){ csRGB[1][0] =str2int(server.arg("R")); csRGB[1][1] =str2int(server.arg("G")); csRGB[1][2] =str2int(server.arg("B")); gPal =CRGBPalette16( CRGB(csRGB[0][0],csRGB[0][1],csRGB[0][2]), CRGB(csRGB[1][0],csRGB[1][1],csRGB [1][2]), CRGB(csRGB[2][0],csRGB[2][1],csRGB[2][2]), CRGB(csRGB[3][0],csRGB[3][ 1],csRGB[3][2])); changeMillis =millis(); change =true;}void handleCS2Change(){ csRGB[2][0] =str2int(server.arg("R")); csRGB[2][1] =str2int(server.arg("G")); csRGB[2][2] =str2int(server.arg("B")); gPal =CRGBPalette16( CRGB(csRGB[0][0],csRGB[0][1],csRGB[0][2]), CRGB(csRGB[1][0],csRGB[1][1],csRGB [1][2]), CRGB(csRGB[2][0],csRGB[2][1],csRGB[2][2]), CRGB(csRGB[3][0],csRGB[3][ 1],csRGB[3][2])); changeMillis =millis(); change =true;}void handleCS3Change(){ csRGB[3][0] =str2int(server.arg("R")); csRGB[3][1] =str2int(server.arg("G")); csRGB[3][2] =str2int(server.arg("B")); gPal =CRGBPalette16( CRGB(csRGB[0][0],csRGB[0][1],csRGB[0][2]), CRGB(csRGB[1][0],csRGB[1][1],csRGB [1][2]), CRGB(csRGB[2][0],csRGB[2][1],csRGB[2][2]), CRGB(csRGB[3][0],csRGB[3][ 1],csRGB[3][2])); changeMillis =millis(); change =true;}void handleConf(){ if (server.arg("luminosité") !="") { LUMINOSITÉ =str2int(server.arg("luminosité")); FastLED.setBrightness(LUMINOSITÉ); changeMillis =millis(); changement =vrai ; } if (server.arg("fps") !="") { FPS =str2int(server.arg("fps")); changeMillis =millis(); changement =vrai ; } if (server.arg("étincelles") !="") { SPARKING =str2int(server.arg("étincelles")); changeMillis =millis(); changement =vrai ; } if (server.arg("refroidissement") !="") { REFROIDISSEMENT =str2int(server.arg("refroidissement")); changeMillis =millis(); changement =vrai ; } server.sendHeader("Connexion", "fermer"); server.sendHeader("Access-Control-Allow-Origin", "*"); server.send(200, "text/plain", ""); // Renvoie la réponse HTTP}void loadConfig(){ if (EEPROM.read(EEPROMCheckAdr) ==250) { BRIGHTNESS =EEPROM.read(BriAdr); ÉTINCELLE =EEPROM.read(SparkingAdr); REFROIDISSEMENT =EEPROM.read(CoolingAdr); FPS =EEPROM.read(FpsAdr); si (FPS ==0) FPS =100 ; pour (uint8_t i =0; i <4; i++) { pour (uint8_t j =0; j <3; j++) { csRGB[i][j] =EEPROM.read(i * 3 + j); } } }else{ EEPROMupdate(BriAdr,LUMINOSITÉ); EEPROMupdate(AdrFps,FPS); EEPROMupdate(CoolingAdr,COOLING); EEPROMupdate(SparkingAdr, SPARKING); pour (uint8_t i =0; i <4; i++) { pour (uint8_t j =0; j <3; j++) { EEPROMupdate((i*3+j) , csRGB[i][j]); } } EEPROMupdate(EEPROMCheckAdr, 250); }}void cWiFi(){ WiFi.softAP("ElectroPeak's Flame", ""); //définissez un mot de passe ici si vous le souhaitez, par exemple WiFi.softAP("ElectroPeak's Flame", "12345678"); Adresse IP monIP =WiFi.softAPIP(); server.on("/cs0", handleCS0Change); server.on("/cs1", handleCS1Change); server.on("/cs2", handleCS2Change); server.on("/cs3", handleCS3Change); server.on("/conf", handleConf); server.serveStatic("/", SPIFFS, "/", "max-age=86400"); serveur.begin(); //Démarrer le serveur}
Dossier Sketch and DataArduino
Ce fichier zip contient à la fois le fichier de croquis et le dossier de données (téléchargement SPIFFS)
Aucun aperçu (téléchargement uniquement).

Pièces et boîtiers personnalisés

eps_flame_android_u5Zy5Bksvp.apk

Processus de fabrication

  1. Combattre les incendies de forêt avec l'IoT
  2. Créez un détecteur d'incendie en quelques minutes avec Samsung SAMIIO, Arduino UNO et Raspberry Pi
  3. Détecteur de pleurs de bébé bricolage facile avec Raspberry Pi
  4. Dégâts et prévention des incendies
  5. Combat contre les incendies avec l'IoT
  6. Conception d'applications d'entreprise :est-ce que iOS se compare à Android en termes de sécurité ?
  7. Python String strip() Fonction avec EXAMPLE
  8. Axiom Equipment Group, avec d'autres sponsors, fait un don de plus de 11 000 $ au service d'incendie d'Oxbow
  9. Créer un compteur de personnes contrôlé par une application Android