【Micropython基礎】TCP客戶端與服務器

文章目錄

  • 前言
  • 一、連接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使用recvsendall函數即可

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 在嵌入式領域的廣闊應用前景。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718580.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718580.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718580.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

批量二維碼的教程和優勢:拓寬應用領域,提升效率與創新

隨著二維碼技術的不斷發展,批量二維碼在多個領域展現出了顯著的優勢,為商業和行業帶來了更多便捷和創新。以下是批量二維碼的一些顯著優勢: 1. 高效快速生成: 批量二維碼一次性生成多個二維碼,相較于逐個生成的方式&…

Linux之進程信號

目錄 一、概念引入 1、生活中的信號 2、Linux中的信號 二、信號處理常見方式 三、信號的產生 1、鍵盤產生信號 2、系統調用接口產生信號 3、軟件條件產生信號 4、硬件異常產生信號 四、信號的保存 相關概念 信號保存——三個數據結構 信號集——sigset_t 信號集操…

超簡單的chatgpt-next-web部署教程!

隨著AI的應用變廣,各類AI程序已逐漸普及,尤其是在一些日常辦公、學習等與撰寫/翻譯文稿密切相關的場景,大家都希望找到一個適合自己的穩定可靠的ChatGPT軟件來使用。 ChatGPT-Next-Web就是一個很好的選擇。它是一個Github上超人氣的免費開源…

Docker基礎教程 - 1 Docker簡介

更好的閱讀體驗:點這里 ( www.doubibiji.com ) 1 Docker簡介 Docker是一個強大的容器化平臺,讓你能夠更輕松地構建、部署和運行應用程序。 下面我們來學習 Docker。 1.1 Docker是什么 1 現在遇到的問題 每次部署一臺服務器&…

CSS 入門指南(一)CSS 概述

CSS 概述 CSS 介紹 CSS(Cascading Style Sheets)通常稱為 CSS 樣式或層疊樣式表,是一種用來為結構化文檔(如 HTML 文檔或 XML 應用)添加樣式(字體、間距和顏色等)以及版面的布局等外觀顯示樣式…

《MySQL數據庫》day1

文章目錄 1.名詞解釋2.如何啟動mysql數據庫3.mysql常用命令4.數據庫當中最基本的單元是表:table5.關于SQL語句的分類6.簡單查詢7.條件查詢8.排序9.數據處理函數單行處理函數常見的有哪些? 10.分組函數(多行處理函數) 1.名詞解釋 …

VUE2與VUE3之間的主要區別

當談到 Vue.js 的版本時,Vue 2 和 Vue 3 是最常被提及的兩個版本。下面是 Vue 2 和 Vue 3 之間的一些主要區別: 1. 性能提升: Vue 3 在底層核心重寫了響應式系統,采用了 Proxy 對象,大幅提高了性能。Vue 3 還引入了靜…

徹底解決華為手機安裝谷歌框架后出現未認證的彈窗問題

引言 本人使用華為手機通過B站等平臺學習如何安裝谷歌框架與商店后,發現安裝谷歌框架后出現未認證的彈窗問題少有解決辦法,而且容易復發,在借鑒相關視頻后找到解決辦法,但視頻中的華谷框架需要付費才能使用,本文將提出…

spring注解驅動系列--自動裝配

Spring利用依賴注入(DI),完成對IOC容器中中各個組件的依賴關系賦值;依賴注入是spring ioc的具體體現,主要是通過各種注解進行屬性的自動注入。 一、Autowired:自動注入 一、注解介紹 1、默認優先按照類型去…

高中數學:函數奇偶性

一、定義 偶函數:定義域關于原點對稱,圖像關于Y軸對稱 f(x)f(-x) 奇函數:定義域關于原點對稱,圖像關于原點中心對稱 f(x)f(-x)0 等價于 f(-x)-f(x) 二、函數奇偶性的四種情況 注意: 即奇又偶的函數,只有…

Linux入門到入土

Linxu Linux 簡介 Linux 內核最初只是由芬蘭人林納斯托瓦茲(Linus Torvalds)在赫爾辛基大學上學時出于個人愛好而編寫的。 Linux 是一套免費使用和自由傳播的類 Unix 操作系統,是一個基于 POSIX(可移植操作系統接口&#xff09…

【復現】宏景HCM 任意文件讀取漏洞_63

目錄 一.概述 二 .漏洞影響 三.漏洞復現 1. 漏洞一: 四.修復建議: 五. 搜索語法: 六.免責聲明 一.概述 宏景HCM 將人才標簽技術應用于員工招聘、人才選拔等環節,通過多維度的標簽體系,形成不同專業序列的人才畫…

CV | 醫學影像上的圖像分割模型調研【更新于20240304】

mamba相關的圖像分割:VM-Unet,Manba-Unet,BRAU-Net,MDD-Unet,EGE-Unet,U-Mamba 2024.01.01_BRAU-Net Paper:BRAU-Net: U-Shaped Hybrid CNN-Transformer Network for Medical Image Segmentation https://arxiv.org/pdf/2401.00722.pdf 2024.01.09_U-Mamba Paper:U…

猴子吃桃問題(python版)

文章預覽: 題目python解法一:運行結果 python解法二:運行結果 python解法三:運行結果 題目 猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個。 第二天早…

python 腳本設置輸出顏色

在Python腳本中設置輸出顏色,通常可以使用colorama庫,它可以在Windows、Linux和macOS等平臺上工作。colorama庫擴展了Python的標準庫,使得在控制臺輸出彩色文本更加簡單。 首先,你需要安裝colorama庫。如果你還沒有安裝&#xff…

數據倉庫 vs. 數據湖:解析兩者的區別與優劣

在當今數字化時代,數據成為了企業最寶貴的資產之一。為了更好地管理和利用數據,企業需要建立合適的數據存儲和管理系統。在這個過程中,數據倉庫和數據湖成為了兩種常見的選擇。雖然它們都旨在幫助企業管理數據,但在實際應用中&…

flurl升級之后沒有FlurlNewtonsoftJsonSerializer

新建NewtonsoftJsonSerializer.cs /// <summary> /// ISerializer implementation based on Newtonsoft.Json. /// Default serializer used in calls to GetJsonAsync, PostJsonAsync, etc. /// </summary> public class NewtonsoftJsonSerializer : IJsonSerial…

Qt 簡約美觀的加載動畫 第九季

這次和大家分享6個非常清爽的加載動畫. &#x1f60a; 效果如下 &#x1f60a; 一共三個文件 , 可以直接編譯運行的呢 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QGridLayout> int main(int argc, char *argv[]) …

原理篇-- 定時任務xxl-job-服務端(admin)項目啟動過程--JobTriggerPoolHelper 初始化 (3)

文章目錄 前言一、JobTriggerPoolHelper 作用&#xff1a;二、JobTriggerPoolHelper 源碼介紹&#xff1a;2.1. start() 方法&#xff1a;2.2 任務觸發&#xff1a;2.3 XxlJobTrigger.trigger 任務執行&#xff1a;2.4 processTrigger 任務的執行&#xff1a;2.5 runExecutor 任…

【JAVA重要知識 | 第三篇】深入理解并暴打AQS原理、ReentrantLock鎖

文章目錄 3.深入理解AQS、ReentrantLock3.1AQS3.1.1AQS簡介3.1.2核心結構&#xff08;1&#xff09;設計模型&#xff08;2&#xff09;組成部分&#xff08;3&#xff09;State關鍵字 3.1.3實現的兩類隊列&#xff08;1&#xff09;同步隊列①CLH②Node③主要行為 img條件隊列…