開發人員想要!我們正在尋找有才華的React和C ++開發人員,以幫助該項目。查看代碼,如果您有興趣,請聯繫[email protected]。

Davepl,9/19/2021
NightDriverStrip是用於構建Flash程序的源代碼包,您可以上傳到ESP32微控制器。它最多可以驅動8個通道的WS2812B樣式LED,並連接到芯片引腳,並在其上顯示精美的顏色,圖案和設計。內置有許多效果,可以配置為在LED帶上顯示,包括配備麥克風的模塊的音頻/音樂/節拍反應效果。它還可以選擇以簡單的LZ壓縮(或非壓縮)格式接收LED的顏色數據,該格式默認在端口49152上打開的TCP/IP插座。ESP32使用NTP將其時鐘保持在同步。
夜總會可以驅動WS2812B樣式條和HUB75樣式矩陣。
最近,已將Web安裝程序添加到該項目中,大多數夜班項目都可以在受支持的設備上閃爍,只使用Web瀏覽器。如果您想開始的話,請參考下一節。
已經提供了Web應用程序,可用於在受支持的設備上安裝大多數夜總會項目。這將使您能夠快速在ESP32設備上刷新一個項目,將其連接到WiFi並開始使用它,而無需立即使用源代碼。
請注意,安裝程序需要一個支持Web串行的瀏覽器。在寫作時,包括此類支持的瀏覽器是Chrome,Edge和Opera的最新版本。
請按照以下步驟進行閃存,如果得到支持,請在您的設備上設置WiFi:
使用USB電纜將設備連接到計算機。
導航到您的瀏覽器中的以下URL:https://plummerssoftwarellc.github.io/night driversstrip。然後,它應該顯示一個看起來像這樣的屏幕: 
從下拉列表中選擇您的設備(例如“ M5Stickc Plus”)。然後將出現第二個帶有支持項目的下拉菜單。
選擇要在第二個下拉列表中閃爍的項目。當您這樣做時,連接按鈕將出現在其下方。請注意,每個項目的標籤都包含有關構建中啟用的密鑰功能的指示。每個功能信件的傳說都顯示在項目下拉下。
單擊“連接”按鈕。對話框將要求您選擇一個串行端口。根據您的系統,它可能僅顯示其中一個或一個列表。如果顯示多個,通常將其稱為“ USB串行端口(COMN)”。選擇正確的端口,然後單擊“連接”。
將顯示一個新的對話框。它提供的選項之一是“安裝<project> for <device>”。單擊該選項。
對話框將顯示您是否要刪除設備。檢查框,如果這是您第一次將Nightriversstrip刷到設備上,或者您想刷新安裝。這將把所有設置重置為默認設置。請注意,無論您是否選擇擦除,將清除WiFi配置。單擊下一步。
現在,您將被要求確認要刷新設備。單擊安裝。
將顯示一個對話框,顯示安裝的進度。通常,這大約需要2分鐘。閃爍完成後,單擊下一步。
在這一點上,可能會發生四件事:
如果您的設備不支持WiFi,則可以跳過點12點。
在WiFi連接信息對話框中,選擇或輸入您的SSID和密碼。單擊連接。在某些情況下,實際建立了連接後,WiFi連接對話框再次出現。在這種情況下,單擊跳過。在WiFi實際上已經成功連接時,也可能會報告超時。在這種情況下,單擊返回。
現在,將出現一個對話框,以顯示您閃爍的項目的詳細信息。它還將提供再次閃爍並顯示設備的日誌和控制台的選項。此外,如果您的設備支持WiFi,則可以使用選項訪問設備的Web應用程序(前提是還啟用了設備的Web服務器)或更改WiFi設置。請注意,如果您刷新了包括Web服務器/Web應用程序的設備映像,則可能需要一分鐘左右的時間才能在與WiFi網絡的連接之後出現。
如果要更改已經閃爍的設備上的WiFi配置,請使用以下步驟:
使用USB電纜將設備連接到計算機。
導航到您的瀏覽器中的以下URL:https://plummerssoftwarellc.github.io/night driversstrip。
從下拉列表中選擇您的設備(例如“ M5Stickc Plus”)。然後將出現第二個帶有支持項目的下拉菜單。
在第二個下拉下方選擇您之前閃爍的項目。當您這樣做時,連接按鈕將出現在其下方。
單擊“連接”按鈕。對話框將要求您選擇一個串行端口。根據您的系統,它可能僅顯示其中一個或一個列表。如果顯示多個,通常將其稱為“ USB串行端口(COMN)”。選擇正確的端口,然後單擊“連接”。
將顯示一個新的對話框。如果尚未顯示“連接到Wi-Fi”或“ Change Wi-Fi”選項,請打開“ Logs&Console”窗口,然後等到日誌線出現。然後單擊回去關閉窗口。顯示“連接到Wi-Fi”或“更改Wi-Fi”選項時,請單擊它。
在WiFi連接信息對話框中,選擇或輸入您的SSID和密碼。單擊連接。在某些情況下,實際建立了連接後,WiFi連接對話框再次出現。在這種情況下,單擊跳過。在WiFi實際上已經成功連接時,也可能會報告超時。在這種情況下,單擊返回。
安裝程序中包含的圖像是使用此存儲庫中源代碼的當前狀態構建的。如果您想更改(配置)您要使用的項目的任何內容,那麼是時候搬到下一階段了。
由於下一個階段將很快需要一些有關夜驅動程序的應用程序結構的了解,因此這可能是閱讀《夜間驅動器》代碼庫的介紹的好時機。
在帶有WiFi的設備上,NightDriverStrip可以啟動一個網絡服務器,該網絡服務器託管項目的一部分。它可用於查看和更改正在運行的效果,並獲取設備的實時性能統計信息。
啟用Web服務器的設備啟動後,可以通過打開Web瀏覽器並在地址欄中鍵入設備的IP地址來訪問Web UI。加載後,屏幕左側的圖標可用於在UI中切換視圖。
有關Web UI的更多信息可以在其自己的readme.md中找到。
除Web UI外,Web服務器還發布了類似REST的API。除其他外,還可以使用它讀取和更改一系列配置設置。有關API的更多信息可在REST_API.MD中獲得。
我建議您執行以下操作:
DEMO配置。可以在下面找到一些關於要做的事情的指示。globals.h或platform.ini文件中啟用功能,例如wifi和web服務器。請參閱以下功能定義。確保將您的wifi ssid和密碼設置在include/secrets.h中,可以通過include/secrets.example.h的副本創建。
請確保您將它們設置在incluce/secrets.h中,而不是include/secrets.example.h!
通過將enable_wifi定義為Globals.h啟用WiFi。
# define ENABLE_WIFI 1這也可以在Platform.Ini文件中配置,如以下功能定義部分所述。
這些定義了啟用Nightriversstrip的主要功能。在Platform.ini的build_flags或Globals.h中定義它們。注意:有些定義是特定於董事會的,這在下面指出。
| 功能定義 | 描述 |
|---|---|
| enable_wifi | 連接到WiFi |
| incoming_wifi_enabled | 接受傳入的顏色數據和命令 |
| enable_weberver | 打開內部網絡服務器 |
| time_before_local | 燈段之前有多少秒鐘,並顯示本地內容 |
| enable_ntp | 從網絡設置時鐘 |
| enable_ota | 接受空氣閃光燈更新 |
| 特定於硬件 | 描述 | 支持的董事會 |
|---|---|---|
| USE_M5DISPLAY | 在內置的LCD上啟用統計顯示 | M5Stick-C和M5Stick-C Plus |
| use_oled | 啟用內置OLED顯示的統計信息顯示 | Heltec WiFi套件32 |
| use_lcd | 在外部ILI9341 LCD上顯示啟用統計信息 | Wrover32 |
| USE_TFTSPI | 在外部TTGO LCD上啟用統計信息顯示 | ESP32DEV |
| enable_audio | 聆聽麥克風的音頻並進行處理 | M5Stick-C和M5Stick-C Plus |
| enable_remote | 紅外遙控器 | 需要紅外硬件 |
platform.ini中的示例(前綴為-D ,例如ENABLE_WIFI=1升入-DENABLE_WIFI=1 )
build_flags = - DENABLE_WIFI =1globals.h:
# define ENABLE_WIFI 1 要添加新的效果,您:
LEDStripEffect (或現有效應類),而好東西發生在唯一重要的功能Draw()中。查看內置效果的作用,但簡而言之,您基本上是在一個CRGB對像中,每個CRGB對象代表一個24位色三重態。完成後,將CRGB數組發送到LED,並立即要求您進行下一個幀。理想情況下,您的抽獎方法應以30ms的範圍約為30ms,並且應delay()以保持平衡,如果更快。您可以在繁忙的循環中反复繪製,但不需要。#define effects.h 。每個效果類僅需要一個效果號,請確保您選擇的數字尚未由其他效果類使用!有關效應類及其相關效應數量之間鏈接的更多信息,請參見effects.h 。DEMO LoadEffectFactories() effects.cpp中創建的效果列表中的效果列表。 ADD_EFFECT()宏預計您的新效果的效果編號和類型名稱作為參數。創建效果的構造函數時,任何其他參數都將傳遞給效果的構造函數。有一個全局EffectManager實例,該實例首先從json文件上創建效果表(如果存在)。然後,它添加了在LoadEffectFactories()中註冊的其他效果(),但未包含在JSON文件中。然後,它以DEFAULT_EFFECT_INTERVAL控制的速率在這些效果之間旋轉。效果在活動中或不活動時不會通知效果,他們只是在需要時被要求繪製。
LED的每個通道都有一個與之關聯的LEDStripGfx實例。 _GFX[0]是與LED_PIN0相關的LEDStripGfx ,依此類推。您可以通過調用_GFX[0]->leds()來獲得PIN0的LED緩衝區,並且它將包含_GFX[0]->GetLEDCount像素。您可以通過調用fill_solid , fill_rainbow , setPixel和其他繪圖功能來繪製緩衝區,而無需觸摸原始字節。
最簡單的配置DEMO假設您有一個144個LED的單儀條和連接到ESP32的電源。它啟動,在LoadEffectFactories()函數中找到一個RainbowFillEffect ,並反複調用其Draw()方法以更新CRGB陣列,然後再將其發送給LED。如果正常工作,則應在LED帶上繪製滾動彩虹調色板。
最簡單的配置在此稱為“演示”,由板特定的構建環境提供。可以通過運行“ Python3 Tools/show_envs.py”來看到此類環境的列表,這將告訴讀者,在撰寫本文時,“演示”的硬件特定變化包括:
這些構建類型可以由“ -e”參數轉換為PIO或在Platformio IDE/VS代碼中的菜單選項中選擇。
效果表持續到定期在Spifts上的JSON文件中,以保留重新啟動的效果狀態(實際上是整個效果列表)。這在很大程度上是為了準備將來更新到Nightriversstrip,其中效果列表的組成可以使用設備Web應用程序更改單個效果的配置。可用的API端點已經可以使用並可以使用(請參閱下面的設備Web UI和API。)
這使得必須為需要(或想要)持久的效果提供SerializeToJSON()和相應的供應構造函數的覆蓋,而不是(de) LEDStripEffect情況下從/到JSON的屬性。
在整個項目中,用於JSON處理和(DE)序列化的庫是Arduinojson。除其他外,這意味著:
與Arduinojson中的約定相一致, SerializeToJSON()函數必須返回true ,除非Arduinojson函數(例如JsonObject::set() )返回false以表明其耗盡了緩衝器內存。返回false任何SerializeToJSON()函數都會觸發整體序列化緩衝區的增加和序列化過程的重新啟動。
單個類實例(DE)序列化操作所需的內存需要事先保留,以創建兩者:
StaticJsonDocument< buffer size >() ,可保留堆棧上的內存。這只能用於小型緩衝尺寸(小於1024個字節)。AllocatedJsonDocument(緩衝區大小) ,可保留內存在堆上。實際需要多少內存取決於(de)序列化屬性的數量,類型和內容,並且實際上是一個猜測遊戲 - 這意味著您在整個代碼庫中都會看到的值也受過教育。當序列化的最後一個屬性未能顯示在生成的JSON中時,可以合理地假設序列化過程無需緩衝存儲器,因此需要增加緩衝區的存儲器。
為了更好地了解與JSON(DE)序列化有關的細節,您可以考慮查看Arduinojson文檔的“第一個聯繫”部分中的各個教程。
例如,在開發過程LoadEffectFactories() ,板上的(JSON掌握的)效果列表可能會與您添加的效果相關。如果發生這種情況,您可以通過網絡將板上的效果列表重置為默認值。為此,董事會必須連接到WiFi,並且網絡服務器必須運行。
可以通過執行http表單帖子到http:// <device_ip>/重置以下字段設置:feffectsconfig = 1 and board = 1來完成重置。在可用“常規”捲髮的系統上,以下命令應解決一個問題:
curl -d " effectsConfig=1&board=1 " -X POST http:// < device_IP > /reset在Web UI的將來更新中,可以添加執行此重置的能力。
此外,還可以完全“忽略”持久效應列表,並始終在啟動時加載標準效應列表。有關如何執行此操作的文檔可用於上述LoadEffectFactories()函數的頂部。
如果您開發了需要從Internet中獲取數據的效果,則可以通過g_ptrSystem->NetworkReader() Global Reference註冊網絡讀取NetworkReader函數。您可以將PatternSubscribers或PatternWeather效應作為靈感來源。 PatternStocks從專用服務器中提取Live(15分鐘延遲)股票報價。
該項目可以使用Platformio構建。有一個Platformio IDE可用,該平台位於Visual Studio代碼之上。其中包括命令行平台核心工具。如果您不想使用IDE,也可以自己安裝它們。
要編譯前端應用程序(這是每個Platformio構建的一部分),需要使用NPM的NODEJS的最新版本。它們可以從Nodejs網站下載。支持安裝nodejs的支持方法的說明也可以在其中提供。請閱讀並關注他們。
請注意,使用操作系統/Distribut的默認軟件包管理器安裝nodejs可能會使您擁有的nodejs版本要比所需的較大。
該應用程序已在節點版本16.15.1和18.17.1上進行了測試,並使用NPM版本8.13.2進行了測試。較新的版本也應原則上起作用。
有關使用前端應用程序工作的詳細信息,請參見站點/readme.md。
當安裝IDE或CORE時,可以通過輸入項目/存儲庫目錄並發出以下命令來從命令外殼構建Nightriversstrip:
pio run -e demo
這將構建demo配置。
如果您發現找不到
pio的錯誤,則可能需要將其添加到您的路徑中。
要構建所有可用的配置,請使用以下命令(這可能需要一段時間):
pio run
為了構建和上傳效果可以使用的文件系統(儘管目前沒有),您將需要使用Platformio構建和上傳Spiffs Image到板的閃光燈。您可以使用Platformio用戶界面或使用pio命令行工具來執行此操作:
pio run --target buildfs --environment <project name>
pio run --target uploadfs --environment <project name>
該存儲庫包含許多在構建項目期間或之後執行各種任務的腳本。它們包括在tools目錄中。請注意,腳本期望從項目的主要目錄開始。因此,使用:
tools/buddybuild.sh而不是:
cd tools
./buddybuild.sh寫一些簡單的東西,將顏色數據發送到插座。格式非常基本:哪個頻道,您繪製了多少個LED,何時繪製它以及顏色數據本身。只要您在數據之前發送正確的標頭,就可以將未壓縮的數據發送未壓縮的數據,這很簡單。具有零時間戳的數據將立即繪製,沒有緩衝。
| 位元組 | 功能 | |
|---|---|---|
| 0,1 | Cresminid | (將其設置為3,是WIFI_COMMAND_PIXELDATA64 ) |
| 2,3 | ChannelID | (將其設置為單個頻道的1,儘管出於歷史原因0也可以工作) |
| 4-7 | 長度 | (設置24位PIXELS的數量) |
| 8-15 | 秒 | (將其設置為0) |
| 16-24 | micros | (將其設置為0) |
| 25+ | RGB | (24位RGB顏色數據,每個PIXEL的長度在上面的長度中指定) |
如果使用ENABLE_WIFI和INCOMING_WIFI_ENABLED構建,則芯片能夠獲得WiFi連接,並且DHCP地址將在端口49152上打開插座,並等待如上所述形成的數據包。
每秒生成一系列24幀(或30幀(如果低於500 LED)),並將時間戳設置為“現在”加上1/2秒。將它們發送到WiFi上的芯片上,從現在開始將它們從穩定的流中繪製為1/2秒,因為您給每個數據包的時間戳到了。
全面披露:作為亞馬遜同事,Plummerssoftwarellc從合格的購買中賺取了佣金。它沒有添加到購買價格中,也不會增加您的成本。另外,包括這些銷售在內的Dave車庫頻道的所有2021利潤都將轉到UW自閉症中心。
我希望開源協作不會為項目帶來一套複雜的準則:人們將在代碼中添加重要功能並修復缺陷和缺點。當他們添加功能時,他們將以與現有代碼中的工作方式相一致的方式進行操作。他們抵制了以自己的形象進行改進和重寫所有內容的衝動,而是將努力努力最大化功能改進,同時減少源代碼thrash和變化。
讓我們考慮不一致的命名,應固定。有些是駱駝,有些是pszhungarian,等等,取決於來源。我更喜歡將其更新為單個標準TBD。在確定TBD之前,我傾向於Win32標準。
在功能中工作時,以功能的方式工作。在課堂上工作時,會以班級的方式工作。在文件上工作時,以文件的樣式工作。如果這些不一致,請盡量減少變化。僅在小組討論之後才能引入風格上的更改,並且通常應該在整個項目中擁有該風格的變化。
接下來,讓我們考慮#define s來控制構建。可能有更好,更優雅的做事方式。可能有整個配置平台。但是我寧願保持簡單。我定義了最簡單的“至少有經驗的C ++程序員在使用有關代碼的建設性之前需要學習”。如果我可以避免,我不想學習新的班級庫!
一生的編碼教會教會我在簡單性的一邊犯錯,因此,除非它們明顯地收縮源代碼,否則請不要引入variadic模板構造。任何增長代碼的複雜性和長度的東西都應懷疑。
添加任何您想要的東西和/或需要使您的LED夢想成真。修復我的失誤。在我所知中填補明顯的空白。最少的最眨眼的東西都會得到我的投票。對於每個代碼和程序的每個字節,您只會得到太多的額外眨眼。該回報以Blinkenperbit測量,閃爍的令人敬畏的量增加了代碼對源的影響(和二進制)的影響。
要復制,請構建Esmerizer項目。然後刪除pio/build_cache並再次構建,花時間進行第二構建。
ASUS 7995WX [96核,192-thread] - > [Davepl,02/11/2024] 20.73秒
HP Z6 G5A,7995WX,128GB [96-CORE,192-THEAREXREAD] - > [DAVEPL 11/29/2023] 25.270秒
3970X,128GB [32核,64-Theard] Windows11+WSL2/ubuntu02.04lts-> [Davepl 11/29/2023] 34.292秒
Mac M1 Ultra Studio [10-core,20-thinead] - > [Davepl 11/29/2023] 48.368秒
是時候構建頻譜配置( pio run -e spectrum )了。在安裝和下載所有內容後,都假設一個乾淨的構建。
AMD 3970 32核,128GB,RAID SSD-> [Davepl 09/19/2021] 12.93秒(在WSL下運行)
AMD 5950x 16核,64GB,SSD-> [Davepl 09/19/2021] 16.90秒
Apple Macbook Pro M1 Max,8+2核,64GB,4TB SSD-> [Davepl 12/15/2021] 20.90秒
Apple MacBook Air M2,16GB,256GB SSD-> [Vaaski 02/28/2023] 56.17秒
MacBook Pro 2020,8核2.4GHz i9,64GB,4TB SSD-> [Davepl 09/19/2021] 34.09秒
Mac mini,4個perf核,16GB-> [davepl 09/19/2021] 39.06秒
Mac Pro,6核,3.5 GHz,64GB,1TB SSD-> [Davepl 09/19/2021] 48.42秒
Xeon Silver,20核,2.1GHz,16GB VM-> [Davepl 10/10/2022] 53.11秒
Raspberry Pi 4,64位Ubuntu LTS,4核,4GB-> [Davepl 09/23/2021] 6分鐘25秒
Jetson Nano 2G,4個核心臂A57-> [davepl 10/04/2021] 2分鐘56秒