【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.rhkb.cn/news/268047.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM运行时数据区——运行时数据区及线程概述

文章目录 1、运行时数据区概述2、线程3、小结 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM在程序执行期间把它所管理的内存分为若干个不同的数据区域。这些不同的数据区域可以分为两种类型&#xff…

Topaz Gigapixel AI:让每一张照片都焕发新生mac/win版

Topaz Gigapixel AI 是一款革命性的图像增强软件,它利用先进的人工智能技术,能够显著提升图像的分辨率和质量。无论是摄影爱好者还是专业摄影师,这款软件都能帮助他们将模糊的、低分辨率的照片转化为清晰、细腻的高分辨率图像。 Topaz Gigap…

【探索Linux】—— 强大的命令行工具 P.24(网络基础)

阅读导航 引言一、计算机网络背景1. 网络发展历史 二、认识 "协议"1. 网络协议概念2. 网络协议初识(1)协议分层(2)OSI参考模型(Open Systems Interconnection Reference Model)(3&…

差分题练习(区间更新)

一、差分的特点和原理 对于一个数组a[],差分数组diff[]的定义是: 对差分数组做前缀和可以还原为原数组: 利用差分数组可以实现快速的区间修改,下面是将区间[l, r]都加上x的方法: diff[l] x; diff[r 1] - x;在修改完成后,需要做前缀和恢复…

智慧应急:构建全方位、立体化的安全保障网络

一、引言 在信息化、智能化快速发展的今天,传统的应急管理模式已难以满足现代社会对安全保障的需求。智慧应急作为一种全新的安全管理模式,旨在通过集成物联网、大数据、云计算、人工智能等先进技术,实现对应急事件的快速响应、精准决策和高…

【IDEA+通义灵码插件】实现属于你的大模型编程助手

目录 1.前言 2.下载安装 3.解释代码 4.生成单元测试 5.生成注释 6.智能补全 1.前言 大模型到底该以一种什么方式落地,从而嵌入我们的工作当中,助力我们工作效率的提升,其实最好的方式也许就是虚拟助手的方式,就像钢铁侠的&…

最新发布!2D激光雷达与相机数据融合的新方法

作者:小柠檬 | 编辑:3DCV 在公众号「3DCV」后台,回复「原论文」获取论文 添加微信:dddvision,备注:3D高斯,拉你入群。文末附行业细分群 原文:最新发布!2D激光雷达与相…

【飞桨EasyDL】飞桨EasyDL发布的模型转换onnx(附工程代码)

一个愿意伫立在巨人肩膀上的农民...... 一、paddle转onnx转rknn环境搭建 paddle转onnx和onnx转rknn两个环境可以分开搭建,也可以搭建在一起。这里选择分开搭建,先搭建paddle转onnx。 1.1、创建环境 选择python3.8.13包进行创建环境 conda create --nam…

SQL 练习题目(入门级)

今天发现了一个练习SQL的网站--牛客网。里面题目挺多的,按照入门、简单、中等、困难进行了分类,可以直接在线输入SQL语句验证是否正确,并且提供了测试表的创建语句,也可以方便自己拓展练习,感觉还是很不错的一个网站&a…

项目实战:Qt监测操作系统物理网卡通断v1.1.0(支持windows、linux、国产麒麟系统)

若该文为原创文章,转载请注明出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136276999 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结…

Logic Pro:专业音乐制作软件,为你的音乐插上翅膀

Logic Pro是一款功能强大的音乐制作软件,专为专业音乐人和音乐爱好者设计。它提供了全面的音乐创作工具,包括音频录音、编辑、混音、合成以及自动化等功能,让你能够轻松实现音乐梦想。 Logic Pro软件获取 首先,Logic Pro拥有卓越…

使用 Azure 部署静态网页

Author:AXYZdong 硕士在读 工科男 有一点思考,有一点想法,有一点理性! 定个小小目标,努力成为习惯!在最美的年华遇见更好的自己! CSDNAXYZdong,CSDN首发,AXYZdong原创 唯…

【airtest】自动化入门教程(一)AirtestIDE

目录 一、下载与安装 1、下载 2、安装 3、打开软件 二、web自动化配置 1、配置chrome浏览器 2、窗口勾选selenium window 三、新建项目(web) 1、新建一个Airtest项目 2、初始化代码 3、打开一个网页 四、恢复默认布局 五、新建项目&#xf…

[业务系统]人物坐骑系统介绍I

1.问题描述 旧版本的坐骑系统依赖于人物装备了【法宝】(一种装备类型),装备了法宝的人物变拥有了【幻化】坐骑的能力,即在人物装备栏中的【外观】中会有已经幻化和未幻化(解锁)的坐骑。如果玩家至少幻化一…

基于R语言的分位数回归技术应用

回归是科研中最常见的统计学研究方法之一,在研究变量间关系方面有着极其广泛的应用。由于其基本假设的限制,包括线性回归及广义线性回归在内的各种常见的回归方法都有三个重大缺陷:(1)对于异常值非常敏感,极少量的异常值可能导致结…

(全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF

研究生英语读写教程基础级教师用书PDF 研究生英语读写教程提高级教师用书PDF pdf下载(完整版下载) (1)研究生英语读写教程基础级教师用书PDF (2)研究生英语读写教程基提高级教师用书PDF

【C++那些事儿】深入理解C++类与对象:从概念到实践(中)| 默认构造函数 | 拷贝构造函数 | 析构函数 | 运算符重载 | const成员函数

📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构冒险记 ✅C那些事儿 🌅 有航道的人,再渺小也不会迷途。 文章目录 1. 类的6个默认成员函数2. 构造函数2.1 概念2.2 特性 3. 析构函数3.1 概念3.2 特性 4. 拷贝…

GO-接口

1. 接口 在Go语言中接口(interface)是一种类型,一种抽象的类型。 interface是一组method的集合,接口做的事情就像是定义一个协议(规则),只要一台机器有洗衣服和甩干的功能,我就称它…

基于springboot+vue的工厂车间管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

初阶数据结构之---栈和队列(C语言)

引言 在顺序表和链表那篇博客中提到过,栈和队列也属于线性表 线性表: 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构。线性表在逻辑上是线性结构,也就是说是连…