ESP32+作为WiFi热点+接收并返回数据
# 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 socketdef 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秒
调试软件: NetAssist5.0.8