現今社會大家每天都會用手機上網,瀏覽網頁。您知不知道這些網頁都是靠著網頁瀏覽器(Web Server)來處理使用者的請求,並提供相對應的網頁內容給使用者。一般來說網頁伺服器有兩種含意:
也就是說,一台提供網頁服務的電腦,會執行一個或多個網頁伺服器程式。
而市面上常見的網頁伺服器有:
但上述的網頁伺服器都是設計來提供給多人同時使用的,因此往往需要一台功能強大,記憶體較多的電腦來搭配使用。但我們的物聯網應用,往往工作單純,如果要額外購買一台電腦,似乎有點浪費。那使用玩學機是否可以建構一個簡易型的網頁伺服器呢?其實是可以的,但需要注意幾個原則:
為了避免每次都要連線到無線基地台,又將連線密碼寫到程式碼當中,我們可以另外把SSID 與連線密碼存成 secrets.py,連線程式存成connect.py 兩支程式。如果您要系統一開機就執行連線,則又可以修改 boot.py ,將連線程式載入。將自動執行的部分切開,我們的簡易型網頁伺服器程式碼就會比較容易閱讀。
secrets.py 的內容:
SSID = ‘Dora1F’
PASSWORD=’12345678@’
connect.py 的內容:
def do_connect(SSID, PASSWORD):
import network
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
print('connecting to network...')
sta_if.active(True)
sta_if.connect(SSID,bPASSWORD)
while not sta_if.isconnected():
pass
print('network config:', sta_if.ifconfig())
boot.py 內容
import network, secrets, connect
do_connect(secrets.SSID, secrets.PASSWORD)
import machine
pins = [machine.Pin(i, machine.Pin.IN) for i in (17,27,32,33,34,35,39,23)]
html = """<!DOCTYPE html>
<html>
<head> <title>WiFiBoy OK:ESP32 Pins</title> </head>
<body> <h1>WiFiBoy OK:ESP32 Pins</h1>
<table border="1"> <tr><th>Pin</th><th>Value</th></tr> %s </table>
</body>
</html>
"""
import socket
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)
print('listening on', addr)
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()