ESP32基于Thonny——python框架,PC端进行局域网控制led亮灭
用中文讲,该如何实现这个功能呢?
1:成功连接wifi
2:能循环正常接收数据
3:判断接收的数据,使led亮灭
就3步!那如何用代码实现呢?
第一步:成功连接wifi
调用官方联网模块:http://docs.micropython.org/en/latest/esp32/quickref.html#networking
def do_connect(): #自动连接WiFi函数
#启动wifi模块
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
#扫描是否连接wifi
if not wlan.isconnected():
print('connecting to network...')
wlan.connect('wifi名称', 'wifi密码')
while not wlan.isconnected():
print("正在连接网络……")
time.sleep(1)
#已连接wifi,并打印
print('已连接WiFi', wlan.ifconfig())
第二步:能正常接收数据
我的数据通信使用的是UDP通信
故:先创建一个UDP套接字并固定端口,然后将套接字返回——》主函数接收套接字使用——》接收数据——》打印接收的数据——》将接收的数据解码并打印——》完成接收;
def create_udp_socket():
#创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#绑定一个固定的端口(socket:插座,端口;bind:捆绑,绑定)
udp_socket.bind(("0.0.0.0",7788))
return udp_socket
def main(): #主函数
#wifi自动连接函数
do_connect()
led = machine.Pin(2, machine.Pin.OUT)
udp_socket = create_udp_socket()
#死循环
while True:
#等待接收数据
recv_data,sender_info = udp_socket.recvfrom(1024)
print("{}发送的数据:{}".format(sender_info, recv_data))
recv_data_str = recv_data.decode("utf-8")
print("解码数据为: {}".format(recv_data_str))
第三步:正确判断接收的数据并作出正确反应
调用IO口控制函数——》将led相应IO口重新定义——》进行判断——》为on:led就置1;
为off:led置0
安装网络调试助手进行PC端led的控制:Thonny, Python IDE for beginners
打开调试助手,将协议类型设置成UDP与字符编译器设置成UTF—8,并将电脑与路由器防火墙关闭,然后将发送目标IP地址与端口号正确填写,编辑好数据准备发送:on off
即可进行led亮灭控制!
完成!!!
完成!!!
完成!!!
完整程序:如下
import network #wifi连接头文件
import time #延时函数
import machine #IO口直接调用模块
import socket #套接字头文件
def do_connect(): #自动连接WiFi函数
#启动wifi模块
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
#扫描是否连接wifi
if not wlan.isconnected():
print('connecting to network...')
wlan.connect('wifi名称', '密码')
while not wlan.isconnected():
print("正在连接网络……")
time.sleep(1)
#已连接wifi,并打印
print('已连接WiFi', wlan.ifconfig())
def create_udp_socket():
#创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#绑定一个固定的端口(socket:插座,端口;bind:捆绑,绑定)
udp_socket.bind(("0.0.0.0",7788))
return udp_socket
def main(): #主函数
#wifi自动连接函数
do_connect()
#将D2IO口重新定义为led
led = machine.Pin(2, machine.Pin.OUT)
udp_socket = create_udp_socket()
#死循环
while True:
#循环等待接收数据
recv_data,sender_info = udp_socket.recvfrom(1024)
print("{}发送的数据:{}".format(sender_info, recv_data))
recv_data_str = recv_data.decode("utf-8")
print("解码数据为: {}".format(recv_data_str))
#循环判断接收的数据,并作出反应
if recv_data_str == "on":
led.value(1)
elif recv_data_str == "off":
led.value(0)
if __name__ == "__main__":
main()



