2025年8月12日火曜日

Google Spread Sheetの利用

 


以前にESP32で作っていたものを、Raspberry Pi Pico W + MicroPythonで再現してみました。

1.Googleスプレッドシートの設定

1.Google Drive → 右クリック → Google スプレッドシート

2.作成して共有をクリック


Google Home miniを喋らせる

  

 
以前、ESP32を使ってGoogle Home Miniに音声を出力させましたので、今回は同じことがRaspberry Pi Pico Wでもできないかと試行錯誤を重ねた結果、無事に音声を出力させることができました。その過程を備忘録としてまとめておきます。

gmail送信

  


今回はRaspberry Pi Pico Wを使って、MicroPythonでGmailを送信してみます。
手軽で便利だし、いろいろな場面で活用できそうです。

1.Gmail側の設定

アカウント→セキュリティー→2段階認証プロセス→アプリ パスワード

ここでアプリ名を入力し作成ボタンを押します。

Wi-Fi 接続といろいろ

 今回は Raspberry Pi Pico W を使って、MicroPython で Wi‑Fi に接続する方法を紹介します。これまでの Pico には Wi‑Fi 機能がなかったんですが、Pico W になってついに無線が使えるようになりました!

これからは、この Wi‑Fi 機能を使って、インターネットにつないだり、他のデバイスとやりとりしたり、いろんなことにチャレンジしていきたいと思います。

1. MicroPython で Wi-Fi 接続

import network
import time

# SSID とパスワードを指定
SSID = 'あなたのSSID'
PASSWORD = 'あなたのパスワード'

# Wi-Fi ステーション(クライアント)モードで起動
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)

# 接続待ち
print("Wi-Fiに接続中...")
while not wlan.isconnected():
    time.sleep(1)

print("接続完了!")
print("IPアドレス:", wlan.ifconfig()[0])



Raspberry Pi Pico W×2台:Bluetooth接続とGPIO制御の実装例

   

今回はPico W同士をBluetoothでつないで、ボタンを押すともう片方のGPIOが反応してLEDやモーターを制御する…という感じの実験をやってみます。前回のモジュール構成をそのまま使いつつ、実装の練習も兼ねて進めていきます。

◆Muエディタの導入の仕方
【micro:bit】Lチカ←こちらではmicro:bitで利用してますが、
Raspbery Pi PicoWでも使えるのでThonny2つ起動できないので片方をMuエディタにします。

Bluetooth接続を介してLチカをしてみる

 

ESP32ではBluetooth ClassicとBLEの両方が使えますが、Raspberry Pi Pico WはBLEのみ対応しています。Bluetooth Classicは音楽再生や連続データ転送向け、BLEは省電力でセンサ制御などに適しています。BLEは理論上多数の機器と接続可能ですが、実際の接続数はデバイスや実装により異なります。今回はPico WのBLE機能を使って、スマホなどからLEDの点灯・消灯を制御します。Pico WのBLEは実験的な機能ですが、簡単な通信制御には十分使えます。ESP32ほど多機能ではありませんが、Pico Wでも手軽にBLE通信を試すことができます。

BLEのサンプルコードは、micropython/micropython リポジトリの examples/bluetoothディレクトリに用意されています。

今回はそれらをライブラリのように扱い、Thonny上に取り込んで活用していきます。

MPU‑6050で6軸センサ値を読み取り、OLED SSD1306にリアルタイム表示!

 今回は、MPU‑6050(加速度センサ+ジャイロセンサを内蔵した6軸モーションセンサ)を使い、デバイスの動きや傾きを計測して、そのデータをOLEDディスプレイ(SSD1306)にリアルタイム表示します。

MPU‑6050とは?

MPU‑6050は、3軸方向の加速度を測定する加速度センサと、3軸の角速度を測定するジャイロセンサを1つの小型チップに集約した、6軸モーションセンサです。

  • 加速度センサは、デバイスの直線的な動きや傾きを検出します。例えば、スマートフォンの画面が回転する仕組みや、歩数計の動きを感知する役割を担います。

  • ジャイロセンサは、回転の速さや角度の変化を測定します。これにより、デバイスがどの方向にどれだけ回転したかを正確に把握できます。

この2つのセンサを組み合わせることで、デバイスの姿勢や動きを多角的に把握することが可能です。例えば、ロボットやドローンの制御、自作ゲームコントローラの動き検知、モーションキャプチャーなど、幅広い応用が期待できます。

また、MPU‑6050はI²C通信を用いて簡単にマイコンと接続でき、小型で省電力、比較的安価なため、多くの電子工作や組み込みシステムで人気のあるセンサです。

超音波センサ HC-SR04 を使ったリアルタイム距離測定と OLED 表示

  HC‑SR04 超音波距離センサを Raspberry Pi Pico から制御し、OLED(SSD1306 128×64)にリアルタイム表示するデモを MicroPython で作成します。センサが発した超音波が物体で反射し戻るまでの往復時間を計測し、Pico 内蔵温度センサで取得した気温を用いて音速を補正することで、測定精度を高めます。

配線(GPIO ピンアサイン)

機能デバイスPico GPIO
SDAOLED (I²C id 0)GP16
SCLOLED (I²C id 0)GP17
TRIGHC‑SR04GP14
ECHOHC‑SR04GP15

この構成で、約 0.3 秒ごとに “気温・距離” を更新しながら OLED に表示する MicroPython サンプルを実装します。

BME280センサーの値をOLEDディスプレイにリアルタイム表示

 Raspberry Pi Pico W に BME280(温度・湿度・気圧センサー)と OLED(SSD1306) を I²C でつなぎ、センサーで測った値をLCDに表示します。

測定したデータはリアルタイムに画面に表示され、室内の環境の変化がすぐにわかるようになります。

1. 配線

両方とも I²C を使うので、SDA と SCL の 2 本を共通でつなぎます。

機能Pico WBME280OLED(SSD1306)
SDA  GP16SDASDA
SCL  GP17SCLSCL
3V33V3(OUT)VCCVCC
GND  GNDGNDGND

ポイント

  • Pico W の I²C0(GP16/17)を使う例です。ほかのピンでも OK。

  • 配線ミスがあると画面がつかないので、色付きジャンパー線で整理すると安心です。

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 など

📝 MOSI = 「Master Out / Slave In」
📝 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 用ライブラリ を使って手早く動かしてみます。

  1. 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通信が可能です:

idSDAピンSCLピン
0GPIO0GPIO1
1GPIO2GPIO3
0GPIO4GPIO5
1GPIO6GPIO7 ※デフォルト
0GPIO8GPIO9 ※デフォルト
1GPIO10GPIO11
0GPIO12GPIO13
1GPIO14GPIO15
0GPIO16GPIO17
1GPIO18GPIO19
0GPIO20GPIO21
1GPIO22GPIO23
この中から、自分の回路に合わせて都合のよいピンを選んで使えます。

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 信号役割
P0RSデータ/コマンド切替
P1RW読み書き切替(通常は GND = 書き込み専用)
P2ENイネーブルパルス
P3BLバックライト ON/OFF
P4–P7D4–D74 ビットデータバス

I²C(Inter‑Integrated Circuit)
I²C は 1980 年代に Philips(現 NXP)が開発した 2 線式のシリアル通信規格で、

  1. SDA(データ線) と SCL(クロック線) だけで通信

  2. 7 ビットまたは 10 ビットの アドレスでデバイスを識別

  3. マスター(Pico W) がクロックを生成し、スレーブ(PCF8574A など) に読み書き要求を出す

  4. 複数デバイスを同じ SDA/SCL に “バス” でぶら下げられる(プルアップ抵抗が必須)

初心者が最初につまずきやすいポイントは「プルアップ抵抗がないと信号が正しく High にならない」ことですが、多くの市販 I²C‑LCD モジュールには 4.7 kΩ 付近の抵抗が実装済みなので安心です。

16x2キャラクタ LCDディスプレイモジュール(HD44780コンパチブル)の4ビット操作

 Raspberry Pi Pico Wは小型でパワフルなだけでなく、LEDやセンサー、モーターなど多彩なデバイスを直接ドライブできるのが魅力です。中でも HD44780互換の16×2キャラクタLCD は、値段が手頃で入手しやすく、テキストをすばやく表示できる“定番デバイス”として人気があります。今回は、GPIO本数を節約できる 4ビットパラレルモード を使い、MicroPythonだけで Pico W に接続して文字を表示させる方法を紹介します。電源と数本の信号線を結ぶだけで、温度センサーの読み取り値やデバッグメッセージを手元の液晶にサッと映し出せるようになります。

HD44780コンパチブルとは?

HD44780コンパチブル とは、もともと 日立製のHD44780 というキャラクタ液晶コントローラIC(LCDコントローラ)の仕様や命令セットと互換性のあるディスプレイモジュールを指します。

このコントローラは

  • 最大80文字分の表示メモリ(DDRAM)

  • カーソル制御やスクロール機能

  • 英数字・記号などのフォント(ROM内蔵)

  • 4ビット/8ビットのパラレル通信インターフェース

といった機能を搭載しており、**LCD表示の「業界標準」**として非常に広く使われています。

「HD44780コンパチブル」という表現は、
➡ 他メーカー製であっても HD44780と同じ命令セットと制御方法で動作する 液晶モジュールであることを意味します。

たとえば、AIP31066やST7066UなどはHD44780互換品として知られており、ほぼ同じコードで制御できます。

✅ 要点まとめ

  • HD44780 = キャラクタLCD用の定番コントローラIC

  • コンパチブル = 命令セットや動作が互換の他社製品

  • メリット = ライブラリやサンプルが豊富で扱いやすい

このため、Raspberry Pi PicoやArduinoなどで使うキャラクタLCDの多くは「HD44780コンパチブル」です。

OSL641501-ARA 赤色ドットマトリックスのダイナミック点灯

 は、Raspberry Pi Pico Wを使って「OSL641501-ARA」という8×8の赤色ドットマトリクスLEDの基本的な仕組みと接続方法を学びました。

今回はその応用として、**ダイナミック点灯(スキャン方式)**によって、アルファベットの A~G を順番に表示させてみましょう。

💡 ダイナミック点灯とは?

8×8のマトリクスLEDには64個のLEDが搭載されていますが、すべてを同時に点灯させると、電流の負荷が大きくなり回路にも悪影響を及ぼします。
そこで活躍するのが「ダイナミック点灯」という方法です。

これは、1行(または1列)ずつ高速に点灯させていくことで、人間の目にはすべてが同時に光って見えるようにする仕組みです。
実際には、LEDは1行ずつ順番にON/OFFを繰り返しており、目の錯覚(残像効果)を利用しています。

OSL641501-ARA 赤色ドットマトリックスの点灯

 Raspberry Pi Pico Wは、LEDやセンサーなどさまざまな外部デバイスを制御できる柔軟なマイコンボードです。

今回は、その活用例として「OSL641501-ARA 赤色8×8ドットマトリックスLED」の制御に挑戦してみましょう。

このLEDマトリックスは、縦横8つずつのLEDが格子状に並んでおり、文字やパターン、アニメーションなどを自由に表示することが可能です。
Raspberry Pi Pico Wと組み合わせることで、自作のディスプレイやゲーム、時計など、アイデア次第で多彩な表現が広がります。

7 セグ 4 桁 ダイナミック 点灯

 4桁の7セグメントLEDは、数字や簡単な記号を見やすく表示できる便利な表示デバイスですが、各桁すべてを同時に点灯させるには多くのピンが必要になります。これを解決する方法が「ダイナミック点灯」です。

ダイナミック点灯では、1桁ずつ高速で切り替えながら表示を行うことで、あたかも全桁が同時に点灯しているように見せかけます。Raspberry Pi Pico WとMicroPythonを使って、GPIOを制御します。

ダイナミック点灯とは?

7セグメントLEDを複数桁使って数字を表示する場合、各桁のセグメント(A~G、DP)をすべて同時に制御しようとすると、多くのGPIOピンが必要になります。たとえば、4桁分すべてのセグメントを個別に制御すると、7セグメント × 4桁 = 28本のピンが必要になってしまいます。

これを解決する方法が「ダイナミック点灯(タイムマルチプレックス表示)」です。

DFPlayer で MP3 再生

 Raspberry Pi Pico Wは単体でも便利ですが、外部機器と音声や音楽をやりとりできると応用の幅がぐっと広がります。

そこで今回は「DFPlayer Mini」を使ったMP3再生について紹介します。

まずは、Pico WからDFPlayer Miniにコマンドを送り、保存されている音楽ファイルを再生・停止・音量調整などを操作する方法を実装してみましょう。

DFPlayer Miniとは?

DFPlayer MiniはマイクロSDカード内のMP3/WAVファイルを単体で再生できる小型モジュールです。Pico Wとはシリアル通信(UART)を使って接続し、簡単なコマンドで音楽の再生・停止・音量変更などを制御できます。

回路図

PWM でドレミと『かえるの歌』を鳴らす

 Raspberry Pi Pico Wは LED を光らせたりモーターを回したりと多芸なマイコンですが、「音」を出せるとなると一気にガジェット感が増しますよね。

今回は PWM(Pulse‑Width Modulation) を使って、ドレミ♪ とブザーでメロディを鳴らしてみましょう。

ハードもソフトもシンプルなので、ちょっとした電子工作にピッタリです。

回路

リレーを駆動してLEDを制御する

 Raspberry Pi Pico W を使って リレー という電子パーツを動かし、LEDライトのオン/オフを切り替える方法を学びます。

🧠 リレーってなに?

リレーは、小さな電気の信号で大きな電気のスイッチを入れたり切ったりできる電子スイッチです。
たとえば、Pico W のようなマイコンが出す弱い電気でも、リレーを使えばもっと強い電気で動く機器(LED、モーター、電球など)を動かせるんです。

⚙️ リレーのしくみ(カンタン解説)

  • リレーには「入力側」と「出力側」があります。

  • 「入力側」には Pico W から信号を送ります(デジタル信号)。

  • 信号が「1(オン)」になると、リレーのスイッチがカチッとつながり、「出力側」に電気が流れます。

  • 信号が「0(オフ)」になると、スイッチが切れて、電気が止まります。

💡 LEDをリレーでオン・オフする流れ

  1. Pico W からリレーに「オン」の信号を送る

  2. リレーのスイッチがオンになり、LEDに電気が流れる

  3. LED が光る!✨

  4. Pico W が「オフ」の信号を送ると、スイッチが切れてLEDが消える💤

✅ ポイント

  • リレーを使うと、安全に電気製品をコントロールできます。

  • 今回は LED を使って説明しますが、他にも 電球・モーター・ファン などにも応用できます!

GPIO割り込み処理

 ここでは GPIO 16 に付けたボタンを押すたびに LED が点いたり消えたり するスクリプトを動かしてみます。

割り込み(IRQ)って何?

  • ボタンの状態を ずっとループで監視(ポーリング) するのではなく、
    「変化が起きた瞬間だけ」マイコンが自動で呼び出してくれる 仕組み。

  • イメージは ドアベル。押された瞬間だけ「ピンポーン♪」と鳴るので、ずっと耳を澄ます必要がない。

1.回路


GPIO16 はデジタル入力として使用し、内部プルアップを有効にします。GPIO15 は出力として設定します。なお、接続には 1kΩ(1キロオーム)の抵抗を使用します。

アナログ電圧を測定する(ADCの基本)

 今回は、Raspberry Pi Pico のアナログ入力機能(ADC) を使って、電圧を読み取るテストを行います。Pico には ADC(アナログ-デジタル変換器) が 5 つありますが、このうちユーザーが自由に使えるのは 3 チャンネルです。

ADC 番号用途GPIO ピンピン番号
ADC(0)ユーザー用GP2631 番
ADC(1)ユーザー用GP2732 番
ADC(2)ユーザー用GP2834 番
ADC(3)電源電圧の測定(Vsys)
ADC(4)内蔵温度センサー

▼ Pico の ADC 特性

  • 分解能は 12ビット(0~4095)で、0V~3.3V の電圧をデジタル値に変換します。

  • 実際に値を読み取るときは、16ビット(0~65535)として取得されます(下位4ビットは常に0)。

IRリモートでRGBLED点灯

 今回は Raspberry Pi Pico W を使って、赤外線リモコンの信号を受信し、RGB LED を光らせる実験に挑戦してみましょう。

テレビのリモコンなどに使われている赤外線(IR)リモコンは、ボタンを押すと「特定のパターンの信号」を赤外線で送信しています。この信号を、赤外線受信モジュール(たとえば VS1838B など)で受け取り、Pico W に接続して解析します。

リモコンのボタンによって異なる信号が届くので、受信したパルスの長さや間隔を読み取り、「どのボタンが押されたか」を判定できます。今回は、その判定結果に合わせて RGB LED の色を変える のが目標です。たとえば

  • 1ボタンを押すと白色

  • 2ボタンで赤色

  • 3ボタンで緑色

  • 4ボタンで青色

というように、ボタンごとに LED の色が変わるようにします。

RGB LED は赤・緑・青の 3 つの LED が 1 つにまとまった部品で、それぞれの色を ON/OFF(あるいは明るさを変える)ことで多彩な色を作れます。まずは 「IR 信号を受け取って LED を光らせる」 という基本動作ができれば OK。慣れてきたら、次のステップとしてなめらかな PWM 制御やグラデーション発光などにも挑戦してみましょう。

DCモータを動かす(PWM)

 今回は DCモーターの制御 に挑戦します。

モーターの回転速度を調整するには、一般的に PWM(パルス幅変調) という方法を使います。PWMとは、電源のONとOFFをとても速いスピードで切り替えることで、モーターに流れる電流の平均量をコントロールする技術です。

  • ONの時間が長いほど、モーターは速く回転します。

  • OFFの時間が長くなると、回転はゆっくりになります。

PWMの大きな利点は、常に最大電圧をかけながらも回転速度を調整できる点です。これにより、低速でも**高いトルク(回す力)**を維持することができます。

今回の回路は「まずモーターを動かしてみる」ことを目的としたシンプルな構成にしています。

PWM(パルス幅変調)とは?

用語意味モーター制御での役割
パルス (Pulse)デジタルの ON(High)/OFF(Low) 信号モーターへ「電圧をかける/切る」の合図
幅 (Width)ON 状態が続く時間(Duty)幅が長いほど平均電圧↑=回転速↑
変調 (Modulation)幅を変えて平均値を調整幅を短くすれば平均電圧↓=回転速↓

周波数
1 kHz と設定すれば 1 秒間に 1,000 回 ON/OFF を繰り返す。
周波数そのものは速度に大きく影響せず「どれだけ細かく刻むか」を決めるパラメータ。

Duty(デューティ比)
0 %=常時 OFF、100 %=常時 ON。
例: 1 kHz で 50 % Duty → 1 ms 中 0.5 ms ON / 0.5 ms OFF。
平均電圧が Vin × Duty になるイメージで、DC モーターは平均電圧に比例して回転速度が変わる。

サーボモーターを動かしてみよう(SG90制御入門)

 回は**ラジコンサーボ(RCサーボ)**を動かしてみます。

ロボットを作るときや、センサーと組み合わせて何かを動かしたいときなど、RCサーボはとてもよく使われる部品です。小さなモーターにギアや制御回路が内蔵されていて、指定した角度まで正確に動かせるのが特徴です。

そこで今回は、代表的なサーボモーター「SG90」を使って、サーボを動かす基本的な仕組みや制御方法を学んでいきましょう。

🌀 そもそも「PWM」ってなに?

**PWM(Pulse Width Modulation:パルス幅変調)**とは、
デジタル信号(ONかOFFだけ)を工夫して「出力の強さ」や「角度」を調整する方法です。

  • サーボモーターは 50Hz の PWM信号(1秒間に50回)で角度を決めます。

  • 「ONにしている時間(パルス幅)」を変えると、サーボの角度が変わります。

パルス幅(ON時間)おおよその角度
約0.5ms(ミリ秒)左端(0度)
約1.5ms真ん中(90度)
約2.5ms右端(180度)

💡 PWMの周期は「20ms(=1秒 ÷ 50Hz)」で、
その中の 0.5〜2.5ms の間だけピンをONにします。

回路


SG90の線接続先(Pico)説明
赤(VCC)5V(VSYSや外部5V)電源(強い電流)
茶(GND)GNDマイナス(共通)
橙(PWM)GP16(ピン21)PWM信号(制御)

シリアル通信(発光ダイオードの点灯・消灯)

 前回は、シリアル通信を使って送られてきたデータをそのまま送り返す「オウム返し」のプログラムを作成しました。今回はその応用として、シリアル通信を使って発光ダイオード(LED)の点灯と消灯を制御するプログラムを作ってみましょう。

基本的な通信の仕組みは前回と同じですが、今回は次の3つの点が異なります。

1つ目は、回路に発光ダイオードが追加されている点です。
2つ目は、受信したデータに応じてLEDを点灯または消灯する点です。
そして3つ目は、受信したデータをパソコン側へ送り返さない点です。

これらの違いを除けば、基本的な構成や使い方は前回と共通しています。前回の内容を参考にしながら、今回の制御も確認してみましょう。

シリアル通信(オウム返し)

 Raspberry Pi Pico Wは単体で使うのも便利ですが、パソコンや他のマイコンなど、さまざまな機器と通信できるとさらに活用の幅が広がります。

そこで今回は「シリアル通信」について紹介します。

まずは、パソコンから送られてきたデータをPico Wが受け取り、同じデータをそのままパソコンに送り返す、いわゆる「オウム返し(エコー)」を実装してみましょう。

シリアル通信とは?

シリアル通信は、マイコンとパソコンや他の機器がデータを1ビットずつ順番に送受信する通信方式です。Raspberry Pi Pico WではUART(Universal Asynchronous Receiver/Transmitter)というハードウェアを使って実現します。

接続回路


 id      TX       RX        baudrate     parity    stopbit
 0  GPIO0 GPIO1   9600  なし  1
 1  GPIO4 GPIO5   9600  なし  1

今回はUART1(GPIO4:TX、GPIO5:RX)を使用します。

タイマーで発光ダイオード(LED)を1秒ごとに点滅させる

 ここでは、前回作成した「スイッチで発光ダイオード(LED)を点灯・消灯させる回路」を活用し、LEDを1秒ごとに点灯と消灯を繰り返すプログラムを作成します。回路図などの詳細は「スイッチで発光ダイオード(LED)を点灯・消灯させる」をご参照ください。

タイマーの種類と説明

1.ONE_SHOT:タイマーが一度だけ動作し、指定時間後に処理を実行する。

2.PERIODIC   :指定した周期で繰り返しタイマー割り込みが発生する。

1. ONE_SHOTモード(1回だけ処理)

from machine import Pin, Timer

led = Pin(15, Pin.OUT)
led.value(1)  # LEDを点灯しておく

def one_shot_callback(timer):
    led.value(0)  # 一度だけLEDを消灯
    print("ONE_SHOT: LEDを消灯しました")

timer = Timer()
timer.init(period=3000, mode=Timer.ONE_SHOT, callback=one_shot_callback)
# 3秒後に一度だけコールバック関数を呼ぶ

while True:
    pass  # メインループは空




>>> %Run -c $EDITOR_CONTENT

MPY: soft reboot
ONE_SHOT: LEDを消灯しました

スイッチで発光ダイオード(LED)を点灯・消灯させる

 スイッチを使って発光ダイオード(LED)を制御してみましょう。今回は、スイッチをオンにすると LED が点灯し、オフにすると消灯するように動作させます。もちろん、スイッチと LED を直接接続するのではなく、適切な回路を介して制御します。

1.回路


GPIO16 はデジタル入力として使用し、内部プルアップを有効にします。GPIO15 は出力として設定します。なお、接続には 1kΩ(1キロオーム)の抵抗を使用します。

Google Spread Sheetの利用

  以前に ESP32 で作っていたものを、Raspberry Pi Pico W + MicroPythonで再現してみました。 1.Googleスプレッドシートの設定 1.Google Drive → 右クリック → Google スプレッドシート 2.作成して共有をクリック