【雕爷学编程】MicroPython手册之内置模块 network - 网络功能模块

在这里插入图片描述

MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。

在这里插入图片描述
MicroPython的内置模块network是一个用于配置和控制网络接口的模块,它可以用来访问和控制系统上的不同类型的网络接口,如WiFi,以太网,蜂窝网络等。它的主要特点是:

1、它可以创建和操作各种网络接口相关的对象,如WLAN, LAN, PPP, LTE等,以实现对网络接口的激活,连接,断开,查询等操作。
2、它可以使用socket模块来通过已配置的网络接口进行网络通信,如TCP, UDP, HTTP等协议。
3、它可以使用ssl模块来实现安全的网络通信,如TLS, HTTPS等协议。
4、它可以使用usocket模块来实现低级别的网络通信,如raw socket, packet socket等协议。

network模块的应用场景有:

1、用于连接到不同的网络服务或设备,例如路由器,服务器,传感器,摄像头等。
2、用于实现一些网络相关的功能或应用,例如Web开发,API调用,数据传输,远程控制等。
3、用于学习或教授一些网络相关的知识或技能,例如网络协议,网络安全,物联网等。

network模块的注意事项有:

1、network模块依赖于特定板子上的网络硬件和资源123,不同的MicroPython板子可能有不同的可用功能和参数范围123,需要查看具体的文档来确定支持的功能和使用方法。
2、network模块提供了对网络接口的直接和不受限制的访问和控制,使用不当可能会导致设备故障,锁定,崩溃,在极端情况下还可能导致硬件损坏。使用时需要谨慎并遵循相关的规范和指南。
3、network模块使用的回调函数是在中断上下文中执行123,需要尽量简短和快速,避免执行复杂或耗时的操作,以免影响系统性能和稳定性。

以下是MicroPython的内置模块network几个实际运用程序案例:

案例一:使用WLAN对象连接到WiFi网络

# 导入network模块
import network

# 创建一个WLAN对象,类型为STA_IF(站点接口)
wlan = network.WLAN(network.STA_IF)

# 激活WLAN对象
wlan.active(True)

# 连接到指定的SSID和密码
wlan.connect('your-ssid', 'your-key')

# 等待连接成功
while not wlan.isconnected():
    pass

# 打印当前网络配置信息
print(wlan.ifconfig())

案例二:使用LAN对象连接到以太网网络

# 导入network模块
import network

# 创建一个LAN对象,并指定PHY类型为LAN8720(一种以太网收发器)
lan = network.LAN(mdc=machine.Pin(23), mdio=machine.Pin(18), phy_type=network.PHY_LAN8720, phy_addr=0)

# 激活LAN对象
lan.active(True)

# 等待连接成功
while not lan.isconnected():
    pass

# 打印当前网络配置信息
print(lan.ifconfig())

案例三:使用LTE对象连接到蜂窝网络

# 导入network模块
import network

# 创建一个LTE对象
lte = network.LTE()

# 初始化LTE对象,并设置APN(接入点名称)
lte.init(carrier='standard', apn='your-apn')

# 连接到蜂窝网络
lte.attach()

# 等待连接成功
while not lte.isattached():
    pass

# 建立数据会话
lte.connect()

# 等待会话成功
while not lte.isconnected():
    pass

# 打印当前网络配置信息
print(lte.ifconfig())

案例四:连接到Wi-Fi网络:

import network

# 连接到Wi-Fi网络
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect("SSID", "password")

# 等待连接成功
while not wifi.isconnected():
    pass

# 打印网络信息
print("Connected to Wi-Fi")
print("IP address:", wifi.ifconfig()[0])

在这个示例中,我们使用network模块的WLAN类来连接到Wi-Fi网络。我们首先创建一个WLAN对象wifi,并通过active(True)方法激活Wi-Fi连接。然后,使用connect()方法传递Wi-Fi网络的SSID和密码来连接网络。接着,使用一个循环等待Wi-Fi连接成功,直到isconnected()方法返回True。最后,我们打印出连接成功后的网络信息,包括IP地址。

案例五:创建并运行WebSocket服务器:

import network
import usocket as socket
import ujson as json

# 创建WebSocket服务器
websocket = network.WLAN(network.AP_IF)
websocket.active(True)
websocket.config(essid="WebSocket Server", password="password")

# 创建套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("0.0.0.0", 80))
server_socket.listen(1)

# 等待客户端连接
print("Waiting for client connection...")
client_socket, client_address = server_socket.accept()
print("Client connected:", client_address)

# 接收和发送数据
while True:
    data = client_socket.recv(1024)
    if not data:
        break

    # 处理接收到的数据
    received_data = json.loads(data)
    print("Received data:", received_data)

    # 发送响应数据
    response_data = {
    
    "message": "Hello, client!"}
    response = json.dumps(response_data)
    client_socket.send(response)

# 关闭套接字
client_socket.close()
server_socket.close()

在这个示例中,我们使用network模块的WLAN类创建一个WebSocket服务器。我们首先创建一个WLAN对象websocket,并通过active(True)方法激活AP模式。然后,使用config()方法设置服务器的ESSID和密码。接着,我们创建一个套接字并绑定到IP地址和端口号。使用listen()方法开始监听客户端连接。在一个循环中,我们等待客户端连接并打印出客户端的地址。然后,我们接收客户端发送的数据,并将其解析为JSON格式。接着,我们处理接收到的数据,并构造一个响应数据发送回客户端。循环会持续执行,直到客户端断开连接。最后,我们关闭套接字。

案例六:发送HTTP GET请求并接收响应:

import network
import usocket as socket

# 创建套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 建立连接
client_socket.connect(("example.com", 80))

# 发送HTTP GET请求
request = "GET /api/data HTTP/1.0\r\nHost: example.com\r\n\r\n"
client_socket.send(request.encode())

# 接收响应
response = client_socket.recv(1024)
print("Received response:\n", response.decode())

# 关闭套接字
client_socket.close()

在这个示例中,我们使用network模块和usocket模块创建一个套接字,并通过connect()方法连接到远程服务器。我们使用HTTP协议发送一个GET请求,并接收服务器的响应。最后,我们打印出接收到的响应内容,并关闭套接字。

案例七:连接到 Wi-Fi 网络的另一个例子

import network

# 连接到 Wi-Fi 网络
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect("SSID", "password")

# 等待连接成功
while not wifi.isconnected():
    pass

# 打印 IP 地址
print("IP 地址:", wifi.ifconfig()[0])

在这个例子中,我们导入了 network 模块,并使用它初始化一个 Wi-Fi 连接。我们通过 network.WLAN 类创建一个 STA(Station)接口,然后使用 active(True) 方法启用接口。接下来,我们使用 connect() 方法传递 SSID 和密码连接到 Wi-Fi 网络。然后,我们使用一个循环等待连接成功(isconnected() 返回 True),最后打印获取到的 IP 地址。这个例子展示了如何使用 network 模块连接到 Wi-Fi 网络。

案例八:创建并运行 HTTP 服务器

import network
import usocket as socket

# 创建 Wi-Fi AP
ap = network.WLAN(network.AP_IF)
ap.active(True)
ap.config(essid="MicroPython-AP")

# 创建 Socket 服务器
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("0.0.0.0", 80))
server_socket.listen(1)

# 接受连接并发送响应
while True:
    client_socket, client_address = server_socket.accept()
    client_socket.send("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nHello, World!")
    client_socket.close()

在这个例子中,我们导入了 network 模块和 usocket 模块,并使用它们创建一个 Wi-Fi 接入点(AP)和一个 Socket 服务器。首先,我们通过 network.WLAN 类创建一个 AP 接口,并使用 active(True) 方法启用接口。然后,我们使用 socket.socket() 函数创建一个 TCP Socket 服务器,并绑定到 IP 地址和端口号。接下来,我们使用 listen() 方法开始监听连接。在无限循环中,我们接受客户端连接,发送简单的 HTTP 响应,并关闭连接。这个例子展示了如何使用 network 和 usocket 模块创建和运行一个简单的 HTTP 服务器。

案例九:使用 UDP 进行网络通信

import network
import usocket as socket

# 创建 UDP Socket
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind(("0.0.0.0", 8888))

# 接收数据并发送响应
while True:
    data, address = udp_socket.recvfrom(1024)
    print("接收到的数据:", data.decode())
    
    response = "Hello, Client!"
    udp_socket.sendto(response.encode(), address)

在这个例子中,我们导入了 network 模块和 usocket 模块,并使用它们创建一个 UDP Socket。我们使用 socket.socket() 函数创建一个 UDP Socket,并使用 bind() 方法绑定到 IP 地址和端口号。然后,在一个无限循环中,我们接收来自客户端的数据,并打印接收到的数据。然后,我们生成一个简单的响应消息,并使用 sendto() 方法将响应发送回客户端。这个例子展示了如何使用 network 和 usocket 模块进行基本的 UDP 网络通信。

这些示例展示了在 MicroPython 中使用 network 模块的实际应用。network 模块提供了与网络相关的功能,如连接到 Wi-Fi 网络、创建网络服务器、进行网络通信等。通过利用 network 模块,你可以在 MicroPython 中实现各种网络功能。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41659040/article/details/132775607