machine-ハードウェア関連機能
Pinクラス
machine.Pin(id,mode=None,pull=None,value)
Pinオブジェクトコンストラクタ
- id:GPIO番号、Picoでは0-29
- mode:モード、オプション
None、Pin.IN(0)、Pin.OUT(1)、Pin.OPEN_DRAIN(2) - pull:内部プルアップ/プルダウン抵抗の使用、入力モードでのみ有効、オプション
None、Pin.PULL_UP(1)、Pin.DOWN(2) - value:出力またはオープンドレインモードでのポート値、0は低電位、1は高電位
Pin.init(mode=None,pull=None)
GPIOポートの再初期化
Pin.value([x])
- パラメータなしの場合、GPIOポートの値を返す
- パラメータ0または1を指定すると、GPIOポートに値を書き込む
Pin.toggle()
出力またはオープンドレインモードでポートの状態を反転 例.LED点滅
from machine import Pin
import time
led=Pin(25,Pin.OUT)
while True :
led.toggle()
time.sleep(1)#1秒ごとにLEDのON/OFFを切り替え
Pin.irq(handler=None,trigger=(Pin.IRQ_FALLING|PIN.IRQ_RISING))
外部割り込み関数
- handler:割り込みトリガーコールバック関数
- trigger:割り込みトリガー条件(エッジトリガー/レベルトリガー)
その他
以下の関数は出力/オープンドレインモードで使用可能:
Pin.low(),Pin.off()ポートを低電圧に設定Pin.high(),Pin.on()ポートを高電圧に設定
例. LED制御
from machine import Pin
import utime
#ボタンをGPIO15に接続、入力モード、内部プルアップ
button_num=15
button=Pin(button_num,Pin.IN,Pin.PULL_UP)
#GP25はボード上のLED、外部LEDはGP16に接続
led1_num=25
led2_num=16
led1=Pin(led1_num,Pin.OUT)
led2=Pin(led2_num,Pin.OUT)
while True :
led2.off()#外部LEDをオフ
if(button.value()==0):#ボタンが押されたか判定(押下時0)
utime.sleep(0.01)
if(button.value()==0):#ソフトウェアデバウンス
led1.toggle()#ボード上のLEDを反転
led2.on()#外部LEDを点灯(GP16高電位)
print("The button is pressed.")
while (button.value()==0):
#ボタンが押された状態で待機(外部LEDは点灯したまま)
utime.sleep(0.01)
PWMクラス
machine.PWM(pin)
指定GPIOをPWM出力として再初期化 pinはPinクラスオブジェクト
PWM.deinit()
PWMの初期化解除、PWM出力を停止
PWM.freq([value])
PWM周波数を設定(単位$Hz$)、分周器パラメータとTOPレジスタパラメータを自動計算
`PWM.duty_u16([value])
デューティ比を設定 valueのデューティ比範囲は[0,65536]、これに基づいてCCレジスタに値を設定
PWM.duty_ns([value])
1周期の高電位時間をナノ秒単位で設定
例. ブレスLED
from machine import Pin,PWM
import time
led=PWM(Pin(25))#ボード上のLEDをPWMオブジェクトとして初期化
led.freq(1000)#周波数設定
led_duty=0#初期値
led_direction=1#ステップ幅
while True:
led_duty+=led_direction#デューティ比を増加/減少
if led_duty>=100:#最大
led_duty=100
led_direction=-1
elif led_duty<=0:#最小
led_duty=0
led_direction=1
led.duty_u16(int(led_duty*655.36))#デューティ比値変換
if led_duty%5==0:
print(led_duty)#グラフ観測用
time.sleep(0.01)
#周期2秒
ADCクラス
machine.ADC(id)
ADCオブジェクトとして初期化、idはGPIOまたはADCチャンネル。Pinオブジェクト使用時はGPIOがADCをサポートしている必要あり。 0-3はPicoのGPIOチャンネル26-29、4はチップ内温度センサーチャンネル。
ADC.read_u16()
対応チャンネルのADC値を読み取り[0,65525]の範囲で返す。

いつまた一杯の酒を飲み、細かい論文を議論するのか。