概述
基于麻雀一號核心板 RW052,即博通的 WIFI 藍牙一體的芯片 BK7252,我制作了一款桌面小工具:時光空間立方。
它可以實現:
1、微信小程序可以通過藍牙配置小立方的參數;
2、晃動立方可以觸發亮屏、亮燈;
3、立方可以通過藍牙配網,連接 WIFI;
4、屏幕上可以顯示:日期時間、實時天氣、名言警句,或者是模仿搖 骰子產生隨機點數;
5、立方內部有呼吸燈和彩虹燈的效果。作為一款桌面小工具,它既可以提示必要的信息,如時間、天氣,又可 以趣味互動,如搖骰子、隨機顯示名言警句,集信息提示與娛樂一體。
外觀則是完美的正方體,每個面在未啟動時就像一面鏡子,啟動后則可 以看到一個無限五彩斑斕的內部空間。放置于辦公桌面,既是一款優雅的裝飾品,又是一款具有實用價值的小巧工具。
整個方案涉及的技術棧有:硬件選型,PCB 設計,RT-Thread 程序, 3D 建模打印,服務器端程序,API 接口對接,微信小程序編寫等等。通過這個作品,鍛煉了我實現產品的能力,讓我對產品設計的不同方面 都加深了理解。
RT-Thread使用情況概述
組件部分:使用了虛擬文件系統、FinSH、netdev 網卡
軟件包:
fal/EasyFlash/littlefs/netutils/cJSON/mbedtls/rt_ota 等
設備驅動:
GPIO/SPI/RTC/WLAN/BLE 等
硬件框架
核心模塊RW052是官方的一個基于 BK7252 芯片的WIFI 藍牙一體的 模組,引出了非常多的引腳,使用起來非常方便,可以直接通過 USB 供電。驅動屏幕使用了模擬 SPI,LCD 是使用了麻雀一號上屏幕廠家的同系列不 同尺寸的屏幕。WS2812 則是使用了硬件 SPI,通過 MOSI 按照時序進行輸出規定協 議的波形,從而驅動 WS2812。
軟件框架說明
程序運行邏輯圖
程序主要文件
軟件方案自我感覺比較簡單,中間使用了部分信號量和互斥量保證線程 同步,整體是按照不同功能模塊進行了文件拆分,方便功能劃分和解耦合。
軟件模塊說明
我這個作品里軟件模塊劃分的比較清晰,各個模塊均獨立為一個單獨文 件,比較好理解。屏幕、藍牙、網絡、GPIO 基本上都是遵循原有的代碼邏 輯進行編寫,邏輯比較清晰。所以這里我重點講一下之前驅動 WS2812 失 敗的原因與解決方案。
之前沒有正確驅動 WS2812 的原因,比較多樣化,比如自以為是的斷 定通過 GPIO+延時函數可以實現 WS2812 的驅動邏輯,后來經過示波器 證明時序完全不在一個量級上;后來使用了 I2C,發現時序非常不好控制, 也作罷;最后使用了 SPI,但是也是經歷了由模擬 SPI 到硬件 SPI 的過程。軟件 SPI 理論上跟模擬 GPIO 沒區別,達不到效果,使用了硬件 SPI 后發 現時序有時候會亂掉。最終使用硬件 SPI+DMA 方式,才得到了最終效果。
至于為什么使用 SPI,是從 WS2812 驅動時序來反推的。
WS2812 的時序屬于單總線式的時序,每一個 bit 都是由一個高電平+ 低電平實現,一個周期要在 1.25 微秒左右。當高電平在 400 納秒,低電 平在 800 納秒左右,則該 bit 為 0,反之為 1。
當 SPI 時鐘設置在一個比較合適的頻率時,一個字節周期剛剛好可以在 1.25 微秒左右,比如 6-8MHz。這樣,只需要用一個字節表示 WS2812 一個 bit 即可。
當然,一切都是可以變通的,我最開始的程序是采用了一個字節表示一 個 bit 的方式,后來發現這種方式不是很穩定,則改成了一個字節表示 2bit。這樣既節省了內存開支,也比之前的時序穩定性略好。經過實際測試,雖然 仍有瑕疵,但較之前版本效果更好一些,所以最后我選擇了這個方案。
代碼地址
GitHubhttps://github.com/illusionlee/lightcube
代碼使用了 MIT 協議,相對較為開放。因為我的一些代碼仍然會有一些 BUG,所以非常期待更多人可以參與進來,issue、pr,開源精神亦在于此 吧!共同完善,爭取每個人都可以擁有屬于自己的時光空間立方,工作閑暇 之余,拿起來晃一晃,能夠體驗到一點點樂趣。
責任編輯:xj
原文標題:【RT-Thread 開源作品秀】時光空間立方
-
開源
+關注
關注
3文章
3247瀏覽量
42400 -
核心板
+關注
關注
5文章
990瀏覽量
29710 -
RT-Thread
+關注
關注
31文章
1272瀏覽量
39919
原文標題:【RT-Thread 開源作品秀】時光空間立方
文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論