13425浏览
查看: 13425|回复: 0

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

[mw_shl_code=python,true]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.0'):
    time.sleep(1)
  return True

try:
  connectWifi(SSID,PASSWORD)
  ip=wlan.ifconfig()[0]
  
  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)

[/mw_shl_code]


开始干活
第一步:电脑连接到esp8266的AP,默认密码是micropythoN
micropython 实现wifi转发图3

第二步:将手机连到路由器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)
micropython 实现wifi转发图1micropython 实现wifi转发图2
第七步:PC端发送数据hello,手机端收到了数据
micropython 实现wifi转发图4





wifiForward.zip

693 Bytes, 下载次数: 1985

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail