之基于boa+python+cgi的远程控制LED灯的WEB服务
【创龙AM4379 Cortex-A9试用体验】之基于boa+python+cgi的远程控制LED灯的WEB服务
在上一篇的试用报告中,我们移植boa到TL-4379,并实现了基于C语言的CGI WEB服务,对TL-4379板载LED0的远程控制。其实,如果我们采用python语言,调用python的CGI模块,由于Python程序无需编译,直接在开发板上解释执行,对于执行效率要求不是太高的应用,可以更加高效的开发基于WEB的远程控制动态网页。
我们在本试用报告的第5篇,移植了Python2.7.3到TL-4379,为我们这一篇使用报告做了基础工作,这篇使用报告,我们将采用boa承载静态网页,并利用action为基于Python的CGI程序,实现动态网页控制LED0的功能。
1. 测试Python的CGI模块
我们首先给TL-4379开发板上电,测试一下我们移植的Python2.7.3是否已支持了CGI模块。
给开发板上电后,挂载Ubuntu共享的NFS文件系统,我们移植好的Python2.7.3就保存在PC机端的Ubuntu系统的共享NFS中,挂载NFS命令如下:
mount -t nfs 192.168.1.108:/nfsshare /mnt-o nolock
启动Python:
cd /mnt/Python-2.7.3/_install/bin
./python
在python命令行输入命令:
>>>import cgi
执行结果如图所示:
没有提示错误信息,说明我们移植的Python-2.7.3已经支持了cgi模块。
2. 控制LED灯的html代码
在html表单的ACTION中指定动态执行的Python代码路径,客户端提交数据的方式,我们这里采用POST的方式,详细代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>LED Python CGI 测试</title>
</head>
<body>
<form action="/cgi-bin/radiobutton.py"method="post"target="_blank">
<input type="radio"name="mode" value="led_on" /> open
<input type="radio"name="mode" value="led_off" /> close
<input type="submit"value="提交" />
</form>
</body>
</html>
3. 动态网页的pythonCGI后台程序
要想利用Python的CGI模块,动态获取客户端提交的表单数据,并将动态生成的结果html页面返回到客户端,必须引入cgi模块。对于本例子,我们还是采用system函数,执行shell命令对LED灯的控制,这里也要引入os,详细代码如下所示:
#!/mnt/Python-2.7.3/_install/bin/python
# -*- coding: UTF-8 -*-
# 引入 CGI 处理模块
import cgi, cgitb
import os
# 创建 FieldStorage的实例
form = cgi.FieldStorage()
# 接收字段数据
if form.getvalue('mode'):
cmd = form.getvalue('mode')
else:
cmd = ""
if cmd == "led_on":
os.system('echo 1> /sys/class/leds/user-led0/brightness')
result = "led0 open successed!"
elif cmd == "led_off":
os.system('echo 0> /sys/class/leds/user-led0/brightness')
result= "led0 close successed!"
print "Content-type:text/html"
print "<html>"
print "<head>"
print "<metacharset=\"utf-8\">"
print "<title>LED Python CGI 测试</title>"
print "</head>"
print "<body>"
print "<h2> %s</h2>"% result
print "</body>"
print "</html>"
cgi代码的首行为python在开发板文件系统中路径。
4. 上电测试
1)关闭lighthttpd服务
给TL-4379上电后,首先关闭默认启动的lighthttpd WEB服务程序,以释放boa监听的80端口,执行命令如下图示:
2)拷贝html和cgi文件到开发板
将我们在PC端编写的html和cgi文件拷贝到开发板:
cp /mnt/python_cgi/radio.html /var/www
cp /mnt/python_cgi/radiobuttons.py /var/www/cgi-bin
chmod 775 /var/www/cgi-bin/radiobuttons.py
3)创建日志文件
不知道什么原因,在/var/log下创建boa的日志文件,系统重启后丢失,我们这里再重新创建一次:
cd /var/log
mkdir boa
cd boa
touch access_log
chmod 777 access_log
4)启动boa
cd /usr/local
./boa
执行结果如图所示:
5)PC机浏览器登陆测试
在PC机的浏览器上输入开发板的IP地址:
如图所示:
开发板上的LED0默认是点亮的,如图所示:
4个LED等全亮。
选择close单选按钮,并点击“提交”按钮,如图所示:
执行结果如图所示:
说明基于python的CGI动态函数执行成功,我们看看开发板上的LED现象:
从图中可以看出,LED0熄灭,只有3盏灯亮。
我们选择open选型,点击“提交按钮”,执行结果如图所示:
再来看看开发板上的LED0是否点亮:
从照片上可以看出,4盏灯全亮,远程控制LED灯命令执行成功。
6)安卓手机浏览器登陆测试
我们在安卓手机的浏览器中输入开发板的IP地址:如下所示:
选择close,点击“提交”按钮,自行结果如图所示:
LED0熄灭:
我们再选择open,点击“提交”按钮,执行结果如图所示:
LED0再次被点亮:
5. 小结
本试用报告,采用boa承载WEB服务,监听客户端的请求,基于Python的CGI动态解析函数,提前客户端提交的选项数据,判断LED的点亮、熄灭命令,控制开发板的硬件。Python的CGI库操作简便,无需交叉编译,提高了动态网页的开发效率。同时,我们采用PC端和安卓移动手机远程控制LED等亮灭,功能测试达到了预期目标,为我们制定不同的控制方案提供了较好的灵活性。
有意思向前看!(?ω?)(?ω?)(?ω?)(?ω?)(?ω?)
a9
好东西
好想学
最近项目时间太紧,没有时间逛论坛了,后续会继续跟大家交流
谢谢小编
有意思(?ω?)(?ω?)(?ω?)(?ω?)(?ω?)
不不错不错