來玩 LED 燈唄:ws2812 / HUB75

自從太陽花看到有人自幹 LED 鋁罐燈

就很想自己做一個,甚至希望有人幫忙寫晶片,當然到最後都不了了之,然而自己的研究其實一直持續著,而這邊單純的寫下歷程

LED 如果要做成 matrix (矩陣) 其實很簡單,其實就是二維的接線法,還有人作出立體的三維,但最大的問題會類似 … Arduino 或是其他版的針腳不夠的啊 … 所以之後就開始找其他解法,後來我的方向轉成製作類似 32 x 32 or 64 x 64 的 LED matrix,來放些 GIF 圖片 / 報個天氣顯示個時間之類的

第一個看到的是 ws2812 / ws2813,3 ~ 4 pin 打天下(4 pin 支援斷點:單點故障),溝通有專用的 protocal(因為少一條 clock 所以對傳輸時間很敏感 … ),每個燈自己內建控制器,控制器很有趣,類似 proxy 扣掉自己要得資訊後再往後傳,且需要外接電阻,所以成本很高,但因為支援全彩( FFFFFF = 3byte )且不閃爍,構造簡單,很多時候都還是一時之選,甚至有人無聊包一包就丟來賣了,類似『Yeelight 彩光燈帶』

但因為 ws2812 成本過高,雖然很不錯但總感覺有其他解法,類似演唱會巨大的 LED 螢幕該怎麼做才好?只有一條線不管 frequency 調多高都會傳到死唄,之後才另外找到 HUB75,在這之前先看個 demo 影片唄?

HUB75 其實是一個協定的名稱,外在 IO 為牛角座 / 線( 8 x 2 = 16 pin ),首先定義一個 chain 的寬度為 1~ 32(如果是官方定義的 4 address 的話)長度就隨便你了,只要你能吃下去?所以如果你要 64 x 64 的 LED 矩陣,就打成 32 x 128 然後中間折一半即可,其實很好理解和方便,只有少數的控制器,使用 Z 字掃描所以會閃爍,控制器超少好製作所以便宜,而到底有多便宜呢?簡單來說 8 x 32 的 ws2182b 矩陣要賣大約 600 台幣,因為你想做正方形 32 x 32 所以大概就是 2400 台幣左右,一片相同尺寸但數量為 64 x 64 的 HUB75 燈板大約 400 台幣能入手 … 好東西不用咪?

其實當初入手 HUB75 就是研究 adafruit 該產品開始的,他們在 Github 上面有整套解法,類似用 C 寫了很多 Pi 可以用的 lib,但他們賣的東西太貴了 … 所以以下,你需要一台 Pi,HUB75 的燈板,HUB75 的牛角線

基本來說入口點應該是從這個 git 開始

裡面有很多說明,類似如何接線有的沒的,事實上一台 Pi 可以接到三個 chain,也就是 32 x 3 的寬度,之後就是編譯起來,然後測試開跑,example 內的東西就可以開始玩

然而因為要用到 GPIO 所以應該都是 root 權限,我額外寫了一個有趣的 proxy,大概就是拿 root 執行後會開 unix socket server 出來,其他人就用該 socket 就不用 root 了,並且寫了一個簡單的協定來讓 golang 可以執行,類似

[[server 端 … 我不是很會寫 C 所以亂拼出來的]]

[[client 端 … golang 端,解 gif 檔出來去 play]]

然而 HUB75 的缺點因為是 Z 字掃描,不像 ws2812 每個燈都有自己的暫存器,所以 Pi 會持續燃燒 CPU … 這邊有趣的地方是該 github 的作者有教你如何把 Pi 的 CPU "保留"不給別的 process 使用,使用的是 isoclcpus 這個指令(表示發現新大陸 X"DD)而這邊不建議用 Pi Zero 來玩 HUB75,即使 adafruit 那個產品是 Pi Zero 來做 demo 的,因為 Pi Zero 是 single core 但 Pi 3 是 4 core … single code 連天氣預報之類的資訊都很難拿到,尤其假設你的一個 CPU 固定會被吃掉 75% 時|||

anyway 目前還在串藍芽,已經都測試完成,還有網頁操控藍芽的部分,之後再發藍芽相關話題了 : )