<center id="cog8c"></center>
  • <sup id="cog8c"></sup>
    <nav id="cog8c"></nav>
  • 首頁 > 評測 > 評測列表 > 拓展版

    PIL與OLED的組合--Adafruit 128x64 OLED for Raspberry上手

    PIL   OLED   Adafruit   128x64   OLED   Raspberry   樹莓派   
    • 作者:SATURN
    • 來源:21ic
    • [導讀]
    • Python Imaging Library (PIL)是python下的圖像處理模塊,支持多種格式,并提供強大的圖形與圖像處理功能。OLED顯示屏是利用有機電自發光二極管制成的顯示屏。由于同時具備自發光有機電激發光二極管,不需背光源、對比度高、厚度薄、視角廣、反應速度快、可用于撓曲性面板、使用溫度范圍廣、構造及制程較簡單等優異之特性,被認為是下一代的平面顯示器新興應用技術。

    Python Imaging Library (PIL)是python下的圖像處理模塊,支持多種格式,并提供強大的圖形與圖像處理功能。OLED顯示屏是利用有機電自發光二極管制成的顯示屏。由于同時具備自發光有機電激發光二極管,不需背光源、對比度高、厚度薄、視角廣、反應速度快、可用于撓曲性面板、使用溫度范圍廣、構造及制程較簡單等優異之特性,被認為是下一代的平面顯示器新興應用技術。

    嵌入式應用中,很多情況下,我們只需要顯示一些簡單的信息,此時OLED應是比較好的選擇。例如在樹莓派中,大多數情況下是直接與顯示器連接,然后配置鍵盤、鼠標,這樣確實很方便,不過這樣太占空間。依筆者的經驗,在使用樹莓派的過程中,大部分情況下都是使用的HEADLESS模式,即無顯示器及鍵盤、鼠標的工作方式。不過話雖如此,給樹莓派添加一個小小的OLED屏,用來顯示一些諸如IP地址,系統負載等信息,一直是筆者的一個強烈愿望!最近,入手一塊來自Adafruit的小OLED屏,些屏專為樹莓派定制,好好體驗了一把HEADLESS的顯示輸出功能,其中也不乏驚喜!驚喜就是附帶還體驗了一把PIL的圖像處理操作。

    先看硬件。

    image1.jpg

    此模塊專為RPI設計,引腳與RPI產品全面兼容,在尺寸上則剛好與RPI ZERO W吻合。模塊上OLED顯示屏位于中央,兩側還有一些額外的空間,增加了一個5向操縱桿和兩個按鈕,可以用于實現用戶交互,比如設計一個簡單的手柄小游戲?

    image2_copy.jpg

    OLED控制器為SSD1306,通過FPC軟排線與RPI的40Pin引腳相連,從背面的引線可以清楚看到連接情況,這些信號引腳除了SSD1306的I2C接口外,還包括了按鈕及五向搖桿的GPIO引腳。

    關于硬件信號及連接,請參考下圖

    image3.png

    其中RPI的GPIO4/17/22/23/27分別連接到五向搖桿,GPIO5/6連接到兩個按鍵,SCL及SDA則是SSD1306的I2C接口。簡單的設計,帶來不一般的體驗,當然前提條件是你得先有一個RPI。段子手網友已開始調侃:很好的設計,就只差一個RPI!

    image4.jpg

    這是OLED模塊與RPI 0 W的連接圖,看上去挺和諧。

    接下來準備RPI,主要步驟包括啟用I2C接口,安裝軟件及相關的支持庫。

    樹莓派的硬件如I2C/SPI等接口,默認是不開啟的,所以先使用raspi-config命令來啟用I2C接口,如下

    image5.png

    啟用了I2C接口后,可以使用i2cdetect命令來檢測I2C設備,該命令執行結果如下

    image6.png

    很好,我們已檢測到了0x3c地址處的設備,接下開始安裝軟件庫及官方提供的DEMO。

    官方的DEMO使用了RPi.GPIO庫,所以先要安裝該庫

    sudo apt-get update

    sudo apt-get install build-essential python-dev python-pip

    sudo pip install RPi.GPIO

    DEMO使用了Python Imaging Library來進行繪圖,另外還使用了smbus來進行通信,所以接下來安裝這兩個庫

    sudo apt-get install python-imaging python-smbus

    這些庫都安裝完成之后,接下來將官方DEMO從GIT上拖下來

    sudo apt-get install git

    git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git

    cd Adafruit_Python_SSD1306

    sudo python setup.py install

    先不管代碼,運行個DEMO來看效果,然后再來研究細節。

    打開examples目錄,找到buttons.py程序,運行,看到OLED屏上的內容如下

    image7_copy.jpg

    buttons.py程序繪制一個五向搖桿圖案及兩個按鈕圖案,當用戶按下按鈕時,會在OLED上繪制出用戶的控制效果,圖中顯示的是按下五向搖桿的向上按鈕的顯示效果。

    image8_copy.jpg

    除了可以繪制簡單的幾何圖形,也可以繪制圖片內容,圖中顯示的是繪制一頭小貓的效果。不過可惜的是,該OLED不支持彩色及灰度顯示,所以顯示的只是圖片二值化后的結果,稍顯粗糙!

    看了效果,咱們一起來研究下程序,下面以一個漢字顯示操為例,順便研究下強大的PIL庫。

    程序代碼如下

    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), '古詩一首', font=font, fill=255)

    draw.text((0, 20), '白日依山盡, 黃河入海流', font=font, fill=255)

    draw.text((0, 38), '欲窮千里目, 更上一層樓', font=font, fill=255)

    disp.image(image)

    • 本文系21ic原創,未經許可禁止轉載!

    網友評論

    新人擼一發 排列五胆拖