[Diaoye がプログラミングを学ぶ] MicroPython 手動組み込みモジュール マウント

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

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 をマイクロコントローラーの分野に導入します。これは、プログラミングの敷居を下げるだけでなく、優れたハードウェア制御機能も提供する重要な革新です。さまざまなタイプのモノのインターネットやインテリジェント ハードウェアの開発に非常に適しています。

ここに画像の説明を挿入します
MicroPython の組み込みモジュール os は、ファイル システムへのアクセスや管理など、いくつかの基本的なオペレーティング システム サービスを提供します。このうち、os.mount(fsobj, mount_point, *, readonly=False) は、ファイルシステムをマウントするために使用される関数です。主な特徴、適用シーン、注意事項は以下のとおりです。

主な機能: os.mount(fsobj, mount_point, *, readonly=False) は 3 つのパラメータを受け入れます: fsobj は os.AbstractBlockDev プロトコルを実装するファイル システム オブジェクトです; mount_point はファイル システムをマウントするパスを示す文字列です;readonly はファイルシステムを読み取り専用モードでマウントするかどうかを示すオプションのブール値。mount_point が別のファイル システムによってすでにマウントされている場合、mount_point が有効なパスではない場合、または fsobj が有効なファイル システム オブジェクトではない場合、 os.mount(fsobj, mount_point, *, readonly=False) は例外をスローします。

アプリケーション シナリオ: os.mount(fsobj, mount_point, *, readonly=False) を使用して、ファイル システム内のさまざまなタイプおよびソースのファイル システムをマウントできます。たとえば、os.mount(fsobj, mount_point, *, readonly=False) を使用して、SD カード上の FAT ファイル システムを /sd ディレクトリにマウントしたり、Littlefs ファイル システムをカスタム ブロック デバイスにマウントしたりできます。 /flash ディレクトリ。

注意事項: os.mount(fsobj, mount_point, *, readonly=False) を使用する前に、このモジュールをインポートし、import os ステートメントを使用する必要があります。os.mount(fsobj, mount_point, *, readonly=False) を使用する場合は、ファイル システムのタイプやソースが異なると特性や制限も異なる可能性があるため、ファイル システムのパフォーマンスと互換性に影響を与える可能性があることに注意する必要があります。さらに、os.mount(fsobj, mount_point, *, readonly=False) は、プラットフォームごとに実装とサポートが異なる場合があります。したがって、os.mount(fsobj, mount_point, *, readonly=False) を使用する場合は、最初にプラットフォームの機能と制限を確認することをお勧めします。

以下は、MicroPython の組み込みモジュール os.mount(fsobj, mount_point, *, readonly=False) の実際のアプリケーション ケースをいくつか示しています。

ケース 1: SD カード上の FAT ファイル システムを MicroPython ボード上の /sd ディレクトリにマウントし、そのステータス情報を出力します。コードは以下のように表示されます。

import os
import machine
import sdcard
import statvfs

# 创建一个SD卡对象
sd = sdcard.SDCard(machine.SPI(1), machine.Pin(15))

# 创建一个FAT文件系统对象
vfs = os.VfsFat(sd)

# 将FAT文件系统挂载到/sd目录下
os.mount(vfs, '/sd')

# 获取/sd目录下的文件系统状态信息
st = statvfs.statvfs('/sd')

# 打印文件系统状态信息
print('The status of /sd is:')
print('Block size:', st[0], 'bytes')
print('Fragment size:', st[1], 'bytes')
print('Total blocks:', st[2])
print('Free blocks:', st[3])
print('Available blocks:', st[4])
print('Total inodes:', st[5])
print('Free inodes:', st[6])
print('Available inodes:', st[7])
print('Flags:', st[8])
print('Maximum file name length:', st[9])

ケース 2: カスタム ブロック デバイス上の Littlefs ファイル システムを MicroPython ボード上の /flash ディレクトリにマウントし、「test.txt」という名前のファイルを作成します。コードは以下のように表示されます。

import os
import machine
import littlefs

# 创建一个自定义的块设备对象(假设有256个扇区,每个扇区4096字节)
bdev = littlefs.CustomBlockDevice(256, 4096)

# 创建一个Littlefs文件系统对象
vfs = os.VfsLfs2(bdev)

# 将Littlefs文件系统挂载到/flash目录下
os.mount(vfs, '/flash')

# 在/flash目录下创建一个名为'test.txt'的文件
f = open('/flash/test.txt', 'w')

# 写入一些内容
f.write('Hello, Littlefs!\n')

# 关闭文件
f.close()

ケース 3: RAM 上の FAT ファイル システムを MicroPython ボードの /ram ディレクトリにマウントし、「readme.txt」という名前のファイルを読み取り専用モードで開きます。コードは以下のように表示されます。

import os
import machine
import ramdisk

# 创建一个RAM上的FAT文件系统对象(假设有64个扇区,每个扇区512字节)
vfs = ramdisk.RamDisk(64, 512)

# 将RAM上的FAT文件系统挂载到/ram目录下
os.mount(vfs, '/ram')

# 在/ram目录下以只读模式打开一个名为'readme.txt'的文件
f = open('/ram/readme.txt', 'r')

# 读取文件内容
content = f.read()

# 打印文件内容
print(content)

# 关闭文件
f.close()

ケース 4: SD カードをマウントする:

import machine
import uos
import sdcard
import mount

# 初始化SD卡
spi = machine.SPI(1, baudrate=10000000, polarity=0, phase=0)
sd = sdcard.SDCard(spi, machine.Pin(4))
uos.mount(sd, "/sd")

# 在SD卡上创建文件
with open("/sd/data.txt", "w") as file:
    file.write("Hello, SD card!")

# 卸载SD卡
uos.umount("/sd")

この例では、マシン モジュールの SPI クラスを使用して SD カードを初期化し、sdcard モジュールの SDCard クラスを使用して SD カードを SPI インターフェイスに接続します。次に、マウント モジュールのマウント関数を使用して、SD カードをファイル システム内の指定されたパス (この例では「/sd」) にマウントします。次に、SD カードにファイルを作成し、コンテンツを書き込みます。最後に、uos モジュールの umount 関数を使用して SD カードをアンマウントします。

ケース 5: ネットワーク ファイル システムをマウントする:

import uos
import network
import mount

# 连接到WiFi网络
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect("my_wifi_network", "my_wifi_password")

# 等待WiFi连接成功
while not wifi.isconnected():
    pass

# 获取网络文件系统的IP地址
ip_address = wifi.ifconfig()[0]

# 挂载网络文件系统
uos.mount("smb://" + ip_address + "/shared_folder", "/mnt")

# 在网络文件系统上读取文件
with open("/mnt/data.txt", "r") as file:
    content = file.read()

# 打印文件内容
print(content)

# 卸载网络文件系统
uos.umount("/mnt")

この例では、ネットワーク モジュールの WLAN クラスを使用して WiFi ネットワークに接続し、接続が成功するのを待ちます。次に、wifi.ifconfig() 関数を使用して、ネットワーク ファイル システムの IP アドレスを取得します。次に、マウント モジュールのマウント機能を使用して、ネットワーク ファイル システムをファイル システムの指定されたパス (この例では「/mnt」) にマウントします。次に、ネットワーク ファイル システム上のファイルを読み取り、その内容を出力します。最後に、uos モジュールの umount 関数を使用してネットワーク ファイル システムをアンマウントします。

ケース 6: フラッシュ メモリ チップの実装:

import machine
import uos
import flashbdev
import mount

# 初始化闪存芯片
flash = machine.SPI(0, baudrate=10000000, polarity=0, phase=0)
flash_cdev = flashbdev.FlashBdev(flash)

# 挂载闪存芯片
uos.mount(flash_cdev, "/flash")

# 在闪存芯片上创建文件
with open("/flash/data.txt", "w") as file:
    file.write("Hello, Flash chip!")

# 卸载闪存芯片
uos.umount("/flash")

この例では、マシン モジュールの SPI クラスを使用してフラッシュ チップを初期化し、flashbdev モジュールの FlashBdev クラスを使用して SPI インターフェイスに接続します。次に、マウント モジュールのマウント機能を使用して、ファイル システム内の指定されたパス (この例では「/flash」) にフラッシュ チップをマウントします。次に、フラッシュ チップ上にファイルを作成し、コンテンツを書き込みます。最後に、uos モジュールの umount 関数を使用してフラッシュ チップをアンマウントします。

ケース 7: 外部フラッシュ メモリの取り付け

import uos

# 挂载外部Flash存储器到指定路径
uos.mount("SPIFLASH", "/flash")

この例では、uos.mount() 関数を使用して、指定されたパス「/flash」に外部フラッシュ メモリをマウントします。このようにして、外部フラッシュ メモリ内のファイル システムに MicroPython デバイス上でアクセスして操作できるようになります。

ケース 8: マウントされたファイル システムをアンインストールする

import uos

# 卸载已挂载的文件系统
uos.umount("/sd")

この例では、uos.umount() 関数を使用して、指定されたパス (上の例の「/sd」など) にマウントされているファイル システムをアンマウントします。このようにして、ファイル システムは MicroPython デバイスから削除され、アクセスしたり操作したりできなくなります。

これらのケースは、SD カードのマウント、外部フラッシュ ストレージのマウント、マウントされたファイル システムのアンマウントなど、uos モジュールのマウント機能の実際のアプリケーションを示しています。マウント関数を使用すると、外部記憶装置のファイルシステムを MicroPython デバイス上で簡単にマウントおよびアンマウントすることができ、外部記憶装置への読み取りおよび書き込み操作を実現できます。マウント機能を使用する場合は、デバイスが必要なストレージデバイスの種類をサポートしていることを確認し、実際のニーズに基づいて適切なパス設定と操作を実行してください。

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

おすすめ

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