首頁(yè) > 評(píng)測(cè) > PIL與OLED的組合--Adafruit 128x64 OLED for Raspberry上手
PIL與OLED的組合--Adafruit 128x64 OLED for Raspberry上手
- [導(dǎo)讀]
- Python Imaging Library (PIL)是python下的圖像處理模塊,支持多種格式,并提供強(qiáng)大的圖形與圖像處理功能。OLED顯示屏是利用有機(jī)電自發(fā)光二極管制成的顯示屏。由于同時(shí)具備自發(fā)光有機(jī)電激發(fā)光二極管,不需背光源、對(duì)比度高、厚度薄、視角廣、反應(yīng)速度快、可用于撓曲性面板、使用溫度范圍廣、構(gòu)造及制程較簡(jiǎn)單等優(yōu)異之特性,被認(rèn)為是下一代的平面顯示器新興應(yīng)用技術(shù)。
Python Imaging Library (PIL)是python下的圖像處理模塊,支持多種格式,并提供強(qiáng)大的圖形與圖像處理功能。OLED顯示屏是利用有機(jī)電自發(fā)光二極管制成的顯示屏。由于同時(shí)具備自發(fā)光有機(jī)電激發(fā)光二極管,不需背光源、對(duì)比度高、厚度薄、視角廣、反應(yīng)速度快、可用于撓曲性面板、使用溫度范圍廣、構(gòu)造及制程較簡(jiǎn)單等優(yōu)異之特性,被認(rèn)為是下一代的平面顯示器新興應(yīng)用技術(shù)。
嵌入式應(yīng)用中,很多情況下,我們只需要顯示一些簡(jiǎn)單的信息,此時(shí)OLED應(yīng)是比較好的選擇。例如在樹(shù)莓派中,大多數(shù)情況下是直接與顯示器連接,然后配置鍵盤、鼠標(biāo),這樣確實(shí)很方便,不過(guò)這樣太占空間。依筆者的經(jīng)驗(yàn),在使用樹(shù)莓派的過(guò)程中,大部分情況下都是使用的HEADLESS模式,即無(wú)顯示器及鍵盤、鼠標(biāo)的工作方式。不過(guò)話雖如此,給樹(shù)莓派添加一個(gè)小小的OLED屏,用來(lái)顯示一些諸如IP地址,系統(tǒng)負(fù)載等信息,一直是筆者的一個(gè)強(qiáng)烈愿望!最近,入手一塊來(lái)自Adafruit的小OLED屏,些屏專為樹(shù)莓派定制,好好體驗(yàn)了一把HEADLESS的顯示輸出功能,其中也不乏驚喜!驚喜就是附帶還體驗(yàn)了一把PIL的圖像處理操作。
先看硬件。
此模塊專為RPI設(shè)計(jì),引腳與RPI產(chǎn)品全面兼容,在尺寸上則剛好與RPI ZERO W吻合。模塊上OLED顯示屏位于中央,兩側(cè)還有一些額外的空間,增加了一個(gè)5向操縱桿和兩個(gè)按鈕,可以用于實(shí)現(xiàn)用戶交互,比如設(shè)計(jì)一個(gè)簡(jiǎn)單的手柄小游戲?
OLED控制器為SSD1306,通過(guò)FPC軟排線與RPI的40Pin引腳相連,從背面的引線可以清楚看到連接情況,這些信號(hào)引腳除了SSD1306的I2C接口外,還包括了按鈕及五向搖桿的GPIO引腳。
關(guān)于硬件信號(hào)及連接,請(qǐng)參考下圖
其中RPI的GPIO4/17/22/23/27分別連接到五向搖桿,GPIO5/6連接到兩個(gè)按鍵,SCL及SDA則是SSD1306的I2C接口。簡(jiǎn)單的設(shè)計(jì),帶來(lái)不一般的體驗(yàn),當(dāng)然前提條件是你得先有一個(gè)RPI。段子手網(wǎng)友已開(kāi)始調(diào)侃:很好的設(shè)計(jì),就只差一個(gè)RPI!
這是OLED模塊與RPI 0 W的連接圖,看上去挺和諧。
接下來(lái)準(zhǔn)備RPI,主要步驟包括啟用I2C接口,安裝軟件及相關(guān)的支持庫(kù)。
樹(shù)莓派的硬件如I2C/SPI等接口,默認(rèn)是不開(kāi)啟的,所以先使用raspi-config命令來(lái)啟用I2C接口,如下
啟用了I2C接口后,可以使用i2cdetect命令來(lái)檢測(cè)I2C設(shè)備,該命令執(zhí)行結(jié)果如下
很好,我們已檢測(cè)到了0x3c地址處的設(shè)備,接下開(kāi)始安裝軟件庫(kù)及官方提供的DEMO。
官方的DEMO使用了RPi.GPIO庫(kù),所以先要安裝該庫(kù)
sudo apt-get update
sudo apt-get install build-essential python-dev python-pip
sudo pip install RPi.GPIO
DEMO使用了Python Imaging Library來(lái)進(jìn)行繪圖,另外還使用了smbus來(lái)進(jìn)行通信,所以接下來(lái)安裝這兩個(gè)庫(kù)
sudo apt-get install python-imaging python-smbus
這些庫(kù)都安裝完成之后,接下來(lái)將官方DEMO從GIT上拖下來(lái)
sudo apt-get install git
git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
cd Adafruit_Python_SSD1306
sudo python setup.py install
先不管代碼,運(yùn)行個(gè)DEMO來(lái)看效果,然后再來(lái)研究細(xì)節(jié)。
打開(kāi)examples目錄,找到buttons.py程序,運(yùn)行,看到OLED屏上的內(nèi)容如下
buttons.py程序繪制一個(gè)五向搖桿圖案及兩個(gè)按鈕圖案,當(dāng)用戶按下按鈕時(shí),會(huì)在OLED上繪制出用戶的控制效果,圖中顯示的是按下五向搖桿的向上按鈕的顯示效果。
除了可以繪制簡(jiǎn)單的幾何圖形,也可以繪制圖片內(nèi)容,圖中顯示的是繪制一頭小貓的效果。不過(guò)可惜的是,該OLED不支持彩色及灰度顯示,所以顯示的只是圖片二值化后的結(jié)果,稍顯粗糙!
看了效果,咱們一起來(lái)研究下程序,下面以一個(gè)漢字顯示操為例,順便研究下強(qiáng)大的PIL庫(kù)。
程序代碼如下
from PIL import Image, ImageDraw, ImageFont
import Adafruit_SSD1306
RST = None
DISP_ADDR = 0x3c
disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)
disp.begin()
disp.clear()
disp.display()
size = disp.width, disp.height
font = ImageFont.truetype('msyh.ttc', 12)
image = Image.new('1', size)
draw = ImageDraw.Draw(image)
draw.text((0, 0), '古詩(shī)一首', font=font, fill=255)
draw.text((0, 20), '白日依山盡, 黃河入海流', font=font, fill=255)
draw.text((0, 38), '欲窮千里目, 更上一層樓', font=font, fill=255)
disp.image(image)
- 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!
網(wǎng)友評(píng)論
- 聯(lián)系人:巧克力娃娃
- 郵箱:board@21ic.com
- 我要投稿
-
歡迎入駐,開(kāi)放投稿
- NRF52810藍(lán)牙數(shù)字耳機(jī)找人定制
預(yù)算:¥30005天前
- 125KW模塊式PCS軟硬件外包開(kāi)發(fā)
預(yù)算:¥1100000015小時(shí)前
- 12V汽車啟動(dòng)電源項(xiàng)目BMS設(shè)計(jì)
預(yù)算:¥50000023小時(shí)前
- 數(shù)據(jù)可視化軟件 開(kāi)發(fā)
預(yù)算:¥5000023小時(shí)前
- PLC項(xiàng)目調(diào)試修改
預(yù)算:¥100001天前
- 起動(dòng)電機(jī)控制器開(kāi)發(fā)
預(yù)算:¥1100001天前