微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > 之基于boa+python+cgi的远程控制LED灯的WEB服务

之基于boa+python+cgi的远程控制LED灯的WEB服务

时间:10-02 整理:3721RD 点击:

【创龙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

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

好东西

好想学

最近项目时间太紧,没有时间逛论坛了,后续会继续跟大家交流

谢谢小编                           

有意思(?ω?)(?ω?)(?ω?)(?ω?)(?ω?)

不不错不错

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top