[Diao Ye がプログラミングを学ぶ] MicroPython マニュアル Zephyr ピンと GPIO

ここに画像の説明を挿入します
MicroPython は、組み込みシステムで Python 3 プログラミング言語を実行するために設計されたインタープリターの軽量バージョンです。通常の Python と比較して、MicroPython インタープリターは小さく (わずか約 100 KB)、バイナリの実行可能ファイルにコンパイルされて実行されるため、実行効率が高くなります。軽量のガベージ コレクション メカニズムを使用し、リソースに制約のあるマイクロコントローラーに対応するために Python 標準ライブラリの大部分を削除します。

MicroPython の主な機能は次のとおりです。
1. 構文と関数は標準の Python と互換性があるため、学習と使用が簡単です。Python のほとんどのコア構文をサポートします。
2. ハードウェアに直接アクセスして制御し、Arduino のように GPIO、I2C、SPI などを制御します。
3.ファイルシステム、ネットワーク、グラフィカルインターフェースおよびその他の機能を提供する強力なモジュールシステム。
4. クロスコンパイルをサポートし、インタプリタよりも 10 ~ 100 倍高速な効率的なネイティブ コードを生成します。
5. コード量が少なくメモリ使用量も少ないため、メモリの少ない MCU や開発ボードでの実行に適しています。
6. オープンソースライセンス、無料で使用できます。シェルの対話型環境は、開発とテストに便利です。
7. 内蔵 I/O ドライバーは、ESP8266、ESP32、STM32、micro:bit、コントロール ボード、PyBoard などの多数のマイクロコントローラー プラットフォームをサポートします。活発なコミュニティがあります。

MicroPython アプリケーション シナリオには次のものが含まれます。
1. 組み込み製品のプロトタイプとユーザー インタラクションを迅速に構築します。
2. 小さなプログラム可能なハードウェア プロジェクトをいくつか作成します。
3. 教育ツールとして、初心者が Python や IoT プログラミングを学ぶのに役立ちます。
4. スマート デバイスのファームウェアを構築して、高度な制御とクラウド接続を実現します。
5. モノのインターネット、組み込みインテリジェンス、ロボットなどのさまざまなマイクロコントローラー アプリケーション

MicroPython を使用する際の注意事項:
1. メモリとフラッシュのスペースには限りがあります。
2. 説明や実行効率はC言語に劣ります。
3. ライブラリ機能の一部が標準版と異なります。
4. プラットフォームに合わせて構文を最適化し、標準の Python との相違点を修正します。
5. メモリ リソースを合理的に使用し、大きなメモリ ブロックを頻繁に割り当てることを避けます。
6. ネイティブ コードを使用して、速度が重要な部分のパフォーマンスを向上させます。
7. 抽象化を適切に使用して、基礎となるハードウェア操作をカプセル化します。

一般に、MicroPython は Python をマイクロコントローラーの分野に導入します。これは、プログラミングの敷居を下げるだけでなく、優れたハードウェア制御機能も提供する重要な革新です。さまざまなタイプのモノのインターネットやインテリジェント ハードウェアの開発に非常に適しています。
ここに画像の説明を挿入します
Zephyr は、組み込みシステム用に設計されたオープンソースのリアルタイム オペレーティング システム (RTOS) です。以下では、Zephyr の技術パラメータを、その基本概念と定義を含めて詳しく説明します。

1. サポートされているプロセッサ アーキテクチャ: Zephyr は、ARM、x86、RISC-V などを含むさまざまなプロセッサ アーキテクチャをサポートしています。これにより、Zephyr は、低電力マイクロコントローラーから高性能プロセッサまで、幅広い組み込みシステム上で実行できます。
2. メモリ要件: Zephyr のメモリ要件は比較的低く、リソースに制約のある組み込みシステムに適応できます。静的メモリ割り当てや動的メモリ割り当てなど、アプリケーション要件に応じて柔軟に構成できるさまざまなメモリ管理ソリューションを提供します。
3. マルチタスクのサポート: Zephyr は複数のタスクの同時実行をサポートします。軽量のスレッド (Thread) メカニズムを使用して、タスクの作成、スケジュール設定、同期を実現します。Zephyr は、開発者がタスク間の通信や同期を容易にするために、セマフォ、ミューテックス、メッセージ キューなどの豊富な同期プリミティブも提供します。
4. リアルタイム パフォーマンス: リアルタイム オペレーティング システムとして、Zephyr は優れたリアルタイム パフォーマンスを備えています。構成可能な優先順位スケジューリング ポリシーを提供し、重要なタスクにタイムリーに応答できるようにします。さらに、Zephyr は、さまざまなリアルタイム要件を持つアプリケーション シナリオを満たすために、ハード リアルタイムとソフト リアルタイムの 2 つのスケジューリング モードも提供します。
5. ハードウェア アブストラクション レイヤー (HAL): Zephyr は、異なるハードウェア プラットフォーム間の違いを保護するハードウェア アブストラクション レイヤー (HAL) を提供します。HAL を通じて、開発者は統合 API インターフェイスを使用して、基盤となるハードウェアの詳細に注意を払うことなくハードウェア リソースにアクセスできるため、コードの移植性と再利用性が向上します。
6. デバイス ドライバーのサポート: Zephyr は、シリアル ポート、SPI、I2C、GPIO、およびその他の一般的な周辺機器用のドライバーを含む、豊富なデバイス ドライバー サポートを提供します。これらのデバイス ドライバーはハードウェアと簡単に対話でき、周辺機器の制御とアクセスを簡素化できます。
7. ネットワーク プロトコルのサポート: Zephyr は、TCP/IP プロトコル スタック、Bluetooth、Wi-Fi などのさまざまなネットワーク プロトコルをサポートします。これにより、Zephyr はモノのインターネットやワイヤレス通信などのアプリケーション シナリオに適しており、他のデバイスと通信して接続できます。
8. 開発ツール チェーン: Zephyr は、コマンド ライン ツール、統合開発環境 (IDE) プラグイン、デバッガー サポートなどの豊富な開発ツール チェーンを提供します。これらのツールは、開発者がアプリケーションをコンパイル、デバッグ、展開し、開発効率を向上させるのに役立ちます。

ここに画像の説明を挿入します
MicroPython の Zephyr ピンと GPIO は、MicroPython を Zephyr オペレーティング システムで使用する場合に関連する機能です。MicroPythonのZephyrピンとGPIOについて、主な特徴や応用シーン、注意点などを専門的な視点から詳しく解説します。

主な特徴:

ピン制御機能: MicroPython の Zephyr ピン機能を使用すると、開発者はデバイスのピンを制御できます。開発者は、関連する API を通じてピンの入出力ステータスを操作し、ピンの動作モード (入力、出力、割り込みなど) を構成できます。これにより、開発者は外部デバイスと簡単に通信および対話できるようになります。

GPIO 機能: GPIO (汎用入力出力) は、MicroPython の Zephyr ピンの一般的なアプリケーションです。GPIO ピンは、センサー、アクチュエーター、ディスプレイなどのさまざまな外部デバイスを接続するための汎用デジタル入力または出力ピンとして使用できます。GPIO機能により、開発者は外部デバイスとのデータ交換や制御を実現できます。

ピン割り込み: MicroPython の Zephyr ピンは割り込み機能をサポートします。開発者は割り込みをトリガーするようにピンを構成でき、ピンのステータスが変化すると、対応する割り込みハンドラーがトリガーされます。これは、キー入力やセンサー検出などの外部イベントにリアルタイムで応答する必要があるアプリケーションに役立ちます。

アプリケーションシナリオ:

組み込みシステム開発: MicroPython の Zephyr ピンと GPIO 機能は、組み込みシステム開発に幅広く応用できます。開発者はこれらの機能を使用して、センサーデータの読み取り、アクチュエーターの制御、外部メモリの接続など、さまざまな外部デバイスと通信することができます。これは、組み込みシステムや IoT デバイスの開発に非常に役立ちます。

センサー アプリケーション: MicroPython の Zephyr ピンと GPIO 機能は、センサー アプリケーションに最適です。GPIO ピンを入力モードに設定すると、温度センサー、湿度センサー、光センサーなどのさまざまなセンサーを接続し、センサー データをリアルタイムで読み取り、対応する処理と意思決定を実行できます。

周辺機器制御: MicroPython の Zephyr ピンと GPIO 機能を使用して、外部デバイスを制御できます。GPIO ピンを出力モードに設定することで、アクチュエーターの制御、ディスプレイの駆動、LED の制御などを行うことができます。これは、周辺機器の制御や、ロボット制御、自動化システムなどの特定の機能の実装に役立ちます。

注意すべき点:

ピンの電圧と電流: MicroPython の Zephyr ピンと GPIO 機能を使用する場合は、外部デバイスの電圧と電流の要件に注意する必要があります。デバイスまたはピンの損傷を避けるために、ピンの電圧と電流が外部デバイスの要件と一致していることを確認してください。

ピンのステータス: ピンを操作するときは、ピンの現在のステータスに注意する必要があります。予期しない動作や結果を避けるために、ピンを設定および操作する前に、ピンが正しい状態であることを確認してください。

ピンの競合: 複数のピンを使用する場合は、ピン間の競合に注意する必要があります。予期しない結果やシステム障害を避けるために、異なるピンの使用が相互に干渉したり競合したりしないようにしてください。

要約すると、MicroPython の Zephyr ピンと GPIO 機能により、開発者は外部デバイスと通信して制御できるようになります。これらは、組み込みシステム開発、センサー アプリケーション、周辺機器制御などのシナリオで重要な役割を果たします。これらの機能を使用する場合、開発者はアプリケーションの正確さと信頼性を確保するために、外部デバイスの電圧と電流の要件、ピンの現在のステータス、ピン間の競合に注意を払う必要があります。

ケース 1: ADC 値を読み取る

from machine import Pin, ADC
import time

adc = ADC(Pin(32))  # 使用GPIO32作为ADC输入
adc.atten(ADC.ATTN_11DB)  # 设置增益为11dB

while True:
    value = adc.read()  # 读取ADC值
    print("ADC Value:", value)
    time.sleep_ms(100)  # 延时100ms

解釈: このプログラムは、まず Pin および ADC クラスをマシン モジュールにインポートし、次に ADC オブジェクトを作成し、GPIO32 を入力として設定します。次に、ゲインを 11dB に設定し、ADC 値を継続的に読み取り、各読み取りの間に 100ms の遅延を設けて無限ループで出力します。

ケース 2: ADC チャネルの構成

from machine import Pin, ADC
import time

adc = ADC(Pin(32))  # 使用GPIO32作为ADC输入
adc.atten(ADC.ATTN_11DB)  # 设置增益为11dB

adc.channel(0)  # 选择通道0

while True:
    value = adc.read()  # 读取ADC值
    print("ADC Value:", value)
    time.sleep_ms(100)  # 延时100ms

解釈: このプログラムはケース 1 に似ていますが、チャネル 0 を選択するループの前にコード行 adc.channel(0) が追加されています。その他の部分はケース1と同じです。

ケース 3: ADC 変換をトリガーする

from machine import Pin, ADC
import time

adc = ADC(Pin(32))  # 使用GPIO32作为ADC输入
adc.atten(ADC.ATTN_11DB)  # 设置增益为11dB

adc.conversion_mode(ADC.CONVERSION_MODE_SINGLE)  # 设置为单次转换模式
adc.trigger_source(ADC.TRIGGER_SOFTWARE)  # 软件触发模式
adc.channel(0)  # 选择通道0

while True:
    adc.start_conversion()  # 开始转换
    time.sleep_ms(1000)  # 延时1000ms
    adc.stop_conversion()  # 停止转换
    time.sleep_ms(1000)  # 延时1000ms

解釈: このプログラムは前の 2 つのケースと似ていますが、2 行のコード adc.start_conversion() と adc.stop_conversion() がループに追加され、それぞれ ADC 変換を開始および停止します。他の部分は前の 2 つのケースと同じです。

ケース 4: LED ライトのスイッチを制御する:

import machine
import time

# 配置LED引脚
led_pin = machine.Pin(25, machine.Pin.OUT)

# 打开LED灯
led_pin.on()

# 延迟1秒
time.sleep(1)

# 关闭LED灯
led_pin.off()

重要なポイントの解釈:
machine.Pin() 関数を使用してピンを設定します。最初のパラメータはピン番号、2 番目のパラメータはピン モード (入力または出力など) です。
machine.Pin.OUT パラメータを使用して、ピンを出力モードに設定します。
on() メソッドを使用してピンを High に設定し、LED をオンにします。
off() メソッドを使用してピンを Low に設定し、LED ライトをオフにします。

ケース 5: [読み取り] ボタンのステータス:

import machine

# 配置按钮引脚
button_pin = machine.Pin(12, machine.Pin.IN)

# 读取按钮状态
button_state = button_pin.value()

if button_state == 1:
    print("按钮被按下")
else:
    print("按钮未被按下")

重要なポイントの解釈:
machine.Pin() 関数を使用してピンを設定します。最初のパラメータはピン番号、2 番目のパラメータはピン モード (入力または出力など) です。
machine.Pin.IN パラメータを使用して、ピンを入力モードに設定します。
value() メソッドを使用してピンの状態を読み取り、戻り値は 0 (ローレベル) または 1 (ハイレベル) です。
ボタンの状態に基づいて論理的に判断し、対応する情報を印刷します。

ケース 6: 割り込みを使用してボタン イベントを処理する:

import machine
import time

# 定义按钮引脚号
button_pin = machine.Pin(12, machine.Pin.IN)

# 定义中断处理函数
def button_interrupt(pin):
    print("按钮被按下")

# 配置中断触发方式
button_pin.irq(trigger=machine.Pin.IRQ_FALLING, handler=button_interrupt)

# 等待中断触发
while True:
    time.sleep(1)

重要なポイントの解釈:
machine.Pin() 関数を使用してピンを設定します。最初のパラメータはピン番号、2 番目のパラメータはピン モード (入力または出力など) です。
machine.Pin.IN パラメータを使用して、ピンを入力モードに設定します。
ボタンが押されたときにトリガーされる割り込みハンドラー関数を定義します。
irq() メソッドを使用して割り込みトリガ モードを設定します。trigger パラメータはトリガ モード (立ち下がりエッジ トリガなど) を指定し、handler パラメータは割り込み処理関数を指定します。
ループ内で割り込みがトリガーされるのを待つことにより、プログラム内で他のタスクを実行できます。これらのサンプル コードは、Zephyr 上のピンと GPIO を制御するための MicroPython の一般的な使用法を示しています。特定のハードウェア プラットフォームとピン構成に基づいて、さらに変更や調整を行うことができます。特定のピンと GPIO の動作は、Zephyr の特定の構成とハードウェア プラットフォームによって異なる場合があることに注意してください。上記の例は、実際の状況に応じて適切に調整および実装できる基本的なフレームワークを提供します。

ケース 7: LED の点滅

from micropython import const  
import machine  
import utime  
  
LED_PIN = const(0)  
  
def main():  
    pin = machine.Pin(LED_PIN, machine.Pin.OUT)  
    while True:  
        pin.toggle()  
        utime.sleep(1)  
  
main()

重要なポイント: このコードは、Zephyr の MicroPython ランタイムを使用して LED ライトを制御し、1 秒に 1 回点滅します。コードでは、まず必要なモジュールと定数をインポートし、次に LED ライトを制御するピン オブジェクトを定義し、最後に 1 秒の遅延で無限ループで LED ライトの状態を切り替えます。

ケース8:キー入力

from micropython import const  
import machine  
import utime  
  
BUTTON_PIN = const(1)  
  
def main():  
    pin = machine.Pin(BUTTON_PIN, machine.Pin.IN)  
    while True:  
        if pin.value() == 0:  
            print('Button pressed')  
            utime.sleep(100)  # debounce time  
        else:  
            utime.sleep(10)  
  
main()

重要なポイント: このコードは、Zephyr の MicroPython ランタイムを使用してキーストロークを検出します。コードでは、最初に必要なモジュールと定数をインポートし、次にキーの押下を検出するピン オブジェクトを定義し、最後にキーの押下値を検出して無限ループでメッセージを出力します。キーのジッターを避けるために、キーの押下を検出してから 100 ミリ秒間検出を遅らせます。

ケース 9: 割り込みを使用して GPIO 入力を処理する

from micropython import const  
import machine  
import utime  
  
BUTTON_PIN = const(2)  
  
def button_callback(pin):  
    print('Button pressed')  
  
def main():  
    pin = machine.Pin(BUTTON_PIN, machine.Pin.IN)  
    pin.irq(trigger=machine.Pin.IRQ_FALLING, handler=button_callback)  
    while True:  
        utime.sleep(1)  
  
main()

重要なポイント: このコードは、Zephyr の MicroPython ランタイムを使用して GPIO 入力の割り込みを処理します。コードでは、まず必要なモジュールと定数をインポートし、次にキーの押下を検出するピン オブジェクトを定義します。次に、pin.irq() 関数を使用して、割り込みのトリガー方法と処理関数を設定します。最後に、無限ループで割り込みが発生するのを待ちます。ボタンが押されると、割り込みがトリガーされ、処理関数 button_callback() が呼び出されます。

上記の事例はアイデアを拡張するためのものであり、誤りや適用不可能な点が含まれる可能性があることに注意してください。ハードウェア プラットフォーム、使用シナリオ、MicroPython のバージョンが異なると、使用方法も異なる場合があります。実際のプログラミングでは、ハードウェア構成や特定のニーズに応じて調整し、実際のテストを複数回実施する必要があります。ハードウェアが正しく接続されていることを確認し、使用されるセンサーとデバイスの仕様と特性を理解することが重要です。

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/weixin_41659040/article/details/133541196