虽然应该算的上是一个教程,而且是这个系列的第一篇,但我并不准备跟大家讲解那些过于基础的内容。基础内容你可以去其他的教程中找到资料
Bpi书写中文教程(新手推荐):https://github.com/BPI-STEAM/BPI-BIT-MicroPython/wiki
Micropython原网英文教程:http://docs.micropython.org/en/latest/
而我将直接从案例入手,虽然是直接从案例入手。但我也会保证没有基础的大家也能看的懂,案例会在每一项中进一步拆分从而回归基础。让大家由深入浅。这样也就能带来双倍快乐~~~
咳咳,那我们这回要做的是什么呢?目前云服务和物联网不是很火嘛,那我们就制造一个可以彻底云端化的一个物联网设备好了!
23333,这样听起来很高端是不是,那我们就换一种说法, 板子服务器部署网页。也就是板子再获取硬件的同时部署web服务,显示网页并反馈板子的硬件状态,并反馈板子的硬件状态,这样是不是就听起来就好多了2333,当然虽然功能并不复杂,但是物联网该有的交互都一应俱全,也算麻雀虽小五脏俱全!
首先我们需要一块开发板,我们这里用的是Bpi:Bpi的开发板。
BPI
这是香蕉派公司推出一款esp32的兼容板子,支持webduino,以及MicroPython等多个嵌入式固件。当然我们也可以用其他的开发板,比如NodeMCU,Pyboard,甚至esp8266这种也是可以的,当然esp8266的初上手难度就远高于上述现成开发板拉。 需要手工连接外设,还需要先设置到编程模式,然后才能烧录系统。对于初学者来说不是很推荐,当然你依然可以使用它。
首先我们需要烧录好固件,烧录固件的办法我们上一次视频和专栏说的很详细了,这里就不再复述,如果使用了其他开发板,请在服务商或者网上找到烧录教程,烧录完固件,我们使用串口通讯软件putty,或者利用提供好的win-mpf-shell就能连上开发板玩耍拉。我们在串口终端输入repl进入repl模式(REPL(Read-eval-print-loop):交互式解析器 )
这个repl模式也就是你输入一句编程代码,它就会执行一句,是调试运行程序一大利器。
然后输入这些话
sta_if = network.WLAN(network.STA_IF);
sta_if.active(True)
sta_if.scan()
第一句是导入网络模块,sta_if = network.WLAN(network.STA_IF)是将板子设置成station网络模式,将这个模式作为一个变量。然后将网络激活,并且执行扫描命令。
这里就要为小白普及一个基础的概念了,物联网设备的station和ap模式。
如果大家之前接触过路由器或者虚拟机应该也能看到这些概念,我们就用通俗易懂的话,简单来解释下这二个模式是干嘛的。
station模式,stion也是站,站点的意思,这个就是可以相对理解成客户端。也就是连接到某个wifi下的的模式,但是不发送wifi信号
ap模式,ap是基站的意思,也就是发送信号的模式,所以可以被其他设备连接,并且暴露给外部一个wifi信号
综上所述,station一个具备收,ap具备发,当然我们时候,station和ap都是一起开的,也就是类似双工的运作。这样才具备物联网使用的条件。23333
我们回到主题,刚刚执行完扫描命令(scan)会出现下述终端反馈
[(b'DrinkIlikeit', b'\xd0\xc7\xc0\xf9\xeb\x0f', 6, -51, 4, False),
(b'Drinkboy', b'\x94\x0cm\xe6[\x10', 1, -52, 4, False),
(b'Drink-office', b'^\xcf\x7f \xda\xa1', 1, -52, 3, False)]
那些b‘ \xd0\xc7\xf9\xeb\x0f这些乱七八糟的东西全都不用看,这些都是一些分隔符,仔细观察就会发现这些都是你当前环境下可以连接的wifi,以及它的参数,于是我们可以用下面的命令连接一个看看
>>>sta_if.connect(“DrinkIlikeit”, “password”)
//前半句是用户名,后半句则是密码
连接上之后,可以用一句
>>> sta_if.isconnected()
来判断是否已经连接了。。如果上面没有出错,那么应该会打印true
然后我们就要给ap模式赋值了。
>>> ap = network.WLAN(network.AP_IF)//切换到ap模式
>>> ap.active(True)//激活ap模式
I (1801120) wifi: mode : sta (d8:a0:1d:00:05:c4) + softAP (d8:a0:1d:00:05:c5)
此时显示ap+sta模式都开启
I (1801120) wifi: pm stop, total sleep time: 0/330800928
I (1801120) wifi: event 13
True
然后我们便可以使用一条指令来让ap模式暴露外部的wifi名字改变了
>>> ap.config(essid=‘ESP32-Drink’)
I (1823060) wifi: event 14
I (1823060) wifi: event 13
执行完之后,我们需要给暴露外部的wifi设置密码,我们可以用如下指令
ap.config(authmode=3, password=‘password’)
0 – open
1 – WEP
2 – WPA-PSK
3 – WPA2-PSK
4 – WPA/WPA2-PSK
这里authmode不同的值代表不同的意思。我们选择最适合自己的那个,这里我们选择3
然后一切前提工作都将告一段落,让我们来让开发板具备服务器功能吧!
二话不说直接丢出代码。由于MicroPython没有现成的服务器软件,所以我们只好用socket写出下面这一段程序来创造一个服务器环境了。什么?你不懂socket,你可以百度理解下嘛,或者去翻翻任何一门高级编程语言的书的网络部分
import machine//导入机器模块,使用这个模块后,就能检索机器的阵脚了
pins = [machine.Pin(i, machine.Pin.IN) for i in (0, 2, 4, 5, 12, 13, 14, 15)]
//获取机器阵脚0,2,4,5,12,13,14,15
html = """<!DOCTYPE html>
<html>
<head> <title>ESP32 Pins</title> </head>
<body> <h1>ESP32 Pins</h1>
<table border="1"> <tr><th>Pin</th><th>Value</th></tr> %s </table>
</body>
</html>
//html代码没有什么好说的,table表,行和列,没有任何css样式。如果不理解html可以去菜鸟教程网站上,从0基础进行html学习,下面是网址
//http://www.runoob.com/html/html-tutorial.html
import socket //导入socket模块
addr = socket.getaddrinfo(‘0.0.0.0’, 80)[0][-1]
//设置socket获得本机地址,和80端口号
s = socket.socket()//开启socket
s.bind(addr)//socket服务器绑定本机地址
s.listen(1)//socket进行监听
//上诉是最简单socket服务器的写法。不同编程语言大同小异
print(‘listening on’, addr)
//下部分是socket客户端部分,socket监听到信号,创建一个文件,将html写到文件中.并传输给服务器
while True:
cl, addr = s.accept()
print('client connected from', addr)
cl_file = cl.makefile('rwb', 0)
while True:
line = cl_file.readline()
if not line or line == b'\r\n':
break
rows = ['<tr><td>%s</td><td>%d</td></tr>' % (str(p), p.value()) for p in pins]
response = html % '\n'.join(rows)
cl.send(response)
cl.close()
之后我们执行rf上面的代码,便能启动服务器了。在浏览器访问板子内网ip就可以看到下面的图
嗯,那么本章就到这里,喜欢我的专栏或者想对这个项目持续跟进可以关注我。
等等~~代码的详细解释呢?至于这个嘛,我们放到下一章教程来讲,不然下章的篇幅有点不够,嘻嘻,那~就这样吧~88