我正在尝试通过带有 micropython 的套接字连接 ESP32 和 ESP8266。我无法让 ESP8266 客户端在不抛出 ECONNABORTED 103 错误的情况下连接到 ESP32 服务器。代码在下面,不确定我在这里做错了什么。这似乎在我的笔记本电脑上工作时有效,并且在尝试连接这两个特定设备之前没有任何问题。
ESP32 服务器代码:
import network
import socket
from time import sleep
SSID = 'esp'
KEY = 'meow'
ADDR = '192.168.4.1'
PORT = 2000
class socket_master:
def __init__(self):
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.bind(('',PORT))
self.attempt = 0
def accept_connection(self):
self.sock.listen(4)
self.conn, self.addr = self.sock.accept()
def test_speed(self):
data = 'attempt ' + str(self.attempt)
self.conn.sendall(data.encode())
self.attempt += 1
attempt = 0
try:
print('starting network')
ap = network.WLAN(network.AP_IF)
print('network started')
if ap.active() == False:
ap.active(True)
sleep(1)
ap.config(essid='esp')
print(ap.config('essid'))
print('set ssid')
print(ap.ifconfig())
except:
print('failed')
sm = socket_master()
sm.accept_connection()
print('waiting for client')
while True:
sm.test_speed()
ESP8266客户端代码:
# main.py -- put your code here!
import network
import socket
SSID = 'esp'
KEY = 'meow'
ADDR = '192.168.4.1'
PORT = 2000
def do_connect():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
wlan.connect('esp')
while not wlan.isconnected():
pass
print('network config:', wlan.ifconfig())
class socket_master_2:
def __init__(self):
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.connect((ADDR,PORT))
def receive_print(self):
data = self.sock.recv(1024)
print(data)
print(data.decode())
do_connect()
client = socket_master_2()
while True:
client.receive_print()
我注意到当 Micropython 安装在 ESP8266 上时,它会自动创建一个接入点,我相信当 CLIENT 尝试创建一个 STATION 并连接到 SERVER 时,MicroPython 在 CLIENT 板上为 8266 自动创建的 AP 会发生冲突使用我创建并想要使用的 STN。
我在 CLIENT 板上的 boot.py 中添加了以下内容以强制接管 AP,然后将其关闭。我的客户在重启后立即连接。
wlan = network.WLAN(network.AP_IF)
wlan.active(True)
wlan.config(essid='MicroTemp')
wlan.active(False)
我首先尝试简单地添加:
wlan.active(False)
到 boot.py 但那没有用。