文章目錄
- 前言
- 一、連接Wifi
- 1.1 創建STA接口
- 1.2 激活wifi接口
- 1.3 連接WIFI
- 1.4 判斷WIFI是否連接
- 1.5 連接WIFI總體代碼
- 二、創建TCP 客戶端
- 2.1 創建套接字
- 2.2 設置TCP服務器的ip地址和端口
- 2.3 連接TCP服務器
- 2.3 發送數據
- 2.4 接收數據
- 2.5 斷開連接
- 2.6 示例代碼
- 三、TCP服務器的創建
- 3.1 綁定服務器地址和端口號
- 3.2 開始監聽
- 3.3 接收客戶端的連接
- 3.4 發送和接收數據
- 3.5 關閉服務器
- 3.6 示例代碼
- 總結
前言
MicroPython 是 Python 的一種精簡實現,旨在運行于微控制器和嵌入式系統等資源受限的環境中。它提供了一種簡單而強大的方式來編寫和運行 Python 代碼,使開發人員能夠快速地創建各種嵌入式應用程序。
在嵌入式系統中,網絡通信是一個常見的需求,而 TCP(傳輸控制協議)是一種可靠的通信協議,被廣泛用于數據傳輸。在本文中,我們將探討如何使用 MicroPython 創建簡單的 TCP 客戶端和服務器,以實現在嵌入式設備之間進行網絡通信的功能。
一、連接Wifi
如果你需要使用WIFI,你需要導入network
模塊。import network
1.1 創建STA接口
我們可以使用下面這個函數進行創建STA接口,以連接WIFI:
wlan = network.WLAN(network.STA_IF)
1.2 激活wifi接口
我們可以使用下面這個函數激活wifi接口
wlan.active(True)
1.3 連接WIFI
我們可以使用下面這個函數進行WIFI的連接:
wlan.connect('wifi名稱', '密碼')
1.4 判斷WIFI是否連接
我們可以使用下面這個函數判斷WIFI是否連接成功,成功則返回True:
wlan.isconnected()
1.5 連接WIFI總體代碼
import network
import timewlan = network.WLAN(network.STA_IF) # 創建一個STA接口,用于連接WiFiwlan.active(True) # 激活WiFi接口
wlan.connect('WIFI', '123456789') # 連接到WiFi網絡while not wlan.isconnected():print("Connecting...\n")time.sleep_ms(200)print("Connect ok\n")
二、創建TCP 客戶端
如果你需要使用TCP客戶端,你需要導入usocket
模塊 import usocket
2.1 創建套接字
我們可以使用下面這個函數創建一個TCP套接字:
sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
2.2 設置TCP服務器的ip地址和端口
我們可以下面這個函數設置ip和端口
server_address = (ip, 8080) # 假設端口號為 8080
2.3 連接TCP服務器
我們可以使用下面這個函數連接TCP服務器:
sock.connect(server_address)
2.3 發送數據
我們可以使用下面這個函數進行發送數據:
sock.sendall(str)
比如說這樣:
message = "Hello, server!"
sock.sendall(message.encode())
2.4 接收數據
我們可以使用下面這個函數接收指定的數據:
sock.recv(recvNum)
例如可以下面這樣:
data = sock.recv(1024)
print("Received:", data.decode())
2.5 斷開連接
2.6 示例代碼
import network
import time
import usocketdef ConnectTCP():sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)server_address = ('192.168.217.197', 8080) # 假設端口號為 1234sock.connect(server_address)# 在這里可以添加對連接成功的處理邏輯while True:data = sock.recv(1024)print("Received:", data.decode())sock.sendall(data)time.sleep_ms(500)wlan = network.WLAN(network.STA_IF) # 創建一個STA接口,用于連接WiFi
wlan.disconnect()wlan.active(True) # 激活WiFi接口
wlan.connect('WIFI', '123456789') # 連接到WiFi網絡while not wlan.isconnected():print("Connecting...\n")time.sleep_ms(2000) # 延遲更長一點,確保連接成功print("Connect ok\n")ConnectTCP() # 在WiFi連接成功后執行TCP連接
三、TCP服務器的創建
3.1 綁定服務器地址和端口號
我們可以使用下面這個函數綁定服務器的地址和端口號:
server_socket.bind((SERVER_HOST, SERVER_PORT))
3.2 開始監聽
我們可以使用下面這個函數進行監聽:
server_socket.listen(1)
3.3 接收客戶端的連接
我們可以使用下面這個函數接收客戶端的連接:
server_socket.accept()
他的返回值為客戶端的socket和客戶端的地址。
我們可以這樣使用:
client_socket, client_address = server_socket.accept()
3.4 發送和接收數據
我們只需要使用accept拿到的客戶端socket使用recv
和sendall
函數即可
3.5 關閉服務器
我們可以使用下面這個函數關閉服務器:
server.close()
3.6 示例代碼
import usocket# 定義服務器地址和端口
SERVER_HOST = '0.0.0.0' # 監聽所有可用的網絡接口
SERVER_PORT = 1234# 創建 TCP 服務器套接字
server_socket = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)# 綁定服務器地址和端口
server_socket.bind((SERVER_HOST, SERVER_PORT))# 開始監聽傳入的連接
server_socket.listen(1)
print("TCP server is listening on {}:{}".format(SERVER_HOST, SERVER_PORT))while True:# 接受客戶端連接client_socket, client_address = server_socket.accept()print("New connection from:", client_address)try:# 接收客戶端發送的數據data = client_socket.recv(1024)if data:print("Received data:", data.decode())# 發送響應給客戶端client_socket.sendall("Hello from MicroPython TCP server!".encode())else:print("No data received from client.")except Exception as e:print("Error:", e)finally:# 關閉客戶端連接client_socket.close()
總結
通過本文的學習,我們了解了如何利用 MicroPython 在嵌入式系統中創建 TCP 客戶端和服務器。我們首先介紹了 TCP 協議的基本概念,然后詳細討論了如何使用 MicroPython 的 usocket 模塊實現 TCP 客戶端和服務器。
對于 TCP 客戶端,我們學習了如何創建套接字、連接到服務器、發送和接收數據。而對于 TCP 服務器,我們則了解了如何創建套接字、綁定到特定的端口、監聽連接請求,并在接受連接后進行數據交換。通過這些示例,讀者可以快速上手并應用于自己的嵌入式項目中。
需要注意的是,TCP 通信涉及網絡編程和異步處理,因此在實際應用中可能需要進一步優化和改進。例如,可以使用線程或異步框架來處理多個并發連接,以提高系統的性能和可擴展性。同時,安全性也是需要考慮的重要因素,因此在實際應用中應當采取適當的安全措施,確保數據的機密性和完整性。
總之,MicroPython 為嵌入式網絡編程提供了簡潔而強大的解決方案,使開發人員能夠輕松地構建各種聯網應用。通過深入學習和實踐,我們可以進一步探索和利用 MicroPython 在嵌入式領域的廣闊應用前景。