Raspberry Pi PicoのGPIO機能まとめ/MicroPythonでのプログラム方法

Raspberry Pi PicoのGPIO機能まとめ/MicroPythonでのプログラム方法

こんにちは! けい(Twitter)です.

今回は,Raspberry Pi PicoのGPIO機能をまとめてみました.

ピンの概要

Raspberry Pi Picoには40本のピンがあり,それぞれに機能があります.
その中にgpioも含まれます.

ピンの種類は大きく分けて4種類あります.

  • 電源ピン : 電源を供給するピンです.
  • GNDピン : グラウンド(基準電圧)ピンです.
  • 通信ピン : センサーなどと通信するためのピンです.
  • GPIOピン : 入力(I)と出力(O)をプラグラム(P)可能なピンです.

電源ピン

電源ピンは3.3Vまたは5Vのピンがあります.

これはセンサーを動作させたり,サーボモータを動かしたりするために必要な電力を供給するためのピンで,接続先が必要な電圧に合わせて電圧を供給します.

GNDピン

グラウンドは,基準電圧を定義するために必要なピンです.

電源ピンとセットで使うことが多いです.

通信ピン

通信ピンとはセンサーからデータを送受信する際や,他のマイコンなどと通信するために用いられます.

UART,SPI,I2Cなどの通信規格があり,Raspberry Pi Picoもこれらすべてに対応したピンがあります.

GPIOピン

GPIOピンはプログラムで入力か出力にするかを自由に決められるピンです.

例えば,LEDを2秒間隔で光らせたいときには,プログラムで出力ピンに設定したピンにLEDのプラス側をつなぐことで,簡単にそのように光らせることができます.

また,PWMもサポートしているので,サーボモータを使用したロボットを作ることもできます.

Raspberry Pi Picoのピン

それでは,Raspberry Pi Picoのピンを見ていきましょう.

ピンは40本あり,順番にPin1,Pin2,・・・Pin40と定義します(下の図の灰色)

出典 : Raspberry Pi 公式

電源ピン

電源ピンとして3.3VのPin36があります.

また,基板上には5Vと書かれていませんが,5VのPin40(VBUS)があります.

なので,センサーなどの必要電圧に合わせて3.3Vと5Vを適宜使い分けることができます.

GNDピン

GNDピンは豊富で,等間隔で8本あります.

通信ピン

UART,SPI,I2C全て2つずつ搭載されています.

今までのラズパイよりも豊富になっています.

GPIOピン

GP0-GP22,GP26-GP28の合計26本のGPIOピンがあります.

GP22からGP26まで飛んでいるのは,Raspberry Pi PicoのCPU上では30本のGPIOが存在し,それら全てが基板上に実装されているわけではないからです.

つまり,本当はもっとピンを増やすことが可能ですが,40本という本数に収めるために,全てのGPIOを実装しなかったんだと思います.

ADC

GPIOピンの隣にADCという文字が表記されています(図の赤枠).

出典 : Raspberry Pi 公式

ADCとはアナログ-デジタル変換回路のことで,アナログ入力が可能であるということです.

Arduinoやラズパイを触ったことがある人は分かると思いますが,Arduinoはアナログ値を読み取ることができますが,ラズパイではデフォルトでアナログ値を読み取ることはできません.

それが今回のRaspberry Pi Picoではデフォルトでアナログ値を読み取ることができます

プログラム上で設定できるADCの数は3つです.本当は4つありますが,1つはデフォルトで搭載されている温度センサーに接続されています.

また,ADC_VREFというピンで,アナログ値を読み取る際のMAX値を設定することができます.

PWM

出典 : Raspberry Pi 公式

PWMは今までのRaspberry Pi と Raspberry Pi Picoを使う上で大きな差別化ができます.

今までのラズパイはPWMの精度が悪く,ハードウェアPWMを使う場合は本数が限られるため,一度に多くのPWM信号を生成することはできませんでした.

しかし,Raspberry Pi PicoはLinuxOSを搭載していないため,よりリアルタイム性に特化したものになったためPWMを使う用途の場合,今までのラズパイより向いています

GPIOのプログラム(MicroPython)

では,実際にプログラムでGPIOを入力や出力として設定する方法を見ていきましょう.

プログラムはMicroPythonで書いていきます.

MicroPythonの開発環境がまだの方は以前の記事を読んでみてください.(さくっとできます)

machineライブラリをインポート

import machine

これはRaspberry Pi PicoをMicroPythonでプログラミングするのに必要なライブラリです.

machineライブラリをインポートすることによって,ピンを自由に入力や出力に割り当てることができるようになります.

ピンの入出力設定

led_onboard = machine.Pin(25, machine.Pin.OUT)

machine.Pinという関数を用いて,ピンの入出力を設定することができます.

1つ目の引数として’25’を与えていますが,これはGP25を設定するという意味です.ちなみにGP25は基板上に実装されているLEDと接続されています.

2つ目のの引数として’machine.Pin.Out’を与えていますが,これはピンを出力モードに設定するという意味です.なのでこの段階で,GP25からは0Vまたは3.3Vが出力される状態になりました.

出力ピンから3.3Vを出力する

led_onboard.value(1)

先ほどの分で’led_onboard’という変数を設定しました.

その後ろに’.value(1)’を追加するだけで,3.3VをGP25から出力することができます.

この部分を’.value(0)’とすれば,0VがGP25から出力されます.

一連の流れ

これまでのプログラムを1つにまとめると次のようになります.

import machine
led_onboard = machine.Pin(25, machine.Pin.OUT)
led_onboard.value(1)

たった3行でRaspberry Pi Picoの基盤上に実装されたLEDを光らせることができます.

まとめ

今回は,Raspberry Pi Picoのピンの機能紹介と,MicroPythonでGPIOを設定する方法についてもまとめてみました.

GPIOピンはRaspberry Pi のプログラミングにおいて,基本中の基本ですが,複雑な用途や面白いことにも使える万能な機能です.

たった4ドルで買える小さな,そしてパワフルなデバイスを使って,ぜひアイデアを形にしてみてください.