DIY 開源智能手錶(選螢幕篇)
Toby
Toby

最近因為各種原因想買一只智能(慧)手錶,可是由於我只喜歡方形的,所以剩下的選擇大概只有智慧手環、大號智慧手環跟 Apple Watch 可以選了。嘛,其實除了這些還有其他的啦,然而市場上就一堆很奇怪的選擇都沒一個完全對得上我想要的東西。

  • 小米手環 8 Pro / 華為手環 8 :性價比跟功能都不錯,可是螢幕是像一般手環般長方形的不是方形
  • Venu Sq 2:功能超棒,但是這個配色的品味只能說很獨特(?
  • Fitbit (Google 旗下)Versa 4:這外形和黑邊遠看還以為是玩具
  • Apple Watch SE:功能和外形都很棒,就是只支持 iOS 跟需要每天一充

說實話我覺得最好看的設計一定是屬於 Sony 的 Smartwatch 3 了。如果把這個設計換上最新的 AMOLED 螢幕和把那個用久了會黏手的 rubber wrist band 換成其他材質(如 silicon / TPU)就更完美了。

所以作為一個 DIY 愛好者,很自然的我會去想:假設我要自己做一只智能手錶的話,我會怎樣設計呢?首先,我想到的大概是以下的一些技術規格:

  • 基於 ESP32 C3 的方案(在寫本文的時候最新支援 BLE + WiFi 的 MCU)
  • AMOLED 螢幕 + 環境光傳感器(自動亮度調整)
  • 內置基本的傳感器(光學心跳 + 血氧、accelerometer(步數)、gyroscope(移動距離),如果有空位的話可以再塞個地磁 sensor 做指南針之類的)

然而有一些我也很想做的部分,是現在很多便宜的智能手錶沒有的

  • 無線充電(對,現在很多大號手環還是在用磁石彈針來充電)
  • Cloud First 資料傳輸(就是以 WiFi 為先,資料先到伺服器再同步到其他手機和裝置,有點像 ArozOS 的設計邏輯)
  • 開源、可由使用者自行編程(基於 ESP32 Arduino 內核 + LVGL?)

螢幕選擇

要做到上面的東西其實不難,最難的部分應該說是螢幕。螢幕這東西不像 電路板 可以隨便畫一畫送出去就能做,而是需要很大量的定制才會有這樣的產品。所以在設計這只手錶的電路板之前,就要先決定好手錶的外殼大小,而外殼大小就是取決於螢幕大小。

我覺得我也不是第一個遇到這樣困難的開發者。例如說著名的 Pebble 智能手錶之所以是長這樣是完全因為生產它的公司被 Sharp 生產的 Memory LCD display (1.33 inch)所限制,所以只能夠圍繞著這個當時唯一一片 high refresh rate 又省電的黑白螢幕來開發整個產品。

初代 Pebble 智能手錶
SHARP 1.33 inch Memory LCD display

雖然說現在很多智能手錶的出現而讓市場上多了很多 1.3 – 1.9 寸的螢幕,但是這又產生出另一堆問題:

  • 便宜的智能手錶很多時候都會使用 TFT (IPS)螢幕
  • 大部分現有的 AMOLED 螢幕都是圓的
  • 很多做螢幕的廠商都只做螢幕、做電容觸控層的都只做觸控層、要找到非現有產品在用的螢幕總成很困難

單單是後兩個問題就把我能選擇的螢幕大小限制住了。把圓的 AMOLED 跟沒有觸控的去除掉之後,剩下的就只有 1.69 inch ,在開源 smartwatch project 很常見到的 waveshare 模組以外就差不多沒其他選擇了。

不過不得不說,這 1.69 雖然在黑色背景的畫面下看上去還不錯,但是一但亮起來你就會發現它黑邊粗得要死,還要上下闊度不同!(噴血

AMOLED 螢幕最佳選

然後就到這個,這是我在某中國的螢幕供應商那邊看到這片要價快 6 美元的 1.78 寸 AMOLED 螢幕,368 * 448 pixel

https://www.dwo.net.cn/pd.jsp?id=11921

這個數字是不是有點眼熟,沒錯,這就是 Apple Watch SE 44mm 在用的那一片螢幕(

上下黑邊總於是一樣的了

只是說這片螢幕要用 ESP32 驅動會有點小問題:這東西只支援 SPI、QSPI 跟 MIPI DSI。MIPI DSI 先不用說了(這東西要用 arm 處理器才推得動),剩下的只有 SPI 跟 QSPI 能用。SPI 的問題在於即使是 ESP32 用 SPI half_speed (最高 80Mhz,但是考慮到 FreeRTOS 後面還有其他東西要跑,先把一半的 CPU cycle 預留給其他 vTasks 好了)速度來驅動它,你還是會看到動畫像 ppt 一樣(我猜的),但是我把計算資料塞給 chatGPT 後它也告訴我大概只能跑到 15.16 FPS,所以應該是肉眼可見的卡(?

這樣我就剩下 QSPI 可以選擇了。QSPI 大概就是拿四個針腳來推資料,理論上應該會快上不少。ChatGPT 說大概能推到 60fps,但是我先保守估計抓個 30 fps 好了,但是這個也是超過 24fps,理論上我應該能看到暢順的動畫效果(?

反而說比較大的問題是,ESP32 Arduino 好像沒有 QSPI 支援。所以我大概需要來手動把 QSPI protocol bit bang 出來了,還好這家廠商有 ESP32 評估板,我把它們的 example code 下載來看之後發現了一段好像很有用的東西

把首 4 bit 推出去,手動把 CLK 開關一下之後把剩下的 4 bit 推出去

沒錯,就是 software QSPI 的 function(

另外也可以從這邊看出來,在設定 Display mode 的時候,實際上只會用到 QSPI 4 只腳裡面的其中一只(SPI_1L 是只用 1 條 lane 傳送資料的 function)

不斷把 MSB 推出去 SDA 重複 8 次

只外順帶一提的是,這邊還可以設定到更高的 pixel format,這樣就是說假設 esp32 開發起來真的有 idle 的 cpu cycle 的話,說不定能把螢幕的顏色品質推得更高的說?

所以說,技術上看來是 All Green,應該真的能用 esp32 來控制這片 AMOLED 螢幕!之後有機會再把這片東西買回來試試看好了(