micropython 实现wifi转发
esp8266和esp32都可以使用AP+STA的模式,之前一些朋友说能否用让这些芯片的AP和STA同时使用,完成类似于wifi中继的功能。经过测试,我完成了类似的功能。(中继工作在更底层,我无法实现,只是在功能层面上完成了数据转发)我期待完成的功能
PC------------------->ESP8266(AP)----------->(STA)-------->路由器---------->手机
tcpClient (tcpServer(10000端口) tcpClient ) tcpServer(5000端口)
192.168.4.3 192.168.4.1 192.168.3.135 192.168.3.125
原料:
硬件:
FireBeetle-ESP32或FireBeetle-ESP8266主板x1
手机(我用的小米max2) x1
路由器 x1
软件:
uPyCraft V0.22及以上版本
红色部分是程序需要完成的功能
1. 我的PC连接到ESP8266的tcpServer 10000端口,并向ESP8266发送数据hello
2. ESP8266发现10000端口有数据到来,便将其直接转发给手机的5000端口
3. 此程序完成的是单向,并且功能比较简单,逻辑有点low,只作为演示,后面我会用端口复用实现一个更简洁的程序。
测试代码如下(如有缩进问题,可从附件中下载代码文件)wifiForward.py
import network
import socket
import time
SSID="DFROBOT_AP"
PASSWORD="12345678"
port=10000
wlan=None
listenSocket=None
port2=5000
ip2='192.168.3.125'
def connectWifi(ssid,passwd):
global wlan
network.WLAN(network.AP_IF).active(True)
wlan=network.WLAN(network.STA_IF)
wlan.active(True)
wlan.disconnect()
wlan.connect(ssid,passwd)
while(wlan.ifconfig()=='0.0.0.0'):
time.sleep(1)
return True
try:
connectWifi(SSID,PASSWORD)
ip=wlan.ifconfig()
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.connect((ip2,port2))
listenSocket = socket.socket()
listenSocket.bind((ip,port))
listenSocket.listen(1)
listenSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
print ('tcp waiting...')
while True:
print("accepting.....")
conn,addr = listenSocket.accept()
print(addr,"connected")
while True:
data = conn.recv(1024)
if(len(data) == 0):
print("close socket")
conn.close()
break
print(data)
ret = s.send(data)
except:
if(listenSocket):
listenSocket.close()
wlan.disconnect()
wlan.active(False)
开始干活
第一步:电脑连接到esp8266的AP,默认密码是micropythoN
第二步:将手机连到路由器DFROBOT_AP(就是你的路由器SSID)
第三步:打开手机网络调试助手(楼主用的有人 点击这里下载),创建tcpServer,端口5000
第四步:ESP8266运行楼主提供的程序wifiForward.py
第五步:ESP8266被路由器dhcp分配了IP(这里是192.168.3.135),并发起了向手机tcpServer端的连接
第六步:PC端运行网络调试助手,创建tcpClient,连接到server端(192.168.3.135:10000 注意这里不是192.168.4.1)
第七步:PC端发送数据hello,手机端收到了数据
页:
[1]