UINK 墨水屏 U 盤+ 電子書
60 多年過去了,盡管輝光管已經停產,有很多工程師仍然對它情有獨鐘。我用 8 塊液晶顯示屏制作了一個擬輝光管時鐘,感受復古元素的美感,表達對過去經典的敬意。
出于日常工作與計算機打交道的需要,上班族幾乎每天都要隨身攜帶U盤,于是我就想有沒有可能設計一款屬于自己與眾不同的U盤呢?恰好之前做過墨水屏項目,于是我開始嘗試把二者結合到一起,就這樣UINK項目應運而生,其中的“U”代表U盤,而“INK”則是墨水屏的縮寫。
硬件介紹
UINK 墨水屏 U 盤 + 電子書融合存儲與閱讀功能,采用雙核主控驅動低功耗墨水屏,支持數周續航。集成 USB 3.0 高速接口與智能擴展芯片,兼容快充與大容量電池,滿足多設備連接需求。支持 Micro SD 卡與即插 U 盤雙模存儲,實體按鍵搭配觸感反饋優化電子書操作。緊湊結構整合閱讀、存儲與外設擴展功能,適配商務及戶外場景,以超長續航、高兼容性和便攜性為核心優勢,突破傳統設備功能邊界。本項目中使用到的主要硬件,以及硬件間的連接關系如圖 1所示,大家可以掃描目錄頁電子資源二維碼獲取電路圖。
本項目使用的主要元器件清單見附表。
顯示屏
想要完成這個項目,需要用到一款大小接近普通 U 盤的墨水屏,經過尋找,我最終使用了一款0.97 英寸的黑白雙色墨水屏。這款顯示屏分辨率大小為 184 像素 ×88 像素,局部畫面刷新時間為0.3s,全部畫面刷新時間為 4s,通過 SPI 接口與主控進行通信,這款顯示屏可以使用通用的墨水屏驅動電路進行驅動。
主控
為了能夠通過 Wi-Fi 或者藍牙連接的方式來設置顯示內容和傳遞文件,我選擇了同時支持 Wi-Fi和藍牙通信的 ESP32 模塊作為主控。ESP32 有很多型號,本項目選擇了小巧的 ESP32-MINI-1,這款芯片是雙核 32 位 240 MHz 的配置。
讀卡芯片
UINK 選擇 Micro SD 卡作為其存儲介質,這是因為 Micro SD 卡有豐富的容量和速度可以做個性化的選擇,且穩定性也比較好。隨后,我順其自然找了 GL3224 芯片作為 Micro SD 卡的讀卡芯片。U 盤讀寫速度肯定是關鍵的指標之一,而 GL3224可以支持 Micro SD 卡且達到 USB 3.0 的傳輸速度,超過市面上大部分配備 USB2.0 接口的普通 U 盤。
USB轉串口芯片
出 于 程 序 下 載 和 調 試 的 考 慮, 我 選 擇 了CH340K 作為串口芯片。CH340K 內置了 3 個二極管,它們用于防止獨立供電時 ESP32 通過 I/O 引腳對 CH340K 的電流倒灌,從而有效降低 UINK 在休眠狀態下的功耗。當 CH340K 與三極管搭配時,可以實現自動下載程序。
HUB芯片
因為 UINK 只有一個 USB 接口,卻需要實現U 盤和 ESP32 串口的同時掛載,采用 HUB 芯片SL2.1A 來生成兩路 USB 通道,分別供給它們使用。這樣的連接方式就能實現同時掛載 USB3.0 的Micro SD 卡和 USB2.0 的串口了。為了確保 HUB芯片的穩定運行,在電路設計上我還搭配了外置晶體振蕩器。
充電和穩壓芯片
UINK 選 擇 了 TP4057 作 為 充 電 管 理 芯 片,TP4057 可以給電池提供最大 500mA 的充電電流,當輸入電壓斷開時會進入睡眠低功耗狀態,此時電池漏電流將降到 1μA 以下。同時搭配了 RT9013-33GB 芯片作為穩壓芯片,它可以提供最大 500mA的輸出電流,25μA 的靜態電流也比較低。這樣的組合足夠給 UINK 提供工作所需的電壓和電流了。
PCB設計
為了方便后續迭代升級,我把 PCB 分拆成 U 盤部分和墨水屏部分(見圖 2)來設計,兩個部分之間再通過板對板連接器進行連接。UINK 的 PCB 設計中,有 3 個需要注意的要點。第一,ESP32 模塊的天線下方不能覆銅,也不要布線,否則會對天線的信號造成影響;第二,USB 接口的所有信號引腳都要做等長差分布線,否則會極大地影響 U 盤的讀寫速度;第三,12MHz 晶體振蕩器下方盡量不要布線,而且要做“包地”處理,以免晶體振蕩器工作的時候對其他線路上的信號造成干擾。
外殼設計
出于保護電器元器件的考慮,設計出與 PCB大小相匹配的外殼,我先導出了電路板的 3D 模型,然后使用 CREO 三維設計軟件對比 PCB 大小對前后蓋、USB 蓋和按鍵帽進行了建模(見圖 3)。避免拿著硌手,我把前后蓋和 USB 蓋都做了倒圓角處理。因為 U 盤工作的時候,GL3224 和 SL2.1A 等芯片發熱較大,所以外殼側邊做了打孔處理,一方面可以增加散熱,另一方面也可以增加摩擦。為了降低 USB 蓋質量,除了側面的打孔,內部也做了鏤空處理。為了盡可能縮小體積,前后蓋都沒有設計螺釘孔,而是設計了微小的卡扣來進行連接。建立好的模型通過光固化 3D 打印出來后,經過測試,組裝好的外殼連接得非常穩固。
界面設計
因為墨水屏較小,分辨率只有 184 像素 ×88像素,所以在設計桌面時,我把每個圖標大小設計成 40 像素 ×40 像素,每屏默認顯示 3 個圖標。圖標顯示在顯示屏中間區域,圖標下方顯示名稱,上方則顯示開啟中的功能標志和電量信息,UINK 桌面如圖 4 所示。我使用了線框來圈住被選中的 App,按下 UINK 上方按鍵切換選擇 App,按下下方按鍵進入 App。
對于比較簡單的 App,并沒有設計專門的界面,而是通過彈窗來進行交互,比如運行“信息”App 后,會彈出彈窗(見圖 5),顯示 CPU 頻率等基礎信息。
重要的 App 打開后會進入對應的界面,比如“天氣”App 在成功獲取天氣信息后會進入圖 6 所示界面。因為顯示屏大小限制,選擇了地區、天氣圖標、天氣信息和溫度進行顯示,并添加了背景壁紙來美化界面。
程序設計
UINK 項目的程序使用了 Arduino IDE 進行開發,在網絡上能找到很多關于 ESP32 在 Arduino環境中編程的參考資料。本項目程序的基本框架如圖 7 所示,主要由驅動層、通用層和調度層組成。驅動層封裝了墨水屏等驅動,通用層封裝了一些供各個 App 調用的基礎功能,比如按鍵、NVS 存儲等。而調度層主要負責各個 App 的阻塞、恢復和跳轉等。
在這個項目中,可以基于 FreeRTOS 多線程實現了 UINK 新功能的開發。這樣的好處是,當需要添加新功能時,幾乎不用修改原程序,只需新建一個App 頁面,再基于基礎的 App 模板來編寫新的功能即可。而UINK 在系統啟動時會把新 App 的圖標加載到桌面上,并自動創建對應的任務。為了實現上述的效果,我先編寫了最基礎的實現案例,具體如程序 1 所示,整個 UINK 項目都基于這個案例的框架擴展而來。
有了上面程序作為基礎后,就可以在 App 頁面快速編寫出 App 的新應用程序了,案例如程序 2所示。
在以上的 App 應用程序中,系統啟動時所有App 會同時運行。因此,當多個 App 嘗試訪問同一硬件資源或變量時,可能會引發沖突。FreeRTOS操作系統提供了互斥鎖(Mutex)機制,專門用于處理這類問題。我針對上述程序進行了優化:引入了一個互斥鎖。當桌面某個 App 被激活時,它將獲得“鑰匙”以“解鎖”,并執行其程序,而其他App 則全部暫停執行,等待“鑰匙”被釋放。通過設計互斥鎖,在 UINK 中始終只有一個 App 能拿到鑰匙,從而避免了 App 之間出現沖突。
接下來請欣賞一下豐富有趣的 App 吧!其中“閱讀”App(見圖 8),可以隨時隨地讀取格式為.txt 的文檔或者小說,關閉界面會自動保存書簽,下次打開時能夠自動恢復閱讀進度。“新聞”App(見圖 9)則可以在聯網狀態下自動獲取當日的新聞簡報。“翻頁筆”App 通過開啟藍牙并連接計算機,能夠實現播放 PPT 或調節音量等功能。“輔屏”App 在連接計算機后,可以監控計算機CPU/GPU的工作情況。其他 App 還有“天氣”“計時器”“網絡”“相冊”等,這些 App 極大地豐富了 UINK 的趣味性和實用性。
結語
在 UINK 項目的設計過程中,并不是一帆風順,上述的方案其實已經是 UINK 的第二代設計。初代的 UINK 并沒有集成電池和配套的充電、穩壓電路,而是依賴計算機供電來驅動墨水屏。在測試過程中,我發現墨水屏刷新未完成時斷開連接會導致顯示異常,所以才引入了電池和對應的充 / 放電穩壓電路。與初代相比,二代的設計上還有一個很大的區別。初代在設計時為了保證計算機和 ESP32 端都能訪問 U 盤,但是 ESP32 在讀取大容量和高速的Micro SD 卡時存在限制。為了實現高速大容量 U 盤的設計,不得不放棄了 ESP32 端對 U 盤內容的讀寫和管理功能。
盡管第二代 UINK 比起第一代有所進步,但也還有不少改進的空間。比如,電池續航能力不足,U 盤工作時的發熱較大,以及 PCB 布局不合理導致的焊接困難等。我將繼續優化這些方面,讓 UINK 成為更加有趣又實用的作品。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.