ESP32+micropython+作为WiFi热点与PC通信+TCP/IP接收并返回数据
ESP32+作为WiFi热点+接收并返回数据
ESP32代码
# ESP32 作为AP # 作为服务器 接收数据 并echo # ESP32 作为AP 即wifi热点 import network import utime # 配置ESP32为AP模式 ssid = 'ESP32_AP' password = '12345678' authmode = 4 # WPA2-PSK # 创建WLAN对象 wlan = network.WLAN(network.STA_IF) # 默认情况下,STA_IF接口已创建,但我们将其禁用 wlan.active(False) # 禁用STA接口 ap_if = network.WLAN(network.AP_IF) # 创建AP接口 ap_if.active(True) ap_if.config(essid=ssid, password=password, authmode=authmode) print('AP mode started with SSID:', ssid) print('Password:', password) # 使用socket库,编写tcp/ip程序,作为服务器 import socket def handle_request(client_socket): """ 处理对方发送过来的数据 然后回送相对应的数据 关闭连接时,return退出 """ while True: try: # 接收数据,设置超时以避免阻塞 client_socket.settimeout(5) # 5秒超时 # 5.1 接收数据 recv_content = client_socket.recv(1024) # 5.2 检查是否收到了空字节串(表示连接已关闭) if not recv_content: print('Client disconnected without sending data.') client_socket.close() return # 5.3 解码数据 decoded_content = recv_content.decode("utf-8") print('Received data:', decoded_content) # ...(处理数据的代码) #5.4 发送数据 response = "$echo*" client_socket.send(response.encode("utf-8")) except OSError as e: # 捕获OSError异常,这通常是由于网络问题导致的 print('Error receiving data:', e) # 关闭客户端连接 client_socket.close() print('Client connection close.') return #continue #except UnicodeDecodeError as e: # 尽管使用了errors="ignore",但理论上仍然可以捕获这个异常(尽管不太可能) # print('Error decoding data:', e) finally: print('Client connection recv-send once.') def socket_loop(): # 1. 创建套接字 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 为了保证在tcp先断开的情况下,下一次依然能够使用指定的端口,需要设置 server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 2. 绑定本地信息 server_socket.bind(("192.168.4.1", 8081)) # 绑定到所有接口上的8081端口 print("server_ip "+'192.168.4.1'+"port "+"8081") # 3. 变成监听套接字 server_socket.listen(5) # 开始监听连接 print('Server started, waiting for connections...') while True: # 4. 等待客户端的链接 client_socket, client_addr = server_socket.accept() print('Client connected from:', client_addr) # 5. 客户端的链接处理 handle_request(client_socket) # 6. 关闭套接字 tcp_server_socket.close() # 无限循环,持续检查连接的客户端 while True: # 获取已连接的客户端列表 socket_loop() utime.sleep(1) # 延时1秒
PC机上的调试软件: NetAssist5.0.8