用开发板搭建一个简单的Web服务器

Python提供了访问底层操作系统Socket接口的全部方法,需要的时候这些接口可以为你提供灵活而强有力的功能。

—-John Goerzen《Python网络编程基础》


互联网的一个重要技术用途就是WWW,这也意味着他的主要协议-超文本传输协议(即http)广为人知,python也为编写web程序提供了大量的模块,而micropython作为python的一个重要版本,很自然的也有很多支持。

今天我们就要用基于micropython的开发板搭建一个简单的网页服务器吧。

在正式编写程序之前,我们先参考一下官方的例程:Micropython推出了很多和网络相关的例程,其中包括http和https:https://github.com/micropython/micropython/tree/master/examples/network

展望未来MicropythonA官方会推出更多易用的模块。

在我们的程序中,boot.py主要用于板子上电后启动一个wifi热点,大家也可以编写程序使开发板上电后连接到本地的路由器,通过路由器访问开发板也是一个不错的选择。


import network
ap = network.WLAN(network.AP_IF) #设为AP模式
ap.active(True)
ap.config(essid='ZhimaDIY',password="12345678") #配置wifi接入点

而在main.py中主要定义的开发板用于浏览器访问的端口,以及如何处理浏览器提交的表单数据,我们的网页主要功能是用来控制开发板的两颗LED.

import socket
import machine
import os

#Setup PINS
LED0 = machine.Pin(16, machine.Pin.OUT)
LED2 = machine.Pin(2, machine.Pin.OUT)

#Setup Socket WebServer
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((”, 80))
s.listen(5)
page=open(‘index.html’)
html=page.read()
page.close()
while True:
conn, addr = s.accept()
print(“Got a connection from %s” % str(addr))
request = conn.recv(1024)
print(“Content = %s” % str(request))
request = str(request)
LEDON0 = request.find(‘/?LED=ON0’)
LEDOFF0 = request.find(‘/?LED=OFF0’)
LEDON2 = request.find(‘/?LED=ON2’)
LEDOFF2 = request.find(‘/?LED=OFF2’)
#print(“Data: ” + str(LEDON0))
#print(“Data2: ” + str(LEDOFF0))
if LEDON0 == 6:
print(‘TURN LED0 ON’)
LED0.value(0)
if LEDOFF0 == 6:
print(‘TURN LED0 OFF’)
LED0.value(1)
if LEDON2 == 6:
print(‘TURN LED2 ON’)
LED2.value(0)
if LEDOFF2 == 6:
print(‘TURN LED2 OFF’)
LED2.value(1)
response = html
conn.send(response)
conn.close()
s.close()

Index.html是网页的主体部分,这个网页可能有点丑,大家可以通过修改html和css使网页更优美。

如果大家想要获取相关文件,可以关注我们的微信公众号,回复“网页服务器”。