分類: Arduino

在 ESP8266 上使用 3.2 吋 TFT Display

No Comments
  • vcc 使用 5V。led 使用 3.3V,應非電源而是開關訊號,high 為亮。
  • 這是張含四線電阻式觸控的 tft。有驅動控制器各為 ILI9341,及 HR2046。
  • tft 透過 spi。hr2046(xpt2046)則透過/未查證,應也是 spi 或是腳位相容於 spi。
  • 板上還有獨立的 sd card 插槽供外部擴充。
  • 因 tft & ts 都有 cs pin,所以理論上它們的 spi 腳位可以共用,乃至於 sd card。ts 還有額外一支 irq 腳位。
  • 因此如圖接妥的單一張 wemos d1 mini 就可以同時控制 tft & ts。
  • 不過,
  • 程式直接採用 Adafruit ILI9341 函式庫。支援軟體 spi,故如圖已驅動起來了。
  • 而在 adafruit ili9341 函式庫下的 touch screen 並沒有支援到 hr2046。故 ts 不可用。
  • 接著找到 xpt2046 函式庫,
  • https://github.com/PaulStoffregen/XPT2046_Touchscreen
  • 但它是直接使用硬體 spi,故無法直接從 wemos d1 mini 的 pinout 接到硬體 spi。不過應是可將此函式庫中的 spi access functions 替換成軟體 spi 的。
  • 接著,
  • 找到 https://github.com/Bodmer/TFT_eSPI 函式庫,(有 esp8266 overlap mode 可與 flash 共用 spi,tft 並須以 gpio0 為 cs)
  • 其同時支援 ili9341 & hr2046,並且支援 esp8266,然而同樣是使用 hardware spi。不過它的功能性豐富,可玩玩看。
  • 結論,仍偏好使用軟體 spi,故對筆者而言較佳的方式就是使用 adafruit ili9341,並將 xpt2046_touchscreen 轉移過來使用軟體 spi。
  • 本篇只是註記;要用上/改好,就再看看了。。。

20220713 更新

  • 再重新接上了線試了一次 tft_espi,
  • 恍悟我應該用常理來判斷的;tft_espi 是不會嚴苛到要使用者還要額外加工將 flash 的 spi 相關腳位拉線出來接到 tft。
  • the esp8266 overlap mode,僅是為了讓使用者可空出 gpio 出來以有最大限度的運用,所以支援 flash 與其他最多三支 spi devices 共用同一組 spi 通道的。而 esp8266 有三種硬體 spi 模式/SDIO/SPI/HSPI,而 HSPI 就是 general purpose 的硬體 SPI,是使用 GPIO 12/13/14 三根腳位。故,tft_espi 預設便是使用此一通道。
  • 因此,設定上,除了啟用 touch panel 的 cs 腳位,其他 GPIO 設定可說不用改(但實體接線當然要用它的定義)。因此,預設是非 overlap 模式地使用 HSPI 的。
  • 請參考附件,自行比對有標記或改了哪些,判斷後便可知如何成功驅動 tft & touch panel 了。因此此 tft/ts feat. tft_espi 是完美搭配的。
  • 而文件中也加入了 adafruit 的 graphic test & tft_espi graphic test 的測試結果,前者是 software spi,後者是 hardware spi,可看出有多大的差距了。故一口氣用掉 12/13/14 腳位乃及 cs/dc/rst,非常值得(當然是可化簡的)。
  • 還有,touch panel & tft spi 是共用是沒有問題的。
  • 因此,我們口袋中又多了一個電子積木隨時想用就可用了。

demo

PHP Code Snippets Powered By : XYZScripts.com