搜索

121

主题

128

帖子

665

积分

网站编辑

Rank: 8Rank: 8

积分
665
发表于 2021-6-1 18:29:52 7079 浏览 0 回复

i.MX6开发板QT系统web服务器控制led

本帖最后由 翠花儿 于 2021-6-1 18:30 编辑

本文档是在搭建好的 web 服务器(可参考第四十七章文档)基础上讲解一下通过 web 网页实现控制 LED。
要实现控制 led,需要 CGI 编程,CGI(Common Gateway Interface)是外部应用扩展,应用程序与 www 服务器交互的一个标准接口。按照 CGI 标准编写的外部扩展应用程序可以处理客户端浏览器输入的数据,从而完成客户端与服务器的交互操作。而 CGI 规范就定义了 web 服务器如何向扩展应用程序发送消息,在收到扩展应用程序的信息后又如何进行处理等内容。通过 CGI 可以提供许多静态的 HTML 网页无法实现的功能。比如搜索引擎、基于web 的数据库访问等等。
1 web 服务器配置
在前面的搭建 web 服务器章节,在修改 boa.conf 配置文件的时候指定了 web 网页的存放目录“DocumentRoot /www”,现在打开之前在 www 目录创建的 index.html。删除掉里面的内容,然后输入以下内容。修改后如下图。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>led 远程控制</title>
<style type="text/css">
body {
background-color: #999900;
text-align: center;
}
.ziti {
font-size: 24px;
}
.juzhong {
text-align: center;
www.topeetboard.com
}
.hsz {
text-align: center;
}
.hsz td {
color: #00F;
font-size: 18px;
}
.hsz {
background-color: #FCC;
}
.juzhong table {
text-align: center;
}
.juzhong table tr {
}
#h1 {
background-color: #0FC;
}
#h2 {
background-color: #FF9;
}
.h3 {
background-color: #0CF;
}
.ys1 {
font-size: 24px;
}
.STYLE1 {font-size: 36px}
</style>
</head>
<body class="juzhong">
<table width="900" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><p class="STYLE1"> </p>
<p class="STYLE1">iMX6 WEB SERVER </p></td>
</tr>
<tr>
<td height="30"> </td>
</tr>
<tr>
<td><form action="/cgi-bin/myled.cgi" method="get" enctype="application/x-www-form
urlencoded" name="form1" target="_blank" id="form1">
<table width="300" border="1" align="center" cellpadding="1" cellspacing="1">
<tr>
<td>Led</td>
<td><input name="led2" type="checkbox" id="led_ctl" value="2" />
<label for="led"></label></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" id="submit" value="submit"
/></td>
</tr>
</table>
</form></td>
</tr>
<tr>
<td ><p> </p>
</td>
</tr>
</table>
<p> </p>
</body>
</html>
然后保存退出。上面输入的是 HTML 格式的代码,主要是用到了通过表单向服务器提交信息,在表单里面指定了服务器端处理接收到信息的 CGI 程序是 myled,这是在 form 表单的属性里设置的,代码是“form action="/cgi-bin/myled.cgi" method="get”,使用的传递数据的方式是 get 方法,如下图所示。
修改完了 index.html,需要些 CGI 程序。在 boa 的配置文件 boa.conf 里面指定了 CGI 程序的存储目录是“ScriptAlias /cgi-bin/ /www/cgi-bin/”。现在进入到 www/cgi-bin 目录,并创建 myled.c 文件,如下图。
然后在 myled.c 文件中输入一下代码。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *data;
int leds_ctl[2] = {0, 0};
long m, n;
int exit=0,i,fd;
printf("Content-Type:text/html;charset=gb2312\n\n");
printf("<html>\n");
printf("<body>\n");
printf("<title>iMX6</title> ");
printf("<h3>iMX6</h3> ");
data = getenv("QUERY_STRING");
printf("<p>receive data:%s</p>",data);
while(*data != '\0')
{
if(*data=='=')
switch(*(data+1))
{
case '1':leds_ctl[0]=1;break;
case '2':leds_ctl[1]=1;break;
www.topeetboard.com
default:exit=1;break;
}
if(exit == 1)
break;
data++;
}
fd=open("/dev/leds_ctl",0);
for(i=0;i<2;i++)
{
if(leds_ctl==1)
printf("<p>%d\t</p>",i+1);
ioctl(fd,leds_ctl,i);
}
printf("</body>\n");
printf("</html>\n");
return 0;
}

最后保存退出。
上面的代码是 C 语言,主要是完成了获取 web 提交过来的数据,然后对获得的数据解析,最后会调用 led 的 ioctl 函数来点亮或关闭 led。里面的 printf 打印语句,最终会生成一个 web 页面。
接下来编译 myled.c 生成 myled.cgi(在 index.html 的表单里面设置了处理文请求的 cgi 程序是 myled.cgi),把最小系统挂载到虚拟机 Ubuntu 系统上,并把 myled.c 文件复制到挂载的 mnt 目录中的 web 文件夹中。如下图。
使用命令“arm-none-linux-gnueabi-gcc -o myled.cgi myled.c -static”编译 myled.c ,编译完成后,可以看到生成了 myled.cgi 文件,如下图。
在开发板的超级终端控制台,进入/mnt/web 目录,并把编译生成的 myled.cgi 文件复制到/www/cgi-ini 目录下。如下图。
注意:生成的 myled.cgi 文件需要有执行权限,所示使用 chmod 命令修改一下它的权限,如下图。
现在控制 led 的 web 程序已经完成了。
2 运行测试
在 PC 的浏览器上输入开发板的 IP 地址,输入完成后,按回车,即可打开开发板的 index.html 页面。如下图。
选中 led 右边的方框,点击页面上的“submit”按钮,会打开一个新的 web 界面,如下图。并且此时可以看见 iMX6 开发板上编号 D6 的 led 灯亮起。
再回到初始的 index.html 界面,取消选中 led 右边的方框,点击”submit”按钮,会打开另一界面。如下图。同时看到编号 D6 的 led 灯熄灭。
上图中的页面里面的信息就是 myled.cgi 程序里面的 printf 打印出来的,其中“receive data:led1=1&led2=2&submit=submit”,就是客户端通过 get 方式传递给 web 服务器的数据,下面的数字 2 是 myled.cgi 程序从”receive data:led1=1&led2=2&submit=submit”解析出来的值。同时还可以看到在 iMX6         开发板 led_ctl 打印出来的信息,如下图所示:
测试完毕。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

登录或注册

官方客服

QQ:2551456065

官方QQ群

195631883

扫一扫关注迅为公众号

群号652692981

 
快速回复 返回顶部 返回列表