Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Bermain dengan Fire Melalui Wi-Fi (ESP8266, NeoPixels &Aplikasi Android)

Komponen dan persediaan

ElectroPeak ESP8266 Serial WIFI Witty Cloud Board
× 1
Neopixels Smart LED Strip (60LED/m strip)
× 3
Konverter Level Logika ElectroPeak
× 1
ElectroPeak 21cm 40P Kawat Jumper Pria Ke Wanita
× 1
Pipa PVC ukuran 60cm 2”
× 1
Kertas kalkir
× 1
Silinder kaca
× 1
catu daya 5V (minimal 9A)
× 1
Arduino Nano R3
× 1

Alat dan mesin yang diperlukan

Pistol lem panas (generik)
Besi solder (generik)

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Anda dapat membaca ini dan tutorial menakjubkan lainnya di Situs web resmi ElectroPeak

Buat efek simulasi api yang keren dengan kontrol nirkabel Wi-Fi. Aplikasi seluler (untuk ponsel pintar Android) dengan antarmuka yang bagus siap dipasang untuk bermain dengan kreasi Anda! Kami juga akan menggunakan Arduino dan ESP8266 untuk mengontrol nyala api. Di akhir proyek ini, Anda akan mempelajari:

  • Cara kerja NeoPixels.
  • Cara memprogram ESP8266 dan mengontrol variabel melalui Wi-Fi
  • Cara membuat efek api keren dengan NeoPixels

Pengantar NeoPixels

LED yang dapat dialamatkan secara individual atau sering disebut NeoPixels telah ada selama beberapa waktu sekarang dan Anda mungkin mengetahuinya tetapi, jika tidak, mereka seperti LED RGB biasa tetapi seperti namanya, warna masing-masing dapat ditangani secara individual. , memungkinkan pembuatan pola dan animasi yang sangat keren. Untuk WS2812b Anda hanya membutuhkan 3 kabel, 2 untuk daya dan 1 untuk data. Artinya, Anda hanya perlu satu pin Arduino gratis untuk mengontrol satu ton LED!

Dalam proyek ini, kita akan menggunakan LED pintar ini untuk menciptakan efek api. Untuk mengontrol LED, kita akan menggunakan library FastLED yang mengagumkan. Kami akan menggunakan contoh sketsa Fire2012 dari perpustakaan yang ditulis oleh Mark Kriegsman. Kami menggunakan 6 strip LED yang masing-masing memiliki 30 LED (total 180 LED) kami menempelkan LED ini pada sepotong pipa PVC dan menempatkannya dalam silinder kaca (silinder kaca ini biasanya digunakan sebagai vas). Kita harus menyebarkan cahaya LED agar terlihat kontinu, untuk itu kita menggunakan kertas kalkir yang memungkinkan cahaya masuk dan menyebarkan cahaya.

Konstruksi

Pertama-tama dapatkan silinder kaca yang tepat, silinder kami memiliki panjang 60cm dan diameter 12cm.

Jika Anda dapat menemukan silinder kaca buram yang akan bagus tetapi jika itu adalah kaca bening Anda dapat menggunakan kertas kalkir untuk menutupi permukaan silinder (baik permukaan dalam atau luar), kertas kalkir melakukan pekerjaan yang baik untuk menyebarkan cahaya dan menghasilkan hasil yang baik.

Setelah mendapatkan silinder kaca ukur panjang bagian dalamnya lalu potong pipa PVC agar pas di dalam silinder. Silinder kaca kami memiliki tinggi 60cm (tidak termasuk alasnya memiliki panjang internal 59cm) jadi kami memotong pipa PVC kami menjadi 59cm. Anda akan menempelkan strip LED pada pipa ini, pipa dengan diameter 4cm akan sempurna.

Selanjutnya kita harus memotong strip led kita menjadi 6 bagian yang sama di sini kita menggunakan strip kepadatan 60LEDs/m (Anda dapat menggunakan kepadatan yang lebih tinggi untuk efek yang lebih baik jika Anda mau) kita menggunakan enam panjang 50cm, itu berarti kita membutuhkan 3 meter. Beri jarak enam panjang sama di sekitar pipa PVC dan tempelkan strip ke pipa. Begini tampilannya.

Untuk strip LED bersama-sama, Anda dapat langsung menyolder kabel ke strip sesuai dengan gambar berikut atau pertama-tama menyolder pin header ke strip dan kemudian menggunakan kabel papan tempat memotong roti untuk menghubungkannya.

Ketika semua sambungan strip LED selesai, Anda harus meletakkan pipa di dalam silinder. Untuk memusatkan pipa di dalam silinder Anda dapat menggunakan busa untuk memotong lingkaran yang memiliki diameter luar sama dengan diameter dalam silinder kaca dan diameter dalam sama dengan diameter luar pipa PVC. Siapkan dua ini untuk setiap sisi pipa. Pasang bagian-bagian ini ke ujungnya dan masukkan pipa ke dalam silinder dengan hati-hati.

Kode

Kami menggunakan Arduino IDE untuk coding dan upload ke ESP8266. Anda harus menggunakan papan yang memiliki ESP8266 dengan SPIFFS 3MB jika Anda ingin mengunggah file perangkat lunak pengontrol di SPIFFS. SPIFFS adalah kependekan dari "Serial Peripheral Interface Flash File System" Anda dapat mengunggah file pengontrol ke memori ini untuk melayani file dari lokasi itu. Dengan melakukan ini, Anda dapat membuka browser Anda (baik di ponsel atau notebook Anda) dan pergi ke alamat ESP Anda (defaultnya adalah 192.168.4.1) dan Anda akan mendapatkan antarmuka pengontrol di browser Anda tanpa harus menginstal aplikasi, jika Anda memiliki iPhone atau iPad ini adalah satu-satunya pilihan Anda.

Unggah sketsa berikut ke papan ESP Anda. Kami membutuhkan perpustakaan FastLED, jadi pertama-tama tambahkan ke Arduino IDE Anda jika Anda belum melakukannya (Anda dapat mengunduhnya di sini). Kode simulasi kebakaran adalah sketsa fire2012 Mark Kriegsman yang dapat Anda temukan dalam contoh. Contoh itu adalah untuk satu strip led tetapi, di sini kami telah memodifikasi kode untuk menggunakan sejumlah strip yang bervariasi. Semakin banyak jumlah strip/led semakin besar efeknya.

Logika simulasi kebakaran dijelaskan dengan jelas dalam file contoh. Jika Anda ingin mengetahui cara kerjanya, baca kode sumber dari contoh tersebut.

#include #include #include "FastLED.h"#include "EEPROM.h"#include "FS.h" //diperlukan untuk SPIFFS#define DATA_PIN 5 #define LED_TYPE WS2811#define COLOR_ORDER GRB#define NUM_LEDS 30#define NUM_STRIPS 6#define CHIPSET WS2812B//alamat untuk menyimpan data ke EEPROM untuk mempertahankan keadaan simulasi kebakaran#define cs0Adr 0#define cs1Adr 3#define cs1Adr 3 9#define BriAdr 15#define FpsAdr 16#define SparkingAdr 17#define CoolingAdr 18#define EEPROMCheckAdr 20 //jika nilai ini adalah 250 kita asumsikan kita sebelumnya telah menyimpan ke EEPROM dan memuat data dari led CRGB tersebut[NUM_STRIPS * NUM_LEDS];String inData;uint8_t FPS =100; //FRAMES_PER_SECONDuint8_t SPARKING =150;uint8_t PENDINGINAN =90; uint8_t BRIGHTNESS =100;uint8_t csRGB[4][3] ={{0, 0, 0}, {255, 0, 0}, {255, 127, 0}, {255, 255, 255}};panjang tidak ditandatangani sebelumnyaMillis =0;perubahan bool =false; //jika benar kita simpan ke EEprom.unsigned long changeMillis =0; //perubahan akan disimpan 1 menit setelah tidak ada perubahan yang diterapkan untuk menghindari EEPROM wear.bool initSetup =true;CRGBPalette16 gPal;ESP8266WebServer server(80); //objek server web. Akan mendengarkan di port 80 (default untuk HTTP)void setup(){ EEPROM.begin(200); cWiFi(); setupFastLED(); memuatKonfigurasi(); 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); // penundaan kewarasan FastLED.addLeds(leds, NUM_STRIPS * NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(KECERAHAN);}void loop(){ server.handleClient(); //Menangani request yang masuk if (change) { if (millis() - changeMillis> 60000) { change =false; simpanToEEPROM(); } } api(); FastLED.show(); FastLED.delay(1000 / FPS);}void Fire2012WithPalette(int stripNo){ panas byte statis[NUM_STRIPS][NUM_LEDS]; // Langkah 1. Dinginkan setiap sel sedikit untuk( int i =0; i =2; k--) { heat[Nostrip][k] =(heat[Nostrip] [k - 1] + panas[Nostrip][k - 2] + panas[Nostrip][k - 2] ) / 3; } // Langkah 3. Secara acak nyalakan 'percikan' panas baru di dekat bagian bawah if( random8() =titik * 1000) { // simpan terakhir kali Anda mengedipkan LED sebelumnyaMillis =saatMillis; kembali benar; } else { kembali salah; }}void EEPROMupdate(byte address, byte value){ if (EEPROM.read(address) !=value) { EEPROM.write(address, value); EEPROM.komit(); } return;}void saveToEEPROM(){ EEPROMupdate(BriAdr, BRIGHTNESS); Pembaruan EEPROM(FpsAdr, FPS); Pembaruan EEPROM(SparkingAdr, SPARKING); Pembaruan EEPROM(CoolingAdr, COOLING); 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 =mili(); ubah =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 =mili(); ubah =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 =mili(); ubah =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 =mili(); change =true;}void handleConf(){ if (server.arg("brightness") !="") { BRIGHTNESS =str2int(server.arg("brightness")); FastLED.setBrightness(KECERAHAN); changeMillis =mili(); ubah =benar; } if (server.arg("fps") !="") { FPS =str2int(server.arg("fps")); changeMillis =mili(); ubah =benar; } if (server.arg("sparking") !="") { SPARKING =str2int(server.arg("sparking")); changeMillis =mili(); ubah =benar; } if (server.arg("pendinginan") !="") { PENDINGINAN =str2int(server.arg("pendinginan")); changeMillis =mili(); ubah =benar; } server.sendHeader("Koneksi", "tutup"); server.sendHeader("Access-Control-Allow-Origin", "*"); server.send(200, "teks/polos", ""); //Mengembalikan respons HTTP}void loadConfig(){ if (EEPROM.read(EEPROMCheckAdr) ==250) { BRIGHTNESS =EEPROM.read(BriAdr); SPARKING =EEPROM.read(SparkingAdr); COOLING =EEPROM.read(CoolingAdr); FPS =EEPROM.read(FpsAdr); jika (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); } } }else{ EEPROMupdate(BriAdr,BRIGHTNESS); Pembaruan EEPROM(FpsAdr,FPS); Pembaruan EEPROM(CoolingAdr,COOLING); Pembaruan EEPROM(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("Api ElektroPeak", ""); //set password di sini jika Anda ingin yaitu WiFi.softAP("ElectroPeak's Flame", "12345678"); IPAddress 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, "/", "usia maks=86400"); server.mulai(); //Mulai server} 

Untuk mengontrol "tampilan dan nuansa" api, ada dua variabel untuk dimainkan:SPARKING dan COOLING, yang dapat Anda kendalikan secara dinamis dalam perangkat lunak pengontrol yang diunggah ke SPIFFS atau aplikasi android yang dapat Anda unduh. Anda juga dapat mengontrol FPS di sini.

Warna api dikendalikan dengan palet warna yang juga dapat diubah melalui perangkat lunak pengontrol (melalui 4 stop warna). Cukup klik/ketuk setiap lingkaran warna yang mewakili perhentian warna untuk menyetel warna, setelah menyetel warna, tekan tutup untuk menutup dialog dan lihat perubahannya.

Bagaimana Mengunggah ke SPIFFS?

Untuk mengunggah file ke memori SPIFFS menggunakan Arduino IDE terlebih dahulu Anda perlu membuat folder bernama "data" di dalam folder sketsa dan menempatkan semua file yang ingin Anda unggah di folder itu. File yang diunggah di sini berisi sketsa dan folder ini.

Selanjutnya, Anda memerlukan plugin pengunggah sistem file Arduino ESP8266 untuk Arduino. Ikuti instruksi di halaman Github-nya dan instal plugin. Saat diinstal, Anda akan menemukan Upload Data Sketsa ESP8266 di bawah alat Tidak bisa. Masukkan ESP Anda ke mode pemrograman dan klik itu. Bersabarlah dan biarkan file diunggah, itu mungkin memakan waktu agak lama. Catatan:setel “kecepatan unggah” ke 921600 agar lebih cepat.

Bagaimana Cara Kerjanya?

Sketsa yang diunggah ke papan ESP8266 membuat server web di sana, yang merespons permintaan yang dikirim dari aplikasi. Aplikasi ini hanya mengirimkan permintaan GET ke server (ESP8266). Data warna untuk membuat palet dikirim sebagai argumen dalam permintaan get, hal yang sama berlaku untuk parameter lain seperti parameter Sparking dan Cooling.

Misalnya, untuk mengatur kecerahan, permintaan berikut dikirim oleh aplikasi

http://192.168.4.1/conf?brightness=224

ada penangan untuk permintaan ini dalam sketsa yang ketika mendapat permintaan ini mengatur kecerahan. Tinjau kode untuk mengetahui lebih lanjut.

Aplikasi Android

Aplikasi Android dibuat menggunakan Phonegap. Ini adalah teknologi yang memungkinkan Anda membuat aplikasi seluler lintas platform menggunakan teknologi web (HTML, CSS, Javascript). Anda bisa mendapatkan kode sumber dengan mengunjungi halaman ini

Anda dapat membaca ini dan tutorial menakjubkan lainnya di Situs web resmi ElectroPeak

Kode

  • Kode Efek Api
  • Folder Sketsa dan Data
Kode Efek ApiArduino
#include #include #include "FastLED.h"#include "EEPROM.h"#include "FS.h" //diperlukan untuk SPIFFS#define DATA_PIN 5#define LED_TYPE WS2811#define COLOR_ORDER GRB#define NUM_LEDS 30# define NUM_STRIPS 6#define CHIPSET WS2812B//alamat untuk menyimpan data ke EEPROM untuk mempertahankan keadaan simulasi kebakaran#define cs0Adr 0#define cs1Adr 3#define cs2Adr 6#define cs3Adr 9#define BriAdr 15#define FpsAdr 16#define FpsAdr 16 #define CoolingAdr 18#define EEPROMCheckAdr 20 //jika nilai ini 250 kita asumsikan kita telah menyimpan sebelumnya ke EEPROM dan memuat data dari led CRGB itu[NUM_STRIPS * NUM_LEDS];String inData;uint8_t FPS =100; //FRAMES_PER_SECONDuint8_t SPARKING =150;uint8_t PENDINGINAN =90; uint8_t BRIGHTNESS =100;uint8_t csRGB[4][3] ={{0, 0, 0}, {255, 0, 0}, {255, 127, 0}, {255, 255, 255}};panjang tidak ditandatangani sebelumnyaMillis =0;perubahan bool =false; //jika benar kita simpan ke EEprom.unsigned long changeMillis =0; //perubahan akan disimpan 1 menit setelah tidak ada perubahan yang diterapkan untuk menghindari EEPROM wear.bool initSetup =true;CRGBPalette16 gPal;ESP8266WebServer server(80); //objek server web. Akan mendengarkan di port 80 (default untuk HTTP)void setup(){ EEPROM.begin(200); cWiFi(); setupFastLED(); memuatKonfigurasi(); 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); // penundaan kewarasan FastLED.addLeds(leds, NUM_STRIPS * NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(KECERAHAN);}void loop(){ server.handleClient(); //Menangani request yang masuk if (change) { if (millis() - changeMillis> 60000) { change =false; simpanToEEPROM(); } } api(); FastLED.show(); FastLED.delay(1000 / FPS);}void Fire2012WithPalette(int stripNo){ panas byte statis[NUM_STRIPS][NUM_LEDS]; // Langkah 1. Dinginkan setiap sel sedikit untuk( int i =0; i =2; k--) { heat[Nostrip][k] =(heat[Nostrip] [k - 1] + panas[Nostrip][k - 2] + panas[Nostrip][k - 2] ) / 3; } // Langkah 3. Secara acak nyalakan 'percikan' panas baru di dekat bagian bawah if( random8() =titik * 1000) { // simpan terakhir kali Anda mengedipkan LED sebelumnyaMillis =saatMillis; kembali benar; } else { kembali salah; }}void EEPROMupdate(byte address, byte value){ if (EEPROM.read(address) !=value) { EEPROM.write(address, value); EEPROM.komit(); } return;}void saveToEEPROM(){ EEPROMupdate(BriAdr, BRIGHTNESS); Pembaruan EEPROM(FpsAdr, FPS); Pembaruan EEPROM(SparkingAdr, SPARKING); Pembaruan EEPROM(CoolingAdr, COOLING); 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 =mili(); ubah =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 =mili(); ubah =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 =mili(); ubah =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 =mili(); change =true;}void handleConf(){ if (server.arg("brightness") !="") { BRIGHTNESS =str2int(server.arg("brightness")); FastLED.setBrightness(KECERAHAN); changeMillis =mili(); ubah =benar; } if (server.arg("fps") !="") { FPS =str2int(server.arg("fps")); changeMillis =mili(); ubah =benar; } if (server.arg("sparking") !="") { SPARKING =str2int(server.arg("sparking")); changeMillis =mili(); ubah =benar; } if (server.arg("pendinginan") !="") { PENDINGINAN =str2int(server.arg("pendinginan")); changeMillis =mili(); ubah =benar; } server.sendHeader("Koneksi", "tutup"); server.sendHeader("Access-Control-Allow-Origin", "*"); server.send(200, "teks/polos", ""); //Mengembalikan respons HTTP}void loadConfig(){ if (EEPROM.read(EEPROMCheckAdr) ==250) { BRIGHTNESS =EEPROM.read(BriAdr); SPARKING =EEPROM.read(SparkingAdr); COOLING =EEPROM.read(CoolingAdr); FPS =EEPROM.read(FpsAdr); jika (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); } } }else{ EEPROMupdate(BriAdr,BRIGHTNESS); Pembaruan EEPROM(FpsAdr,FPS); Pembaruan EEPROM(CoolingAdr,COOLING); Pembaruan EEPROM(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("Api ElektroPeak", ""); //set password di sini jika Anda ingin yaitu WiFi.softAP("ElectroPeak's Flame", "12345678"); IPAddress 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, "/", "usia maks=86400"); server.mulai(); //Mulai server}
Folder Sketsa dan DataArduino
File zip ini berisi file sketsa dan folder data (unggahan SPIFFS)
Tanpa pratinjau (hanya unduhan).

Suku cadang dan penutup khusus

eps_flame_android_u5Zy5Bksvp.apk

Proses manufaktur

  1. Melawan kebakaran hutan dengan IoT
  2. Buat pendeteksi kebakaran dalam hitungan menit dengan Samsung SAMIIO, Arduino UNO, dan Raspberry Pi
  3. Detektor tangisan bayi DIY yang mudah dengan Raspberry Pi
  4. Pencegahan dan Kerusakan Akibat Kebakaran
  5. Pemadam kebakaran dengan IoT
  6. Desain Aplikasi Perusahaan:Apakah iOS Sesuai dengan Android dalam hal Keamanan?
  7. Python String strip() Fungsi dengan CONTOH
  8. Axiom Equipment Group, Bersama Sponsor Lainnya, Sumbangkan Lebih dari $11.000 ke Pemadam Kebakaran Oxbow
  9. Buat Penghitung Orang yang Dikendalikan oleh Aplikasi Android
  10. Sensor Sidik Jari Kapasitif dengan Arduino atau ESP8266