網頁最後修改時間:2020/12/21
前幾天,有人在賣場詢問是否有 MicroPython 驅動 128x64 繁體中文 LCD 的範例程式,基本上上商品所附的範例程式還是單晶片(8051)、Arduino 開發版和 ESP8285(Arduino)程式為主。
不過,找了時間在網路上做了一些搜尋,在 Github 上發現了不錯的 Repository 並做了測試。雖然這這些 Repository 能來驅動顯示英文字和畫線、畫方框,但最後沒有直接能找到可顯示繁體中文的 MicroPython 範例程式可做參考。
不過經過一番折騰,還是成功了把原來的程式移植到了MicroPython!
在進入到主題篇之前,本篇要先來用用在 Github 找到用來驅動 128x64 繁體中文 LCD(下面簡稱繁中LCD)顯示點、線和面的 Repository:MicroPython-ST7920。
主要內容有:
- (01)韌體與接線
- (02)MicroPython 程式碼下載和修改
- (02-01)st7920.py
- (02-02)canvas.py
- (02-03)example.py
- (02-04)修改後的程式碼 Github 下載網址
- (03)結論
*********************************************************************************
*********************************************************************************
【(01)韌體與接線】
網頁撰寫當時,範例裡的 NodeMCU 使用的 MicroPython 韌體版本,是 Firmware for Generic ESP8266 module/Stable firmware, 2M or more of flash 小節中的 esp8266-20200911-v1.13.bin(只要是 ESP8266 晶片,MicroPython 的韌體都可以在這個網頁裡找到相對應的韌體燒錄)。
不管是使用 ESP8266 的模組或是開發板,下面是它們的接線圖。如果是使用其它的 MicroPython 開發板,將該開發板的 SPI 的 <MOSI> 和 <SCK> 兩隻接腳分別接到繁中LCD的 <R/W> 和 <E> 就可以。
NodeMCU (ESP8266) 與繁中 LCD 接線圖 |
【(02)MicroPython 程式碼下載和修改】
網頁裡使用 MicroPython-ST7920 的程式碼來做繁中LCD的點、線和面繪製,所以您要先去把它下載回來並解壓縮到資料夾中。
解壓縮之後,資料夾裡看到 5 個 *.py 的檔案。不過在這裡,您所會用到的只有 st7920.py、canvas.py 和 example.py 這三個檔案:
-
canvas.py
畫線、方框的程式碼。 -
st7920.py
繼承自 canvas.py 的類別,驅動繁中LCD的程式碼。 -
example.py
繁中LCD使用的範例程式碼。
如果在上傳這三個檔案後能成功執行 examples.py 的話,那麼繁中LCD的顯示會跟網頁開頭照片中的 LCD 一樣。 如果出現 NotImplementedError 的錯誤不能正常執行的話,那麼可以試試如下的修改,將 plot() 直接實做出來並修正幾行程式,同樣可以達到相同的結果。
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
*
st7920.py:
由於執行 example.py 時出現 NotImplementedError 的錯誤,找到的原因應該是 create_plotter() 函式生不出 plot()。在不知道怎麼修正這問題的情況之下,解決方法就是直接修改 create_plotter() 為 plot()。
def create_plotter(self, set=True):
改成
def plot(self, x, y, set=True):
然後在函數開頭處加入 x 和 y 的範圍限制,再將 def plot(x, y): 所有的程式碼刪除,最後刪除 return plot,這樣就完成 plot() 函式的修改!
st7920.py plot() 函式程式碼 |
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
*
canvas.py:
由於用 plot() 取代了 create_plotter(),因此原來有使用到 plot() 的地方也要一併修正。
修正的方式很簡單,也就是在 canvas.py 裡面有用到 plot() 的都要一併做修改。
函式部分:
def line(self, x1, y1, x2, y2, plot): def fill_rect(self, x1, y1, x2, y2, plot): def rect(self, x1, y1, x2, y2, polt):
改成
def line(self, x1, y1, x2, y2, set=True): def fill_rect(self, x1, y1, x2, y2, set=True): def rect(self, x1, y1, x2, y2, set=True):
函式裡面有用到 plot() 的部分,都要修改它們最後的一個參數值,像是:
plot(x1, y1) self.line(x1, y, x2, y, plot)
改成
self.plot(x1, y1, set) self.line(x1, y, x2, y, set)
因為不再使用 create_plotter 了,所以刪除檔案開頭處的
create_plotter = raiseError
完成上面的修改,canvas.py 基本上就算完成!
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
*
example.py:
example.py 是執行的範例檔案,檔案開頭處需要做一些修改:
import st7920 from machine import Pin # implicitly uses hardware spi; https://docs.micropython.org/en/latest/esp8266/esp8266/quickref.html#hardware-spi-bus screen = st7920.Screen(slaveSelectPin=Pin(15), resetDisplayPin=Pin(5))
改成
from st7920 import Screen import machine # implicitly uses hardware spi; https://docs.micropython.org/en/latest/esp8266/esp8266/quickref.html#hardware-spi-bus spi = machine.SPI(1, baudrate=100000, polarity=1, phase=1) screen = Screen(spi=spi)
這樣就可以了!
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* (02-04)修改後的程式碼 Github 下載網址:
我跟網友討論和修改之後的檔案,該網友將其整理之後放置在他的 Github 中,有需要的可以直接到下面的 Github 網址下載:
Github cephaswang/st7920_MicroPython
【結論】
因為這個部分已經與網友做過討論,而且也將要修改的部分給了他,因此將這些部分再分享給其他需要的網友;除非上面連結中的程式碼已經遺失或是刪除,要不在這裡就不另外再提供程式碼,請直接由上面所提供的 Github 網址中下載。
如果您對於這個修改的程式碼有不同的解決方法、意見和看法,歡迎在下面留言!
.
.
沒有留言:
張貼留言
留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!
發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?
不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !