top of page

Raspberry Pi Pico 用1.3インチOLEDディスプレイモジュールをMicroPythonで動かしてみました

更新日:2021年7月18日

Raspberry Pi Pico 用1.3インチOLEDディスプレイモジュールをMicroPythonで動かしてみました。


メーカーのサポートページは下記のURLです。



まず、通常の方法でMicroPythonのファームウェアをセットアップします。

設定方法は下記のURLに記載されています。


また、当ブログでは下記の記事に記載しています。



次に、開発環境の設定していない場合は設定します。

当ブログでは下記の記事に記載しています。



Raspberry Pi Picoと開発環境の設定ができたら、

下記のURLからサンプルプログラムをダウンロードします。


今回購入したのはOELDの1.3インチなので、Pico-code > Python > Pico-OELD-1.3 の階層へ移動します。



準備が整ったらUSBケーブルをコンピューターに接続します。

おそらく、BOOTSELボタンを押しながら起動するのは初期設定のときのみで、

普段は普通の接続で大丈夫そうです。 


Thonnyを起動し、インタプリタとして「MicroPython(Raspberry Pi Pico)」を選択します。

これは、右下のボックスをクリックして行うことができます。


先程ダウンロードしたサンプルプログラムを開き起動します。

今回、2つのサンプルプログラムを動かしてみましたが、動いたのはPico-OELD-1.3(spc).pyの方のみで、Pico-OELD-1.3(spc).pyのほうは動きませんでした。とりあえず、動いたのでよしとします。


さらに、サンプルプログラム修正して定番のHELLO WORLDを表示するプログラムも書いてみました。

時間をかければ、なんとかサンプルプログラムのそれぞれの場所で何をやっているかわかると思うので、引き続き色々とやってみたいと思います。


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

from machine import Pin,SPI

import framebuf

import time


DC = 8

RST = 12

MOSI = 11

SCK = 10

CS = 9



class OLED_1inch3(framebuf.FrameBuffer):

def __init__(self):

self.width = 128

self.height = 64

self.cs = Pin(CS,Pin.OUT)

self.rst = Pin(RST,Pin.OUT)

self.cs(1)

self.spi = SPI(1)

self.spi = SPI(1,2000_000)

self.spi = SPI(1,20000_000,polarity=0, phase=0,sck=Pin(SCK),mosi=Pin(MOSI),miso=None)

self.dc = Pin(DC,Pin.OUT)

self.dc(1)

self.buffer = bytearray(self.height * self.width // 8)

super().__init__(self.buffer, self.width, self.height, framebuf.MONO_HMSB)

self.init_display()

self.white = 0xffff

self.balck = 0x0000

def write_cmd(self, cmd):

self.cs(1)

self.dc(0)

self.cs(0)

self.spi.write(bytearray([cmd]))

self.cs(1)


def write_data(self, buf):

self.cs(1)

self.dc(1)

self.cs(0)

self.spi.write(bytearray([buf]))

self.cs(1)


def init_display(self):

"""Initialize dispaly"""

self.rst(1)

time.sleep(0.001)

self.rst(0)

time.sleep(0.01)

self.rst(1)

self.write_cmd(0xAE)#turn off OLED display


self.write_cmd(0x00) #set lower column address

self.write_cmd(0x10) #set higher column address


self.write_cmd(0xB0) #set page address

self.write_cmd(0xdc) #et display start line

self.write_cmd(0x00)

self.write_cmd(0x81) #contract control

self.write_cmd(0x6f) #128

self.write_cmd(0x21) # Set Memory addressing mode (0x20/0x21) #

self.write_cmd(0xa0) #set segment remap

self.write_cmd(0xc0) #Com scan direction

self.write_cmd(0xa4) #Disable Entire Display On (0xA4/0xA5)


self.write_cmd(0xa6) #normal / reverse

self.write_cmd(0xa8) #multiplex ratio

self.write_cmd(0x3f) #duty = 1/64

self.write_cmd(0xd3) #set display offset

self.write_cmd(0x60)


self.write_cmd(0xd5) #set osc division

self.write_cmd(0x41)

self.write_cmd(0xd9) #set pre-charge period

self.write_cmd(0x22)


self.write_cmd(0xdb) #set vcomh

self.write_cmd(0x35)

self.write_cmd(0xad) #set charge pump enable

self.write_cmd(0x8a) #Set DC-DC enable (a=0:disable; a=1:enable)

self.write_cmd(0XAF)

def show(self):

self.write_cmd(0xb0)

for page in range(0,64):

self.column = 63 - page

self.write_cmd(0x00 + (self.column & 0x0f))

self.write_cmd(0x10 + (self.column >> 4))

for num in range(0,16):

self.write_data(self.buffer[page*16+num])

if __name__=='__main__':

OLED = OLED_1inch3()

OLED.fill(0x0000)

OLED.text("HELLO",1,15,OLED.white)

OLED.text("WORLD",1,45,OLED.white)

OLED.show()

















閲覧数:1,019回

Comments


bottom of page