600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 树莓派Pico开发板扩展ESP01S无线WiFi模块通信实践

树莓派Pico开发板扩展ESP01S无线WiFi模块通信实践

时间:2023-12-10 01:30:40

相关推荐

树莓派Pico开发板扩展ESP01S无线WiFi模块通信实践

介绍树莓派Pico开发板扩展ESP01S无线模块建立WiFi连接,并采用AT命令和MicroPython语言实现树莓派Pico与手机之间的WiFi通信,通过手机网络助手控制Pico板载LED的亮灭。

1、树莓派Pico与ESP01S无线WiFi模块接口方法

树莓派Pico开发板硬件接口扩展引脚排列见图1所示。

图1 树莓派Pico开发板硬件接口扩展引脚排列

假设采用树莓派Pico开发板UART1串口,这里使用Pin6(物理引脚6)UART1 TX串行通信发送数据线信号线和Pin9(物理引脚12)UART1 RX串行通信接收数据信号线,树莓派Pico事先已插入到面包板中,Pico与ESP01S无线WiFi模块接口连接见图2所示。

图2 树莓派Pico与ESP01S无线WiFi连接

ESP01S无线WiFi模块基于ESP8266芯片,其主要特性如下:

•工作电压:+3.3 V(官方手册给出的外接电源参数:2.7V~3.6V,Imax>500mA)

•接口:可使用AT命令与UART串口进行串行通信

•集成TCP/IP协议栈

•802.11 b/g /n通信协议

•使用时无须接外部元件

ESP01S模块通过其TX和RX串口引脚与树莓派Pico进行通信,ESP01S模块接口信号引脚说明如下:

(1) VCC:3.3V电源

(2) GND:接地

(3) GPIO0-Flash:GPIO引脚,将该引脚连接到+3.3V为运行模式,连接到GND为下载模式

(4) GPIO2:GPIO引脚

(5) RST/GPIO16:复位引脚(若使用ESP01模块,运行模式须将该引脚上拉接;若使用ESP01S模块,运行模式可将该引脚悬空)

(6) EN/CH_PD:芯片使能引脚(若使用ESP01模块,运行模式须将该引脚上拉接;若使用ESP01S模块,运行模式可将该引脚悬空)

(7) TX/GPIO0:串行数据发送信号

(8) RX/GPIO3:串行数据接收信号

从ESP01S无线WiFi模块知,ESP-01S无线WiFi模块供电电压范围为2.7V-3.6V,最大电流Imax>500mA。树莓派Pico硬件接口扩展引脚3V3(OUT)为3.3V直流电源,我们可用该直流电源对ESP-01S无线WiFi模块进行供电,但该电源最大输出电流仅有300mA。为确保系统工作更加稳定可靠,这里采用带开关电池盒的两节5号电池串联对ESP01S无线WiFi模块进行供电(见图2)。当然,我们也可直接用3.0V-3.6V直流稳压电源对ESP01S供电,或者将4.75V-12V 直流稳压电源(如5V直流电压)连接到ASM1117三端稳压器模块的输入端在输出端产生3.3V电源对ESP-01S进行供电等(ASM1117:输入电压范围4.75V~12V, 输出电压3.3V)。

在图2中,树莓派Pico扩展口与ESP01S无线WiFi连接信号如下:Pico UART1 RX与ESP01S TX连接,Pico UART1 TX与ESP01S RX连接,Pico GND、ESP01S GND都和电池盒电源的负极(黑线)共地连接,ESP01S VCC与电池盒电源的正极(红线)连接。

设Pico UART1串口通信速率为115200 bps,采用MicroPython对Pico UART1串口进行初始化设置的程序片段如下:

from machine import UART

uart1 = UART(1,baudrate=115200,rx=Pin(9),tx=Pin(4)) #ESP01S出厂时的波特率为115200

2、ESP01S无线WiFi模块使用方法

(1) ESP01S连接WiFi

ESP01S连接WiFi,也就是上网用的无线信号,假设当前现场使用的无线信号(网络热点ssid)为H3C_202,密码(psw)为abcde12345。使用AT命令。

Step 1: AT+RST。ESP01S复位,延时不少于2s。

Step 2:AT+CWMODE=1。设置Station模式,需延时不少于2.5s。

Step 3:AT+CIPMUX=0。设置单路连接模式,延时不少于1s。

Step 4:AT+CWJAP=”H3C_202”,”abcde12345”。连接WiFi延时时间要长一些,建议测试延时不少于8秒。

采用MicroPython实现ESP01S连接WiFi的程序片段如下:

import utimeuart1.write("AT+RST\r\n") # 复位ESP01S无线模块utime.sleep(2)uart1.write("AT+CWMODE=1\r\n") # 使用Station模式utime.sleep(3)uart1.write("AT+CIPMUX=0\r\n") # 0:使用单连接模式,1: 使用多连接模式utime.sleep(1)uart1.write('''AT+CWJAP="H3C_202","abcde12345"\r\n''')#连接网络热点,ssid:H3C_202, psw:abcde12345utime.sleep(10)

另外,我们可使用AT命令AT+CWLAP列出当前能查到的WiFi信号,此命令不是必须,该命令延时不少于1s。

(2) ESP01S连接UDP/TCP

在本人使用的WiFi网络中,192.168.124.2为智能手机IP地址(端口号5000),192.168.124.3为电脑IP地址,192.168.124.6为Pico+ESP01模块IP地址(端口号5000)。这里以UDP通信协议为例,采用智能手机与Pico+EPS01S进行WiFi通信,智能手机的IP地址为192.168.124.2(端口号5000),则EPS01S连接UDP的命令为AT+CIPSTART=“UDP”,“192.168.124.2”,5000,本命令延时不少于4s。MicroPython程序语句可写为:

uart1.write('''AT+CIPSTART="UDP","192.168.124.2",5000,5000,2\r\n''')utime.sleep(4)

可将上面的(1)和(2) 的无线模块连接到WiFi并使用UDP进行通信定义为ConnectToWiFi()函数,使用时直接调用ConnectToWiFi()。

def ConnectToWiFi():uart1.write("AT+RST\r\n") # 复位ESP01S无线模块utime.sleep(2)uart1.write("AT+CWMODE=1\r\n") # 使用Station模式utime.sleep(3)uart1.write("AT+CIPMUX=0\r\n") # 0:使用单连接模式utime.sleep(1)uart1.write('''AT+CWJAP="H3C_202","abcde12345"\r\n''')# 连接网络热点,ssid:H3C_202, psw:abcde12345utime.sleep(10)# uart1.write("AT+CWLAP") #不是必须# utime.sleep(1)uart1.write('''AT+CIPSTART="UDP","192.168.124.2",5000,5000,2\r\n''')# 192.168.124.2为智能手机使用的IP地址(端口号5000)# 192.168.124.6为Pico+ESP01使用的IP地址(端口号5000)utime.sleep(4)

3、用智能手机测试WiFi控制树莓派Pico板载LED的亮灭

在网上找一款手机网络助手App。假设在网络助手中输入”开灯”命令点亮Pico板载LED,输入“关灯”命令熄灭Pico板载LED;当Pico+ESP01S一侧接收到”开灯”字符串命令将点亮Pico板载LED,接收到“关灯”字符串命令将熄灭Pico板载LED,满足要求的MicroPython程序段可用如下的while循环实现:

while True:if uart1.any(): # 判断是否有数据可以接收buffer = uart1.readline() # 读取字符串数据data = buffer.decode('utf-8') # 以UTF-8编码格式对buffer字符串进行解码print(data)if data.find("开灯")>0: # 若查找接收到的字符串为"开灯",则Pico板载LED点亮(未找到返回-1)LED.value(1)if data.find("关灯")>0: # 若查找接收到的字符串为"关灯",则Pico板载LED熄灭(未找到返回-1)LED.value(0)

下面是采用UDP通信协议的完整MicroPython程序清单:

#------------------------------------------------------# 基于树莓派Pico和ESP01S无线WiFi模块的通信程序示例# 程序文件名: main.py# 编制日期: 1月20日# 作 者:袁易学#------------------------------------------------------from machine import Pin, UARTimport utimeuart1 = UART(1,baudrate=115200,rx=Pin(9),tx=Pin(4)) #ESP01S出厂时的波特率为115200(OR UART0:0,1,0)LED = Pin(25, Pin.OUT)LED.value(1)utime.sleep(1)LED.value(0)# 定义树莓派Pico+ESP01S无线模块连接到WiFi函数# 向树莓派Pico的ESP01S无线模块发送AT命令,连接到本地可用的WiFidef ConnectToWiFi():uart1.write("AT+RST\r\n") # 复位ESP01S无线模块utime.sleep(2)uart1.write("AT+CWMODE=1\r\n") # 使用Station模式utime.sleep(3)uart1.write("AT+CIPMUX=0\r\n") # 0:使用单连接模式utime.sleep(1)uart1.write('''AT+CWJAP="H3C_202","abcde12345"\r\n''')# 连接网络热点,ssid:H3C_202, psw:abcde12345utime.sleep(10) # 延时10s# uart1.write("AT+CWLAP") # 不是必须# utime.sleep(1)uart1.write('''AT+CIPSTART="UDP","192.168.124.2",5000,5000,2\r\n''')# 192.168.124.2为本人智能手机使用的IP地址# 192.168.124.6为Pico+ESP01使用的IP地址utime.sleep(4)ConnectToWiFi()# 执行循环主程序while True:if uart1.any(): # 判断是否有数据可以接收buffer = uart1.readline() # 读取字符串数据data = buffer.decode('utf-8') # 以UTF-8编码格式对buffer字符串进行解码print(data)if data.find("开灯")>0: # 若查找接收到的字符串为"开灯",则Pico板载LED点亮(未找到返回-1)LED.value(1)if data.find("关灯")>0: # 若查找接收到的字符串为"关灯",则Pico板载LED熄灭(未找到返回-1)LED.value(0)

本人用的是Android手机,现用UDP/TCP Widget网络助手测试WiFi控制树莓派Pico板载LED的亮灭。首先在手机上安装好UDP/TCP Widget网络助手App,运行Widget手机网络助手应用程序后,切换到 [Connection]卡片界面,设置通信协议为UDP、IP地址为192.168.124.6(即Pico+ESP01S的IP地址)、端口号为5000,选中[Needs WiFi],选中红色的圆形勾选按钮,设置成功,见图3所示。

图3 手机端设置UDP、IP及Port

接下来切换至[MESSAGE]卡片界面,在Message编辑框设置“开灯”命令字符串,勾选回车CR(\r:其16进制ASCII码为0x0D)和换行LF(\n:其16进制ASCII为0x0A),选中红色的圆形勾选按钮,见图4所示。

图4 手机端设置WiFi控制Pico板载LED点亮的“开灯”字符串命令

图4的界面设置成功后的GUI界面见图5所示,若选中[Send]将发出“开灯”命令,Pico+ESP01无线模块接收到该命令后,执行while True主循环时,若uart1.any()语句判断有数据可以接收,则执行uart1.readline()读取字符串,对其进行“UTF-8”解码后存入data;若执行data.find(“开灯”)函数查找Pico接收到“开灯”字符串命令,则执行LED.value(1)点亮 Pico板载LED{若未查找到“开灯”,则data.find(“开灯”)返回-1};执行data.find(“关灯”)函数查找Pico接收到“关灯”字符串命令,则执行LED.value(0)熄灭Pico板载LED {若未查找到“关灯”,则data.find(“关灯”)返回-1}。

图5 手机端测试WiFi控制Pico板载LED点亮

图6展示了在Thonny调试环境下将前面的“基于树莓派Pico和ESP01S无线WiFi模块的通信程序示例“上传到Pico开发板,当在图5所示的手机Widget网络助手GUI界面选中[Send]时,Pico板载LED将被点亮。

图6 手机端网络助手发送“开灯”命令,Pico板载LED被点亮

发布日期:01月21日

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。