这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 开源硬件 » SIN210学习笔记__CGI & LED

共5条 1/1 1 跳转至

SIN210学习笔记__CGI & LED

助工
2015-02-21 23:58:19     打赏

    在上一篇帖子中给大家分享了一下 GoAhead服务器的移植,简单的介绍了下CGI,和Form的两种方法GET和POST。

    今天就再探一下CGI。通过网页来控制开发板上的4颗LED灯的亮灭状态

 新建一个cgi_led.html 文件放到开发板主目录的 web/ 文件夹下:


<html>
<head>
<title> DEMO CGI LED--HelloWii </title>
</head>
<body bgcolor=#87CEEB>
<div align="center">
  <form method=get action="cgi-bin/led.cgi">
       <p>please input a number</p>
       <input  type="text" name="value" maxlength="1" size="1" >
       <input  type="submit" name="button" value="input">
   </form>
   <p>0: is open  LED1  </p>
   <p>1: is close LED1  </p>
   <p>2: is open  LED2  </p>
   <p>3: is close LED2  </p>
   <p>4: is open  LED3  </p>
   <p>5: is close LED3  </p>                                                    
   <p>6: is open  LED4  </p>                                                    
   <p>7: is close LED4  </p>                                                    
   <p>8: is open  ALL LED </p>                                                  
   <p>9: is close ALL LED</p>                                                   
   <br \>                                                                       
   <p>  HelloWii </p>                                                           
   </div>                                                                       
</body>                                                                         
</html>                        

 

通过浏览器打开(http://192.168.1.20/cgi_led.html)的效果图如下(IP地址请更换为自己的开发板IP):


                                       图11-1:cgi_led.html


上面的信息已经很清楚的表述了各个数字的功能。


下面就是写CGI的程序了,具体编译上一篇CGI学习笔记中已经将了makefile和编写,下面直接贴led.c的代码,如下:


#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/input.h>
#define LED1         0
#define LED2         1
#define LED3         2
#define LED4         3

#define LED_ON       0
#define LED_OFF      1  
typedef struct
{
  char name[32];
  char value[32];
}entry;
char *ledc;
void getValue(char *value,char *line,char flag)
{  
   int i=0,j=0;
   for(i=0;( (line[i]) && (line[i] != flag));i++)
       {value[i] = line[i];}
   value[i] = '\0'; 
   if(line[i])  ++i;
   while(line[j++] = line[i++]);     
}
int main(int argc, char **argv)
{
    unsigned int count = 0;
    int fdled = -1;
    entry get;
    printf("Content-type : text/html\n\n");
    printf("<html>\n<head><title>LED CGI PROGRAM</title></head>\n");
    printf("<body>\n");   
    
    usleep(500*1000);
    fdled = open("/dev/led",O_RDWR);

    if(fdled<0)
     {  
       printf("Error:Can't open /dev/leds\n");
     
       return -1;
     } 
    ioctl(fdled,1,LED3);ioctl(fdled,0,LED4);
    ledc = (char *)getenv("QUERY_STRING");
    getValue(get.name, ledc,'=');
    getValue(get.value,ledc,'&');
    printf("<br><center>Your input value is <b> %c </b> </center>",get.value[0]); 
    switch(get.value[0])
    {
      case '0':ioctl(fdled,LED_ON,LED1); break;
      case '1':ioctl(fdled,LED_OFF,LED1); break;
      case '2':ioctl(fdled,LED_ON,LED2); break;
      case '3':ioctl(fdled,LED_OFF,LED2); break;
      case '4':ioctl(fdled,LED_ON,LED3); break;
      case '5':ioctl(fdled,LED_OFF,LED3); break;
      case '6':ioctl(fdled,LED_ON,LED4); break;
      case '7':ioctl(fdled,LED_OFF,LED4); break;
      case '8':ioctl(fdled,LED_ON,LED1);
               ioctl(fdled,LED_ON,LED2);
               ioctl(fdled,LED_ON,LED3);
               ioctl(fdled,LED_ON,LED4); 
               break;
      case '9':ioctl(fdled,LED_OFF,LED1);
               ioctl(fdled,LED_OFF,LED2);
               ioctl(fdled,LED_OFF,LED3);
               ioctl(fdled,LED_OFF,LED4); 
               break;
     }
    close(fdled);
    printf("</body>\n<html>");

   return 0;
}

 

makefile如下:



# General Makefile

Exec := led.cgi
Obj := led.c
CC := arm-linux-gcc

$(Exec) : $(Obj)
	$(CC) -o $@ $(Obj) $(LDLIBS$(LDLIBS-$(@)))

clean:
	rm -vf $(Exec) *.elf *.o

 

将生成的leg.cgi 可执行程序,放到开发板的 web/cgi-bin/ 文件夹下,运行程序,即可通过网页对LED灯的控制。。。


今天我就抛砖引玉,简单的讲一下我的小例子。。。期待网友可以用SIN210开发出更炫的功能,比如通过网页显示开发板的温度什么的。。。




关键词: SIN210学习笔记     CGI     LED    

院士
2015-02-22 23:59:11     打赏
2楼
在上文书说过“CGI”方式,我帖子再来详细讲一讲

助工
2015-02-23 11:03:43     打赏
3楼
坐等jobs的帖子。。。

院士
2015-02-23 23:42:14     打赏
4楼

我打错了。

表达是“你的上一个帖子说了原理,你的这个帖子详细说明了,并给出了示例”


助工
2015-02-24 09:17:34     打赏
5楼

共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]