初めてのRaspberry Pi Pico ⑦ CircuitpythonでOLEDディスプレイに表示

　小さな表示器ではLCDよりOLEDディスプレイのほうが入手しやすいです。Adafruitでも各種販売していますが、モデルの改変は速いです。下記の写真のモデルは、アマゾンやebayで比較的長期にわたって入手できます。I2CとSPIの2種類があります。ここではI2C用を使います。
　ソフトの開発はラズパイ4です。CircuitPythonは、6.2.0-beta.1です。

<img width="250" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/2c6db9ae-2fd9-4a34-f7f0-9cf827d0ab11.png">

###接続
　PicoとQLEDディスプレイを1対1で接続しました。

|QLED端子 |Pico物理的ピン番号 |Pico GPIOピン番号|
|:-----------|------------:|:------------:|
|GND|13 |GND|
|Vcc|36 |3.3V|
|SCL|12 |GP9|
|SDA|11 |GP8|

###準備

　BOOTSELボタンを押したまま、ラズパイとPicoをUSBケーブルをつなげます。つながったら、BOOTSELから手を放します。RPI-RP2ドライブがマウントされます。そのRPI-RP2ドライブへ、adafruit-circuitpython-raspberry_pi_pico-en_US-6.2.0-beta.1.uf2をドラッグします。コピーが数秒で終わると、デスクトップには、CIRCUITPYドライブがマウントされています。

　このあたりは第2回のLチカで説明しています。

　第6回でResetスイッチを追加しています。その場合は、Resetボタンを押したまま、BOOTSELボタンを押し、Resetボタンを放してから、BOOTSELボタンを放すとRPI-RP2ドライブがマウントされます。

　エディタMuを立ち上げます。
###プログラム
　CIRCUITPYドライブのlibフォルダに、ラズパイの\pi\libにコピーしておいた中から次のファイルをコピーします。

- adafruit_display_textフォルダ
- adafruit_framebuf.mpy
- adafruit_ssd1306.mpy

　CIRCUITPYドライブのルートに、
 https://github.com/adafruit/Adafruit_CircuitPython_framebuf/blob/master/examples/font5x8.bin?r　
からダウンロードしたfont5x8.binをコピーします。
　examplesにあるssd1306_simpletest.pyをベースに、[CircuitPython 10行プログラミング Step2 (2) OLED](https://www.denshi.club/pc/python/circuitpython/circuitpython-10-step2-2-oled.html)に掲載のプログラムを追加変更して作りました。

```python
# SPDX-FileCopyrightText: Tony DiCola
# SPDX-License-Identifier: CC0-1.0

# Basic example of clearing and drawing pixels on a SSD1306 OLED display.
# This example and library is meant to work with Adafruit CircuitPython API.

# Import all board pins.
import board
import busio

# Import the SSD1306 module.
import adafruit_ssd1306

# Create the I2C interface.
i2c = busio.I2C(board.GP9, board.GP8)

# Create the SSD1306 OLED class.
# The first two parameters are the pixel width and pixel height.  Change these
# to the right size for your display!
display = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c)
# Alternatively you can change the I2C address of the device with an addr parameter:
# display = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c, addr=0x31)

print("start")
display.fill(0)
display.text('hello world', 0, 0, 1)

display.show()
```
　実行した状態です。
<img width="300" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/2a3c4de4-54b5-7379-c2a5-5e9cf21a02a6.png">

###気圧センサの値を表示
　第4回で使ったLPS25HBを、同じI2Cバスにつなぎます。LPS25HBのプログラムを追加します。

```python
# SPDX-FileCopyrightText: Tony DiCola
# SPDX-License-Identifier: CC0-1.0

# Import all board pins.
import board
import busio
import time

# Import the SSD1306 , LPS25HB module.
import adafruit_ssd1306
import adafruit_lps2x

# Create the I2C interface.
i2c = busio.I2C(board.GP9, board.GP8)

# Create the SSD1306 OLED class.
display = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c, addr=0x3c)
lps = adafruit_lps2x.LPS25(i2c)

print("start")

while True:
    print("\nTemperature: {:0.1f} C  {:0.1f} hPa".format(lps.temperature, lps.pressure))
    display.fill(0)
    display.text('Temp=', 0, 0, 1)
    display.text(str(round(lps.temperature,1)) + 'C', 35, 0, 1)
    display.text('Press=', 0, 15, 1)
    display.text(str(round(lps.pressure,1)) + 'hPa', 40, 15, 1)
    display.show()
    time.sleep(3.14)
```

　実行中の様子です。
![IMGP0172.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/9cd29164-1eb2-9178-cc9f-81b96060ceb5.jpeg)