Pico WにSSD1306とBME280を接続

Pico WにSSD1306とBME280を接続

今回はRaspberry Pi Pico WのGPIOピンを使用してSSD1306とBME280を接続し、MicroPythonプログラムを使用してデータを取得し、OLEDディスプレイに表示します。さらに、ネットワークに接続して、NTP(Network Time Protocol)を使用して正確な時刻を取得し、それも表示してみました。

実行環境

● SSD1306
● BME280
● ラズベリーパイピコW
● Windows11パソコン
● Thonny IDE

接続

下図のように接続しました。

必要なライブラリーのインストール

Thonnyまだライブラリーをインストールしていない方は下記のようにして2つのライブラリーをインストールしてください。

まずはBME280のライブラリーをインストールします。
2024年4月8日現在新品のラズベリーパイピコWにThonny4.1.3のパッケージの管理でインストールしようとするとエラーが出てインストールできませんでした。
とりあえず下記の方法でインストールしてみました。

Thonny立ち上げて、ラズベリーパイピコW本体にLibディレクトリがなければ、libディレクトリを作成して下さい。次にこちらのサイトにいきその中のbme280.pyをコピーします。Thonnyで新規ファイルをクリックして、先ほどのコピーファイルを貼り付け、bme280.pyの名前でlibディレクトリの中に格納してください。

追記します
4月10日現在上記のインストールエラーの問題はThonny4.1.4にアップデートして実行すると問題なくできました。
よってパッケージの管理からライブラリーをインストールする方が簡単です。

ssd1306のライブラリーは私のこのページを参考にしてインストールしてください。
以上で必要なライブラリーのインストールはおしまいです。

プログラム

こちらがプログラムです。

import time
import network
import ntptime
import machine
import utime
import bme280
import ssd1306
from machine import I2C, Pin
i2c = I2C(0, scl=Pin(1), sda=Pin(0))
bme = bme280.BME280(i2c=i2c)
display = ssd1306.SSD1306_I2C(128, 64, i2c)
#自宅Wi-FiのSSIDとパスワードを入力 
# Wi-Fi設定
ssid = '??????????'
password = '????????'
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
#今回はIPアドレスだけ表示しました
status = wlan.ifconfig()
print( 'IPアドレス = ' + status[0] )
def gettime():
    jst_time=ntptime.time() + 3600 * 9
    local_t=utime.localtime(jst_time)
    return local_t
def bmedata():
    bme = bme280.BME280(i2c=i2c)
    return bme.values
display.fill(0)
a1=gettime()
display.text(str(a1[0]), 0, 0, 1)
display.text(str(a1[1])+":"+str(a1[2])+":"+str(a1[3])+":"+str(a1[4])+":"+str(a1[5]), 0, 10, 1)
bm=bmedata()
display.text(bm[0], 0, 30, 1)
display.text(bm[1], 0, 40, 1)
display.text(bm[2], 0, 50, 1)
display.show()

簡単にプログラムの説明をします。
最初に無線ランに接続します。
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)

次にNTPタイムを取得する関数を作りまします。
def gettime():
jst_time=ntptime.time() + 3600 * 9
local_t=utime.localtime(jst_time)
return local_t

そしてBME208のデータを作る関数を作ります。
def bmedata():
bme = bme280.BME280(i2c=i2c)
return bme.values

最後にそちらを呼び出してディスプレイに表示する簡単なプログラムです。

最初湿度がおかしく表示されますがしばらくすると正しくなりました。

タイトルとURLをコピーしました