一、WebREPL 技术介绍
Webrepl(webbrowser interac
tive prompt)是一种网络命令行交互环境的简称,即通过web方式对开发板进行命令交互,如同串口命令行一样对开发板进行操作。
找到 MicroPython的GitHub源码,在源码里看了原文介绍如下:
importwebrepl_setup
andfollowing on-screen instructions. After reboot, it will be available forconnection. If you disabled automatic start-up on boot, you may run configureddaemon on demand using::
import webrepl webrepl.start() # or, start with a specific password webrepl.start(password='mypass') |
TheWebREPL daemon listens on all active interfaces, which can be STA or AP. This allows you to connect to the ESP32 via arouter (the STA interface) or directly when connected to its access point.
Inaddition to terminal/command prompt access, WebREPL also has provision for filetransfer (both upload and download). Theweb client has buttons for the corresponding functions, or you can use thecommand-line client ``webrepl_cli.py`` from the repository above.
Seethe MicroPython forum for other community-supported alternatives to transferfiles to an ESP32 board.
可以看到webrepl是基于websocket的一种web命令交互方式,在开发板以STA或AP连接wifi后,在开发板启动了websocket server模式,把开发板建成websocket服务端,然后浏览器端连接服务,通过websocket双向通讯达到浏览器与开发板交互。而开发板的服务端把输入输出重定向到micropython的执行环境,这样就达到了远程web交互的目的。
WebREPL网络连接示意图
二、设置上电自动连接WiFi 使用上一篇文章里的介绍,把BPI-S3连接WIFI的脚本boot.py放到开发板文件根目录下,实现上电自动连接Wi-Fi,同时在路由器上注意设定绑定该开发板的MAC地址与IP,避免因为DNS动态地址分配而每次板子启动后地址改变。
Boot.py脚本内容
- import network
- import time
- def wlan():
- wlan = network.WLAN(network.STA_IF); wlan.active(True)
- wlan.scan() # Scan for available access points
- wlan.connect("Luther", "11223344") # Connect to an AP
- time.sleep(1)
- wlan.isconnected() # Check for successful connection
- wlan.config('mac')
- wlan.ifconfig()
- def webpl():
- import webrepl
- webrepl.start()
复制代码
自启动效果:
三、配置webrepl初始化 在开发板连接Wifi之后,按源码里的说明,需要先进行webrepl的配置,输入一下命令:
import webrepl_setup
即出现一个提示,WebREPL后台自动运行是否开启?
按 E 键即Enable即开启自动运行,然后会提示输入设定没密码,连续输入两次密码,这个密码设定为远程访问时的安全口令。
操作的全流程如下,图里因为之前已经设置过密码,因此提示为是否修改密码了。
设置好初始化之后,就可以着手启动WebREPL
输入一下命令即启动WebREP 服务
importwebrepl
webrepl.start()
可以看到开发板上WebRPEL后台服务启动了,服务地址为:
ws://192.168.50.155:8266
四、远程交互操作
打开以下webrepl网页地址:
http://micropython.org/webrepl/
这个页面可以保存下载,放到自己的web服务器上。
然后在地址栏中输入开发板的REPL服务地址,这里需要注意web浏览器所在的电脑需要和开发板在同一个网络下,即浏览器所在电脑能够ping通开发板。
如果不在一个网络下,比如开发板在单位办公室,而在家里想进入REPL怎么办,后面会讲到解决这个问题的方法。
然后点击Connect,在下面的窗口出现需要密码的提示,这时只要输入上面配置时的密码,就可以进入交互环境下了。此时输入 help()可以见到和串口下一样的提示界面了。
此时可以输入MicroPyton程序脚本,和在串口中一样看到程序即时的执行结果了。
同样可以把启动WebREPL的两条命令放到 boot.py 里,这样每次启动默认就启动WebREPL
五、通过WebREPL上传文件
在上面的webrepl的交互页面,向下拉可以看到一个上传文件的功能。经过测试,通过它可能向开发板上上传文件,这样一些pythhon脚本模块就可以通过这个方法上传到板子上了。
使用方法很简答,点击选择文件选择一个文件,然后点上传,即完成文件上传
六、开发板上文件管理
当上传了很多文件后,想查看文件或者删除不要的文件,怎么办呢?经过摸索,找到一个python模块命令可以完成这些功能,这些命令分别是:
引入文件操作模块
importos
查看当前目录位置
os.getcwd() #即返回当前所在的目录
切换当前目录
os.chdir(‘/’)#进入/根目录下
查看当前目录下的所有文件
os. listdir() #可以看到当前目录下有哪些文件
删除文件
os.remove('test.py')#删除当前目录下的test.py文件
在WebREPl交互环境下,操作结果如下图:
七、跨网域连接开发板WebREPL方法
上面的远程开发板交互操作方法依然是在同一个网络域中,一般在同一个路由器下或者局域网下才能访问的通。那么实际上很多时候需要跨域进行访问,比如在家里访问办公室里的开发板,或者在外面出差时访问开发板,如同远程登录服务器一样就好了。
分析一下现在BPI-S3开发板WebREPL的网络结构,可见开发板是连入wifi路由器后,使用websocket构建了一个在内网的服务,远程页面通过websocket方式连入板子进行实时通讯完成远程交互。那么只要使这个板子内网的服务放到互联网(外网)上即可。因此有两种方法;
方法一、在公司互联网交换机上做一个端口映射,即把内网一个指定IP地址和端口映射到外网的一个IP地址和端口上去就可以了,此时web端只要输入外网的地址和端口,就可以和板子通讯互动了。这种方式简单可靠,大部分单位的内网服务器都是通过这样的方式对外提供服务的。但由于网络安全,以及条件限制,很多时候无法采用该方案,那么还有另外一个方案。
方法二、在不改动公司交换机设置的情况下,如何使板子在外面能访问到呢?答案是做“网桥”从前面的分析得知,WebREPL是通过websocket方式进行通讯的,而websocket是基于TCP/IP 的,那么只要做两个TCP/IP数据转发就可以实现将开发板与外网连接通。
这个方案需要一个内网电脑和互联网服务器配合,网络连接示意图如下:
分别在内网电脑和外网服务器运行tcp/ip协议转发程序即可,程序实现代码如下图:
转发代理运行效果:
至此已经可以远程连入开发板,进行各种命令的开发测试了。