HC‑SR04 超音波距離センサを Raspberry Pi Pico から制御し、OLED(SSD1306 128×64)にリアルタイム表示するデモを MicroPython で作成します。センサが発した超音波が物体で反射し戻るまでの往復時間を計測し、Pico 内蔵温度センサで取得した気温を用いて音速を補正することで、測定精度を高めます。
2025年8月12日火曜日
BME280センサーの値をOLEDディスプレイにリアルタイム表示
Raspberry Pi Pico W に BME280(温度・湿度・気圧センサー)と OLED(SSD1306) を I²C でつなぎ、センサーで測った値をLCDに表示します。
測定したデータはリアルタイムに画面に表示され、室内の環境の変化がすぐにわかるようになります。
1. 配線
両方とも I²C を使うので、SDA と SCL の 2 本を共通でつなぎます。
SDカードの BMP を ST7789 LCD (SPI) に表示
Raspberry Pi Pico や Pico W などのマイコンでは、カラー画像の表示も意外と簡単に行えます。今回は、SPI接続のフルカラーLCD(ST7789) に、SDカードから読み込んだ BMP画像を表示してみます。
📁 SDカードに保存した画像ファイル(BMP形式)を読み取り、📺 ST7789ディスプレイに転送して表示するという構成です。
小さなディスプレイにお気に入りのイラストやロゴ、写真などを表示できるようになります!
🔌 SPI通信ってなに?
ST7789 ディスプレイとは、SPI(Serial Peripheral Interface)通信を使ってやり取りを行います。
SPIとは、以下のような特徴をもった高速なシリアル通信方式です:
1対1 または 1対多 で使える
複数本の信号線(通常4本)で構成される
MOSI(Master Out Slave In):データ送信
MISO(Master In Slave Out):データ受信(今回は使わない)
SCLK(Serial Clock):クロック信号
CS(Chip Select):通信相手の選択
フルデュプレックス通信(送受信同時)にも対応(今回は片方向のみ)
📷 今回は、Picoが「マスター」、ST7789が「スレーブ」として動作し、画像データを高速に転送していきます。
microSDモジュールを使ってデータを読み書き
今回は、microSDカード用の「AE-MICRO-SD-DIP」モジュールを使って、
MicroPythonでmicroSDカードにデータを読み書きする方法を紹介します。公式ライブラリを使い、SPI通信で簡単にデータを書き込みます。
🔄 SPI通信とは?
SPI(エスピーアイ)通信は、マイコン(例:Raspberry Pi Pico W)と周辺の電子部品(SDカード・液晶など)をつなぐための「データのやりとり方法」の一つです。
かんたんに言えば…
📡 SPIは、“マイコンと部品が会話するためのルール” です。
💬 どんなふうに通信するの?
SPI通信では、4本の線を使ってやりとりします。
| 信号線の名前 | はたらき | Pico W の例 |
|---|---|---|
| SCK(クロック) | データのタイミングを決める時計のようなもの | GP18 など |
| MOSI(モジー) | マイコンから部品へデータを送る | GP19 など |
| MISO(ミソー) | 部品からマイコンへデータを返す | GP16 など |
| CS(チップセレクト) | どの部品と通信するかを選ぶスイッチ | GP17 など |
📝 MISO = 「Master In / Slave Out」
👉 マスター(=Pico)がデータを出す/受け取る方向を表しています。
SSD1306 OLED:I²C接続で表示
Raspberry Pi Pico W に 0.96 インチ I²C 接続 OLED(128 × 64 ドット)をつないで、表示テストをしてみましょう。
この OLED は SSD1306 というコントローラ IC で動いており、I²C アドレスは 0x3C です。
自分でレジスタを叩くこともできますが、今回は初心者でも扱いやすい SSD1306 用ライブラリ を使って手早く動かしてみます。
Thonny IDE を起動
Pico を USB でつないだら、Thonny のメニューから
[ツール] → [パッケージを管理...] を選びます。
I2C接続のLCD「AM1602」に文字を表示
今回は、Raspberry Pi Pico W を使って、**「AM1602」**という小型のI2C接続LCDディスプレイに文字を表示する方法をご紹介します。
AM1602は、「16文字 × 2行」のテキストを表示できる液晶ディスプレイです。I2C通信に対応しているモデルを使えば、配線が少なくて済み、初心者でも扱いやすいのが特長です。
このガイドでは、MicroPythonというシンプルでわかりやすいプログラミング言語を使って、「Hello, World!」などのメッセージをLCDに表示します。MicroPythonでI2C通信の仕組みを学ぶことが目的なので、あえてライブラリは使わず、自分でプログラムを組んでいきます(※専用ライブラリの有無は未確認です)。
MicroPythonでのI2C設定について
MicroPythonでは、I2Cは次のようにして初期化します:
from machine import I2C, Pin
i2c = I2C(id, freq=400_000, scl=Pin(...), sda=Pin(...))
idを指定するだけでも使えますが、その場合は以下のようなデフォルト設定になります:
id = 0→ SCL = GP9、SDA = GP8(周波数 400kHz)id = 1→ SCL = GP7、SDA = GP6(周波数 400kHz)
また、Raspberry Pi Pico Wでは、以下の12通りのピンの組み合わせでI2C通信が可能です:
| id | SDAピン | SCLピン |
|---|---|---|
| 0 | GPIO0 | GPIO1 |
| 1 | GPIO2 | GPIO3 |
| 0 | GPIO4 | GPIO5 |
| 1 | GPIO6 | GPIO7 ※デフォルト |
| 0 | GPIO8 | GPIO9 ※デフォルト |
| 1 | GPIO10 | GPIO11 |
| 0 | GPIO12 | GPIO13 |
| 1 | GPIO14 | GPIO15 |
| 0 | GPIO16 | GPIO17 |
| 1 | GPIO18 | GPIO19 |
| 0 | GPIO20 | GPIO21 |
| 1 | GPIO22 | GPIO23 |
I2C接続1602キャラクタLCD(HD44780+PCF8574A)の操作
前回は、1602 LCD をビットパラレルモード(4ビットデータ通信)で直接制御しました。これは LCD の各制御線(RS、EN、D4〜D7など)を Raspberry Pi Pico W の GPIO に1本ずつ接続して動かす方法で、仕組みを理解するにはとても勉強になります。
しかし、この方法では接続に使うピンが多くなり、GPIOの数が限られている小型マイコンでは少し不便に感じることもあります。
そこで今回は、**PCF8574A という I/O エクスパンダ(拡張チップ)**を使って、I²C(アイ・スクエアド・シー)通信で LCD を制御する方法を紹介します。この方法を使うと、LCD の操作に必要な信号を **わずか2本の通信線(SDA と SCL)**にまとめられるため、配線がとてもスッキリし、他のセンサーやデバイスとの接続も簡単になります。
初心者の方でも、I²C の基本を学びながら、LCD 表示の実用的な使い方にステップアップできる内容になっています。マイコンの入出力ピンを節約しつつ、LCD にメッセージを表示したい方にぴったりの方法です。
PCF8574A と I²C って何?
PCF8574A
PCF8574A は NXP 製の “I/O エクスパンダ” と呼ばれる IC で、
8 本の GPIO を I²C でまとめて増設できる
各ピンは入力にも出力にも使える “擬似オープンドレイン” 方式
アドレスピン(A2–A0)の組み合わせで 0x38 – 0x3F の 8 通りの I²C アドレスを選択可能
今回の 1602 LCD では、PCF8574A の 8 本を下図のように割り当てるのが定番です。
| PCF8574A ピン | LCD 信号 | 役割 |
|---|---|---|
| P0 | RS | データ/コマンド切替 |
| P1 | RW | 読み書き切替(通常は GND = 書き込み専用) |
| P2 | EN | イネーブルパルス |
| P3 | BL | バックライト ON/OFF |
| P4–P7 | D4–D7 | 4 ビットデータバス |
I²C(Inter‑Integrated Circuit)
I²C は 1980 年代に Philips(現 NXP)が開発した 2 線式のシリアル通信規格で、
SDA(データ線) と SCL(クロック線) だけで通信
7 ビットまたは 10 ビットの アドレスでデバイスを識別
マスター(Pico W) がクロックを生成し、スレーブ(PCF8574A など) に読み書き要求を出す
複数デバイスを同じ SDA/SCL に “バス” でぶら下げられる(プルアップ抵抗が必須)
初心者が最初につまずきやすいポイントは「プルアップ抵抗がないと信号が正しく High にならない」ことですが、多くの市販 I²C‑LCD モジュールには 4.7 kΩ 付近の抵抗が実装済みなので安心です。
Google Spread Sheetの利用
以前に ESP32 で作っていたものを、Raspberry Pi Pico W + MicroPythonで再現してみました。 1.Googleスプレッドシートの設定 1.Google Drive → 右クリック → Google スプレッドシート 2.作成して共有をクリック
-
Raspberry Pi Pico W(ラズベリーパイ ピコ ダブリュー) は、英国 Raspberry Pi 財団が 2022 年に発売した Wi-Fi 搭載マイコンボードです。従来の「Raspberry Pi」と聞くと Linux が動くシングルボードコンピュータ(SBC)...
-
Raspberry Pi Pico W に BME280 (温度・湿度・気圧センサー)と OLED(SSD1306) を I²C でつなぎ、 センサーで測った値をLCDに表示 します。 測定したデータはリアルタイムに画面に表示され、室内の環境の変化がすぐにわかるよ...
-
回は**ラジコンサーボ(RCサーボ)**を動かしてみます。 ロボットを作るときや、センサーと組み合わせて何かを動かしたいときなど、RCサーボはとてもよく使われる部品です。小さなモーターにギアや制御回路が内蔵されていて、指定した角度まで正確に動かせるのが特徴です。 そこで今回は...
