[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.sync()は、すべてのファイルシステムを同期するために使用される関数です。主な特徴、適用シーン、注意事項は以下のとおりです。

主な機能: os.sync() はパラメータを受け入れず、値も返しません。その機能は、すべてのファイル システムのキャッシュ データをストレージ メディアに書き込み、データの一貫性と整合性を確保することです。

アプリケーション シナリオ: os.sync() を使用すると、ファイル システム内のデータのセキュリティと信頼性を確保できます。たとえば、停電や再起動の前に os.sync() を呼び出して、データの損失や破損を回避できます。重要なデータを書き込んだ後に os.sync() を呼び出して、データが確実に永続化されるようにすることもできます。

注意すべき点: os.sync() を使用する前に、モジュールをインポートし、import os ステートメントを使用する必要があります。os.sync() を使用する場合は、すべてのデータが書き込まれるまで他の操作がブロックされるため、システムのパフォーマンスと応答時間に影響を与える可能性があることに注意してください。さらに、os.sync() はプラットフォームごとに異なる実装とサポートを備えている場合があります。したがって、os.sync() を使用する場合は、最初にプラットフォームの機能と制限を確認することをお勧めします。

以下は、MicroPython の組み込みモジュール os.sync() の実際の応用例です。

ケース 1: MicroPython ボード上に「test.txt」という名前のファイルを作成し、コンテンツを書き込み、os.sync() を呼び出してファイル システムを同期します。コードは以下のように表示されます。

import os

# 创建一个名为'test.txt'的文件
f = open('test.txt', 'w')

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

# 关闭文件
f.close()

# 同步文件系统
os.sync()

ケース 2: コンソールでコマンドを入力して実行するための関数を MicroPython ボード上に定義します。コマンドが 'sync' の場合、os.sync() が呼び出され、ファイル システムが同期されます。コードは以下のように表示されます。

import os

# 定义一个函数,用于在控制台输入一个命令并执行
def run_command():
    # 获取用户输入的命令
    cmd = input('Enter a command: ')
    # 如果命令是'sync'
    if cmd == 'sync':
        # 调用os.sync()同步文件系统
        os.sync()
        # 打印同步完成信息
        print('File system synchronized')
    # 如果命令是'exit'
    elif cmd == 'exit':
        # 退出函数
        return
    # 其他情况
    else:
        # 尝试执行命令,并捕获异常
        try:
            exec(cmd)
        except Exception as e:
            # 打印异常信息
            print(e)
    # 递归调用函数
    run_command()

ケース 3: MicroPython ボード上でキャッシュ関数を使用してファイル オブジェクトをカプセル化するクラスを定義する データが書き込まれるたびにメモリにキャッシュされ、キャッシュが一定のサイズに達するかファイルがクローズされると、os.sync()ファイルシステムを同期します。コードは以下のように表示されます。

import os

# 定义一个类,用于封装一个带缓存功能的文件对象
class BufferedFile:

    # 定义缓存大小(字节)
    BUFFER_SIZE = 1024

    # 定义初始化方法
    def __init__(self, path, mode):
        # 打开一个底层的文件对象
        self.file = open(path, mode)
        # 创建一个缓存列表
        self.buffer = []
        # 初始化缓存长度为0
        self.buffer_len = 0

    # 定义写入方法
    def write(self, data):
        # 将数据追加到缓存列表中
        self.buffer.append(data)
        # 更新缓存长度
        self.buffer_len += len(data)
        # 如果缓存长度达到缓存大小
        if self.buffer_len >= self.BUFFER_SIZE:
            # 将缓存列表转换为字节对象
            buffer_bytes = b''.join(self.buffer)
            # 写入到底层的文件对象中
            self.file.write(buffer_bytes)
            # 清空缓存列表
            self.buffer.clear()
            # 重置缓存长度为0
            self.buffer_len = 0
            # 同步文件系统
            os.sync()

    # 定义关闭方法
    def close(self):
        # 如果缓存列表不为空
        if self.buffer:
            # 将缓存列表转换为字节对象
            buffer_bytes = b''.join(self.buffer)
            # 写入到底层的文件对象中
            self.file.write(buffer_bytes)
            # 清空缓存列表
            self.buffer.clear()
            # 重置缓存长度为0
            self.buffer_len = 0
            # 同步文件系统
            os.sync()
        # 关闭底层的文件对象
        self.file.close()

ケース 4: ファイル システム バッファを更新します。

import uos
import sync

# 写入文件
with open("/home/pi/documents/file.txt", "w") as file:
    file.write("Hello, World!")

# 刷新文件系统缓冲区
sync.sync()

# 读取文件
with open("/home/pi/documents/file.txt", "r") as file:
    content = file.read()

# 打印文件内容

print(content)

この例では、open 関数を使用してファイルを作成し、コンテンツを書き込みます。次に、同期モジュールの同期機能を使用してファイルシステムのバッファをフラッシュします。最後に、open 関数を使用してファイルを再度読み取り、ファイルの内容を出力します。ファイルシステムのバッファをフラッシュすることで、ファイルへの書き込み操作が完了し、機能していることを確認できます。

ケース 5: シリアル ポート バッファを更新します。

import machine
import sync

# 配置串口
uart = machine.UART(0, baudrate=115200)

# 发送数据
uart.write("Hello, World!")

# 刷新串口缓冲区
sync.sync()

# 读取串口数据
data = uart.read()

# 打印串口数据
print(data)

この例では、マシン モジュールの UART クラスを使用してシリアル ポートを構成し、データを送信します。次に、同期モジュールの同期関数を使用してシリアル ポート バッファを更新します。最後に、uart.read 関数を使用してシリアル ポート データを読み取り、出力します。シリアル ポート バッファをフラッシュすることで、送信されたデータがシリアル ポートに完全に転送されたことを確認できます。

ケース 6: ファイル システムとシリアル ポート バッファを更新します。

import uos
import machine
import sync

# 写入文件
with open("/home/pi/documents/file.txt", "w") as file:
    file.write("Hello, World!")

# 配置串口
uart = machine.UART(0, baudrate=115200)

# 发送数据
uart.write("Hello, World!")

# 刷新文件系统和串口缓冲区
sync.sync_all()

# 读取文件
with open("/home/pi/documents/file.txt", "r") as file:
    content = file.read()

# 读取串口数据
data = uart.read()

# 打印文件内容和串口数据
print(content)
print(data)

この例では、ファイル操作とシリアル通信の両方を使用します。まずファイルを書き込んでシリアル ポート データを送信し、次に同期モジュールの sync_all 関数を使用してファイル システムとシリアル ポート バッファを更新します。最後に、ファイルとシリアルポートのデータをそれぞれ読み取り、出力します。ファイル システムとシリアル ポート バッファをフラッシュすることで、書き込まれたファイルの内容が保存され、送信されたシリアル ポート データが完全に送信されたことを確認できます。

ケース7:ファイル書き込み後の同期動作

with open("data.txt", "w") as file:
    file.write("Hello, World!")

# 执行同步操作,确保数据写入存储设备
uos.sync()

この例では、open 関数を使用してファイル「data.txt」を開き、データを書き込みます。次に、uos.sync() 関数を呼び出すことにより、ファイル システム バッファ内のデータがストレージ デバイスと同期され、データの永続性が確保されます。

ケース8:ファイル一括書き込み後の同期動作

files = ["file1.txt", "file2.txt", "file3.txt"]

for file in files:
    with open(file, "w") as f:
        f.write("Some data")

# 执行同步操作,确保数据写入存储设备
uos.sync()

この例では、ループを使用してデータを複数のファイルにバッチ書き込みします。次に、uos.sync() 関数を呼び出すことによって、ファイル システム バッファ内のデータがストレージ デバイスに同期され、すべてのファイルのデータが確実に保持されます。

ケース9:ファイル削除後の同期操作

import uos

# 删除文件 "data.txt"
uos.remove("data.txt")

# 执行同步操作,确保删除操作生效
uos.sync()

この例では、uos.remove() 関数を使用してファイル「data.txt」を削除します。次に、uos.sync() 関数を呼び出すことによって、ファイル システム バッファ内のデータがストレージ デバイスと同期され、削除操作が確実に有効になります。

これらのケースは、ファイル書き込み後の同期操作、ファイルのバッチ書き込み後の同期操作、ファイル削除後の同期操作など、uos.sync() 関数の実際の応用例を示しています。同期関数を使用すると、MicroPython デバイス上のファイル システム バッファー内のデータがストレージ デバイスに正しく同期され、データの信頼性と一貫性が保証されます。同期機能を使用する場合は、実際のニーズに基づいて適切な呼び出しを行い、十分な権限と合理的な操作順序を確保してください。

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

おすすめ

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