Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Spielen Sie mit Feuer über WLAN (ESP8266, NeoPixels und Android-App)

Komponenten und Verbrauchsmaterialien

ElectroPeak ESP8266 Serial WIFI Witty Cloud Board
× 1
Neopixels Smart LED Strip (60LED/m Streifen)
× 3
ElectroPeak Logic Level Converter
× 1
ElectroPeak 21cm 40P Stecker-zu-Buchse-Überbrückungskabel
× 1
PVC-Rohr 60cm Größe 2”
× 1
Pauspapier
× 1
Glaszylinder
× 1
5V Stromversorgung (mindestens 9A)
× 1
Arduino Nano R3
× 1

Notwendige Werkzeuge und Maschinen

Heißklebepistole (generisch)
Lötkolben (generisch)

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

Sie können dieses und andere tolle Tutorials auf . lesen Offizielle Website von ElectroPeak

Erstellen Sie einen coolen Feuersimulationseffekt mit der drahtlosen Wi-Fi-Steuerung. Eine mobile App (für Android-Smartphones) mit einer gut aussehenden Benutzeroberfläche kann installiert werden, um mit Ihrer Kreation zu spielen! Wir werden auch Arduino und ESP8266 verwenden, um die Flamme zu steuern. Am Ende dieses Projekts lernst du:

  • So funktionieren NeoPixels.
  • So programmieren Sie ESP8266 und steuern Variablen über WLAN
  • Wie man mit NeoPixels einen coolen Feuereffekt erzeugt

Eine Einführung in NeoPixel

Einzeln adressierbare LEDs oder oft auch NeoPixel genannt gibt es schon seit einiger Zeit und Sie kennen sie wahrscheinlich, aber wenn nicht, sind sie wie normale RGB-LEDs, aber wie der Name schon sagt, kann die Farbe jeder von ihnen einzeln adressiert werden , wodurch unendlich coole Muster und Animationen erstellt werden können. Für WS2812b benötigen Sie nur 3 Drähte, 2 für die Stromversorgung und 1 für die Daten. Das bedeutet, dass Sie nur einen freien Arduino-Pin benötigen, um eine Menge LEDs zu steuern!

In diesem Projekt werden wir diese intelligenten LEDs verwenden, um einen Feuereffekt zu erzeugen. Zur Steuerung von LEDs verwenden wir die fantastische FastLED-Bibliothek. Wir werden das Fire2012-Skizzenbeispiel der Bibliothek von Mark Kriegsman verwenden. Wir verwenden 6 LED-Streifen mit jeweils 30 LEDs (insgesamt 180 LEDs) wir kleben diese LEDs auf ein Stück PVC-Rohr und legen sie in einen Glaszylinder (diese Glaszylinder werden normalerweise als Vasen verwendet). Wir müssen das Licht der LEDs streuen, damit sie kontinuierlich aussehen. Dazu haben wir Pauspapier verwendet, das Licht durchlässt und Licht streut.

Bau

Besorgen Sie sich zunächst einen richtigen Glaszylinder, unser Zylinder hat eine Länge von 60cm und einen Durchmesser von 12cm.

Wenn Sie einen mattierten Glaszylinder finden, der schön ist, aber wenn es ein klares Glas ist, können Sie Pauspapier verwenden, um die Zylinderoberfläche (entweder Innen- oder Außenfläche) zu bedecken. Pauspapier streut das Licht gut und liefert gute Ergebnisse.

Nachdem Sie einen Glaszylinder erhalten haben, messen Sie seine Innenlänge und schneiden Sie dann das PVC-Rohr so, dass es in den Zylinder passt. Unser Glaszylinder hat eine Höhe von 60cm (ohne Sockel hat er eine Innenlänge von 59cm), also schneiden wir unser PVC-Rohr auf 59cm. Auf dieses Rohr kleben Sie LED-Streifen, ein Rohr mit einem Durchmesser von 4cm wäre perfekt.

Als nächstes müssen wir unseren LED-Streifen in 6 gleiche Teile schneiden. Hier verwenden wir einen Streifen mit einer Dichte von 60 LEDs / m (Sie können höhere Dichten für bessere Effekte verwenden, wenn Sie möchten) Wir verwenden sechs 50 cm lange Längen, dh wir benötigen 3 Meter. Platzieren Sie die sechs Längen gleichmäßig um das PVC-Rohr und kleben Sie die Streifen auf das Rohr. So sollte es aussehen.

An die LED-Streifen können Sie entweder direkt Drähte gemäß der folgenden Zeichnung an den Streifen anlöten oder zuerst Stiftleisten an die Streifen anlöten und dann mit Steckbrettdrähten verbinden.

Wenn alle LED-Streifen-Verbindungen fertig sind, müssen Sie das Rohr in den Zylinder legen. Um das Rohr im Zylinder zu zentrieren, können Sie mit Schaumstoff einen Kreis schneiden, der einen Außendurchmesser gleich dem Innendurchmesser des Glaszylinders und einen Innendurchmesser gleich dem Außendurchmesser des PVC-Rohrs hat. Bereiten Sie zwei davon für jede Seite des Rohres vor. Befestigen Sie diese Teile an den Enden und führen Sie das Rohr vorsichtig in den Zylinder ein.

Code

Wir verwenden Arduino IDE zum Codieren und Hochladen auf ESP8266. Sie müssen ein Board mit einem ESP8266 mit 3 MB SPIFFS verwenden, wenn Sie die Controller-Softwaredateien auf die SPIFFS hochladen möchten. SPIFFS ist die Abkürzung für „Serial Peripheral Interface Flash File System“. Sie können die Controller-Dateien in diesen Speicher hochladen, um die Dateien von diesem Speicherort bereitzustellen. Auf diese Weise können Sie Ihren Browser (entweder auf Ihrem Telefon oder Notebook) öffnen und die Adresse Ihres ESP aufrufen (die Standardeinstellung ist 192.168.4.1) und Sie erhalten die Controller-Oberfläche in Ihrem Browser, ohne die App installieren zu müssen, wenn Sie ein iPhone oder iPad haben, ist dies deine einzige Wahl.

Laden Sie die folgende Skizze auf Ihr ESP-Board hoch. Wir benötigen die FastLED-Bibliothek, also fügen Sie sie zuerst zu Ihrer Arduino-IDE hinzu, wenn Sie dies noch nicht getan haben (Sie können sie hier herunterladen). Der Brandsimulationscode ist Mark Kriegsmans fire2012-Skizze, die Sie in den Beispielen finden. Dieses Beispiel gilt für einen LED-Streifen, aber hier haben wir den Code geändert, um eine variable Anzahl von Streifen zu verwenden. Je mehr Streifen/LEDs, desto größer der Effekt.

Die Logik der Brandsimulation ist in der Beispieldatei anschaulich beschrieben. Wenn Sie wissen möchten, wie es funktioniert, lesen Sie den Quellcode des Beispiels.

#include #include #include "FastLED.h"#include "EEPROM.h"#include "FS.h" //erforderlich für SPIFFS#define DATA_PIN 5 #define LED_TYPE WS2811#define COLOR_ORDER GRB#define NUM_LEDS 30#define NUM_STRIPS 6#define CHIPSET WS2812B // Adressen zum Speichern von Daten im EEPROM um den Zustand der Feuersimulation zu erhalten#define cs0Adr 0#define cs1Adr 3#define cs2Adr 6#define 9#define BriAdr 15#define FpsAdr 16#define SparkingAdr 17#define CoolingAdr 18#define EEPROMCheckAdr 20 // Wenn dieser Wert 250 beträgt, gehen wir davon aus, dass wir zuvor im EEPROM gespeichert und Daten von diesen CRGB-LEDs geladen haben[NUM_STRIPS * NUM_LEDS];String inData;uint8_t FPS =100; //FRAMES_PER_SECONDuint8_t SPARKING =150;uint8_t COOLING =90; uint8_t BRIGHTNESS =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; // Wenn wahr, gehen wir zum Speichern in EEprom.unsigned long changeMillis =0; //Änderungen werden 1 Minute nachdem keine Änderung vorgenommen wurde gespeichert, um EEPROM zu vermeiden wear.bool initSetup =true;CRGBPalette16 gPal;ESP8266WebServer server(80); //Webserverobjekt. Hört in Port 80 (Standard für 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(){Verzögerung(1000); // Vernunftverzögerung FastLED.addLeds(leds, NUM_STRIPS * NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(BRIGHTNESS);}void loop(){ server.handleClient(); //Behandlung eingehender Anfragen if (change) { if (millis() - changeMillis> 60000) { change =false; saveToEEPROM(); } } Feuer(); FastLED.show(); FastLED.delay(1000 / FPS);}void Fire2012WithPalette(int stripNo){ statisches Byte Heat[NUM_STRIPS][NUM_LEDS]; // Schritt 1. Jede Zelle ein wenig abkühlen for( int i =0; i =2; k--) { heat[stripNo][k] =(heat[stripNo] [k – 1] + Wärme[StreifenNr][k – 2] + Wärme[StreifenNr][k – 2])/3; } // Schritt 3. Entzünden Sie zufällig neue 'Funken' von Hitze in der Nähe des Bodens if(random8() =period * 1000) {// speichern Sie das letzte Mal, als Sie die LED blinkten previousMillis =currentMillis; true zurückgeben; aufrechtzuerhalten. Sonst { false zurückgeben; }} EEPROMupdate ungültig (Byte-Adresse, Byte-Wert) { if (EEPROM.read (Adresse) ! =Wert) { EEPROM.write (Adresse, Wert); EEPROM.commit(); } return;}void saveToEEPROM(){ EEPROMupdate(BriAdr, BRIGHTNESS); EEPROMupdate (FpsAdr, FPS); EEPROMupdate (SparkingAdr, SPARKING); EEPROMupdate (KühlenAdr, KÜHLEN); for (uint8_t i =0; i <4; i++) { for (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("Helligkeit") !="") { HELLIGKEIT =str2int(server.arg("Helligkeit")); FastLED.setHelligkeit (HELLIGKEIT); changeMillis =millis(); ändern =wahr; } if (server.arg("fps") !="") { FPS =str2int(server.arg("fps")); changeMillis =millis(); ändern =wahr; } if (server.arg("Sparking") !="") { SPARKING =str2int(server.arg("Sparking")); changeMillis =millis(); ändern =wahr; } if (server.arg("Kühlung") !="") { KÜHLUNG =str2int(server.arg("Kühlung")); changeMillis =millis(); ändern =wahr; } server.sendHeader("Verbindung", "schließen"); server.sendHeader("Access-Control-Allow-Origin", "*"); server.send(200, "text/plain", ""); // Gibt die HTTP-Antwort zurück}void loadConfig () { if (EEPROM.read (EEPROMCheckAdr) ==250) { BRIGHTNESS =EEPROM.read (BriAdr); SPARKING =EEPROM.read (SparkingAdr); KÜHLUNG =EEPROM.read(CoolingAdr); FPS =EEPROM.read (FpsAdr); wenn (FPS ==0) FPS =100; for (uint8_t i =0; i <4; i++) { for (uint8_t j =0; j <3; j++) { csRGB[i][j] =EEPROM.read(i * 3 + j); } } }sonst{ EEPROMupdate(BriAdr,HELLIGKEIT); EEPROMupdate (FpsAdr,FPS); EEPROMupdate(KühlenAdr,KÜHLEN); EEPROMupdate (SparkingAdr, SPARKING); for (uint8_t i =0; i <4; i++) { for (uint8_t j =0; j <3; j++) { EEPROMupdate((i*3+j) , csRGB[i][j]); } } EEPROMupdate(EEPROMCheckAdr, 250); }}void cWiFi () { WiFi.softAP ( "ElectroPeaks Flamme", ""); // Legen Sie hier ein Passwort fest, wenn Sie möchten, z. B. WiFi.softAP ("ElectroPeak's Flame", "12345678"); IPAdresse myIP =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"); server.begin(); //Server starten} 

Um das „Look and Feel“ des Feuers zu steuern, gibt es zwei Variablen zum Spielen:SPARKING und COOLING, die Sie dynamisch in der Controller-Software steuern können, die auf die SPIFFS oder die Android-App heruntergeladen werden kann. Sie können hier auch FPS steuern.

Die Farbe des Feuers wird mit einer Farbpalette gesteuert, die auch über die Controller-Software geändert werden kann (durch 4 Farbstopps). Klicken/tippen Sie einfach auf jeden Farbkreis, der einen Farbstopp darstellt, um die Farbe einzustellen, nachdem Sie die Farbe eingestellt haben, um den Dialog zu schließen und die Änderung zu sehen.

Wie lade ich zu SPIFFS hoch?

Um die Dateien mit Arduino IDE in den SPIFFS-Speicher hochzuladen, müssen Sie zuerst einen Ordner namens "data" im Ordner der Skizze erstellen und alle Dateien, die Sie hochladen möchten, in diesem Ordner ablegen. Die hier hochgeladene Datei enthält sowohl die Skizze als auch diesen Ordner.

Als nächstes benötigen Sie das Arduino ESP8266-Dateisystem-Uploader-Plugin für Arduino. Folgen Sie den Anweisungen auf der Github-Seite und installieren Sie das Plugin. Nach der Installation finden Sie ESP8266 Sketch Data Upload unter Tools Speisekarte. Versetzen Sie Ihr ESP in den Programmiermodus und klicken Sie darauf. Seien Sie geduldig und lassen Sie die Dateien hochladen, das kann eine Weile dauern. Hinweis:Stellen Sie "Upload-Geschwindigkeit" auf 921600 ein, um es schneller zu machen.

Wie funktioniert es?

Die auf das ESP8266-Board hochgeladene Skizze erstellt darauf einen Webserver, der auf die von der App gesendeten Anfragen antwortet. Die App sendet einfach GET-Anfragen an den Server (ESP8266). Die Farbdaten zum Erstellen der Palette werden als Argumente in der Get-Anfrage gesendet, dasselbe gilt für andere Parameter wie Funken- und Kühlparameter.

Um beispielsweise die Helligkeit einzustellen, wird die folgende Anfrage von der App gesendet

http://192.168.4.1/conf?brightness=224

Es gibt einen Handler für diese Anfrage in der Skizze, der beim Abrufen dieser Anfrage die Helligkeit festlegt. Überprüfen Sie den Code, um mehr zu erfahren.

Android-App

Die Android-App wird mit Phonegap erstellt. Es handelt sich um eine Technologie, mit der Sie plattformübergreifende mobile Apps mithilfe von Webtechnologien (HTML, CSS, Javascript) erstellen können. Sie können den Quellcode erhalten, indem Sie diese Seite besuchen

Sie können dieses und andere tolle Tutorials auf . lesen Offizielle Website von ElectroPeak

Code

  • Feuerwirkungscode
  • Skizzen- und Datenordner
Fire Effect CodeArduino
#include #include #include "FastLED.h"#include "EEPROM.h"#include "FS.h" //erforderlich für SPIFFS#define DATA_PIN 5#define LED_TYPE WS2811#define COLOR_ORDER GRB#define NUM_LEDS 30# define NUM_STRIPS 6#define CHIPSET WS2812B//Adressen um Daten im EEPROM zu speichern um den Zustand der Feuersimulation zu erhalten#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 // Wenn dieser Wert 250 beträgt, gehen wir davon aus, dass wir zuvor im EEPROM gespeichert und Daten von diesen CRGB-LEDs geladen haben[NUM_STRIPS * NUM_LEDS];String inData;uint8_t FPS =100; //FRAMES_PER_SECONDuint8_t SPARKING =150;uint8_t COOLING =90; uint8_t BRIGHTNESS =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; // Wenn wahr, gehen wir zum Speichern in EEprom.unsigned long changeMillis =0; //Änderungen werden 1 Minute nachdem keine Änderung vorgenommen wurde gespeichert, um EEPROM zu vermeiden wear.bool initSetup =true;CRGBPalette16 gPal;ESP8266WebServer server(80); //Webserverobjekt. Hört in Port 80 (Standard für 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 () { Verzögerung (1000); // Vernunftverzögerung FastLED.addLeds(leds, NUM_STRIPS * NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(BRIGHTNESS);}void loop(){ server.handleClient(); //Behandlung eingehender Anfragen if (change) { if (millis() - changeMillis> 60000) { change =false; saveToEEPROM(); } } Feuer(); FastLED.show(); FastLED.delay(1000 / FPS);}void Fire2012WithPalette(int stripNo){ statisches Byte Heat[NUM_STRIPS][NUM_LEDS]; // Schritt 1. Jede Zelle ein wenig abkühlen for( int i =0; i =2; k--) { heat[stripNo][k] =(heat[stripNo] [k – 1] + Wärme[StreifenNr][k – 2] + Wärme[StreifenNr][k – 2])/3; } // Schritt 3. Entzünden Sie zufällig neue 'Funken' von Hitze in der Nähe des Bodens if(random8() =period * 1000) {// speichern Sie das letzte Mal, als Sie die LED blinkten previousMillis =currentMillis; true zurückgeben; aufrechtzuerhalten. Sonst { false zurückgeben; }} EEPROMupdate ungültig (Byte-Adresse, Byte-Wert) { if (EEPROM.read (Adresse) ! =Wert) { EEPROM.write (Adresse, Wert); EEPROM.commit(); } return;}void saveToEEPROM(){ EEPROMupdate(BriAdr, BRIGHTNESS); EEPROMupdate (FpsAdr, FPS); EEPROMupdate (SparkingAdr, SPARKING); EEPROMupdate (KühlenAdr, KÜHLEN); for (uint8_t i =0; i <4; i++) { for (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("Helligkeit") !="") { HELLIGKEIT =str2int(server.arg("Helligkeit")); FastLED.setHelligkeit (HELLIGKEIT); changeMillis =millis(); ändern =wahr; } if (server.arg("fps") !="") { FPS =str2int(server.arg("fps")); changeMillis =millis(); ändern =wahr; } if (server.arg("Sparking") !="") { SPARKING =str2int(server.arg("Sparking")); changeMillis =millis(); ändern =wahr; } if (server.arg("Kühlung") !="") { KÜHLUNG =str2int(server.arg("Kühlung")); changeMillis =millis(); ändern =wahr; } server.sendHeader("Verbindung", "schließen"); server.sendHeader("Access-Control-Allow-Origin", "*"); server.send(200, "text/plain", ""); // Gibt die HTTP-Antwort zurück}void loadConfig () { if (EEPROM.read (EEPROMCheckAdr) ==250) { BRIGHTNESS =EEPROM.read (BriAdr); SPARKING =EEPROM.read (SparkingAdr); KÜHLUNG =EEPROM.read(CoolingAdr); FPS =EEPROM.read (FpsAdr); wenn (FPS ==0) FPS =100; for (uint8_t i =0; i <4; i++) { for (uint8_t j =0; j <3; j++) { csRGB[i][j] =EEPROM.read(i * 3 + j); } } }sonst{ EEPROMupdate(BriAdr,HELLIGKEIT); EEPROMupdate (FpsAdr,FPS); EEPROMupdate(KühlenAdr,KÜHLEN); EEPROMupdate (SparkingAdr, SPARKING); for (uint8_t i =0; i <4; i++) { for (uint8_t j =0; j <3; j++) { EEPROMupdate((i*3+j) , csRGB[i][j]); } } EEPROMupdate(EEPROMCheckAdr, 250); }}void cWiFi () { WiFi.softAP ( "ElectroPeaks Flamme", ""); // Legen Sie hier ein Passwort fest, wenn Sie möchten, z. B. WiFi.softAP ("ElectroPeak's Flame", "12345678"); IPAdresse myIP =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"); server.begin(); //Server starten}
Skizzen- und DatenordnerArduino
Diese Zip-Datei enthält sowohl die Skizzendatei als auch den Datenordner (SPIFFS-Upload)
Keine Vorschau (nur Download).

Kundenspezifische Teile und Gehäuse

eps_flame_android_u5Zy5Bksvp.apk

Herstellungsprozess

  1. Bekämpfung von Waldbränden mit dem IoT
  2. Erstellen Sie mit Samsung SAMIIO, Arduino UNO und Raspberry Pi in wenigen Minuten einen Brandmelder
  3. Einfacher DIY-Baby-Weindetektor mit Raspberry Pi
  4. Brandschaden und -prävention
  5. Brandbekämpfung mit IoT
  6. Enterprise App Design:Ist iOS in Bezug auf die Sicherheit mit Android vergleichbar?
  7. Python String strip() Funktion mit BEISPIEL
  8. Axiom Equipment Group spendet zusammen mit anderen Sponsoren über 11.000 USD an die Oxbow Fire Department
  9. Erstellen eines Personenzählers, der von einer Android-App gesteuert wird
  10. Kapazitiver Fingerabdrucksensor mit einem Arduino oder ESP8266