このドキュメンテーションは、MicroPython の最新開発ブランチのためのものです。 リリースバージョンでは利用できない機能に言及することがあります。

特定のリリースのドキュメントをお探しの場合は、左側のドロップダウンメニューを使って、 望みのバージョンを選択します。

machine --- ハードウェア関連の関数

machine モジュールは、特定のボード上のハードウェアに関連する固有の関数を含んでいます。このモジュールのほとんどの機能はシステム上のハードウェアブロック(CPU、タイマー、バスなど)への直接的かつ無制限のアクセスと制御を実現します。誤って使用すると、誤動作、ロックアップ、ボードのクラッシュ、および極端な場合にはハードウェアの損傷を招く可能性があります。

machine モジュールの関数とクラスが使うコールバックについての注記: これらのコールバックはすべて、割り込みコンテキストでの実行とみなされるべきです。これは ID >= 0 の物理デバイスと、-1 などの負のIDを持つ「仮想」デバイスの両方に当てはまります(「仮想」デバイスであっても、実際のハードウェアと実際のハードウェア割り込みのがある上に小さく用意されているものです)。 割り込みハンドラの作成 を参照してください。

メモリアクセス

このモジュールは、素のメモリアクセスに使う3つのオブジェクトを提供します。

machine.mem8

メモリを8ビットで読み書きします。

machine.mem16

メモリを16ビットで読み書きします。

machine.mem32

メモリを32ビットで読み書きします。

目的のアドレスを指定するには、これらのオブジェクトのインデックス添字表記 [...] を使ってください。なお、アクセスするメモリのサイズに関係なく、アドレスはバイトアドレスです。

使用例(レジスタは stm32 マイクロコントローラに固有のものです):

import machine
from micropython import const

GPIOA = const(0x48000000)
GPIO_BSRR = const(0x18)
GPIO_IDR = const(0x10)

# set PA2 high
machine.mem32[GPIOA + GPIO_BSRR] = 1 << 2

# read PA3
value = (machine.mem32[GPIOA + GPIO_IDR] >> 3) & 1

その他の関数

machine.unique_id()

ボード/SoC の一意な識別子を持つバイト列を返します。基盤となるハードウェアが許せば、この値はボード/SoC の個体ごとに異なります。長さはハードウェアによって異なります(短い ID が必要な場合は、完全な値の部分文字列を使用してください)。一部の MicroPython ポートにおいて、ID はネットワークの MAC アドレスに対応します。

machine.time_pulse_us(pin, pulse_level, timeout_us=1000000, /)

指定の pin のパルスを計時し、パルスの持続時間をマイクロ秒単位で返します。 pulse_level 引数には、低パルスを計時する場合に 0、高パルスを計時する場合に 1 を指定します。

ピンの現在の入力値が pulse_level と異なる場合、関数は最初にピン入力が pulse_level に等しくなるまで待機し(*)、次にそのピンが pulse_level に等しい時間を測ります(**)。ピンが既に pulse_level に等しい場合、計測はすぐに開始されます。

タイムアウトが発生した場合、上記の(*)の状態を待っていた場合は -2 を返し、上記の(**)の場合は -1 を返します。タイムアウト時間は両方のケースで同じで、 timeout_us (マイクロ秒単位)で指定します。

machine.bitstream(pin, encoding, timing, data, /)

指定の pin をビットバンギングして data を送信します。引数 encoding には、ビットのエンコード方法を指定し、 timing にはエンコードに応じたタイミングを指定します。

サポートされているエンコーディングは次のとおりです:

  • 0 は "high low" パルス幅変調です。これは 0 と 1 のビットを最上位ビットから順に時限パルスとして送信します。timing(high_time_0, low_time_0, high_time_1, low_time_1) の形式で、ナノ秒の4項目タプルでなければなりません。たとえば (400, 850, 800, 450) は 800kHz の WS2812 RGB LED のタイミング仕様です。

タイミングの精度はポートによって異なります。48MHz の Cortex M0 では、せいぜい +/-120ns 程度ですが、より高速なMCU(ESP8266, ESP32, STM32, Pyboard)では +/-30ns 程度になります。

注釈

WS2812/NeoPixel ストリップの制御については、上位の API である neopixel モジュールを参照してください。

machine.rng()

24ビットのソフトウェア生成乱数を返します。

可用性: WiPy

定数

machine.IDLE
machine.SLEEP
machine.DEEPSLEEP

IRQ 起床値。

machine.PWRON_RESET
machine.HARD_RESET
machine.WDT_RESET
machine.DEEPSLEEP_RESET
machine.SOFT_RESET

リセット原因。

machine.WLAN_WAKE
machine.PIN_WAKE
machine.RTC_WAKE

起床理由。

クラス