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