单片机
返回首页

基于boa服务器的web控制mini2440的GPIO口

2022-05-25 来源:eefocus

win7 系统  虚拟机:ubuntu12.04


开发板:mini2440


上一篇已经详细的讲解了如何配置boa服务器,在这里我们就要利用boa服务器带来的便利,利用web控制开发板上的GIPO口,这里控制led为例。


首先了解下cgi编程


CGI通用网关接口是一个Web服务器主机提供信息服务的标准接口。通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端。 

组成CGI通信系统的是两部分:


一部分是html页面,就是在用户端浏览器上显示的页面。


另一部分则是运行在服务器上的Cgi程序。 

它们之间的通讯方式如下图: 

服务器和客户端之间的通信,是客户端的浏览器和服务器端的http服务器之间的HTTP

通信,我们只需要知道浏览器请求执行服务器上哪个CGI程序就可以了,其他不必深究细节,因为这些过程不需要程序员去操作。 


服务器和CGI程序之间的通讯才是我们关注的。一般情况下,服务器和CGI程序之间是通过标准输入输出来进行数据传递的,而这个过程需要环境变量的协作方可实现。  

1. 服务器将URL指向一个应用程序


2. 服务器为应用程序执行做准备 


3. 应用程序执行,读取标准输入和有关环境变量 


4. 应用程序进行标准输出


更详细的资料可以参考这篇文章:http://wenku.baidu.com/view/11eb19f90242a8956bece4c2.html


在这里,我主要是熟悉下web控制led的开发步骤。


首先建立index.html文件


代码如下所示:

    

web控制mini2440开发板led

基于mini2440的web控制GPIO口

   //新建一个表单,动作链接到开发板的/cgi-bin/cgi_led.cgi,采用的方法为GET

led的测试工作

请输入需要控制的led

请输入控制led的动作

        


在地址栏输入192.168.1.230:8088后页面显示的内容为:


在上面的程序中,我采用submit的方式将表单提交。


采用GET方式传输信息,环境变量值为:QUERY_STRING,当我将表单的数据提交时,客户机会将这些数据添加到action标记命名的URL结尾,并用?将cgi的程序与表单提交的信息分隔开,例如:http://192.168.1.230:8088/cgi-bin/cgi_led.cgi?led_control=1&led_state=0 在这里,表单总共提交连个数据led_control和led_state,将这两个变量值附在URL的后面。QUERY_STRING的值为:led_control=1&led_state=0


下面来编写cgi程序:


#include

#include

#include

#include

#include

#include

#include

#include


int main()

{

int fd,led_control,led_state;

char *data;   //定义一个指针用于指向QUERY_STRING存放的内容

fd = open('/dev/leds0',0);  //打开led设备

if(fd < 0)

{

fd = open('/dev/leds',0);

}

if(fd < 0)

{

perror('open led device');

exit(1);

printf('Content-type: text/html;charset=gb2312nn');

printf('n');

printf('cgi led demon');

printf('n');

printf('

led is setted successful! you can watch the led's change

n');

printf('

n');

printf('n');


data = getenv('QUERY_STRING');   //getenv()读取环境变量的当前值的函数 

if(sscanf(data,'led_control=%d&led_state=%d',&led_control,&led_state)!=2) //利用sscnaf()函数的特点将环境变量分别提取出led_control和led_state这两个值

printf('

please input right'); printf('

'); } 


if(led_control>3) 

{ printf('

Please input 0<=led_control<=3!'); printf('

'); } 


if(led_state>1) { printf('

Please input 0<=led_state<=1!'); printf('

'); }

 ioctl(fd,led_state,led_control); 

close(fd);

 printf('n');

 exit(0);


CGI程序从客户端获取环境变量后,需要进行解码,这里我们采用sscanf()函数来进行URL解码,即分离变量的值。


CGI标准规定了CGI程序可以使用的三个HTTP标题。标题必须占据第一行输出!而且必须随后带有一个空行。即cgi程序输出语句:


printf('Content-type: text/html;charset=gb2312nn');

三个标题分别为:Content-type 内容类型,Location地址,status状态


text/html表示输出为html格式的数据


利用交叉编译环境生成cgi_led.cgi可执行文件,将文件下载到开发版的/var/www/cgi-bin/的目录下


接下来我们就可以在主机上运行程序了。


在主页上输入控制信息,然后点击sure按钮,接着页面会跳转到如下所示:

观察开发板的led,可以发现相应的led被点亮。

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • 带有短路保护系统的5V直流稳压电源电路图

    相关电子头条文章