0接上文【EASY EAI Nano-TB(RV1126B)开发板试用】命令行功能测试-红绿灯按钮项目性能优化-系统性能、网络配置、安全检及cpu温度采集互联网在过去30年里已经大大地改变了我们的生活方式,影响着社会。但是反观互联网,它的基础-web的核心原理并没有改变多少。大部分web系统仍旧遵守 Tim
Berners-Lee 20 多年前提出的
W3C 标准,大部分web[服务器]接收的信息格式与接收的方式与过去并无二致。Python内置的http.server模块提供了开箱即用的解决方案,在此基础之上,开发者可针对简单的状态显示需求对服务器进行灵活扩展与定制。我基于EASY EAI Nano-TB(RV1126B)****开发板,构建一个能够通过Web服务读取物理按键三色LED灯状态的设备监控系统,打造符合简单状态显示需求的服务器。
硬件
- EASY EAI Nano-TB(RV1126B)开发板 :
EASY-EAI-Nano-TB-Ubuntu-22.04-firmware_20250905一款用于嵌入式ai系统的开发板。* 红绿灯板 :一个简单的外部设备,包含红、绿、黄三个LED灯。
- wifi路由器 :CMCC-e2dd(密码:jdtsyahg)
soft
- 工具要求 :支持SSH连接的客户端(MobaXterm )
- Ubuntu-22.04 :Ubuntu-22.04.5 LTS (GNU/Linux 6.1.118 aarch64)
- Python :Python 3.10.12 (main, Aug 15 2025, 14:32:43) [GCC 11.4.0] on linux。
- 文件名 :"/home/nano/server1.py"
系统采用Python标准库中的http.server模块构建轻量级Web服务器,通过访问设备文件系统中的虚拟文件来与硬件进行交互。
设备状态信息与对应系统路径的映射关系如下:
·
按键状态:/sys/bus/iio/devices/iio:device0/in_voltage0_raw
·
红色LED:/sys/class/pwm/pwmchip1/pwm0/duty_cycle
·
绿色LED:/sys/class/pwm/pwmchip2/pwm0/duty_cycle
·
黄色LED:/sys/class/gpio/gpio178/value
**
from http.server import BaseHTTPRequestHandler, HTTPServer
import os
user_info = {b'key_load': r'/sys/bus/iio/devices/iio:device0/in_voltage0_raw',
b'red_led': r'/sys/class/pwm/pwmchip1/pwm0/duty_cycle',
b'green_led ':r'/sys/class/pwm/pwmchip2/pwm0/duty_cycle',
b'yellow_led ':r'/sys/class/gpio/gpio178/value'}
class MyHandler(BaseHTTPRequestHandler):
routes = {
'/': 'index',
'/about': 'about',
'/contact': 'contact'
}
def do_GET(self):
try:
handler = getattr(self, self.routes[self.path])
handler()
except KeyError:
self.send_response(404)
self.end_headers()
def index(self):
self.send_response(200)
self.send_header('Content-Type', 'text/html')
self.send_header('http-equiv', 'refresh')
self.send_header('content', '60')
self.end_headers()
self.wfile.write(b'<h1>Home Page</h1>')
self.wfile.write(b'<h1>table Page</h1>')
self.wfile.write(b'<table>')
for h in user_info.keys():
self.wfile.write(b'<tr> <td>')
self.wfile.write(h)
self.wfile.write(b'</td> <td>')
with open(user_info[h], 'rb') as f:
content = f.read()
self.wfile.write(content)
self.wfile.write(b'</td> <td>')
if r'pwm' in user_info[h]:
print(h)
print(content[0])
if (content[0]==49):
self.wfile.write(b'close')
else:
self.wfile.write(b'open')
if r'iio' in user_info[h]:
print(h)
print(content[0])
print('len(content)%s',len(content))
if (content[0]==56 and len(content)>=4):
self.wfile.write(b'up')
else:
self.wfile.write(b'down')
if r'gpio178' in user_info[h]:
print(h)
print(content[0])
if (content[0]==49):
self.wfile.write(b'open')
else:
self.wfile.write(b'close')
self.wfile.write(b'</td> </tr>')
self.wfile.write(b'</table>')
def about(self):
self.send_response(200)
self.send_header('Content-Type', 'text/html')
self.end_headers()
self.wfile.write(b'{"')
for h in user_info.keys():
self.wfile.write(h)
self.wfile.write(b'":')
self.wfile.write(b'{"data":"')
with open(user_info[h], 'rb') as f:
content = f.read()
self.wfile.write(content)
self.wfile.write(b'","state":"')
if r'pwm' in user_info[h]:
print(h)
print(content[0])
if (content[0]==49):
self.wfile.write(b'close')
else:
self.wfile.write(b'open')
if r'iio' in user_info[h]:
print(h)
print(content[0])
print('len(content)%s',len(content))
if (content[0]==56 and len(content)>=4):
self.wfile.write(b'up')
else:
self.wfile.write(b'down')
if r'gpio178' in user_info[h]:
print(h)
print(content[0])
if (content[0]==49):
self.wfile.write(b'open')
else:
self.wfile.write(b'close')
self.wfile.write(b'"}')
else:
self.wfile.write(b'"},"')
self.wfile.write(b'}')
if __name__ == '__main__':
server_address = ('', 8011)
httpd = HTTPServer(server_address, MyHandler)
print('Server running on port 8011...')
httpd.serve_forever()
实现了一个自定义的HTTP请求处理MyHandler,支持以下路由端点:
- 根路径 ( ** / ** ) :
o
返回包含所有硬件状态实时数据的HTML表格
关于页面 ( ** /about ** ) :json格式。
运行
主执行文件将保存于开发板的/home/nano/server1.py路径。通过SSH连接至开发板后,可直接运行Python脚本启动Web服务。系统将在指定端口监听HTTP请求,通过网络中的任意设备访问服务地址,即可实现对硬件状态的远程监控。
权限设置
chmod u+x "server1.py"
运行脚本
nano@EASY-EAI-NANO-TB:~$ python3 server1.py
Server running on port 8011...
192.168.1.2 - - [16/Nov/2025 14:33:07] "GET / HTTP/1.1" 200 -
b'key_load'
56
len(content)%s 5
b'red_led'
49
b'green_led '
49
b'yellow_led '
48
192.168.1.2 - - [16/Nov/2025 14:33:18] "GET /about HTTP/1.1" 200 -
b'key_load'
56
len(content)%s 5
b'red_led'
49
b'green_led '
49
b'yellow_led '
48
192.168.1.2 - - [16/Nov/2025 14:33:44] "GET /about HTTP/1.1" 200 -
b'key_load'
56
len(content)%s 5
b'red_led'
49
b'green_led '
49
b'yellow_led '
48

l电脑浏览器显示:


2手机浏览器显示:


灯正常闪!!web显示正常,提供2种显示。
这一实现不仅证明了在嵌入式系统中构建Web服务的可行性,更为物联网设备的状态监控、远程控制等应用场景提供了一套简洁而高效的技术方案。随着物联网技术的持续演进,物联网协议将这种将底层硬件控制与上层网络服务紧密结合的模式,将在智能家居、工业自动化、环境监测等领域发挥越来越重要的作用。
达到预期。