既然樹莓派3B掛點,但對這個3.5”屏非常有興趣想知道底層driver如何控制電阻式touch與TFT-LCD屏。手上有幾片
這屏的TFT driver是
雖然很完整,但是我是想要學習如何透過SPI控制LCD與Touch,能一步步下command觀察屏driver的反應,Python應該是最佳選擇。
Arduino
與ESP8266
,心中在想是否可以用來學習點亮這個屏? 花了好幾天睡覺時間google很多相關這個屏的pinout
與電路原理圖
,看來全球還真不少強人已經跑在前面好多,車尾燈都不見。。。這屏的TFT driver是
ILI9486
,touch driver是XPT2046
。在搜尋過程中,這個神人寫的driver驅動最厲害TFT_eSPI,幾乎把可接的LCD屏都寫好並優化加速。雖然很完整,但是我是想要學習如何透過SPI控制LCD與Touch,能一步步下command觀察屏driver的反應,Python應該是最佳選擇。
前言 MicroPython
MicroPython真是不錯的project,用ESP8266跑起來還算順,但是memory的空間非常有限,我的pyhton code只要稍微多寫一些,就很容易就出現“MemoryError: memory allocation failed,xxxxxxxxx”。所以,MicroPython在ESP8266只能當做實驗作用,無法做成有用的產品。
材料設備
步驟一,NoteMCU與LCD接線
這個屏都是透過
NoteMCU pinout%20pinout.pdf)
TFT-LCD pinout
SPI
配合幾根control pin如chip select
、Command-Data
、interrupt
來控制,接腳不多但是軟件開發似乎難度不低。。。NoteMCU pinout%20pinout.pdf)
TFT-LCD pinout
NoteMCU TFT-LCD
======= ========
D8 TFT-CS(24)
D3 Command/Data(18)
D4 Reset(22)
D1 Touch-CS(26)
D7 MOSI(19)
D6 MISO(21)
D5 CLK(23)
+5 +5(2)
GND GND(6)
TFT_CS = 15 # TFT Chip select control pin D8
TFT_DC = 0 # Data Command control pin D3
TFT_RST = 2 # Reset pin pin D4
TOUCH_CS = 5 # Touch Chip select control pin D1
NodeMCU與ESP8266 pin對照表
// These are the pins for all ESP8266 boards
// Name GPIO Function
#define PIN_D0 16 // WAKE
#define PIN_D1 5 // User purpose
#define PIN_D2 4 // User purpose
#define PIN_D3 0 // FLASH mode at boot time
#define PIN_D4 2 // TXD1 (Note: low on boot means go to FLASH mode)
#define PIN_D5 14 // HSCLK
#define PIN_D6 12 // HMISO
#define PIN_D7 13 // HMOSI RXD2
#define PIN_D8 15 // HCS TXD0
#define PIN_D9 3 // RXD0
#define PIN_D10 1 // TXD0
#define PIN_MOSI 8 // SD1
#define PIN_MISO 7 // SD0
#define PIN_SCLK 6 // CLK
#define PIN_HWCS 0 // CMD
#define PIN_D11 9 // SD2
#define PIN_D12 10 // SD4
步驟二,下載MicroPython並燒錄到NoteMCU
下載Firmware,我選擇
依照以下指令,安裝ESP8266燒錄工具後,先將NoteMCU的flash清乾淨,然後燒錄MicroPython Firmware。
esp8266-20171101-v1.9.3.bin
依照以下指令,安裝ESP8266燒錄工具後,先將NoteMCU的flash清乾淨,然後燒錄MicroPython Firmware。
pip install esptool
esptool.py --port /dev/cu.usbserial erase_flash
esptool.py --port /dev/cu.usbserial --baud 460800 write_flash --flash_size=detect -fm dio 0 esp8266-20171101-v1.9.3.bin
如果沒發生任何錯誤,這MicroPython應該已經完整上傳ESP8266。按下NoteMCU板子上的reset後,MicroPython就開始作動。
步驟三,透過terminal進入MicroPython的對話模式
在MacOS環境,打開Terminal,輸入以下指令
screen /dev/cu.usbserial 115200
這時候應該進入MicroPython的對話模式,按幾下
Enter
會出現>>>
的符號,表示NoteMCU準備接收下指令。輸入簡單指令測試>>> print('hello esp8266!')
hello esp8266!
>>> import esp
esp.check_fw()
NoteMCU應該回應剛剛燒錄的Firmware version。
重要: 要退出screen,按下CTRL-A
+CTRL-K
然後回答yes
即可退出
步驟四,上傳TFT-LCD的測試code
這是我寫的測試code,分享在GitHub。
那,如何從GitHub下載後如何上傳到NoteMCU?
那,如何從GitHub下載後如何上傳到NoteMCU?
步驟五,設定NoteMCU上網與File Transfer
輸入以下的code,讓NoteMCU連上家中Wifi AP。
import network
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('<your ESSID>', '<your password>')
sta_if.ifconfig()
會回應類似的
IP address
('192.168.0.2', '255.255.255.0', '192.168.0.1', '8.8.8.8')
方法一
這個方法簡單,但是會影響PC/Mac上internet。
方法二(我喜歡的方法)
在MicroPython對話模式下這個指令,把WebREPL啟動(Enable)
import webrepl_setup
./webrepl_cli.py raspi35.py 192.168.0.2:/raspi35.py
輸入
密碼
後就上傳。步驟六,執行上傳的Python code
最重要的部分出現啦。。。
輸入指令就可以執行剛上傳的code
輸入指令就可以執行剛上傳的code
exec(open("raspi35.py").read())
沒有留言:
張貼留言