原文地址:https://shumeipai.nxez.com/2019/04/29/use-the-ssd1306-oled-display-on-the-raspberry-pi.html
樹莓派在許多使用場景下並不需要接一台專用顯示器,如需要查看樹莓派上的一些信息可以通過手機、電腦登錄到樹莓派上操作,但總歸不夠便利。
下面介紹兩款 OLED 小屏(均為 SSD1306 芯片驅動)可以直接插到樹莓派 GPIO 上,配有 Python 源碼讓樹莓派玩家可以輕松用它來顯示任何圖文或動畫內容。
1、Pi OLED 128×32 OLED 屏幕擴展(I2C)
Pi OLED 配備 0.9 英寸迷你單色屏,128×32 分辨率,白光像素點。擁有極高的對比度,顯示清晰極易辨識。OLED 僅使用樹莓派的 I2C 和電源引腳,無需獨立供電,即插即用。(查看詳情,購買鏈接)
2、“復古小電視” OLED 屏
帶有 3D 打印外殼的 OLED 小屏,分辨率 128×64。通過 I2C 連接到樹莓派,無需獨立供電。(購買鏈接)
一、啟用樹莓派的I2C功能
1
2
3
|
sudo
apt-get
install
-y python-smbus
sudo
apt-get
install
-y i2c-tools
sudo
raspi-config
|
按照下面的步驟設置開啟 I2C 功能。
重啟樹莓派。
1
|
sudo
reboot
|
二、安裝 Adafruit-SSD1306 庫
Adafruit-SSD1306 是基於 Python 的 OLED 庫,可以用於 128×64、128×32 像素 SSD1306 芯片控制的屏幕。
使用下面的命令安裝。
1
|
sudo
python -m pip
install
--upgrade pip setuptools wheel
|
注意,如果這一步出現錯誤提示“TypeError: unsupported operand type(s) for -=: ‘Retry’ and ‘int’”,可以嘗試卸載后重新安裝 pip 來解決。
1
2
|
sudo
apt-get remove python-pip python3-pip
sudo
apt-get
install
python-pip python3-pip
|
安裝 PIL 庫,有一些圖片處理的程序會用到這個。
1
|
sudo
apt-get
install
python-pil python3-pil
|
使用 pip 安裝 Adafruit-SSD1306 庫。
1
|
sudo
pip
install
Adafruit-SSD1306
|
再下載一份包含代碼示例的庫后面要用。
1
2
|
cd
~
git clone https:
//github
.com
/adafruit/Adafruit_Python_SSD1306
.git
|
這里順便提一下,如果上面的 pip 安裝 Adafruit-SSD1306 庫遇到網絡問題,那么也可以在下載完這份代碼之后運行下面的命令安裝(可選):
1
2
|
cd
Adafruit_Python_SSD1306
sudo
python setup.py
install
|
進到示例目錄,可以看到有一些已經准備好了的代碼,后面將屏幕接好之后可以直接運行看效果。
1
|
cd
~
/Adafruit_Python_SSD1306/examples/
|
三、連接屏幕
對於 Pi OLED 屏幕擴展,直接安插在 GPIO 如圖所示位置(物理引腳編號1-6號)。
對於“小電視”屏幕,根據屏幕 PCB 上引腳的功能標注接到樹莓派上對應的 GPIO 上即可。
屏幕 GND 接樹莓派 GND
屏幕 VCC 接樹莓派 3V3
屏幕 SDA 接樹莓派 SDA
屏幕 SCL 接樹莓派 SCL
注意一定不要接反 VCC 和 GND,否則會燒壞屏幕。
下面通過命令檢測是否識別到 I2C 設備。
1
|
sudo
i2cdetect -y 1
|
將顯示已連接設備的 I2C 地址,不同的屏幕地址可能會不一樣,通過這個步驟可以確認一下。
注意,如果你正在使用的是初代樹莓派(256MB的樹莓派1代B),那么需要用這個命令:
1
|
sudo
i2cdetect -y 0
|
四、編程和運行
為了快速上手,我們可以直接使用示例代碼。其中有一個文件名為 stats.py 的程序,用來顯示樹莓派的 IP、CPU Load、內存和磁盤使用情況。先拿這個來試試看。
將之前下載的源碼復制到用戶目錄,用編輯器打開。
1
2
3
|
cd
~
sudo
cp
~
/Adafruit_Python_SSD1306/examples/stats
.py ~/
sudo
nano stats.py
|
可以看到這份示例已經包含了多種屏幕參數的初始化方法。
1
2
3
4
5
6
7
8
|
# 128x32 display with hardware I2C:
disp
=
Adafruit_SSD1306.SSD1306_128_32(rst
=
RST)
# 128x64 display with hardware I2C:
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)
# Note you can change the I2C address by passing an i2c_address parameter like:
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST, i2c_address=0x3C)
|
你可以根據實際所用的屏幕來修改這些參數,例如 SSD1306_128_32 代表 128×32 分辨率屏幕的初始化方法,適用於本篇介紹的 Pi OLED 128×32 OLED 屏幕擴展,SSD1306_128_64 適用於“復古小電視” OLED 屏。i2c_address 用於配置屏幕的地址,默認為 0x3C。
運行示例代碼,可看到運行效果。
1
|
sudo
python stats.py
|
同樣的方法再試試 image.py 這個示例效果如下。
通過修改 image.py 中的初始化參數,調整為 128×64 分辨率之后。
1
|
disp
=
Adafruit_SSD1306.SSD1306_128_64(rst
=
RST)
|
屏幕上的圖片、形狀、文本和字體都是由 PIL(Python Imaging Library)的模塊 Image, ImageDraw, and ImageFont 來實現的。如有興趣可以試試其他代碼示例,並學習自己設計圖文來顯示。
五、設置開機運行
為了讓 stats.py 能夠開機自動運行,我們可以做下面的配置,這樣我們就可以不用通過工具或路由器去查找樹莓派的 IP 地址等信息了。
修改 /etc/rc.local 文件。
1
|
sudo
nano
/etc/rc
.
local
|
在 exit 0 前面增加一行:
1
|
sudo
python
/home/pi/stats
.py &
|
編輯好之后按下 Ctrl+O 保存,再按下 Ctrl+X 退出。重啟樹莓派驗證一下是否生效吧!
1
|
sudo
reboot
|
六、提高顯示速率(可選,不推薦)
為了更好的顯示性能,例如顯示動畫時如對幀率有要求,可以通過修改下面的參數將 I2C 頻率從默認的 100KHz 或 400KHz 提升到 1MHz。
1
|
sudo
nano
/boot/config
.txt
|
在文件末添加一行:
dtparam=i2c_baudrate=1000000