Pengembang Diinginkan! Kami mencari pengembang React dan C ++ yang berbakat untuk membantu proyek ini. Lihat kode dan jika Anda tertarik, hubungi [email protected].

DavePl, 9/19/2021
NightDriversTrip adalah paket kode sumber untuk membangun program flash yang Anda unggah ke mikrokontroler ESP32. Ini dapat mengendarai hingga 8 saluran LED gaya WS2812B yang terhubung ke pin chip dan menampilkan warna dan pola mewah dan desain di atasnya. Ada banyak efek yang dibangun yang dapat dikonfigurasi untuk ditampilkan pada strip LED, termasuk efek audio/musik/beat-reaktif untuk modul yang dilengkapi dengan mikrofon. Ini juga dapat secara opsional menerima data warna untuk LED dalam format yang dikompresi LZ sederhana (atau tidak terkompresi) melalui soket TCP/IP yang dibuka secara default pada port 49152. ESP32 menjaga jam tetap dalam sinkronisasi menggunakan NTP.
Nightdriver dapat mengendarai strip gaya WS2812B dan matriks gaya hub75.
Baru -baru ini, penginstal web telah ditambahkan ke proyek yang dengannya sebagian besar proyek nightdriver dapat dilontarkan pada perangkat yang didukung, menggunakan apa pun kecuali browser web. Silakan merujuk ke bagian berikutnya jika ini adalah bagaimana Anda ingin memulai.
Aplikasi web telah tersedia yang dapat digunakan untuk menginstal sebagian besar proyek Nightdriver pada perangkat yang didukung. Ini akan memungkinkan Anda untuk dengan cepat mem -flash proyek pada perangkat ESP32 Anda, menghubungkannya ke WiFi dan mulai menggunakannya tanpa segera harus bekerja dengan kode sumber.
Perhatikan bahwa penginstal memerlukan browser yang mendukung serial web. Pada saat penulisan, browser yang memasukkan dukungan seperti itu adalah versi terbaru dari Chrome, Edge dan Opera.
Harap ikuti langkah -langkah ini untuk berkedip dan, jika didukung, atur wifi di perangkat Anda:
Hubungkan perangkat Anda ke komputer Anda dengan kabel USB.
Arahkan ke URL berikut di browser Anda: https://plummerssoftwarellc.github.io/nightdriverstrip. Kemudian harus menampilkan layar yang terlihat seperti ini: 
Pilih perangkat Anda (seperti "M5Stickc Plus") dari daftar drop-down. Drop-down kedua dengan proyek yang didukung pada perangkat itu kemudian akan muncul.
Pilih proyek yang ingin Anda flash di drop-down kedua. Saat Anda melakukannya, tombol Connect akan muncul di bawahnya. Perhatikan bahwa setiap label proyek menyertakan indikasi fitur utama yang diaktifkan dalam pembuatan yang dimaksud. Legenda untuk masing-masing huruf fitur ditunjukkan di bawah drop-down proyek.
Klik tombol Hubungkan. Dialog akan meminta Anda untuk memilih port serial. Bergantung pada sistem Anda, itu mungkin hanya menunjukkan satu atau daftar mereka. Dalam kasus banyak ditampilkan, umumnya akan menjadi orang yang jelas disebut "USB Serial Port (COMN)". Pilih port yang benar dan klik Hubungkan.
Dialog baru akan ditampilkan. Salah satu opsi yang ditawarkannya adalah "Instal <poject> untuk <Device>". Klik opsi itu.
Dialog akan ditampilkan menanyakan apakah Anda ingin menghapus perangkat. Centang kotak jika ini adalah pertama kalinya Anda mem -flash nightdriverstrip ke perangkat Anda, atau Anda ingin mem -flash instalasi yang bersih. Ini akan mengatur ulang semua pengaturan ke default mereka. Perhatikan bahwa konfigurasi wifi akan dihapus apakah Anda memilih untuk menghapus atau tidak. Klik Berikutnya.
Anda sekarang akan diminta untuk mengonfirmasi bahwa Anda ingin mem -flash perangkat. Klik Instal.
Dialog akan muncul menunjukkan kemajuan instalasi. Biasanya, ini akan memakan waktu sekitar 2 menit. Saat berkedip telah selesai, klik Next.
Pada titik ini, empat hal bisa terjadi:
Jika perangkat Anda tidak mendukung wifi, Anda dapat melewatkan titik 12.
Dalam dialog informasi koneksi WiFi, pilih atau masukkan SSID dan kata sandi Anda. Klik Hubungkan. Dalam beberapa kasus, dialog koneksi WiFi muncul lagi setelah koneksi yang berhasil benar -benar dibuat. Dalam hal ini, klik Skip. Mungkin juga bahwa time-out dilaporkan sementara WiFi sebenarnya berhasil terhubung. Dalam hal ini, klik kembali.
Sekarang, dialog akan muncul yang akan menampilkan detail proyek yang Anda flash. Ini juga akan memberikan opsi untuk berkedip lagi dan menampilkan log & konsol perangkat. Selain itu, jika perangkat Anda mendukung WiFi maka opsi akan tersedia untuk mengunjungi aplikasi web perangkat (asalkan server web on-device juga diaktifkan) atau mengubah pengaturan WiFi. Perhatikan bahwa jika Anda mem -flash gambar perangkat yang menyertakan server web/aplikasi web, mungkin butuh satu menit atau lebih untuk muncul setelah koneksi ke jaringan WiFi telah dibuat.
Jika Anda ingin mengubah konfigurasi WiFi pada perangkat yang sudah terbakar, gunakan langkah -langkah berikut:
Hubungkan perangkat Anda ke komputer Anda dengan kabel USB.
Arahkan ke URL berikut di browser Anda: https://plummerssoftwarellc.github.io/nightdriverstrip.
Pilih perangkat Anda (seperti "M5Stickc Plus") dari daftar drop-down. Drop-down kedua dengan proyek yang didukung pada perangkat itu kemudian akan muncul.
Pilih proyek yang Anda flash sebelumnya, di drop-down kedua. Saat Anda melakukannya, tombol Connect akan muncul di bawahnya.
Klik tombol Hubungkan. Dialog akan meminta Anda untuk memilih port serial. Bergantung pada sistem Anda, itu mungkin hanya menunjukkan satu atau daftar mereka. Dalam kasus banyak ditampilkan, umumnya akan menjadi orang yang jelas disebut "USB Serial Port (COMN)". Pilih port yang benar dan klik Hubungkan.
Dialog baru akan ditampilkan. Jika belum menunjukkan opsi "Connect to Wi-Fi" atau "Ubah Wi-Fi", buka jendela "Log & Console", dan tunggu sampai garis log muncul. Kemudian tutup jendela dengan mengklik kembali. Ketika opsi "Connect to Wi-Fi" atau "Ubah Wi-Fi" ditampilkan, klik.
Dalam dialog informasi koneksi WiFi, pilih atau masukkan SSID dan kata sandi Anda. Klik Hubungkan. Dalam beberapa kasus, dialog koneksi WiFi muncul lagi setelah koneksi yang berhasil benar -benar dibuat. Dalam hal ini, klik Skip. Mungkin juga bahwa time-out dilaporkan sementara WiFi sebenarnya berhasil terhubung. Dalam hal ini, klik kembali.
Gambar yang termasuk dalam penginstal dibangun menggunakan keadaan saat ini dari kode sumber dalam repositori ini. Jika ada sesuatu yang ingin Anda ubah (konfigurasi) proyek yang ingin Anda gunakan, maka sekarang saatnya untuk pindah ke tahap berikutnya.
Karena tahap selanjutnya akan dengan cepat membutuhkan pengetahuan tentang struktur aplikasi yaitu NightdriversTrip, ini mungkin saat yang tepat untuk membaca pengantar basis kode nightdriversTrip.
Pada perangkat dengan WiFi, NightdriversTrip dapat memulai server web yang meng -host Web UI yang merupakan bagian dari proyek. Ini dapat digunakan untuk melihat dan mengubah efek apa yang sedang berjalan, dan mendapatkan statistik kinerja langsung perangkat.
Ketika perangkat dimulai dengan server web diaktifkan, UI Web dapat diakses dengan membuka browser web dan mengetik alamat IP perangkat Anda di bilah alamat. Setelah dimuat, ikon -ikon di sebelah kiri layar dapat digunakan untuk beralih tampilan di dalam dan mematikan UI.
Informasi lebih lanjut tentang Web UI dapat ditemukan di Readme.MD -nya sendiri.
Selain Web UI, server web juga menerbitkan API seperti istirahat. Di antara yang lain, berbagai pengaturan konfigurasi dapat dibaca dan diubah menggunakannya. Informasi lebih lanjut tentang API tersedia di rest_api.md.
Saya sarankan Anda melakukan hal berikut:
DEMO . Beberapa petunjuk tentang apa yang diperlukan untuk melakukan ini dapat ditemukan di bawah ini.globals.h atau platformio.ini seperti wifi dan server web. Lihat Fitur Tentukan di bawah ini. Pastikan WiFi SSID dan kata sandi Anda disetel include/Secrets.h, yang dapat dibuat dengan membuat salinan include/secrets.example.h.
Harap pastikan Anda mengaturnya di include/Secrets.h, tidak di include/secrets.example.h!
Aktifkan wifi dengan mengatur enable_wifi mendefinisikan ke 1 di global.h.
# define ENABLE_WIFI 1Ini juga dapat dikonfigurasi dalam file PlatformIO.ini, seperti yang dijelaskan dalam bagian Fitur Tentukan di bawah ini.
Definisasi ini memungkinkan fitur utama NightdriversTrip. Tentukan mereka di Platformio.ini's build_flags atau di Globals.h. Catatan: Beberapa definisi spesifik papan, ini dicatat di bawah ini.
| Fitur Tentukan | Keterangan |
|---|---|
| Enable_wifi | Terhubung ke wifi |
| InComing_wifi_enabled | Menerima data dan perintah warna yang masuk |
| Enable_webserver | Nyalakan server web internal |
| Time_before_local | Berapa detik sebelum lampu keluar dan menunjukkan konten lokal |
| Enable_ntp | Atur jam dari web |
| Enable_ota | Terima melalui pembaruan flash udara |
| Khusus perangkat keras | Keterangan | Papan yang didukung |
|---|---|---|
| Use_m5display | Aktifkan Tampilan Statistik di LCD bawaan | M5stick-c dan m5stick-c plus |
| Use_oled | Aktifkan Tampilan Statistik di Built In OLED | Heltec Wifi Kit 32 |
| Use_lcd | Aktifkan Tampilan Statistik di LCD ILI9341 Eksternal | Wrover32 |
| Use_tftspi | Aktifkan Tampilan Statistik di LCD TTGO Eksternal | ESP32DEV |
| Enable_audio | Dengarkan audio dari mikrofon dan prosesnya | M5stick-c dan m5stick-c plus |
| Enable_remote | Kontrol Remote IR | Membutuhkan perangkat keras IR |
Contoh dalam platformio.ini (awalan bendera dengan -D , misalnya ENABLE_WIFI=1 menjadi -DENABLE_WIFI=1 )
build_flags = - DENABLE_WIFI =1Contoh di Globals.H:
# define ENABLE_WIFI 1 Untuk menambahkan efek baru, Anda:
LEDStripEffect (atau kelas efek yang ada) dan hal -hal baik terjadi di satu -satunya fungsi penting, Draw() . Lihatlah apa yang dilakukan oleh efek bawaan, tetapi singkatnya Anda pada dasarnya menggambar ke dalam array objek CRGB yang masing-masing mewakili triplet warna 24-bit. Setelah selesai, array CRGB dikirim ke LED dan Anda diminta untuk bingkai berikutnya segera. Metode undian Anda harus memakan waktu sekitar 30ms, idealnya, dan harus delay() untuk tidur untuk keseimbangan jika lebih cepat. Anda dapat menggambar pada dasarnya berulang kali dalam lingkaran yang sibuk, tetapi tidak diperlukan.#define untuk kelas efek Anda untuk effects.h Setiap kelas efek hanya membutuhkan satu nomor efek, dan pastikan nomor yang Anda pilih belum digunakan oleh kelas efek lain! Informasi lebih lanjut tentang tautan antara kelas efek dan angka efek terkait dapat ditemukan dalam effects.h .LoadEffectFactories() secara effects.cpp (di bawah bagian konfigurasi build Anda, seperti DEMO ). Makro ADD_EFFECT() mengharapkan nomor efek dan ketik nama efek baru Anda sebagai parameter. Parameter tambahan apa pun diteruskan ke konstruktor efek saat dibuat. Ada instance Global EffectManager yang pertama kali membuat tabel efek dari file JSON pada spiff, jika ada. Kemudian menambahkan efek lain yang terdaftar di LoadEffectFactories() tetapi tidak termasuk dalam file JSON. Kemudian berputar di antara efek tersebut pada tingkat yang dikendalikan oleh DEFAULT_EFFECT_INTERVAL . Efek tidak diberitahu ketika mereka aktif atau tidak, mereka hanya diminta untuk menggambar saat dibutuhkan.
Setiap saluran LED memiliki instance LEDStripGfx yang terkait dengannya. _GFX[0] adalah LEDStripGfx yang terkait dengan LED_PIN0 , dan sebagainya. Anda bisa mendapatkan buffer LED PIN0 dengan menelepon _GFX[0]->leds() , dan itu akan berisi _GFX[0]->GetLEDCount piksel. Anda dapat menarik ke buffer tanpa pernah menyentuh byte mentah dengan menelepon fill_solid , fill_rainbow , setPixel , dan fungsi gambar lainnya.
Konfigurasi paling sederhana, DEMO , mengasumsikan Anda memiliki strip satu meter dari 144 LED dan catu daya yang terhubung ke ESP32 Anda. Ini boot Draw() menemukan satu RainbowFillEffect LoadEffectFactories() Jika bekerja dengan benar, itu harus menggambar palet pelangi yang bergulir di strip LED Anda.
Konfigurasi paling sederhana itu, yang disebut di sini sederhana 'demo', disediakan oleh lingkungan build spesifik papan. Daftar lingkungan semacam itu dapat dilihat dengan menjalankan 'python3 Tools/show_envs.py', yang akan memberi tahu pembaca bahwa, pada tulisan ini, variasi spesifik perangkat keras 'demo' termasuk:
Tipe build ini dapat dipilih oleh argumen '-e' ke PIO atau dalam opsi menu di dalam kode PlatformIO IDE/VS.
Tabel efek tetap ada pada file JSON pada spiff secara berkala, untuk mempertahankan keadaan efek (dan pada kenyataannya seluruh daftar efek) di seluruh reboot. Ini sebagian besar dalam persiapan untuk pembaruan di masa mendatang ke NightdriversTrip, di mana komposisi konfigurasi daftar efek efek individu dapat diubah menggunakan aplikasi web perangkat. Titik akhir API untuk memfasilitasi ini sudah tersedia dan siap digunakan (lihat Perangkat Web UI dan API, di bawah.)
Hal ini membuat bahwa override SerializeToJSON() dan konstruktor deserialized yang sesuai harus disediakan untuk efek yang dibutuhkan (atau ingin) bertahan lebih dari properti yang diserialisasi dari/ke JSON dengan LEDStripEffect secara default.
Sepanjang proyek, perpustakaan yang digunakan untuk penanganan JSON dan serialisasi (DE) adalah Arduinojson. Di antara yang lain, ini berarti bahwa:
Sejalan dengan konvensi di Arduinojson, fungsi SerializeToJSON() harus mengembalikan true kecuali ketika fungsi Arduinojson (seperti JsonObject::set() ) mengembalikan false untuk menunjukkannya kehabisan memori buffer. Fungsi SerializeToJSON() apa pun yang mengembalikan false akan memicu peningkatan buffer serialisasi keseluruhan dan restart dari proses serialisasi.
Memori yang diperlukan untuk operasi serialisasi instance (DE) kelas individu perlu dicadangkan sebelumnya , dengan membuat keduanya:
StaticJsonDocument< buffer size >() yang memori memori di tumpukan. Ini dapat digunakan untuk ukuran buffer kecil (lebih kecil dari 1024 byte).AllocatedJsonDocument( Ukuran Buffer ) yang mencadangkan memori pada tumpukan.Berapa banyak memori yang sebenarnya dibutuhkan tergantung pada jumlah, jenis, dan isi dari properti serial (DE), dan secara efektif sedikit permainan menebak - yang berarti nilai -nilai yang akan Anda lihat di seluruh basis kode adalah tebakan yang dididik juga. Ketika properti yang serial terakhir gagal muncul di JSON yang dihasilkan, masuk akal untuk mengasumsikan proses serialisasi kehabisan memori buffer dan memori buffer perlu ditingkatkan.
Untuk mendapatkan pemahaman yang lebih baik tentang spesifik yang terkait dengan serialisasi JSON (DE), Anda dapat mempertimbangkan untuk melihat tutorial masing -masing di bagian "kontak pertama" dari dokumentasi Arduinojson.
Misalnya selama pengembangan, daftar efek (json-fersisted) pada papan Anda dapat keluar dari sinkronisasi dengan efek yang Anda tambahkan efek.cpp (dalam fungsi LoadEffectFactories() secara khusus) ke titik itu menjadi berantakan atau menjengkelkan. Jika ini terjadi, Anda dapat mengatur ulang daftar efek pada papan ke default, melalui jaringan. Agar ini berfungsi, dewan harus terhubung ke WiFi dan server web harus dijalankan.
Reset dapat dilakukan dengan melakukan posting formulir http ke http: // <device_ip>/reset dengan bidang berikut set: EffectSconfig = 1 dan board = 1. Pada sistem dengan ikal "biasa" tersedia, perintah berikut harus melakukan trik:
curl -d " effectsConfig=1&board=1 " -X POST http:// < device_IP > /resetMungkin saja kemampuan untuk melakukan reset ini ditambahkan dalam pembaruan di masa mendatang ke UI Web.
Selain itu, juga dimungkinkan untuk "mengabaikan" daftar efek yang bertahan sama sekali dan selalu memuat daftar efek standar saat startup. Dokumentasi tentang cara melakukan ini tersedia di bagian atas fungsi LoadEffectFactories() yang disebutkan di atas.
Jika Anda mengembangkan efek yang mengharuskan data untuk ditarik dari internet maka Anda dapat mendaftarkan fungsi pembaca jaringan dengan kelas NetworkReader , yang tersedia melalui referensi global g_ptrSystem->NetworkReader() . Anda dapat menggunakan Efek PatternSubscribers atau PatternWeather sebagai sumber inspirasi. PatternStocks menarik kutipan stok langsung (penundaan 15 menit) dari server pribadi.
Proyek ini dapat dibangun menggunakan PlatformIO. Ada PlatformIO IDE yang tersedia, yang dibangun di atas kode Visual Studio. Termasuk di dalamnya adalah alat inti platformio baris perintah. Mereka juga dapat diinstal sendiri jika Anda lebih suka tidak menggunakan IDE.
Untuk mengkompilasi aplikasi front-end (yang merupakan bagian dari setiap platformio build) versi terbaru dari NPM dengan NPM diperlukan. Mereka dapat diunduh dari situs web NodeJS. Instruksi untuk cara yang didukung untuk menginstal nodej juga tersedia di sana. Silakan baca dan ikuti mereka.
Perhatikan bahwa menginstal nodeJS menggunakan manajer paket default sistem operasi/distribusi Anda kemungkinan akan membuat Anda dengan versi nodeJS yang jauh lebih tua daripada yang Anda butuhkan.
Aplikasi telah diuji pada Node Versi 16.15.1 dan 18.17.1 dengan NPM Versi 8.13.2; Versi yang lebih baru juga harus bekerja pada prinsipnya.
Untuk detail tentang bekerja dengan aplikasi frontend lihat situs/readme.md.
Ketika IDE atau Core diinstal, NightdriversTrip dapat dibangun dari cangkang perintah dengan memasukkan direktori proyek/repositori dan mengeluarkan perintah berikut:
pio run -e demo
Ini akan membangun konfigurasi demo .
Jika Anda mendapatkan kesalahan yang tidak ditemukan
pio, Anda mungkin perlu menambahkannya ke jalur Anda.
Untuk membangun semua konfigurasi yang tersedia, gunakan perintah berikut (ini mungkin memakan waktu):
pio run
Untuk membangun dan mengunggah sistem file yang dapat digunakan oleh efek (meskipun saat ini tidak ada), Anda perlu membangun dan mengunggah gambar Spiff ke flash papan Anda menggunakan PlatformIO. Anda dapat melakukan ini menggunakan antarmuka pengguna PlatformIO, atau menggunakan alat baris perintah pio :
pio run --target buildfs --environment <project name>
pio run --target uploadfs --environment <project name>
Repositori ini mencakup sejumlah skrip untuk melakukan berbagai tugas selama atau setelah membangun proyek. Mereka termasuk dalam direktori tools . Harap dicatat bahwa skrip berharap akan dimulai dari direktori utama proyek. Jadi, menggunakan:
tools/buddybuild.shAlih-alih:
cd tools
./buddybuild.shTulis sesuatu yang sederhana untuk mengirim data warna ke soket. Formatnya sangat mendasar: saluran mana, berapa banyak LED yang Anda gambar, kapan harus menggambarnya, dan data warna itu sendiri. Anda dapat mengirim data yang tidak terkompresi dengan cap waktu nol selama Anda mengirim header yang benar sebelum data Anda, yang sangat sederhana. Data dengan cap waktu nol hanya akan segera ditarik tanpa buffering.
| Byte | FUNGSI | |
|---|---|---|
| 0, 1 | CommandID | (Atur ke 3, yaitu WIFI_COMMAND_PIXELDATA64 ) |
| 2, 3 | Channelid | (Atur ke 1 untuk saluran tunggal, meskipun 0 juga berfungsi karena alasan historis) |
| 4 - 7 | Panjang | (Jumlah PIXELS 24-bit yang ditetapkan) |
| 8 - 15 | Detik | (Atur ke 0) |
| 16 - 24 | Mikro | (Atur ke 0) |
| 25+ | RGB | (Data warna RGB 24-bit, satu per PIXEL yang ditentukan panjangnya di atas) |
Jika dibangun dengan ENABLE_WIFI dan INCOMING_WIFI_ENABLED , jika chip bisa mendapatkan koneksi wifi dan alamat DHCP itu akan membuka soket pada port 49152 dan menunggu paket yang dibentuk seperti dijelaskan di atas.
Hasilkan serangkaian 24 frame per detik (atau 30 jika di bawah 500 LED) dan atur stempel waktu menjadi "sekarang" ditambah 1/2 per detik. Kirimkan mereka ke chip melalui wifi dan mereka akan ditarik 1/2 detik dari sekarang dalam aliran yang stabil sebagai cap waktu yang Anda berikan kepada setiap paket yang akan jatuh tempo.
Pengungkapan Lengkap: Sebagai Associate Amazon, PlummersSoftWarellc mendapatkan komisi dari pembelian yang memenuhi syarat. Itu tidak ditambahkan ke harga pembelian, dan tidak meningkatkan biaya sama sekali. Plus, semua 2021 keuntungan dari saluran Garage Dave, yang mencakup penjualan ini, akan pergi ke UW Autism Center.
Daripada menghasilkan serangkaian pedoman yang kompleks, inilah yang saya harap akan dibawa kolaborasi open-source ke proyek: bahwa orang-orang akan menambahkan fitur-fitur penting dan memperbaiki cacat dan kekurangan dalam kode. Ketika mereka menambahkan fitur, mereka akan melakukannya dengan cara yang konsisten dengan cara hal -hal dilakukan dalam kode yang ada. Mereka menahan keinginan untuk meneliti dan menulis ulang segala sesuatu dalam citra mereka sendiri dan sebagai gantinya melakukan upaya mereka untuk memaksimalkan peningkatan fungsional sambil mengurangi kode sumber meronta -ronta dan berubah.
Mari kita pertimbangkan penamaan yang tidak konsisten, yang harus diperbaiki. Beberapa unta, beberapa adalah pszhungaria, dan sebagainya, tergantung pada sumbernya. Saya lebih suka semuanya diperbarui ke TBD standar tunggal. Sampai TBD ditentukan, saya condong ke standar Win32.
Saat bekerja dalam suatu fungsi, bekerja dengan gaya fungsi. Saat bekerja di kelas, bekerja dengan gaya kelas. Saat mengerjakan file, kerjakan dengan gaya file. Jika itu tidak konsisten, lakukan apa pun yang meminimalkan perubahan. Perubahan gaya hanya boleh diperkenalkan setelah diskusi dalam grup, dan umumnya harus memiliki perubahan gaya di seluruh proyek.
Selanjutnya, mari kita pertimbangkan #define S untuk mengendalikan build. Mungkin ada cara yang lebih baik dan lebih elegan dalam melakukan sesuatu. Mungkin ada seluruh platform konfigurasi. Tapi saya lebih suka membuatnya tetap sederhana. Dan saya mendefinisikan paling sederhana untuk menjadi "paling tidak bahwa seorang programmer C ++ yang berpengalaman perlu belajar sebelum konstruktif dengan kode yang dimaksud". Saya tidak ingin mempelajari perpustakaan kelas baru jika saya bisa menghindarinya!
Coding seumur hidup telah mengajarkan saya untuk melakukan kesalahan di sisi kesederhanaan, jadi tolong jangan memperkenalkan konstruksi template variadik kecuali mereka terbukti mengecilkan kode sumber. Apa pun yang menumbuhkan kompleksitas dan panjang kode harus dicurigai.
Tambahkan apa pun yang Anda inginkan dan/atau perlu mewujudkan impian LED Anda. Perbaiki kesalahan saya. Isi kesenjangan yang jelas dalam pengetahuan saya. Apa pun yang paling berkedip untuk bit paling sedikit mendapatkan suara saya. Anda hanya mendapatkan begitu banyak blinken keren tambahan untuk setiap byte kode dan program. Pengembalian itu diukur dalam blinkenperbit, jumlah kedahsyatan berkedip yang ditambahkan kode dibagi oleh dampak pada sumber (dan biner).
Untuk mereplikasi, membangun proyek Mesmerizer. Kemudian hapus pio/build_cache dan bangun lagi, luangkan waktu untuk build kedua.
ASUS 7995WX [96-core, 192-thread]-> [DavePl, 02/11/2024] 20.73 detik
HP Z6 G5A, 7995WX, 128GB [96-core, 192-thread]-> [DavePL 11/29/2023] 25.270 detik
3970x, 128GB [32-core, 64-thread] Windows11+WSL2/UBUNTU02.04LTS-> [DavePL 11/29/2023] 34.292 detik
Mac M1 Ultra Studio [10-core, 20-thread]-> [DavePL 11/29/2023] 48.368 detik
Waktu untuk membangun spektrum konfigurasi ( pio run -e spectrum ). Mengasumsikan build bersih setelah semuanya telah diinstal dan diunduh.
AMD 3970 32 -CORES, 128GB, RAID SSD -> [DavePL 09/19/2021] 12.93 detik (berjalan di bawah WSL)
AMD 5950X 16 -CORES, 64GB, SSD -> [DavePL 09/19/2021] 16.90 detik
Apple MacBook Pro M1 Max, 8+2 core, 64GB, 4TB SSD -> [DavePL 12/15/2021] 20.90 detik
Apple MacBook Air M2, 16GB, 256GB SSD -> [Vaaski 02/28/2023] 56.17 detik
MacBook Pro 2020, 8 core 2.4GHz I9, 64GB, 4TB SSD -> [DavePL 09/19/2021] 34.09 detik
Mac Mini, 4 Core Perf, 16GB -> [DavePL 09/19/2021] 39.06 detik
Mac Pro, 6 core, 3.5 GHz, 64GB, 1TB SSD -> [DavePL 09/19/2021] 48.42 detik
Xeon Silver, 20 Core, 2.1GHz, 16GB VM -> [DavePL 10/10/2022] 53.11 detik
Raspberry Pi 4, 64 -Bit Ubuntu LTS, 4 Core, 4GB -> [DavePL 09/23/2021] 6 Min 25 Detik
Jetson Nano 2G, 4 Core Arm A57 -> [DavePL 10/04/2021] 2 min 56 detik