簡介SPI
SPI(Serial Peripheral Interface)應用於單晶片系統與周邊的通訊界面,類似I2C的用途,以串列方式運作,由Motorola(摩托羅拉)所開發,用於SD卡與液晶顯示器的通訊界面,可以一個主控端(Master)與多個從端(Slave)一起進行訊號傳輸。需要使用MOSI、MISO、SCLK與SS四條線,MOSI(Master Output Slave Input)表示由主控端發送訊號給從端,MISO(Master Input Slave Output)表示由主控端接收來自從端的訊號,SCLK是同步時脈,所以SPI是同步方式進行傳輸,另外,主控端與每一個從端裝置都需要一條SS(晶片選擇)線,經由這一條SS線決定主控端與哪一個從端進行通訊,使用MOSI與MISO兩條傳輸線,與SPI裝置進行通訊,所以SPI屬於全雙工運作。SPI主控端與從端運作的示意圖,如下。
實驗過程影片
實驗目標
使用SPI介面驅動8x8LED,顯示文字到兩個8x8LED。
實驗所需元件
8x8LED(使用SPI介面)x2
實驗接線圖
接線圖如下,Raspberry Pi要連接到靠近MAX7219晶片的針腳,不要連錯邊了,要連接DIN。接樹梅派的8x8LED的DOUT要連接到第二個8x8LED的DIN,兩個8x8共用VCC、GND、CS、CLK。
第一個8x8LED
DIN(MOSI)連接樹莓派的Pin19-GPIO10 (MOSI)
CS(SS)連接樹莓派的Pin24-GPIO8 (SPI CE0)
CLK(SCLK)連接樹莓派的Pin23-GPIO11 (SPI CLK)
第二個8x8LED
DIN(MOSI)連接第一個8x8LED的DOUT
CS(SS)連接樹莓派的Pin24-GPIO8 (SPI CE0)
CLK(SCLK)連接樹莓派的Pin23-GPIO11 (SPI CLK)
兩個8x8LED、樹莓派的VCC與GND共用,如下圖。
Step1)開啟SPI功能
#sudo raspi-config
點選「Interface Options->SPI」啟用SPI功能
#sudo reboot
重新開機
Step2)檢查SPI是否啟動,正確會出現spidev0.0與spidev0.1
#ls -l /dev/spi*
crw-rw---- 1 root spi 153, 0 Oct 4 12:59 /dev/spidev0.0
crw-rw---- 1 root spi 153, 1 Oct 4 12:59 /dev/spidev0.1
Step3)安裝luma.led_matrix模組
sudo python3 -m pip install --upgrade luma.led_matrix
如果出現「error: externally-managed-environment」錯誤,執行「sudo rm /usr/lib/python3.11/EXTERNALLY-MANAGED」刪除python3.11的EXTERNALLY-MANAGED
Step4)下載範例程式
#git clone https://github.com/rm-hull/luma.led_matrix.git
Step5)執行範例程式,可以看到一大堆文字顯示在8x8LED上
#cd luma.led_matrix/
#python examples/matrix_demo.py
Step6)參考範例程式,假設此程式儲存為led88.py,修改成自己的程式碼
Step7)執行「python led88.py -n 2」,使用-n 2指定使用兩個8x8LED
顯示「LED」在兩個8x8LED上