デジタルピンとアナログピン

MicroPythonでの、デジタルピンとアナログピンの使い方を学びます。


Author: Francesca Sanfilippo & Karl Söderby、Last revision: 2023/12/04


この章では、デジタルピンとアナログピンの扱い方を学びます。

対応している全てのボードは、一連のピンを備えています。ほとんどのピンは、汎用入出力(GPIO: general-purpose input/output)ピンとして動作します。信号に応じて、デジタルピンとアナログピンを使い分けます。入出力について学びます。

基本的には、デジタルピンとアナログピンという2種類のピンがあります。デジタルピンはHIGH(通常は5Vか3.3V)か、LOW(0V)に設定できます。例えば、LEDのオン・オフを切り替えるためのボタンの状態を読み取るのに利用できます。

i
注意: 重要: 残念ながら、MicroPython実装は、ボードのピンアウトと一致しません。これは、例えば、あるボードのデジタルピンの5番を27番ピンとしたり、14番ピンを他のものとしたりする必要があるということです。ボードのピン配置は、ボードAPIの記事 を参照してください。

デジタルピン

デジタル信号は、HIGH(1)とLOW(0)の2種類の値を持ちます。入出力が2つのどちらかの値を持つときに利用します。例えば、LEDをオン・オフするのに、デジタル信号を使うことができます。

Digital Write

このセクションでは、ピンの状態を制御するのに、machineモジュールを紹介します。この例では、ピンにmyLEDという名前にします。

MicroPythonでは、Pinは2つの引数で宣言します: 一つはピン番号で、制御したいピン番号を定義します。例えば、25です。もう一つは、Pin.OUTで、ピンを出力に設定します。

最後に、ピンをHIGHかLOWの状態にします。状態はvalueで、10です。

1
2
3
4
5
6
from machine import Pin #import pin function 

myLED = Pin(25, Pin.OUT) #declare pin 25 as an output

myLED.value(1) #set pin to a high state (1) / ON
myLED.value(0) #set pin to a low state (0) / OFF

いつもの"blink"の例を作るには、timiモジュールもインポートし、whileループを作ります。

以下の例は、ボード上のLEDを1秒ごとに点滅させます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from machine import Pin
import time

myLED = Pin(25, Pin.OUT) #Nano RP2040 Connect
#myLED = Pin(10, Pin.OUT) #Nano 33 BLE / Nano 33 BLE Sense
#myLED = Pin(2, Pin.OUT) #Portenta H7


while True:
    myLED.value(0)
    time.sleep(1)  
    myLED.value(1)
    time.sleep(1)

Digital Read(プルアップ)

この例では、PULL_UPモードを使って、デジタルピンからデジタル値を読み取ります。ここでは、PIN.INコマンドを使って、ピンを入力と宣言します。

p2.value()を使い、状態を読みます。これは、0(LOW)か1(HIGH)を返します。

1
2
3
4
5
6
7
8
from machine import Pin
import utime

p2 = Pin(25, Pin.IN, Pin.PULL_UP)

while True:
    print(p2.value())
    utime.sleep(1)

Digital Read(プルダウン)

この例では、PULL_DOWNモードを使って、デジタルピンからデジタル値を読み取ります。ここでは、PIN.INコマンドを使って、ピンを入力と宣言します。

p2.value()を使い、状態を読みます。これは、0(LOW)か1(HIGH)を返します。

1
2
3
4
5
6
7
8
from machine import Pin
import utime

p2 = Pin(25, Pin.IN, Pin.PULL_DOWN)

while True:
    print(p2.value())
    utime.sleep(1)

アナログピン

アナログピンの例は、ADCクラスです。これは、アナログ・デジタル変換器へのインターフェイスを提供し、継続的な電圧をサンプリングし、単一のエンドポイントを読み取りし、離散値に変換します。

ADCクラスを利用する、以下の4つのメソッドがあります: ADC.initADC.block()ADC.read_u16()ADC.read_uv()

Analog Read

アナログピンを読み取るには、ADC.read_u16コマンドを使います。このコマンドは指定したアナログピンを読み、0-65535の間の整数値を返します。これを使うには、machineモジュールから、ADCPinをインポートする必要があります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import machine
import time

# Make sure to follow the GPIO map for the board you are using.
# Pin 29 in this case is the "A3" pin on the Nano 33 BLE / BLE Sense
adc_pin = machine.Pin(29) 
adc = machine.ADC(adc_pin)

while True:
    reading = adc.read_u16()     
    print("ADC: ",reading)
    time.sleep_ms(500)
i
Arduino Nano RP2040 Connectを使っていれば、adc = ADC("A4")という表現を使うことができます。詳細は、こちらを参照してください。

PWM(Pulse Width Modulataion)

PWMは、高速にON/OFFするデジタル出力を使ってアナログ値を生成するのに使います。

結果として、指定した電圧をシミュレートし、ピンに出力することができます。以下の例では、0-65535(16ビット)の範囲の中から、30000を出力します。LEDをピンに接続すれば、ほぼ半分の明るさで光ります。

これを使うには、machineモジュールから、PWMPinをインポートする必要があります。

i

from machine import Pin, PWM, ADC

pwm = PWM(Pin(15)) duty = 30000 #between 0-65000

pwm.freq(1000)

while True: pwm.duty_u16(duty)

オリジナルのページ

https://docs.arduino.cc/micropython/basics/digital-analog-pins/

最終更新日

April 14, 2024

inserted by FC2 system