BananaPI Leaf S3开发板WIFI联网与远程脚本执行 大信(QQ:8125036)
BananaPI Leaf S3开发板(以下简称BPI-S3)带有2.4G WIFI ,Bluetooth 5 ,Bluetooth mesh 硬件功能。所以它是能够连接互联网的,本次试验的目的就是研究BPI-S3板子连接互联网网络,并研究使用除串口外的网络下的开发方法。
一、开发板连接WiFi
首先连接Banana PI Leaf S3开发板与电脑串口,串口终端使用的是SecureCRT超级终端软件,进入串口命令行后,在终端输入以下命令,来使板子连接WIFI ; #引入网络库 importnetwork #调用 WLAN 函数创建无线网络,使之进入STA模式(wifi终端) wlan= network.WLAN(network.STA_IF) #激活网卡设备 #扫描周边热点 wlan.scan() # Scan for available access points 这步完成可以看到输出了一些信息,这些信息就是周边的AP热点的名字,然后选择一个2.4G的网络热点进行连接,两个参数ssid和密码 wlan.connect("Luther","12345678") # Connect to an AP 稍等候返回命令行,可以检查是否连接成功 wlan.isconnected() # Check for successful connection 如果返回 True, 则表示连接成功工,如果连接不成功,可以重启一下板子和检查一下热点的名字和密码是否填写的正确。 连接正确后,可以查看本设备的MAC地址 wlan.config('mac') 还可以查看到本设备获得的IP地址 wlan.ifconfig() 具体操作的图如下:
连接好wifi热点后,可以在其它电脑上pin一下板子的地址,可以看到能够ping通。
二、连接互联网实现HTTP访问
在连接Wifi之后,可以进一步使用python的网络库来做一个互联网HTTP的访问工具,完成连接互联网和实现HTTP访问。 首先找一个互联网的服务器,笔者用自己的一台互联网云服务器做配合,在服务器上的nginx服务目录下放上一个页面以及一个python脚本文件。 服务器测试页面地址为: http://118.195.220.126/aiot/test.html 然后再 BPI-S3上,编写python脚本,如下:
import socket
def get(url):
- _, _, host, path = url.split('/', 3)
- addr = socket.getaddrinfo(host, 80)[0][-1]
- s = socket.socket()
- s.connect(addr)
- s.send(bytes('GET /%s HTTP/1.0rnHost: %srnrn' % (path, host), 'utf8'))
- while True:
- data = s.recv(100)
- if data:
- print(str(data, 'utf8'), end='')
- else:
- break
- s.close()
复制代码
这个脚本内容也很简单,就是使用socket库,完成url的解析,产生host和URI,以及port网络参数,完成HTTPHeader的发送,再接收服务器返回的数据,并显示出执行图如下:
三、实现HTTP远程脚本下载执行 同样也可以在此基础上修改一下,做成一个可以下载的python程序,即把http上访问的文件,按HTTP协议解析出内容数据后,把数据保存到开发板的”/”目录下。 具体脚本代码如下:
- def wget(url)
- _, _, host, path = url.split('/', 3)
- addr = socket.getaddrinfo(host, 80)[0][-1]
- file = path[-1]
- client=socket.socket() #默认TCP连接
- client.connect((host,80))
- client.send(file.encode('utf-8'))
- #接收文件数据并保存
- content=''
- try:
- client..send(bytes('GET /%s HTTP/1.0rnHost: %srnrn' % (path, host), 'utf8'))
- while True:
- data=client.recv(1024).decode('utf-8')
- if data:
- content+=data
- else:
- break
- except Exception as e:
- print('Get file failed!',e)
- else:
- try:
- with open(file,'w') as f:
- f.write(content)
- except Exception as e:
- print('Write file failed!',e)
- else:
- print('Write file successfull!',e)
- finally:
- content=""
- client.close()
复制代码
这样这个工具非常实用了,可以用来从远程服务器上下载python脚本到开发板上,避免使用串口和专用的工具来下载执行程序。实现了远程的脚本下载和更新。再在板内配合自动执行,就可以实现网上下载脚本,下载执行的过程了。实现自动执行网络上python脚本的目的,为调试开发实现远程更新脚本,给开发带来很大的方便。一个完善的网络程序加载并自动执行的流程应如下:
目前http下载只能限于python文本数据的下载,没有太强的文件完整性校验等机制,但通过实际使用也没发现问题。无论从互联网上下载文件或是从局域网服务器上下载文件,均无异常就这么着用了。 四、做成自启动脚本开机自动连接wifi与执行 为了更进一步的自动化的联网以及启动远程脚本的执行,需要开发板做到无人看管的方式,让其上电后,自动的连接网络,以及执行网络脚本的查询下载与执行。作为无人值守,全程自动化。 那么可以把一些自动执行的内容做成启动脚本,BPI-S3刚好有这样一个机制,即上电后自动查找一个为boot.py的脚本,如果找到那么就去执行它。 思路就跟简单了,就把上面的wifi自动联网,以及网络自动执行脚本版本检测,下载、执行的过程放到boot.py里就可以了。
|