02-ESP32连接WIFI、PC控制LED

📅 2026/7/20 18:15:43
02-ESP32连接WIFI、PC控制LED
ESP32连接WIFI、PC控制LED一、连接WIFI二、PC控制LED一、连接WIFI查阅MicroPython官方文档可以找到连接wifi最基础的实例代码设置工作模式AP(AccessPoint)无线接入点即家里的路由器类似的功能。STA(Station)无线终端即连接到AP的装置手机、电脑等。这个模式不允许其他设备接入。通过以下代码可以扫描到附近的设备importnetwork wlannetwork.WLAN()#默认即为STA模式wlan.active(True)# 扫描附近的wifi 2.4G按照list形式返回wifiListwlan.scan()# 解包扫描的元组数据格式化打印(ssid, bssid, channel, RSSI, security, hidden)forssid,bssid,channel,rssi,security,hiddeninwifiList:print(fSSID:{ssid}, bssid:{bssid}, channel:{channel}, rssi:{rssi}dBm, security:{security}, hidden:{hidden})PC端通过python建立udp通道后可以直接等待ESP32发送数据这里需要一些python网络通信相关的知识PC配置python环境直接执行脚本等待单片机发送数据即可importsocketimporttime# 创建一个UDP套接字udp_socketsocket.socket(socket.AF_INET,socket.SOCK_DGRAM)# 绑定本地的相关信息local_addr(192.168.17.237,8081)#本机ipv4信息端口udp_socket.bind(local_addr)# 等待接收对方发送的数据recv_data,addrudp_socket.recvfrom(1024)# 打印接收到的数据print(f[From{addr[0]}:{addr[1]}]:{recv_data.decode(utf-8)})time.sleep(1)#收到单片机数据之后会送一次数据des_addr(192.168.17.122,8081)send_dataIm here, my esp32.#发送的数据udp_socket.sendto(send_data.encode(utf-8),des_addr)#通过socket发送# 关闭套接字udp_socket.close()基于之前已经连接的wifi向PC发送数据importnetworkimporttimefromsocketimport*wlannetwork.WLAN()wlan.active(True)# 扫描附近的wifi 2.4G按照list形式返回wifiListwlan.scan()importnetworkimporttimefromsocketimport*wlannetwork.WLAN()wlan.active(True)# 扫描附近的wifi 2.4G按照list形式返回wifiListwlan.scan()# 解包扫描的元组数据格式化打印(ssid, bssid, channel, RSSI, security, hidden)forssid,bssid,channel,rssi,security,hiddeninwifiList:# 解码SSIDbytes转stringssid_strssid.decode(utf-8)ifssidelse隐藏网络# 格式化BSSIDMAC地址bssid_str:.join([%02x%bforbinbssid])print(fSSID:{ssid_str},bssid:{bssid_str},channel:{channel},rssi:{rssi}dBm,\ security:{security},hidden:{hidden})print(MAC:str(wlan.config(mac)))print(IP:str(wlan.ipconfig(addr4)))# 未连接时地址为空print(wlan.isconnected())wlan.connect(find,0000000000)time.sleep(5)print(wlan.isconnected())#连接成功之后向指定IP发送数据udp_socketsocket(AF_INET,SOCK_DGRAM)des_addr(192.168.17.237,8081)send_datahello my pc#发送的数据udp_socket.sendto(send_data.encode(utf-8),des_addr)#通过socket发送#发送信息之后等待PC回信# 绑定本地的相关信息local_addr(192.168.17.122,8081)#本机ipv4信息端口udp_socket.bind(local_addr)# 等待接收对方发送的数据recv_data,addrudp_socket.recvfrom(1024)# 打印接收到的数据print(f[From{addr[0]}:{addr[1]}]:{recv_data.decode(utf-8)})udp_socket.close()#关闭资源运行效果二、PC控制LED结合一的知识可以实现一个简单的PC发送数据、ESP32接受数据的小Demo# PC端importsocket# 创建一个UDP套接字udp_socketsocket.socket(socket.AF_INET,socket.SOCK_DGRAM)des_addr(192.168.17.122,8081)print(Test Demo)print(imput - 0 to exit)whileTrue:send_datainput(input send data:)udp_socket.sendto(send_data.encode(utf-8),des_addr)#通过socket发送print(fsend:{send_data})ifsend_data0:break# 关闭套接字udp_socket.close()# ESP32端importnetworkimporttimefromsocketimport*wlannetwork.WLAN()wlan.active(True)print(wlan.isconnected())wlan.connect(find,0000000000)time.sleep(5)print(wlan.isconnected())print(MAC:str(wlan.config(mac)))ip,maskwlan.ipconfig(addr4)print(IP:str(ip))udp_socketsocket(AF_INET,SOCK_DGRAM)local_addr(ip,8081)#本机ipv4信息端口udp_socket.bind(local_addr)whileTrue:#持续接收PC的数据# 等待接收对方发送的数据recv_data,addrudp_socket.recvfrom(1024)r_strrecv_data.decode(utf-8)# 打印接收到的数据print(f[From{addr[0]}:{addr[1]}]:{r_str})ifr_str0:breakudp_socket.close()#关闭资源先后运行PC与ESP32实现PC与ESP32的多次通信只需要在此基础上对ESP32端进行稍加改造便可实现PC控制LED的能力importnetworkimporttimefromsocketimport*frommachineimportPin,PWM pwm2PWM(Pin(2),freq10000) 命令格式LT [is_on] [duty] is_on为LED状态 1-打开 0-关闭 duty为亮度 0-100% 可选 defsplit_input(re_str)-List[int]:commre_str.split( )ifcomm[0].startswith(LT)andlen(comm)3:return[int(comm[1]),int(comm[2])]return[];defcontrol_light(is_on,duty100):ifduty100orduty0:returnifis_on1:pwm2.duty(int(1023*(duty/100)))elifis_on0:pwm2.duty(0)wlannetwork.WLAN()wlan.active(True)wlan.connect(find,0000000000)# 自己的wifi名称和密码ifnotwlan.isconnected():time.sleep(5)print(wlan.isconnected())ip,maskwlan.ipconfig(addr4)print(IP:str(ip))udp_socketsocket(AF_INET,SOCK_DGRAM)local_addr(ip,8081)#本机ipv4信息端口udp_socket.bind(local_addr)whileTrue:#持续接收PC的数据# 等待接收对方发送的数据recv_data,addrudp_socket.recvfrom(1024)r_strrecv_data.decode(utf-8)# 打印接收到的数据print(f[From{addr[0]}:{addr[1]}]:{r_str})commssplit_input(r_str)iflen(comms)!0:control_light(comms[0],comms[1])ifr_str0:breakudp_socket.close()#关闭资源PC端运行脚本输入对应指令即可控制LED亮灭相关资料、代码