Entwickler wollten! Wir suchen nach talentierten React- und C ++ - Entwicklern, um dieses Projekt zu helfen. Schauen Sie sich den Code an und wenden Sie sich bei Interesse an [email protected].

Davepl, 9/19/2021
Nightdriverstrip ist ein Quellcodepaket zum Erstellen eines Flash -Programms, das Sie in den ESP32 -Microcontroller hochladen. Es kann bis zu 8 Kanäle von LEDs im WS2812B -Stil fahren, die mit den Chipstiften verbunden sind und ausgefallene Farben und Muster und -designs anzeigen. Es sind zahlreiche Effekte integriert, die so konfiguriert werden können, dass sie auf dem LED-Streifen angezeigt werden, einschließlich Audio-/Musik-/Beat-reaktives Effekte für Module, die mit einem Mikrofon ausgestattet sind. Es kann optional auch Farbdaten für die LEDs in einem einfachen LZ-komprimierten (oder nicht komprimierten) Format über ein TCP/IP-Socket empfangen, das standardmäßig auf Port 49152 geöffnet wird. Der ESP32 hält seine Uhr mithilfe von NTP synchronisiert.
Der Nightdriver kann sowohl Strips mit WS2812B -Stil als auch Matrizen im Hub75 -Stil fahren.
In jüngerer Zeit wurde ein Webinstallateur zu dem Projekt hinzugefügt, mit dem die meisten Nachteileprojekte auf unterstützten Geräten mit nichts als einem Webbrowser geblitzt werden können. Bitte beachten Sie den nächsten Abschnitt, wenn Sie so anfangen möchten.
Es wurde eine Webanwendung zur Verfügung gestellt, mit der die Mehrheit der Nachteileprojekte auf unterstützten Geräten installiert werden kann. Auf diese Weise können Sie ein Projekt auf Ihrem ESP32 -Gerät schnell flashen, eine Verbindung zu WLAN herstellen und es verwenden, ohne sofort mit dem Quellcode arbeiten zu müssen.
Beachten Sie, dass der Installationsprogramm einen Browser benötigt, der Web -Serien unterstützt. Zum Zeitpunkt des Schreibens sind Browser, die solche Unterstützung beinhalten, aktuelle Versionen von Chrome, Edge und Opera.
Bitte befolgen Sie diese Schritte zum Blinken und richten Sie bei unterstützendem WLAN auf Ihrem Gerät ein:
Schließen Sie Ihr Gerät mit einem USB -Kabel mit Ihrem Computer an.
Navigieren Sie in Ihrem Browser zu der folgenden URL: https://plummerssoftwarellc.github.io/nightdriversStrip. Es sollte dann einen Bildschirm anzeigen, der so aussieht: 
Wählen Sie Ihr Gerät (wie "M5stickc Plus") aus der Dropdown-Liste aus. Anschließend wird eine zweite Dropdown mit unterstützten Projekten auf diesem Gerät angezeigt.
Wählen Sie das Projekt aus, das Sie in der zweiten Dropdown-Down-Down-Stelle blinken möchten. Wenn Sie dies tun, wird unten eine Verbindungsschaltfläche angezeigt. Beachten Sie, dass das Etikett jedes Projekts einen Hinweis auf die wichtigsten Funktionen des betreffenden Builds enthält. Die Legende für jede der Feature-Buchstaben ist unterhalb der Dropdown-Projekte des Projekts angezeigt.
Klicken Sie auf die Schaltfläche Verbinden. In einem Dialog wird Sie aufgefordert, einen seriellen Port auszuwählen. Abhängig von Ihrem System kann es nur eine oder eine Liste von ihnen zeigen. Falls mehrere Multiples angezeigt werden, wird es im Allgemeinen das einfache als "USB -Seriennport (COMN)" bezeichnet. Wählen Sie den richtigen Port aus und klicken Sie auf Verbindung.
Ein neuer Dialog wird angezeigt. Eine der Optionen, die es bietet, ist "Installieren Sie <projekt> für <Gerät>". Klicken Sie auf diese Option.
In einem Dialog wird angezeigt, in dem Sie gefragt werden, ob Sie das Gerät löschen möchten. Aktivieren Sie das Kontrollkästchen, wenn Sie das erste Mal Nachteinstreifen auf Ihr Gerät blinken oder eine Reinigungsanlagerung blinken möchten. Dadurch wird alle Einstellungen auf ihre Standardeinstellungen zurückgesetzt. Beachten Sie, dass die WiFi -Konfiguration gelöscht wird, ob Sie sich für das Löschen entscheiden oder nicht. Klicken Sie auf Weiter.
Sie werden nun gebeten, zu bestätigen, dass Sie das Gerät blinken möchten. Klicken Sie auf Installieren.
Ein Dialog wird angezeigt, das Ihnen den Fortschritt der Installation zeigt. Normalerweise dauert dies ungefähr 2 Minuten. Klicken Sie nach Abschluss des Flasens auf Weiter.
Zu diesem Zeitpunkt können vier Dinge passieren:
Wenn Ihr Gerät WLAN nicht unterstützt, können Sie zu Punkt 12 überspringen.
Wählen Sie im Dialogfeld WiFi -Verbindungsinformationen Ihre SSID und Passwort ein oder geben Sie ein. Klicken Sie auf Verbindung. In einigen Fällen erscheint das Dialogfeld WiFi Connection erneut, nachdem tatsächlich eine erfolgreiche Verbindung hergestellt wurde. Klicken Sie in diesem Fall auf Skip. Es ist auch möglich, dass eine Auszeit gemeldet wird, während WiFi tatsächlich erfolgreich miteinander verbunden ist. Klicken Sie in diesem Fall zurück.
Jetzt wird ein Dialog angezeigt, in dem die Details des von Ihnen geblitzten Projekts angezeigt werden. Es bietet auch Optionen, um wieder zu blinken und die Protokolle und Konsole des Geräts anzuzeigen. Wenn Ihr Gerät WLAN unterstützt, können Optionen für die Webanwendung des Geräts (vorausgesetzt, der On-Device-Webserver ist auch aktiviert) oder die WLAN-Einstellungen geändert. Beachten Sie, dass, wenn Sie ein Gerätebild geblitzt haben, das die Webserver/die Webanwendung enthält, eine Minute dauern kann, bis die Verbindung zum WLAN -Netzwerk hergestellt wurde.
Wenn Sie die WLAN -Konfiguration auf einem bereits geblitzten Gerät ändern möchten, verwenden Sie die folgenden Schritte:
Schließen Sie Ihr Gerät mit einem USB -Kabel mit Ihrem Computer an.
Navigieren Sie in Ihrem Browser zu der folgenden URL: https://plummerssoftwarellc.github.io/nightdriversStrip.
Wählen Sie Ihr Gerät (wie "M5stickc Plus") aus der Dropdown-Liste aus. Anschließend wird eine zweite Dropdown mit unterstützten Projekten auf diesem Gerät angezeigt.
Wählen Sie in der zweiten Dropdown-Art das Projekt aus, das Sie zuvor geblitzt haben. Wenn Sie dies tun, wird unten eine Verbindungsschaltfläche angezeigt.
Klicken Sie auf die Schaltfläche Verbinden. In einem Dialog wird Sie aufgefordert, einen seriellen Port auszuwählen. Abhängig von Ihrem System kann es nur eine oder eine Liste von ihnen zeigen. Falls mehrere Multiples angezeigt werden, wird es im Allgemeinen das einfache als "USB -Seriennport (COMN)" bezeichnet. Wählen Sie den richtigen Port aus und klicken Sie auf Verbindung.
Ein neuer Dialog wird angezeigt. Wenn es noch nicht die Optionen "Verbindung zu Wi-Fi" oder "Wi-Fi ändern" anschließt, öffnen Sie das Fenster "Protokolle und Konsole" und warten Sie, bis Protokolllinien angezeigt werden. Schließen Sie das Fenster, indem Sie zurück klicken. Wenn die Option "Verbindung zu Wi-Fi" oder "Wi-Fi ändern" wird, klicken Sie darauf.
Wählen Sie im Dialogfeld WiFi -Verbindungsinformationen Ihre SSID und Passwort ein oder geben Sie ein. Klicken Sie auf Verbindung. In einigen Fällen erscheint das Dialogfeld WiFi Connection erneut, nachdem tatsächlich eine erfolgreiche Verbindung hergestellt wurde. Klicken Sie in diesem Fall auf Skip. Es ist auch möglich, dass eine Auszeit gemeldet wird, während WiFi tatsächlich erfolgreich miteinander verbunden ist. Klicken Sie in diesem Fall zurück.
Die im Installateur enthaltenen Bilder werden mit dem aktuellen Status des Quellcode in diesem Repository erstellt. Wenn es etwas gibt, das Sie in (der Konfiguration) des Projekts ändern möchten, das Sie verwenden möchten, ist es an der Zeit, in die nächste Stufe zu wechseln.
Da die nächste Stufe ziemlich schnell etwas über die Struktur der Anwendung, die Nachtstärke ist, erfordern wird, ist dies möglicherweise ein guter Zeitpunkt, um die Einführung in die Codebasis für Nachtstärke zu lesen.
Auf Geräten mit WLAN kann Nightdriverstrip einen Webserver starten, der die Web -Benutzeroberfläche hostet, die Teil des Projekts ist. Es kann verwendet werden, um zu sehen und zu ändern, welcher Effekt ausgeführt wird, und Live -Leistungsstatistiken des Geräts zu erhalten.
Wenn das Gerät mit aktiviertem Webserver gestartet wird, kann auf die Web -Benutzeroberfläche zugegriffen werden, indem ein Webbrowser geöffnet und die IP -Adresse Ihres Geräts in der Adressleiste eingegeben wird. Nach dem Laden können die Symbole links vom Bildschirm verwendet werden, um die Ansichten innerhalb der Benutzeroberfläche ein- und auszuschalten.
Weitere Informationen zur Web -Benutzeroberfläche finden Sie in seiner eigenen Readme.md.
Neben der Web-Benutzeroberfläche veröffentlicht der Webserver auch eine restliche API. Unter anderem kann eine Reihe von Konfigurationseinstellungen gelesen und geändert werden. Weitere Informationen zur API finden Sie in rest_api.md.
Ich empfehle Ihnen, Folgendes zu tun:
DEMO -Konfiguration. Einige Hinweise auf das, was dafür erforderlich ist, finden Sie unten.globals.h oder platformio.ini wie WiFi und Webserver. Siehe Feature Define unten. Stellen Sie sicher, dass Ihr Wifi -SSID und Ihr Passwort inclyde/secrets.h eingestellt sind, die erstellt werden können, indem eine Kopie von include/secrets.example.h erstellt wird.
Bitte stellen Sie sicher, dass Sie sie einstellen, incused/secrets.h, nicht include/secrets.example.h!
Aktivieren Sie WiFi, indem Sie das Enable_wifi auf 1 in Globalen einstellen.
# define ENABLE_WIFI 1Dies kann auch in der Datei plattformio.ini konfiguriert werden, wie im Abschnitt Abschnitt unten beschrieben.
Diese Definierungen ermöglichen die wichtigsten Merkmale von Nightdriverstrip. Definieren Sie sie in platformio.ini build_flags oder in Global.h. HINWEIS: Einige Defines sind Boardspezifikum, dies ist unten festgestellt.
| Funktion definieren | Beschreibung |
|---|---|
| Enable_wifi | Verbindung zu WLAN herstellen |
| Incoming_wifi_enabled | Akzeptieren eingehender Farbdaten und -befehle |
| Enable_webserver | Schalten Sie den internen Webserver ein |
| TIME_BEFORE_LOCAL | Wie viele Sekunden vor der Lampe zeitlich und zeigt lokale Inhalte |
| Enable_ntp | Stellen Sie die Uhr aus dem Web ein |
| Enable_ota | Akzeptieren Sie über die Air Flash -Updates |
| Hardwarespezifisch | Beschreibung | Unterstützte Boards |
|---|---|---|
| Use_m5Display | Aktivieren Sie die Statistiken auf integriert in LCD angezeigt | M5Stick-C und M5stick-C Plus |
| Use_oled | Aktivieren Sie die Statistiken für eingebaute OLED -Anzeigen | Heltec WiFi Kit 32 |
| Use_lcd | Aktivieren Sie Statistiken, die auf externem ILI9341 LCD angezeigt werden | Wrover32 |
| Use_tftspi | Aktivieren Sie die Statistiken, die auf externem TTGO LCD angezeigt werden | ESP32DEV |
| Enable_audio | Hören Sie auf Audio aus dem Mikrofon und verarbeiten Sie es | M5Stick-C und M5stick-C Plus |
| Enable_remote | IR -Fernbedienung | Benötigt IR -Hardware |
Beispiel in platformio.ini (Präfix der Flags mit -D , z. B. ENABLE_WIFI=1 wird -DENABLE_WIFI=1 )
build_flags = - DENABLE_WIFI =1Beispiel in Global.h::
# define ENABLE_WIFI 1 Um neue Effekte hinzuzufügen, sind Sie:
LEDStripEffect (oder einer vorhandenen Effektklasse) ab, und das gute Zeug tritt in der einzigen wichtigen Funktion auf, Draw() . Schauen Sie sich an, was die eingebauten Effekte tun, aber kurz gesagt, Sie ziehen im Grunde genommen eine Reihe von CRGB-Objekten an, die jeweils ein 24-Bit-Farb-Triplett darstellen. Sobald Sie fertig sind, wird das CRGB -Array an die LEDs gesendet und Sie werden sofort nach dem nächsten Frame gefragt. Ihre Ziehmethode sollte idealerweise etwa 30 ms dauern und delay() , um für das Gleichgewicht zu schlafen, wenn es schneller ist. Sie können im Grunde genommen im Grunde genommen in einer geschäftigen Schleife zeichnen, aber es ist nicht erforderlich.#define effects.h Jede Effektklasse benötigt nur eine Effektnummer. Bitte stellen Sie sicher, dass die von Ihnen ausgewählte Nummer nicht von einer anderen Effektklasse verwendet wird! Weitere Informationen über den Zusammenhang zwischen einer Effektklasse und ihrer zugehörigen Effektzahl finden Sie in effects.h .DEMO die in der Funktion LoadEffectFactories() in effects.cpp erstellt wurde. Das Makro ADD_EFFECT() erwartet die Effektnummer und den Typennamen Ihres neuen Effekts als Parameter. Alle zusätzlichen Parameter werden beim Erstellen des Konstruktors des Effekts übergeben. Es gibt eine globale EffectManager -Instanz, die zuerst die Effekttabelle aus einer JSON -Datei zu Spiffs erstellt, falls vorhanden. Anschließend werden alle anderen Effekte hinzugefügt, die in LoadEffectFactories() registriert sind, jedoch nicht in der JSON -Datei enthalten sind. Anschließend dreht es sich zwischen diesen Effekten mit einer rate, die DEFAULT_EFFECT_INTERVAL kontrolliert wird. Effekte werden nicht benachrichtigt, wenn sie aktiv werden oder nicht. Sie werden nur gebeten, bei Bedarf zu zeichnen.
Jeder LED -Kanal ist mit einer LEDStripGfx -Instanz zugeordnet. _GFX[0] ist der LEDStripGfx , der mit LED_PIN0 usw. zugeordnet ist. Sie können den LED-Puffer von Pin0 erhalten, indem Sie _GFX[0]->leds() aufrufen, und er enthält _GFX[0]->GetLEDCount Pixel. Sie können in den Puffer zeichnen, ohne die Roh -Bytes zu berühren, indem Sie fill_solid , fill_rainbow , setPixel und andere Zeichenfunktionen aufrufen.
Die einfachste Konfiguration, DEMO , geht davon aus, dass Sie einen einzelnen Meter -Streifen mit 144 LEDs und eine mit Ihrem ESP32 verbundene Netzteil haben. Es startet, findet eine einzelne RainbowFillEffect in der LoadEffectFactories() -Funktion () und ruft wiederholt seine Draw() -Methode auf, um das CRGB -Array zu aktualisieren, bevor es an die LEDs gesendet wird. Wenn Sie richtig arbeiten, sollte es eine Rollbogenpalette auf Ihren LED -Streifen zeichnen.
Diese einfachste Konfiguration, die hier einfach als "Demo" bezeichnet wird, wird von einer vom Board spezifischen Build -Umgebung bereitgestellt. Die Liste solcher Umgebungen kann durch Ausführen von 'Python3 Tools/Show_Envs.py' ersichtlich sein, die dem Leser mitteilen würden, dass zum jetzigen Zeitpunkt hardwarespezifische Variationen von 'Demo'::
Diese Build-Typen können durch das Argument "-e" für PIO oder in einer Menüoption im Platformio IDE/VS-Code ausgewählt werden.
Die Effekttabelle wird in regelmäßigen Abständen in einer JSON -Datei zu Spiffs angehalten, um den Stand der Effekte (und in der Tat die gesamte Effektliste) über Neustarts hinweg beizubehalten. Dies ist größtenteils zur Vorbereitung zukünftiger Aktualisierungen von Nightdriverstrip vorbereitet, wobei die Zusammensetzung der Effektlistenkonfiguration einzelner Effekte mithilfe der Geräte -Webanwendung geändert werden kann. Die API -Endpunkte, um dies zu erleichtern, sind bereits verfügbar und für die Verwendung bereit (siehe Geräte -Web -Benutzeroberfläche und API unten.)
Dies macht, dass eine Überschreibung von SerializeToJSON() und einem entsprechenden Deserialisierungskonstruktor für Effekte bereitgestellt werden muss, die mehr als die Eigenschaften bestehen müssen, die standardmäßig von/nach JSON von/nach LEDStripEffect serialisiert werden.
Während des gesamten Projekts ist die Bibliothek für JSON -Handhabung und (DE) Serialisierung Arduinojson. Unter anderem bedeutet dies:
In Übereinstimmung mit der Konvention in Arduinojson muss SerializeToJSON() -Funktionen true zurückkehren, außer wenn eine Arduinojson -Funktion (wie JsonObject::set() ) false zurückgibt, um anzuzeigen, dass sie aus dem Pufferspeicher ausgegangen sind. Jede SerializeToJSON() -Funktion, die false zurückgibt, löst eine Erhöhung des Gesamt -Serialisierungspuffers und einen Neustart des Serialisierungsprozesses aus.
Der Speicher, der für den Serialisierungsvorgang einer einzelnen Klasseninstanz (DE) erforderlich ist, muss im Voraus reserviert werden, indem entweder erstellt wird:
StaticJsonDocument< Buffergröße >() , das den Speicher am Stapel reserviert. Dies kann nur für kleine Puffergrößen (kleiner als 1024 Bytes) verwendet werden.AllocatedJsonDocument( Puffergröße ) , das den Speicher auf dem Haufen reserviert.Wie viel Speicher tatsächlich benötigt wird, hängt von der Anzahl, dem Typ und dem Inhalt der (DE) serialisierten Eigenschaften ab und ist effektiv ein Ratenspiel - was bedeutet, dass die Werte, die Sie im gesamten Codebasis sehen werden, ebenfalls ausgebildete Vermutungen sind. Wenn Eigenschaften, die das letzte Mal in dem erzeugten JSON -Anlauf nicht auftreten, nicht annehmen, dass der Serialisierungsprozess aus dem Pufferspeicher ausgeht und dass der Pufferspeicher somit erhöht werden muss.
Um die Einzelheiten im Zusammenhang mit der Serialisierung von JSON (DE) besser zu verstehen, können Sie sich die jeweiligen Tutorials im Abschnitt "Erster Kontakt" der Arduinojson -Dokumentation ansehen.
Während der Entwicklung kann die (JSON-persistierte) Effektliste auf Ihrem Board die Synchronisierung mit den Effekten, die Sie in effekte addieren.CPP (in den Funktionen LoadEffectFactories() speziell) bis zu einem Punkt, der unordentlich oder ärgerlich ist, aus dem Synchronisieren herauskommen. In diesem Fall können Sie die Effektliste auf der Platine über das Netzwerk auf den Standard zurücksetzen. Damit dies funktioniert, muss das Board mit WLAN verbunden sein und der Webserver muss ausgeführt werden.
Der Reset kann durch Ausführen eines HTTP -Formulars post in http: // <device_ip>/reset mit den folgenden Feldern festgelegt werden: Effektconfig = 1 und Board = 1. Auf Systemen mit "regulärer" Curl verfügbar, sollte der folgende Befehl den Trick ausführen:
curl -d " effectsConfig=1&board=1 " -X POST http:// < device_IP > /resetEs ist möglich, dass die Möglichkeit, diesen Reset durchzuführen, in einem zukünftigen Update zur Web -Benutzeroberfläche hinzugefügt wird.
Darüber hinaus ist es auch möglich, die persistierte Effektliste insgesamt "zu ignorieren" und die Standard -Effekt -Liste immer beim Start zu laden. Die Dokumentation dazu ist in der oben genannten LoadEffectFactories() -Funktion () die oberste Stelle verfügbar.
Wenn Sie einen Effekt entwickeln, bei dem Daten aus dem Internet eingezogen werden müssen, können Sie eine Netzwerkleserfunktion bei der NetworkReader Klasse registrieren, die über die globale Referenz g_ptrSystem->NetworkReader() verfügbar ist. Sie können entweder die PatternSubscribers oder PatternWeather -Effekte als Inspirationsquellen verwenden. Muststocks zieht Live (15-minütige Verzögerungszahlen) von einem privaten Server.
Das Projekt kann mit Plattformio erstellt werden. Es gibt eine Platformio -IDE, die auf dem Visual Studio -Code aufgebaut ist. In IT sind die Befehlszeilen-Plattform-Core-Tools enthalten. Sie können auch selbst installiert werden, wenn Sie es vorziehen, die IDE nicht zu verwenden.
Um die Front-End-Anwendung (die Teil jedes Plattform-Builds ist) zu kompilieren, ist eine aktuelle Version von NodeJs mit NPM erforderlich. Sie können von der NodeJS -Website heruntergeladen werden. Dort finden Sie auch Anweisungen für unterstützte Möglichkeiten zur Installation von NodeJs. Bitte lesen Sie und folgen Sie ihnen.
Beachten Sie , dass die Installation von NodeJs mithilfe des Standardpaket -Managers Ihrer Betriebssystem/Verteilung Sie wahrscheinlich eine viel ältere NodeJS -Version hinterlassen als Sie benötigen.
Die Anwendung wurde auf der Knotenversion 16.15.1 und 18.17.1 mit NPM Version 8.13.2 getestet; Neuere Versionen sollten auch grundsätzlich funktionieren.
Einzelheiten zur Arbeit mit der Frontend -Anwendung finden Sie auf Site/Readme.md.
Wenn entweder die IDE oder der Kern installiert sind, kann Nightdriverstrip aus einer Befehlsschale erstellt werden, indem das Projekt/Repository -Verzeichnis eingeben und den folgenden Befehl ausgeben:
pio run -e demo
Dadurch wird die demo -Konfiguration erstellt.
Wenn Sie einen Fehler erhalten, den
pionicht gefunden hat, müssen Sie ihn möglicherweise zu Ihrem Weg hinzufügen.
Um alle verfügbaren Konfigurationen zu erstellen, verwenden Sie den folgenden Befehl (dies kann eine Weile dauern):
pio run
Um das Dateisystem zu erstellen und hochzuladen, das durch Effekte verwendet werden kann (obwohl derzeit keine), müssen Sie das SPIFFS -Image mit Platformio erstellen und hochladen. Sie können dies über die Plattformio -Benutzeroberfläche oder das pio -Befehlszeilen -Tool verwenden:
pio run --target buildfs --environment <project name>
pio run --target uploadfs --environment <project name>
Dieses Repository enthält eine Reihe von Scrips, um verschiedene Aufgaben während oder nach dem Bau von Projekten auszuführen. Sie sind im tools -Verzeichnis enthalten. Bitte beachten Sie, dass die Skripte erwarten, aus dem Hauptverzeichnis des Projekts gestartet zu werden. Also verwenden Sie:
tools/buddybuild.shAnstatt:
cd tools
./buddybuild.shSchreiben Sie etwas Einfaches, um Farbdaten an den Socket zu senden. Das Format ist sehr einfach: Welcher Kanal, wie viele LEDs Sie zeichnen, wann Sie es zeichnen müssen, und die Farbdaten selbst. Sie können unkomprimierte Daten mit einem Null -Zeitstempel senden, solange Sie den richtigen Header vor Ihren Daten senden, was sehr einfach ist. Daten mit einem Null -Zeitstempel werden nur sofort ohne Pufferung gezogen.
| Bytes | FUNKTION | |
|---|---|---|
| 0, 1 | CommandId | (Setzen Sie es auf 3, das ist WIFI_COMMAND_PIXELDATA64 ) |
| 2, 3 | KanalId | (Setzen Sie es für ein Kanal auf 1, obwohl 0 aus historischen Gründen auch funktioniert) |
| 4 - 7 | Länge | (Anzahl der 24-Bit PIXELS ) |
| 8 - 15 | Sekunden | (Stellen Sie es auf 0 ein) |
| 16 - 24 | Micros | (Stellen Sie es auf 0 ein) |
| 25+ | RGB | (24-Bit-RGB-Farbdaten, eine pro PIXEL oben angegeben) |
Wenn der Chip mit ENABLE_WIFI und INCOMING_WIFI_ENABLED erstellt wird, wird der Chip eine WLAN -Verbindung und eine DHCP -Adresse in Port 49152 geöffnet und auf Pakete warten, die wie oben beschrieben gebildet wurden.
Erstellen Sie eine Reihe von 24 Frames pro Sekunde (oder 30, wenn sie unter 500 LEDs) und den Zeitstempel auf "jetzt" plus 1/2 pro Sekunde einstellen. Senden Sie sie über WLAN an den Chip und sie werden ab sofort 1/2 Sekunde in einem stetigen Strom gezogen, da die Zeitstempel, die Sie jedem Paket gegeben haben, fällig sind.
Vollständige Offenlegung: Als Amazon Associate verdient PlummerSoftWarellc Provision bei qualifizierten Einkäufen. Es wird nicht zum Kaufpreis hinzugefügt und erhöht Ihre Kosten überhaupt nicht. Außerdem werden alle 2021 Gewinne aus dem Garagenkanal des Dave, der diese Verkäufe beinhaltet, an das UW Autism Center gehen.
Anstatt eine komplexe Reihe von Richtlinien zu erstellen, hoffe ich, dass die Zusammenarbeit mit Open-Source-Zusammenarbeit für das Projekt einbringen: Die Leute werden wichtige Funktionen und Fixierungen und Mängel im Code hinzufügen. Wenn sie Funktionen hinzufügen, werden sie dies auf eine Weise tun, die mit der Art und Weise übereinstimmt, wie die Dinge im vorhandenen Code gemacht werden. Sie widersetzen sich dem Drang, alles in ihrem eigenen Bild wiederherzustellen und neu zu schreiben, und setzen stattdessen ihre Bemühungen um die Maximierung der funktionalen Verbesserung ein und reduzieren gleichzeitig den Quellcode -Thrash und die Änderung.
Betrachten wir die inkonsistente Benennung, die festgelegt werden sollte. Einige sind Kamelcase, einige sind pszhungarisch und so weiter, abhängig von der Quelle. Ich würde es vorziehen, dass alles auf einem einzigen Standard -TBD aktualisiert wurde. Bis die TBD bestimmt ist, lehne ich mich zum Win32 -Standard.
Arbeiten Sie beim Arbeiten in einer Funktion im Stil der Funktion. Arbeiten Sie bei der Arbeit an einer Klasse im Stil der Klasse. Arbeiten Sie bei der Arbeit an einer Datei im Stil der Datei. Wenn diese inkonsistent sind, machen Sie alles, was Änderungen minimiert. Stilistische Veränderungen sollten erst nach der Diskussion in der Gruppe eingeführt werden, und im Allgemeinen sollten diese Stiländerung im gesamten Projekt besitzen.
Als nächstes betrachten wir #define s, um den Build zu kontrollieren. Es kann bessere und elegantere Möglichkeiten geben, Dinge zu tun. Es könnte ganze Konfigurationsplattformen geben. Aber ich würde es vorziehen, es einfach zu halten. Und ich definiere einfachste als "am wenigsten, dass ein erfahrener C ++ - Programmierer lernen muss, bevor er mit dem fraglichen Code konstruktiv ist". Ich möchte keine neue Klassenbibliothek lernen, wenn ich sie vermeiden kann!
Eine Lebensdauer der Codierung hat mich gelernt, mich auf der Seite der Einfachheit zu irren. Bitte stellen Sie also keine variadischen Vorlagenkonstrukte ein, es sei denn, sie schrumpfen nachweislich den Quellcode. Alles, was die Komplexität und Länge des Codes wächst, sollte verdächtig sein.
Fügen Sie hinzu, was Sie wollen und/oder müssen Ihre LED -Träume wahr werden. Repariere meine Fehler. Füllen Sie die offensichtlichen Lücken meines Wissens. Was auch immer der Blinken für die wenigsten Teile hat, bekommen meine Stimme. Für jedes Byte von Code und Programmen erhalten Sie nur so viel zusätzliche coole Blinken. Diese Rückgabe wird in Blinkenperbit gemessen, wobei der Ausdruck der Blinkten, den der Code durch die Auswirkungen auf die Quelle (und binäre) fügt, hinzugefügt wird.
Um sich zu replizieren, erstellen Sie das Mesmerizer -Projekt. Löschen Sie dann PIO/Build_cache und erstellen Sie erneut. Nehmen Sie sich die Zeit für den zweiten Build.
ASUS 7995WX [96-CORE, 192-Thread]-> [Davepl, 02.11.2024] 20,73 Sekunden
HP Z6 G5A, 7995WX, 128 GB [96-Core, 192-Thread]-> [Davepl 29.10.2023] 25.270 Sekunden
3970x, 128 GB [32-Core, 64-Thread] Windows11+WSL2/Ubuntu02.04lts-> [Davepl 29.12.2023] 34,292 Sekunden
MAC M1 Ultra Studio [10-Core, 20-Thread]-> [Davepl 29.10.2023] 48.368 Sekunden
Zeit zum Erstellen der Spektrumkonfiguration ( pio run -e spectrum ). Nimmt einen sauberen Build an, nachdem alles installiert und heruntergeladen wurde.
AMD 3970 32 -CORES, 128 GB, RAID SSD -> [Davepl 19.09.2021] 12,93 Sekunden (unter WSL)
AMD 5950X 16 -CORES, 64 GB, SSD -> [Davepl 21.09.2021] 16.90 Sekunden
Apple MacBook Pro M1 Max, 8+2 Kerne, 64 GB, 4TB SSD -> [Davepl 15.12.2021] 20,90 Sekunden
Apple MacBook Air M2, 16 GB, 256 GB SSD -> [Vaaski 28.02.2023] 56,17 Sekunden
MacBook Pro 2020, 8 Kerne 2.4GHz I9, 64 GB, 4TB SSD -> [Davepl 19.09.2021] 34.09 Sekunden
MAC Mini, 4 Perf Cores, 16 GB -> [Davepl 19.19.2021] 39.06 Sekunden
Mac Pro, 6 Kerne, 3,5 GHz, 64 GB, 1 TB SSD -> [Davepl 19.09.2021] 48,42 Sekunden
Xeon Silber, 20 Kerne, 2,1 GHz, 16 GB VM -> [Davepl 10/10/2022] 53.11 Sekunden
Raspberry Pi 4, 64 -Bit Ubuntu LTS, 4 Core, 4 GB -> [Davepl 23/23/2021] 6 min 25 Sekunden
Jetson Nano 2G, 4 Core Arm A57 -> [Davepl 10/04/2021] 2 min 56 Sekunden