当前位置: 首页 > news >正文

树莓派Pico W无线开发板UDP协议MicroPython网络编程实践

树莓派Pico W无线开发板(简称Pico W)是树莓派基金会于2022年6月底推出的搭载无线通信芯片的树莓派Pico开发板。本文在介绍树莓派Pico W无线开发板接口信号和TCP/IP和UDP通信协议基础上,给出Pico W无线开发板的UDP协议MicroPython网络编程实例。
一、树莓派Pico W无线开发板
树莓派Pico W无线开发板(简称Pico W)是树莓派基金会于2022年6月底推出的搭载无线通信芯片的树莓派Pico开发板,主要技术规格如下:
•工作电压:1.8~5.5V;
•MCU:MCU采用树莓派基金会自研的RP2040芯片,该芯片內部包括32位双核ARM Cortex-M0+,运行时钟133MHz;
•SRAM大小:264KB;
•Flash存储器容量:2MB(QSPI接口);
•WiFi无线通信功能:2.4GHz 802.11n
•Bluetooth 5.2蓝牙通信功能:2023年2月已支持C程序蓝牙开发,暂不支持MicroPython开发;
•GPIO接口引脚:26个,包括3个模拟输入引脚、16个PWM通道;
•串行通信接口:2个UART、2个SPI控制器和2个I2C控制器;
•USB接口:内置USB 1.1控制器和PHY,支持主控端(host)和设备端(device);
•片内温度传感器:RP2040内置一个片内温度传感器(可用来测量RP2040芯片的温度,以便进行温度补偿或保护),可以通过ADC4读取片内温度传感器的值并转换为摄氏或华氏温度。
Pico W搭载英飞凌公司的AIROC CYW43439无线通信芯片,具备2.4GHz WiFi 4(802.11n,支持WPA3)和Bluetooth 5.2(目前可使用官方提供的SDK 1.5编写C蓝牙程序代码;暂不支持MicroPython蓝牙程序开发,官方后期会推出MicroPython蓝牙程序驱动支持),带板载天线。
二、树莓派Pico W无线开发板接口信号
Pico W的外观尺寸和接口信号引脚也跟Pico开发板一样,两侧各有20個接口信号引脚(如图1所示),这些引脚采用邮票孔设计,以方便下游厂商以表面粘着方式把Pico W开发板焊接到产品的主板。
Pico W无线开发板接口信号引脚说明如下:
•VSYS:2V~5V电源输入引脚。
•VBUS:从Micro USB接口获得的5V电源输出,可供电给需要5V电源的电子元件。
•3V3:3.3V电源,与Pico W的工作电压相同。
•3V3_EN:使能或禁止电源;使能或禁止Pico W以及3V3引脚的电源输出。
•RUN/RESET:启用或停用Pico∕重置,输入低电平将使Pico W停止运行。
•GP0-GP28:GPIO(通用输入/输出)引脚,板载LED与WL_GPIO0相连。
•ADC0 ~ ADC2:具备模拟输入功能的GPIO引脚,可当作模拟输入或数字输入/输出引脚。
•ADC_VREF:模数转换器(ADC)的参考电压输入。
•GND:模数转换器的接地引脚,与ADC_VREF引脚配合使用。 在这里插入图片描述
图1
特别说明的是,Pico W开发板板载LED引脚与Pico开发板接GPIO25不同,在MicroPython中,Pico W开发板板载LED引脚就叫做‘LED’或者‘WL_GPIO0’(均为字符串类型),例如,下面两行MicroPython语句都代表建立控制Pico W板载LED对象:
led = Pin(‘LED’, Pin.OUT)

led = Pin(‘WL_GPIO0’, Pin.OUT)
三、使用UDP协议无线控制Pico W板载LED灯的亮灭
Pico W开发板相较于Pico开发板,重点是是WiFi无线通信功能。使用MicroPython编写Pico W开发板WiFi无线通信相关应用,程序与ESP8266或ESP32的写法完全相同。
1、Pico W开发板连接WiFi无线网络
以下程序代码将Pico W开发板的WiFi设置为STA模式,连上指定的无线WiFi路由器并显示其IP地址:

# Filename: Pico_W_1.py
import network
ssid = '你的无线WiFi名称'
password = '你的无线WiFi密码'
wlan = network.WLAN(network.STA_IF)  # 设为STA模式
wlan.active(True)  # 启用网络
wlan.connect(ssid, password)  # 连接网络AP
while not wlan.isconnected():  # 重复直到连上网络为止pass
print('IP: ', wlan.ifconfig()[0])  # 显示Pico W开发板IP地址

ifconfig()用于设定或返回网络接口参数。连线成功后调用此方法,它将返回包含4个参数的4元组,依次代表Pico W开发板IP地址、子网掩码、网关地址和DNS服务器地址,如:(‘192.168.0.10’, ‘255.255.255.0’, ‘192.168.0.1’, ‘192.168.0.1’)。所示wlan.ifconfig()[0]將返回Pico W开发板的IP地址。
现将以上程序复制粘贴到Thonny IDE编辑器,再按下[F5]或点击[播放]按钮,稍后将在Thonny Shell窗口看到Pico W开发板分配到的IP地址(如图2所示)。
在这里插入图片描述
图2
2、使用Socket库
Socket库主要用于网络通信。UDP(用户数据报)和TCP/IP是通过网络发送和接收数据最常用的两种通信协议。TCP/IP是一种可靠的包含握手从而确保数据包传递到所需的目的地的可靠通信协议。而UDP不那么可靠但是一个快速的通信协议,可用于快速的无线网线控制。UDP和TCP/IP通信协议的比较如表1所示。
表1 TCP/IP和UDP通信协议的比较
在这里插入图片描述
基于UDP和TCP/IP通信协议的程序是基于服务器-客户机模式的,其中一个节点发送数据,另一个节点接收数据,反之亦然。数据通过端口传输,服务器和客户端必须使用相同的端口号。
关于UDP程序:UDP是一种无连接的通信协议,因此在将数据包发送到目的节点之前,不需要与目的节点建立连接。下面是服务器和客户机间的基本通信过程。
(1)服务器
•定义目的节点IP地址和端口号;
•构建数据包;
•创建socket套接字;
•将套接字绑定到本地端口;
•从客户端接收数据;
•向客户端发送数据;
•关闭连接。
(2)客户端
•定义目的节点IP地址和端口号;
•创建socket套接字;
•向服务器发送数据;
•从服务器接收数据;
•关闭连接。
注意:服务器和客户端都可以相互发送和接收数据包。
3、使用UDP协议无线控制Pico W板载LED的亮灭
(1)MicroPython程序清单(程序文件名:Pico_W_2.py)

# Filename: Pico_W_2.py
#----------------------------------------
# 使用UDP协议控制Pico W开发板板载LED的亮灭
#----------------------------------------
from machine import Pin
import network
import socket
import timeled = Pin('WL_GPIO0', Pin.OUT)       # 板载LED连到WL_GPIO0
led.value(0)                         # 板载LED熄灭# 定义连接WiFi函数
def connect():global wlanwlan = network.WLAN(network.STA_IF)wlan.active(True)wlan.connect("你的无线WiFi名称", "你的无线WiFi密码")while wlan.isconnected() == False:print("等待连接...")time.sleep(1)print("已连接...")connect()
port = 5000
UDP = ("", port)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(UDP)# 主循环
while True:buf, addr = sock.recvfrom(1024)if buf:buf = buf.decode('utf-8')if buf[0]=="D" and buf[1]=="O" and buf[2]=='N':led.value(1)if buf[0]=="D" and buf[1]=='O' and buf[2]=='F' and buf[3]=='F':led.value(0)

本程序使用UDP通信协议控制Pico W开发板板载LED的亮灭(DON: 点亮LED灯;DOFF: 熄灭LED灯)。现对程序做了简要说明:
•导入相关模块,包括machine、network、socket和time。
•创建一个Pin对象led,将其设置为输出模式,并连接到WL_GPIO0引脚,它板载LED所连接的引脚。
•定义一个函数connect,用于连接WiFi网络。函数中创建一个WLAN对象wlan,并激活STA模式。然后使用wlan.connect方法连接到所使用的WiFi网络SSID和密码。使用while循环等待连接成功,并显示提示信息。
•调用connect函数,连接到WiFi网络。
•定义一个端口号port为5000,并创建一个元组UDP,包含空字符串和端口号。空字符串表示绑定到所有可用地址。
•创建一个socket对象sock,并指定使用IPv4协议和UDP协议。
•使用sock.bind方法将socket绑定到UDP元组指定的地址和端口上。
•进入主循环,不断接收来自客户端的数据包。使用sock.recvfrom方法接收最多1024字节的数据,并返回一个元组,包含数据buf和发送方地址addr。
•如果接收到数据,则将其解码为utf-8格式的字符串,并判断其内容。如果接收到的字符串以"DON"开头,则表示点亮Pico W板载LED灯,此时led对象被置为高电平(1)。如果字符串以"DOFF"开头,则表示熄灭Pico W板载LED灯,此时led对象被设置为低电平(0)。
关于MicroPython网络编程的相关技术文档,可以参考以下网站:
https://docs.micropython.org/en/latest/library/network.WLAN.html。
(2)使用Android手机客户端测试无线WiFi控制Pico W板载LED的亮灭
复制粘贴程序文件“pico_W_2.py”的内容到Thonny IDE,运行程序,若无线WiFi网络正确连接,Thonny Shell窗口将显示“已连接…”字符串。这里树莓派Pico W的IP地址为192.168.1.10(即与前面图2显示的IP地址相同)。
在使用Android智能手机测试之前,我们应在Android手机上安装一种UDP App程序,这里安装并使用UDP Terminal (可从https://apkpure.com/cn网站搜索UDP Terminal下载该UDP终端App程序),如图3所示。
在这里插入图片描述
图3
使用Android客户端测试无线WiFi控制Pico W板载LED亮灭的步骤如下:
•运行安装在Android手机的UDP Terminal程序;
•在UDP Terminal程序中,设置Pico W开发板的IP地址(这里为192.168.1.10),如图4所示。

在这里插入图片描述
图4
•单击[Start Terminal]按钮。
•在屏幕底部输入命令DON,然后单击[Send ASCII] (如图5所示), Pico W板载LED灯被点亮(如图6所示);若在屏幕底部输入命令DOFF,Pico W板载LED灯熄灭。
在这里插入图片描述
图5
在这里插入图片描述
图6
我们还可将图5的[Btn1]和[Btn2]按钮分别设置为“DON”和“DOFF”,在手机中直接点击[Btn1]和[Btn2]按钮远程无线控制Pico W板载LED灯的亮灭。
四、使用UDP协议无线控制获取Pico W开发板RP2040芯片片内温度传感器值
(1)MicroPython程序清单(程序文件名:Pico_W_3.py)

#----------------------------------------------------------、
# Filename: Pico_W_3.py
# Android手机远程读取Pico W无线开发板RP2040芯片片内温度传感器值
#------------------------------------------------------------
from machine import ADC
import network
import socket
import timeAnalogIn = ADC(4)		# ADC4
Conv = 3300 / 65535		# Conversion factor
Conv = 3.3 / 65535	    # Conversion factor# 定义获取Pico W开发板RP2040芯片片内传感器温度值函数
def GetChipTemperature():V = AnalogIn.read_u16()V = V * ConvTemp = 27 - (V - 0.706) / 0.001721return Temp# 定义连接WiFi无线网络
def connect():global wlanwlan = network.WLAN(network.STA_IF)wlan.active(True)wlan.connect("你的无线WiFi名称", "你的无线WiFi密码")while wlan.isconnected() == False:print("等待连接...")time.sleep(1)print("已连接...")connect()
port = 5000
UDP = ("", port)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(UDP)# 主循环
while True:buf, addr = sock.recvfrom(1024)if buf:buf = buf.decode('utf-8')if buf[0]=="G" and buf[1]== 'T':T = GetChipTemperature()Tstr = "T=" + str(T)[:5]Tlen = len(Tstr)sock.sendto(Tstr, addr)

(2)使用Android手机客户端测试获取Pico W开发板RP2040芯片片内温度传感器温度值
以上Pico_W_3.py程序使用UDP协议双向通信来接收和发送数据。
现Pico_W_3.py程序下载到Pico W并运行。当手机需要从Pico W开发板获取RP2040芯片片内温度传感器温度数据时,我们通过UDP Terminal输入“GT”命令以向Pico W开发板发送数据请求,Pico W便会将温度值显示在手机屏幕上(如图7所示)。
在这里插入图片描述
图7
需要说明的是,本文在手机客户端使用了UDP Terminal对Pico W开发板UDP无线通信程序进行了测试,我们还可开发专用手机UDP通信App程序或电脑UDP通信应用程序以满足实际应用需求。
发布日期:2023年3月19日

相关文章:

树莓派Pico W无线开发板UDP协议MicroPython网络编程实践

树莓派Pico W无线开发板(简称Pico W)是树莓派基金会于2022年6月底推出的搭载无线通信芯片的树莓派Pico开发板。本文在介绍树莓派Pico W无线开发板接口信号和TCP/IP和UDP通信协议基础上,给出Pico W无线开发板的UDP协议MicroPython网络编程实例…...

跨域解决方案

跨域解决方案 1.跨域基本介绍 文档:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS 跨域问题是什么? 一句话:跨域指的是浏览器不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器对 javascr…...

springboot的统一处理

在处理网络请求时,有一部分功能是需要抽出来统一处理的,与业务隔开。 登录校验 可以利用spring mvc的拦截器Interceptor,实现HandlerInterceptor接口即可。实现该接口后,会在把请求发给Controller之前进行拦截处理。 拦截器的实…...

C/C++每日一练(20230319)

目录 1. 反转链表 II 🌟🌟 2. 解码方法 🌟🌟 3. 擅长编码的小k 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 …...

GitHub 上有些什么好玩的项目?

前言 各个领域模块的都整理了一下,包含游戏、一些沙雕的工具、实用正经的工具以及一些相关的电商项目,希望他们可以给你学习的路上增加几分的乐趣,我们直接进入正题~ 游戏 1.吃豆人 一款经典的游戏开发案例,包括地图绘制、玩家控…...

蓝桥杯刷题第十二天

问题描述给定一个正整数 n &#xff0c;请问 n 的十进制表示中末尾总共有几个 0 &#xff1f;输入格式输入一行包含一个正整数 n。输出格式输出一个整数&#xff0c;表示答案。评测用例规模与约定对于所有评测用例&#xff0c;1 < n < 1000000000。运行限制最大运行时间&…...

开发也可以很快乐,让VSCode和CodeGPT带给你幸福感

CodeGPT 是一款 Visual Studio Code 扩展&#xff0c;可以通过官方的 OpenAI API 使用 GPT-3 (预训练生成式转换器) 模型&#xff0c;在多种编程语言中生成、解释、重构和文档化代码片段。CodeGPT 可用于各种任务&#xff0c;例如代码自动完成、生成和格式化。它还可以集成到代…...

【Linux】基本指令介绍

前言从今天开始&#xff0c;我们一起来学习Linux的相关知识&#xff0c;今天先来介绍怎么登录Linux&#xff0c;并且介绍一些Linux的基本指令。使用 XShell 远程登录 Linux很多同学的 Linux 启动进入图形化的桌面. 这个东西大家以后就可以忘记了. 以后的工作中 没有机会 使用图…...

JQuery介绍

文章目录一. JQuery介绍二. JQuery使用三. JQuery选择器四. JQuery选择集过滤五.JQuery选择集转移六. JQuery获取和操作标签内容七. JQuery获取和设置元素属性八. JQuery事件九.JQuery事件代理- 事件冒泡- 事件绑定的问题- 事件代理一. JQuery介绍 定义: jquery是JS的一个函数…...

Selenium基础篇之八大元素定位方式

文章目录前言一、如何进行元素定位&#xff1f;1.右击元素-检查2.F12-选择工具点击元素3.借助selenium IDE二、八大元素定位方式1.ID1.1 方法1.2 举例1.3 代码1.4 截图2.NAME2.1 方法2.2 举例2.3 代码2.4 截图3.CLASS_NAME3.1 方法3.2 举例3.3 代码3.4 截图4.TAG_NAME4.1 方法4…...

C语言的灵魂---指针(基础)

C语言灵魂指针1.什么是指针&#xff1f;2.指针的大小3.指针的分类3.1比较常规的指针类型3.2指针的解引用操作3.3野指针野指针的成因&#xff1a;4.指针运算4.1指针加减整数4.2指针-指针1.什么是指针&#xff1f; 这个问题我们通常解释为两种情况&#xff1a; 1.指针本质&#…...

带你一文透彻学习【PyTorch深度学习实践】分篇——线性模型 梯度下降

分享给大家一段我国著名作家、散文家史铁生先生的一段话: 把路想象的越是坎坷就越是害怕,把山想象的越是险峻就越会胆怯,把别人想象的越是优秀就越是不敢去接近。惯于这样想象的人,是天生谦卑的人。 --------史铁生《关于恐惧》 🎯作者主页:追光者♂🔥 �…...

Javascript如何截取含有表情的字符串

Javascript如何截取含有表情的字符串 一、说说背景 社区社交应用中&#xff0c;难免会有输入用户昵称的操作&#xff0c;如果用户老老实实的输入中文汉字或者英文字母&#xff0c;那当然没啥问题&#xff0c;我们能够轻松的处理字符串的截取&#xff0c;产品说按多少字符截取…...

【云原生】prometheus结合jmx exporter 的java agent模式采集tomcat监控实战

前言 大家好&#xff0c;我是沐风晓月&#xff0c;今天我们又来探讨一款使用prometheus监控tomcat的另外一种形式&#xff1a;Java agent模式。 如果你想使用http server模式&#xff0c;请参考&#xff1a;【云原生】prometheus结合jmx exporter 的http server模式采集tomca…...

深度学习应用技巧总结与pytorch框架下训练过程的记忆技巧

大家好&#xff0c;我是微学AI&#xff0c;今天给大家总结一下深度学习模型训练过程中的一些技巧总结&#xff0c;以及pytorch框架下训练过程的记忆技巧&#xff0c;很有用的干货&#xff0c;理解模型训练过程的步骤&#xff0c;让流程难懂&#xff0c;难记忆的过程变得简单&am…...

数字图像处理 基于OpenCV的一种简单的阴影校正的方法

一、简述 在很多工业场景,都是基于工业相机、或者结合显微镜进行拍照采样,以进行进一步的分析,通常情况下分析结果和图像的质量息息相关,我们这里讨论的主要是因光照不均衡而在图像边缘产生阴影的图像的校正。 1、亮度阴影 亮度阴影(光学上称为渐晕,Vignetting)就是我们…...

OpenHarmony之cJSON库使用介绍

一、前言 我们前面OpenHarmony设备配网 文章中&#xff0c;给大家提供的示例有使用cJSON解析和cJSON创建json数据的用法 那么有同学会提出疑问&#xff0c;我难道只能用cJSON库&#xff1f; 当然不是啊&#xff0c;你也可以用 json-parser、parson、jansson 等等三方库 回到正题…...

门面设计模式

介绍 Java门面模式(Facade Pattern)是一种结构型设计模式,它提供了一个简单的接口,隐藏了复杂系统的实现细节,使得客户端可以更加容易地使用系统. 在Java门面模式中,一个门面对象(Facade)提供了一个简单的接口,该接口包装了一个或多个复杂的子系统,客户端可以直接使用门面对象…...

苹果手写笔好用吗?比较好用的ipad手写笔推荐

随着技术的进步&#xff0c;各种新型的电子产品和数码器件层出不穷。比如智能手机、IPAD、以及电容笔。而在实际生活中&#xff0c;为了更好的利用ipad&#xff0c;我们需要一支好用的电容笔。就好比如我们在ipad上做笔记&#xff0c;要用手来进行手写记录&#xff0c;会很不方…...

GPT-4来了!看看她究竟强在哪里!

GPT-4来了&#xff01;OpenAI老板Sam Altman直接开门见山地介绍说&#xff1a;这是我们迄今为止功能最强大的模型&#xff01;GPT-4是一个超大的多模态模型&#xff0c;也就是说&#xff0c;它的输入可以是文字&#xff08;上限2.5万字&#xff09;&#xff0c;还可以是图像。我…...

GPT-4 API 接口调用及价格分析

GPT-4 API 接口调用及价格分析 15日凌晨&#xff0c;OpenAI发布了万众期待的GPT-4&#xff01;新模型支持多模态&#xff0c;具备强大的识图能力&#xff0c;并且推理能力和回答准确性显著提高。在各种专业和学术基准测试上的表现都媲美甚至超过人类。难怪OpenAI CEO Sam Altm…...

MySQL高级功能:存储过程、触发器、事务、备份和恢复

MySQL高级功能MySQL是一款广泛使用的关系型数据库管理系统&#xff0c;它不仅具有基本的数据库功能&#xff0c;还支持一些高级功能&#xff0c;如存储过程、触发器、事务、备份和恢复等。这些高级功能可以帮助开发人员更高效地管理和维护数据库&#xff0c;本文将介绍MySQL的高…...

SAP 发出商品业务配置

SAP发出商品业务配置&#xff0c;即&#xff1a; 出具销售发票时结转成本 一、业务背景&#xff1a; 发出商品业务简单的理解为跨月开票&#xff0c;即出库与开票不在同一个月份。 该业务在系统内的实现方式&#xff0c;为保证成本与收入的配比&#xff0c;在出库时不计算成…...

C++线程池理解

线程池基本信息 线程池是一种结合池化思想衍生出来的一种线程管理及使用的方案 其主要针对服务器端多线程场景下&#xff0c;服务器频繁接收请求&#xff0c;每个请求都分配一个单独的线程去处理。 使用线程的开销&#xff1a; 创建和销毁线程调度线程 线程池主要解决的核…...

2023年最新软著申请流程(一):软件著作权说明、国家版权官网的账号注册与实名认证

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

SuperMap iServer如何发布S3对象存储中的瓦片

作者&#xff1a;Carlo 前言&#xff1a; S3 对象存储服务是一个基于对象的海量存储服务&#xff0c;为客户提供海量、安全、高可靠、低成本的数据存储能力。其海量、安全的特性&#xff0c;为存储海量瓦片提供可能。 SuperMap iServer 支持将存储在阿里云对象存储 (OSS)、华为…...

ElasticSearch-第四天

目录 ElasticSearch文档分值_score计算底层原理 relevance score算法 Term frequency Inverse document frequency Field-length norm 分析一个document上的_score是如何被计算出来的 分词器工作流程 切分词语 内置分词器的介绍 定制分词器 ik分词器详解 IK分词器自…...

基于鲸鱼算法的极限学习机(ELM)分类算法-附代码

基于鲸鱼算法的极限学习机(ELM)分类算法 文章目录基于鲸鱼算法的极限学习机(ELM)分类算法1.极限学习机原理概述2.ELM学习算法3.分类问题4.基于鲸鱼算法优化的ELM5.测试结果6.参考文献7.Matlab代码摘要&#xff1a;本文利用鲸鱼算法对极限学习机进行优化&#xff0c;并用于分类问…...

一文彻底读懂webpack常用配置

开发环境 const webpack require("webpack"); const path require(path) module.exports {// entry: {// a: ./src/0706/a.js,// c: ./src/0706/c.js,// },entry: "./src/0707/reactDemo.js",output: {filename: [name]_dist.js,path: path.resolve(__…...

大环境不好,找工作太难?三面阿里,幸好做足了准备,已拿offer

三面大概九十分钟&#xff0c;问的东西很全面&#xff0c;需要做充足准备&#xff0c;就是除了概念以外问的有点懵逼了&#xff08;呜呜呜&#xff09;。回来之后把这些题目做了一个分类并整理出答案&#xff08;强迫症的我狂补知识&#xff09;分为软件测试基础、Python自动化…...