【貂蝉がプログラミングを学ぶ】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 の組み込みモジュール ソケットは、単純なソケット操作を実装するために使用されるモジュールであり、文字列のパターン マッチング、置換、分割などの操作を実行するために使用できます。その主な特徴は次のとおりです。

1.socket() メソッドを使用して、アドレス ファミリ、ソケット タイプ、およびプロトコル番号を指定して新しいソケット オブジェクトを作成できます。
2. connect() メソッドを使用してリモート アドレスに接続することも、bind() および listen() メソッドを使用してローカル アドレスでの接続要求をリッスンすることもできます。
3. accept() メソッドを使用して接続要求を受け入れ、新しいソケット オブジェクトとクライアント アドレスを返すことができます。
4. send() メソッドと recv() メソッドを使用してソケット上でデータを送受信したり、sendto() メソッドと recvfrom() メソッドを使用してコネクションレス型ソケット上でデータを送受信したりできます。
5. close() メソッドを使用してソケットを閉じ、そのリソースを解放できます。
6. setsockopt() メソッドと getsockopt() メソッドを使用して、タイムアウトやバッファ サイズなどのソケット オプションを設定および取得できます。
7. getaddrinfo() メソッドを使用してホスト名とポート番号をアドレス情報のリストに変換したり、 gethostbyname() メソッドを使用してホスト名を IP アドレスに変換したりできます。

ソケット モジュールのアプリケーション シナリオには次のものが含まれます。

1. Web サーバー、FTP サーバー、SMTP サーバー、MQTT クライアントなど、さまざまなネットワーク サービスまたはデバイスの通信または制御に使用されます。
2. Web 開発、API 呼び出し、データ送信、リモート制御など、ネットワーク関連の機能またはアプリケーションを実装するために使用されます。
3. ネットワーク プロトコル、ネットワーク セキュリティ、モノのインターネットなど、ネットワーク関連の知識やスキルを学習または指導するために使用されます。

ソケットモジュールに関する注意事項は次のとおりです。

1. ソケット モジュールは CPython モジュールのサブセット 12 を実装しており、IPv4 アドレス 12 のみをサポートしているため、CPython の機能およびパフォーマンスと完全な互換性はありません。
2. ソケット モジュールは、特定のボード上のネットワーク ハードウェアとリソース 132 に依存します。MicroPython ボードが異なれば、利用可能な機能やパラメーターの範囲も異なる場合があります 132。サポートされる機能と使用方法を確認するには、特定のドキュメントを確認する必要があります。
3. ソケット モジュールは、ネットワーク通信への直接的かつ無制限のアクセスと制御を提供しますが、不適切に使用すると、デバイスの故障、ロックアップ、クラッシュ、そして極端な場合にはハードウェアの損傷が発生する可能性があります。慎重に使用し、関連する仕様とガイドラインに従ってください。

以下に、MicroPython の組み込みモジュール ソケットの実際のアプリケーション例をいくつか示します。

ケース 1: ソケット モジュールを使用して TCP クライアントを作成する

# 导入socket模块
import socket

# 创建一个TCP套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到百度服务器
s.connect(('www.baidu.com', 80))

# 发送HTTP请求
s.send(b'GET / HTTP/1.0\r\nHost: www.baidu.com\r\n\r\n')

# 接收HTTP响应
response = s.recv(4096)

# 打印响应内容
print(response)

# 关闭套接字
s.close()

ケース 2: ソケット モジュールを使用して UDP サーバーを作成する

# 导入socket模块
import socket

# 创建一个UDP套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定到本地地址和端口
s.bind(('0.0.0.0', 8888))

# 循环处理客户端消息
while True:
    # 接收客户端消息和地址
    data, addr = s.recvfrom(1024)
    # 打印消息和地址
    print(data, addr)
    # 向客户端回复消息
    s.sendto(b'Hello, ' + data, addr)

ケース 3: ソケット モジュールを使用して Web サーバーを作成する

# 导入socket模块
import socket

# 创建一个TCP套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 设置套接字选项,允许重用地址
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

# 绑定到本地地址和端口
s.bind(('0.0.0.0', 80))

# 开始监听连接请求
s.listen(5)

# 循环处理客户端连接
while True:
    # 接受一个客户端连接,并返回一个新的套接字和地址
    conn, addr = s.accept()
    # 接收客户端请求
    request = conn.recv(1024)
    # 打印请求内容
    print(request)
    # 构造响应内容
    response = b'HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\nHello, MicroPython!'
    # 发送响应内容
    conn.send(response)
    # 关闭连接
    conn.close()

ケース 4: TCP サーバーを作成する:

import socket

# 创建TCP服务器套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定服务器地址和端口
server_address = ('localhost', 8000)
server_socket.bind(server_address)

# 开始监听客户端连接
server_socket.listen(1)
print("Server is listening for connections...")

# 接受客户端连接
client_socket, client_address = server_socket.accept()
print("Connected to client:", client_address)

# 接收客户端数据
data = client_socket.recv(1024)
print("Received data:", data)

# 关闭连接
client_socket.close()
server_socket.close()

この例では、socket モジュールを使用して TCP サーバーを作成します。TCP ソケットを作成し、サーバーのアドレスとポートをバインドします。次に、クライアント接続のリッスンを開始し、クライアントが接続したときに接続を受け入れます。接続が確立されると、クライアントから送信されたデータを受信し、印刷します。最後に、接続とサーバーソケットを閉じます。

ケース 5: TCP クライアントを作成する:

import socket

# 创建TCP客户端套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器
server_address = ('localhost', 8000)
client_socket.connect(server_address)
print("Connected to server:", server_address)

# 发送数据给服务器
data = "Hello, server!"
client_socket.send(data.encode())

# 关闭连接
client_socket.close()

この例では、ソケット モジュールを使用して TCP クライアントを作成します。TCP ソケットを作成し、サーバーのアドレスとポートに接続します。接続が確立されたら、データをサーバーに送信します。ここでは、文字列「Hello, server!」を送信しましたが、これはバイト ストリーム形式にエンコードする必要があります。最後に、接続を閉じます。

ケース 6: UDP サーバーとクライアントを作成する:

import socket

# 创建UDP套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定服务器地址和端口
server_address = ('localhost', 9000)
udp_socket.bind(server_address)
print("Server is listening for messages...")

# 接收客户端消息
data, client_address = udp_socket.recvfrom(1024)
print("Received message:", data)

# 发送响应给客户端
response = "Hello, client!"
udp_socket.sendto(response.encode(), client_address)

# 关闭套接字
udp_socket.close()

この例では、ソケット モジュールを使用して UDP サーバーとクライアントを作成しました。まず、UDP ソケットを作成し、サーバーのアドレスとポートをバインドします。その後、サーバーはメッセージのリッスンを開始し、メッセージを受信すると出力します。次に、サーバーは応答メッセージをクライアントに送信します。最後にソケットを閉じます。これらの実践的なアプリケーション例は、MicroPython の組み込みソケット モジュールを使用する機能を示しています。ソケット モジュールを使用すると、TCP サーバーとクライアント、および UDP サーバーとクライアントを作成できます。これらの機能は、ネットワーク通信やデータ送信などのシナリオで非常に役立ちます。

ケース 7: TCP クライアントの作成

import socket

# 创建 TCP 客户端
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器
server_address = ('192.168.0.100', 8000)
client_socket.connect(server_address)

# 发送数据
data = b'Hello, server!'
client_socket.sendall(data)

# 接收响应
response = client_socket.recv(1024)
print("服务器响应:", response.decode())

# 关闭客户端套接字
client_socket.close()

この例では、ソケット モジュールをインポートし、それを使用して TCP クライアントを作成します。まず、socket.socket() 関数を使用してソケット オブジェクトを作成し、アドレス ファミリをsocket.AF_INETとして、送信プロトコルをsocket.SOCK_STREAM (TCP)として指定します。次に、connect() 関数を使用して、サーバーのアドレス server_address に接続します。次に、sendall() 関数を使用してデータをサーバーに送信します。recv() 関数を使用してサーバーの応答データを受信し、出力します。最後に、クライアントソケットを閉じます。

ケース 8: TCP サーバーの作成

import socket

# 创建 TCP 服务器
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定地址和端口
server_address = ('', 8000)
server_socket.bind(server_address)

# 监听连接
server_socket.listen(1)
print("服务器正在监听端口 8000...")

# 接受连接
client_socket, client_address = server_socket.accept()
print("客户端连接成功:", client_address)

# 接收数据
data = client_socket.recv(1024)
print("客户端发送的数据:", data.decode())

# 发送响应
response = b'Hello, client!'
client_socket.sendall(response)

# 关闭客户端套接字
client_socket.close()

# 关闭服务器套接字
server_socket.close()

この例では、ソケット モジュールをインポートし、それを使用して TCP サーバーを作成します。まず、socket.socket() 関数を使用してソケット オブジェクトを作成し、アドレス ファミリをsocket.AF_INETとして、送信プロトコルをsocket.SOCK_STREAM (TCP)として指定します。次に、bind() 関数を使用して、サーバーのアドレスとポートをソケットにバインドします。次に、listen() 関数を使用して接続をリッスンし、サーバーがリッスンしているポートを出力します。次に、accept() 関数を使用してクライアントの接続を受け入れ、クライアントのアドレスを出力します。recv() 関数を使用して、クライアントから送信されたデータを受信し、出力します。最後に、sendall() 関数を使用して、応答データをクライアントに送信します。最後に、クライアント ソケットとサーバー ソケットを閉じます。

ケース 9: UDP クライアントの作成

import socket

# 创建 UDP 客户端
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 发送数据
server_address = ('192.168.0.100', 9000)
data = b'Hello, server!'
client_socket.sendto(data, server_address)

# 接收响应
response, server_address = client_socket.recvfrom(1024)
print("服务器响应:", response.decode())

# 关闭客户端套接字
client_socket.close()

この例では、ソケット モジュールをインポートし、それを使用して UDP クライアントを作成しました。まず、socket.socket() 関数を使用してソケット オブジェクトを作成し、アドレス ファミリをsocket.AF_INET、送信プロトコルをsocket.SOCK_DGRAM (UDP) として指定します。次に、sendto() 関数を使用して、サーバーのアドレスserver_address にデータを送信します。recvfrom() 関数を使用してサーバーの応答データを受信し、出力します。最後に、クライアントソケットを閉じます。

これらの例は、MicroPython でのソケット モジュールの実際的な使用法を示しています。ソケット モジュールは、ソケット プログラミングのサポートを提供します。

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

おすすめ

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