秦皇岛岛主 发表于 2017-7-27 15:53:36

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]
查看完整版本: micropython 实现wifi转发