在樹莓派上使用 SSD1306 OLED 屏幕


原文地址: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM