嵌入式WEB视频监控小车项目指导

转载请注明来自:http://blog.csdn.net/ayangke 

上一个文档对H.264监控系统进行了讲解,这一个文档将对一种更容易实现视频监控的web方法进行讲解。

 

代码以及相关文档开放下载,加一个连接版面就乱了,调了好久都没调过来,悲剧了,后面看到的将就着看吧

http://download.csdn.net/detail/ayangke/5097807

 


一、系统架构图

       系统硬件架构图:


从硬件架构图可以看出该系统采用B/S构架,系统的主控平台为MINI2440,通过在该平台上构建视频服务器和WEB服务器实现系统主体设计。

系统软件架构图:


软件系统主要由Linux下的开源服务器MJPG-Streamer、BOA服务器、小车控制应用程序和小车驱动组成。MJPG-Streamer和BOA服务器我们只需要移植便可,我们需要做的就是做一个HTML格式的web界面、一个控制小车应用程序、小车驱动和一个启动这些程序的Shell脚本。


二、MJPG-Streamer服务器的移植

MJPG-Streamer的移植方法我是参考MINI2440的文档移植的。移植很简单只需编译然后运行便可。


三、BOA服务器的移植

到这部分大家可能会有点疑问,为什么有了视频服务器还需要一个WEB服务器,上一步的MJPG-Streamer就可以在WEB浏览器上浏览到实时视频了,是因为MJPG-Streamer不支持CGI脚本,浏览器端无法和服务器就行通信。而BOA服务器支持CGI,CGI脚本可以实现服务器和应用程序的通信,也就是说浏览器端的信息可以通过CGI传送给应用程序。于是我们就可以通过浏览器端用户的操作来决定小车的动作。BOA服务器的移植,网上也有大把的文章,大家可以去查阅。


四、BOA显示MJPG-Streamer视频数据

上两步我们已经完成了MJPG-Streamer和BOA服务器的移植,但是如何把MJPG-Streamer的视频数据在BOA服务器上显示呢?我google了好久也没发现,后来自己尝试成功了,只需加一条在BOA的显示的HTML网页文件中加一条语句即可:

<img src=http://192.168.1.102:8080/?action=stream>

img是HTML语言的一个图像控件,192.168.1.102是我的视频服务器的IP地址。HTML界面设计我也不讲了,我也没学过,只花了一天的时间学了用fontpage来构建了一个很丑陋的界面,不过也能良好工作,后来嫌它实在太丑了,叫一个会这个的朋友帮忙做了一个。


五、CGI编程

       CGI全称叫做“通用网关接口”。利用通过网关接口(CGI),WEB服务器可以执行一些外部的小程序。通用网关接口(CGI)只是规定了一个标准的接口规范,只要遵守这个标准规范,程序开发人员就可以利用各种编程工具,例如Perl、C、Fortan、Visual Basic等进行CGI编程。C语言是每一个程序员的必备语言,所以我们采用C语言进行CGI编程。CGI主要通过GET和POST两种方法对服务器端的表单进行响应,具体操作见《CGI程序设计指南》。我的CGI的代码很简单,如下:

  1. <SPAN style="FONT-SIZE: 18px"></SPAN><PRE class=cpp name="code"><PRE>……………..  
  2. ………………  
  3. #define FIFO_SERVER "/var/my_car_fifo"//我的FIFO管道文件   
  4. void main()  
  5. {  
  6.        char *buff= NULL;  
  7.        charcar_bt_value[10]="";  
  8.        intfifo_fd;  
  9.         
  10.        buff =getenv("QUERY_STRING");       
  11.        sscanf(buff, "%*[^=]=%s", car_bt_value);  
  12.        fifo_fd=open(FIFO_SERVER,O_WRONLY|O_NONBLOCK,0);  
  13.    
  14.        /* 向管道写入数据 */  
  15. write(fifo_fd,car_bt_value,10);</PRE> close(fifo_fd); return 0;}  
  16. <PRE></PRE>  
  17. <PRE></PRE>  
  18. <SPAN style="FONT-SIZE: 16px"></SPAN>  
  19. <P></P>  
  20. <P align=left><STRONG><SPAN style="FONT-SIZE: 16px">       六、小车驱动</SPAN></STRONG></P>  
  21. <P align=left><SPAN style="FONT-SIZE: 16px">       小车采用L298N芯片驱动,这是一款功率放大芯片,专门用来驱动小车用的。L298 可驱动2 个电机, OUT1、OUT2 和OUT3、OUT4 之间分别接2 个电动机。5、7、10、12 脚接输入控制电平, 控制电机的正反转, ENA, ENB 接控制使能端, 控制电机的停转。下面是电路和逻辑功能图:</SPAN></P>  
  22. <P align=left><SPAN style="FONT-SIZE: 16px"></SPAN></P>  
  23. <P style="TEXT-ALIGN: center" align=left><SPAN style="FONT-SIZE: 16px"><IMG alt="" src="http://hi.csdn.net/attachment/201112/25/0_1324825467ID8D.gif"></SPAN></P>  
  24. <P style="TEXT-ALIGN: center" align=left><SPAN style="FONT-SIZE: 16px"><IMG alt="" src="http://hi.csdn.net/attachment/201112/25/0_1324825492pWBE.gif"></SPAN></P>  
  25. <P><SPAN style="FONT-SIZE: 16px">所以小车的驱动很容易编写只需要往GPIO写不同的高低电平即可,就和写LED驱动一样。</SPAN></P>  
  26. <P><STRONG><SPAN style="FONT-SIZE: 16px">七、小车控制应用程序</SPAN></STRONG></P>  
  27. <P><SPAN style="FONT-SIZE: 16px">       小车应用程序只需要创建一个FIFO管道,然后从FIFO管道读取到CGI写进去的命令然后调用小车驱动执行相关的操作控制小车即可。代码如下:</SPAN></P>  
  28. <P></P>  
  29. <PRE class=cpp name="code"><SPAN style="FONT-SIZE: 16px">#include<sys/types.h>  
  30. #include<sys/stat.h>   
  31. #include<errno.h>   
  32. #include<fcntl.h>   
  33. #include<stdio.h>   
  34. #include<stdlib.h>   
  35. #include<string.h>   
  36. #include<unistd.h>   
  37. #define FIFO"/var/my_car_fifo"   
  38. #include<linux/ioctl.h>   
  39.    
  40. #defineCAR_IOC_MAGIC 'k'   
  41. #define CAR_UP_IO(CAR_IOC_MAGIC, 0)   
  42. #define CAR_DOWN_IO(CAR_IOC_MAGIC, 1)   
  43. #define CAR_LEFT_IO(CAR_IOC_MAGIC, 2)   
  44. #define CAR_RIGHT_IO(CAR_IOC_MAGIC, 3)   
  45. #define CAR_STOP_IO(CAR_IOC_MAGIC, 4)   
  46.    
  47. main(intargc,char** argv)  
  48. {  
  49.        char buf_r[10];  
  50.        int fifo_fd, car_fd;  
  51.        int nread;  
  52.         
  53.        car_fd = open("/dev/my_car",0);  
  54.        if(car_fd == -1){  
  55.               perror("open car devicefailed");  
  56.               exit(1);  
  57.        }  
  58.         
  59.        /* 创建管道 */  
  60.        if((mkfifo(FIFO,O_CREAT|O_EXCL)<0)&&(errno!=EEXIST))  
  61.        {  
  62.               perror("cannot createfifo\n");  
  63.               exit(1);  
  64.        }  
  65.         
  66.        while(1)  
  67.        {  
  68.               fifo_fd=open(FIFO,O_RDONLY,0);  
  69.               memset(buf_r,0,sizeof(buf_r));  
  70.                
  71.               if((nread=read(fifo_fd,buf_r,10))==-1)  
  72.               {  
  73.                      if(errno==EAGAIN)  
  74.                             printf("no datayet\n");  
  75.               }  
  76.         
  77.               if(!strcmp(buf_r, "UP"))  
  78.               {  
  79.                      ioctl(car_fd, CAR_UP);  
  80.                      printf("goup!\n");  
  81.               }  
  82.               if(!strcmp(buf_r,"DOWN"))  
  83.               {  
  84.                      ioctl(car_fd, CAR_DOWN);  
  85.                      printf("godown!\n");  
  86.               }  
  87.               if(!strcmp(buf_r,"LEFT"))  
  88.               {  
  89.                      ioctl(car_fd, CAR_LEFT);  
  90.                      printf("goleft!\n");  
  91.               }  
  92.               if(!strcmp(buf_r,"RIGHT"))  
  93.               {  
  94.                      ioctl(car_fd, CAR_RIGHT);  
  95.                      printf("goright!\n");  
  96.               }  
  97.               if(!strcmp(buf_r,"STOP"))  
  98.               {  
  99.                      ioctl(car_fd, CAR_STOP);  
  100.                      printf("gostop!\n");  
  101.               }       
  102.                
  103.               close(fifo_fd);  
  104.        }       
  105.        close(car_fd);  
  106. }</SPAN></PRE><SPAN style="FONT-SIZE: 16px"><BR>  
  107. <BR>  
  108. </SPAN>  
  109. <P></P>  
  110. <P><STRONG><SPAN style="FONT-SIZE: 16px">八、Linux无线网卡的使用</SPAN></STRONG></P>  
  111. <P><SPAN style="FONT-SIZE: 16px"><STRONG>       </STRONG>请查阅《基于MINI2440的USB无线网卡使用指南》。</SPAN></P>  
  112. <P><SPAN style="FONT-SIZE: 16px"><BR>  
  113. </SPAN></P>  
  114. <P><STRONG><SPAN style="FONT-SIZE: 16px">九、结语</SPAN></STRONG></P>  
  115. <P><SPAN style="FONT-SIZE: 16px">       本文档只给大家一个实现的思路,具体实现还得靠自己。完成这个项目需要的知识有:Linux应用程序编程、Linux内核驱动基本知识和CGI编程知识。之所以做这个项目是因为上一个项目H.264监控做的不是很成功,于是考虑使用WEB方式来实现,后来学了一些驱动的知识,然后查阅了一些资料,只用十几天的就拿下了。这个项目和华清远见的一个项目差不多,发现这个项目也不过如此,没多少含金量,所以本人不推荐有一定自学能力的人去进行嵌入式培训。</SPAN></P>  
  116. <P> </P>  
  117. <P><SPAN style="FONT-SIZE: 16px"><SPAN style="WHITE-SPACE: pre"></SPAN>最后,上图,秀一个:</SPAN></P>  
  118. <P><SPAN style="FONT-SIZE: 16px"><IMG alt="" src="http://hi.csdn.net/attachment/201112/29/0_13251252205335.gif"><BR>  
  119. </SPAN></P>  
  120. <PRE></PRE>  
  121. <PRE></PRE>  
  122. <PRE></PRE>  
  123. <PRE></PRE>  
  124. <PRE></PRE>  
  125. <PRE></PRE>  
  126. <PRE></PRE>  
  127. <PRE></PRE>  
  128. <PRE></PRE>  
  129. <PRE></PRE>  
  130. <PRE></PRE>  
  131. <PRE></PRE>  
  132.   
  133. </PRE>  

   
   
  1. <PRE>……………..  
  2. ………………  
  3. #define FIFO_SERVER "/var/my_car_fifo"//我的FIFO管道文件   
  4. void main()  
  5. {  
  6.        char *buff= NULL;  
  7.        charcar_bt_value[10]="";  
  8.        intfifo_fd;  
  9.         
  10.        buff =getenv("QUERY_STRING");       
  11.        sscanf(buff, "%*[^=]=%s", car_bt_value);  
  12.        fifo_fd=open(FIFO_SERVER,O_WRONLY|O_NONBLOCK,0);  
  13.    
  14.        /* 向管道写入数据 */  
  15. write(fifo_fd,car_bt_value,10);</PRE> close(fifo_fd); return 0;}  
  16. <PRE></PRE>  
  17. <PRE></PRE>  
  18. <SPAN style="FONT-SIZE: 16px"></SPAN>  
  19. <P></P>  
  20. <P align=left><STRONG><SPAN style="FONT-SIZE: 16px">       六、小车驱动</SPAN></STRONG></P>  
  21. <P align=left><SPAN style="FONT-SIZE: 16px">       小车采用L298N芯片驱动,这是一款功率放大芯片,专门用来驱动小车用的。L298 可驱动2 个电机, OUT1、OUT2 和OUT3、OUT4 之间分别接2 个电动机。5、7、10、12 脚接输入控制电平, 控制电机的正反转, ENA, ENB 接控制使能端, 控制电机的停转。下面是电路和逻辑功能图:</SPAN></P>  
  22. <P align=left><SPAN style="FONT-SIZE: 16px"></SPAN></P>  
  23. <P style="TEXT-ALIGN: center" align=left><SPAN style="FONT-SIZE: 16px"><IMG alt="" src="http://hi.csdn.net/attachment/201112/25/0_1324825467ID8D.gif"></SPAN></P>  
  24. <P style="TEXT-ALIGN: center" align=left><SPAN style="FONT-SIZE: 16px"><IMG alt="" src="http://hi.csdn.net/attachment/201112/25/0_1324825492pWBE.gif"></SPAN></P>  
  25. <P><SPAN style="FONT-SIZE: 16px">所以小车的驱动很容易编写只需要往GPIO写不同的高低电平即可,就和写LED驱动一样。</SPAN></P>  
  26. <P><STRONG><SPAN style="FONT-SIZE: 16px">七、小车控制应用程序</SPAN></STRONG></P>  
  27. <P><SPAN style="FONT-SIZE: 16px">       小车应用程序只需要创建一个FIFO管道,然后从FIFO管道读取到CGI写进去的命令然后调用小车驱动执行相关的操作控制小车即可。代码如下:</SPAN></P>  
  28. <P></P>  
  29. <PRE class=cpp name="code"><SPAN style="FONT-SIZE: 16px">#include<sys/types.h>  
  30. #include<sys/stat.h>   
  31. #include<errno.h>   
  32. #include<fcntl.h>   
  33. #include<stdio.h>   
  34. #include<stdlib.h>   
  35. #include<string.h>   
  36. #include<unistd.h>   
  37. #define FIFO"/var/my_car_fifo"   
  38. #include<linux/ioctl.h>   
  39.    
  40. #defineCAR_IOC_MAGIC 'k'   
  41. #define CAR_UP_IO(CAR_IOC_MAGIC, 0)   
  42. #define CAR_DOWN_IO(CAR_IOC_MAGIC, 1)   
  43. #define CAR_LEFT_IO(CAR_IOC_MAGIC, 2)   
  44. #define CAR_RIGHT_IO(CAR_IOC_MAGIC, 3)   
  45. #define CAR_STOP_IO(CAR_IOC_MAGIC, 4)   
  46.    
  47. main(intargc,char** argv)  
  48. {  
  49.        char buf_r[10];  
  50.        int fifo_fd, car_fd;  
  51.        int nread;  
  52.         
  53.        car_fd = open("/dev/my_car",0);  
  54.        if(car_fd == -1){  
  55.               perror("open car devicefailed");  
  56.               exit(1);  
  57.        }  
  58.         
  59.        /* 创建管道 */  
  60.        if((mkfifo(FIFO,O_CREAT|O_EXCL)<0)&&(errno!=EEXIST))  
  61.        {  
  62.               perror("cannot createfifo\n");  
  63.               exit(1);  
  64.        }  
  65.         
  66.        while(1)  
  67.        {  
  68.               fifo_fd=open(FIFO,O_RDONLY,0);  
  69.               memset(buf_r,0,sizeof(buf_r));  
  70.                
  71.               if((nread=read(fifo_fd,buf_r,10))==-1)  
  72.               {  
  73.                      if(errno==EAGAIN)  
  74.                             printf("no datayet\n");  
  75.               }  
  76.         
  77.               if(!strcmp(buf_r, "UP"))  
  78.               {  
  79.                      ioctl(car_fd, CAR_UP);  
  80.                      printf("goup!\n");  
  81.               }  
  82.               if(!strcmp(buf_r,"DOWN"))  
  83.               {  
  84.                      ioctl(car_fd, CAR_DOWN);  
  85.                      printf("godown!\n");  
  86.               }  
  87.               if(!strcmp(buf_r,"LEFT"))  
  88.               {  
  89.                      ioctl(car_fd, CAR_LEFT);  
  90.                      printf("goleft!\n");  
  91.               }  
  92.               if(!strcmp(buf_r,"RIGHT"))  
  93.               {  
  94.                      ioctl(car_fd, CAR_RIGHT);  
  95.                      printf("goright!\n");  
  96.               }  
  97.               if(!strcmp(buf_r,"STOP"))  
  98.               {  
  99.                      ioctl(car_fd, CAR_STOP);  
  100.                      printf("gostop!\n");  
  101.               }       
  102.                
  103.               close(fifo_fd);  
  104.        }       
  105.        close(car_fd);  
  106. }</SPAN></PRE><SPAN style="FONT-SIZE: 16px"><BR>  
  107. <BR>  
  108. </SPAN>  
  109. <P></P>  
  110. <P><STRONG><SPAN style="FONT-SIZE: 16px">八、Linux无线网卡的使用</SPAN></STRONG></P>  
  111. <P><SPAN style="FONT-SIZE: 16px"><STRONG>       </STRONG>请查阅《基于MINI2440的USB无线网卡使用指南》。</SPAN></P>  
  112. <P><SPAN style="FONT-SIZE: 16px"><BR>  
  113. </SPAN></P>  
  114. <P><STRONG><SPAN style="FONT-SIZE: 16px">九、结语</SPAN></STRONG></P>  
  115. <P><SPAN style="FONT-SIZE: 16px">       本文档只给大家一个实现的思路,具体实现还得靠自己。完成这个项目需要的知识有:Linux应用程序编程、Linux内核驱动基本知识和CGI编程知识。之所以做这个项目是因为上一个项目H.264监控做的不是很成功,于是考虑使用WEB方式来实现,后来学了一些驱动的知识,然后查阅了一些资料,只用十几天的就拿下了。这个项目和华清远见的一个项目差不多,发现这个项目也不过如此,没多少含金量,所以本人不推荐有一定自学能力的人去进行嵌入式培训。</SPAN></P>  
  116. <P> </P>  
  117. <P><SPAN style="FONT-SIZE: 16px"><SPAN style="WHITE-SPACE: pre"></SPAN>最后,上图,秀一个:</SPAN></P>  
  118. <P><SPAN style="FONT-SIZE: 16px"><IMG alt="" src="http://hi.csdn.net/attachment/201112/29/0_13251252205335.gif"><BR>  
  119. </SPAN></P>  
  120. <PRE></PRE>  
  121. <PRE></PRE>  
  122. <PRE></PRE>  
  123. <PRE></PRE>  
  124. <PRE></PRE>  
  125. <PRE></PRE>  
  126. <PRE></PRE>  
  127. <PRE></PRE>  
  128. <PRE></PRE>  
  129. <PRE></PRE>  
  130. <PRE></PRE>  
  131. <PRE></PRE>  
……………..
………………
#define FIFO_SERVER "/var/my_car_fifo"//我的FIFO管道文件
void main()
{
       char *buff= NULL;
       charcar_bt_value[10]="";
       intfifo_fd;
      
       buff =getenv("QUERY_STRING");     
       sscanf(buff, "%*[^=]=%s", car_bt_value);
       fifo_fd=open(FIFO_SERVER,O_WRONLY|O_NONBLOCK,0);
 
       /* 向管道写入数据 */
write(fifo_fd,car_bt_value,10);
close(fifo_fd); return 0;}



       六、小车驱动

       小车采用L298N芯片驱动,这是一款功率放大芯片,专门用来驱动小车用的。L298 可驱动2 个电机, OUT1、OUT2 和OUT3、OUT4 之间分别接2 个电动机。5、7、10、12 脚接输入控制电平, 控制电机的正反转, ENA, ENB 接控制使能端, 控制电机的停转。下面是电路和逻辑功能图:

所以小车的驱动很容易编写只需要往GPIO写不同的高低电平即可,就和写LED驱动一样。

七、小车控制应用程序

       小车应用程序只需要创建一个FIFO管道,然后从FIFO管道读取到CGI写进去的命令然后调用小车驱动执行相关的操作控制小车即可。代码如下:

  1. <SPAN style="FONT-SIZE: 16px">#include<sys/types.h>  
  2. #include<sys/stat.h>   
  3. #include<errno.h>   
  4. #include<fcntl.h>   
  5. #include<stdio.h>   
  6. #include<stdlib.h>   
  7. #include<string.h>   
  8. #include<unistd.h>   
  9. #define FIFO"/var/my_car_fifo"   
  10. #include<linux/ioctl.h>   
  11.    
  12. #defineCAR_IOC_MAGIC 'k'   
  13. #define CAR_UP_IO(CAR_IOC_MAGIC, 0)   
  14. #define CAR_DOWN_IO(CAR_IOC_MAGIC, 1)   
  15. #define CAR_LEFT_IO(CAR_IOC_MAGIC, 2)   
  16. #define CAR_RIGHT_IO(CAR_IOC_MAGIC, 3)   
  17. #define CAR_STOP_IO(CAR_IOC_MAGIC, 4)   
  18.    
  19. main(intargc,char** argv)  
  20. {  
  21.        char buf_r[10];  
  22.        int fifo_fd, car_fd;  
  23.        int nread;  
  24.         
  25.        car_fd = open("/dev/my_car",0);  
  26.        if(car_fd == -1){  
  27.               perror("open car devicefailed");  
  28.               exit(1);  
  29.        }  
  30.         
  31.        /* 创建管道 */  
  32.        if((mkfifo(FIFO,O_CREAT|O_EXCL)<0)&&(errno!=EEXIST))  
  33.        {  
  34.               perror("cannot createfifo\n");  
  35.               exit(1);  
  36.        }  
  37.         
  38.        while(1)  
  39.        {  
  40.               fifo_fd=open(FIFO,O_RDONLY,0);  
  41.               memset(buf_r,0,sizeof(buf_r));  
  42.                
  43.               if((nread=read(fifo_fd,buf_r,10))==-1)  
  44.               {  
  45.                      if(errno==EAGAIN)  
  46.                             printf("no datayet\n");  
  47.               }  
  48.         
  49.               if(!strcmp(buf_r, "UP"))  
  50.               {  
  51.                      ioctl(car_fd, CAR_UP);  
  52.                      printf("goup!\n");  
  53.               }  
  54.               if(!strcmp(buf_r,"DOWN"))  
  55.               {  
  56.                      ioctl(car_fd, CAR_DOWN);  
  57.                      printf("godown!\n");  
  58.               }  
  59.               if(!strcmp(buf_r,"LEFT"))  
  60.               {  
  61.                      ioctl(car_fd, CAR_LEFT);  
  62.                      printf("goleft!\n");  
  63.               }  
  64.               if(!strcmp(buf_r,"RIGHT"))  
  65.               {  
  66.                      ioctl(car_fd, CAR_RIGHT);  
  67.                      printf("goright!\n");  
  68.               }  
  69.               if(!strcmp(buf_r,"STOP"))  
  70.               {  
  71.                      ioctl(car_fd, CAR_STOP);  
  72.                      printf("gostop!\n");  
  73.               }       
  74.                
  75.               close(fifo_fd);  
  76.        }       
  77.        close(car_fd);  
  78. }</SPAN>  
#include<sys/types.h>#include<sys/stat.h>#include<errno.h>#include<fcntl.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#define FIFO"/var/my_car_fifo"#include<linux/ioctl.h> #defineCAR_IOC_MAGIC 'k'#define CAR_UP_IO(CAR_IOC_MAGIC, 0)#define CAR_DOWN_IO(CAR_IOC_MAGIC, 1)#define CAR_LEFT_IO(CAR_IOC_MAGIC, 2)#define CAR_RIGHT_IO(CAR_IOC_MAGIC, 3)#define CAR_STOP_IO(CAR_IOC_MAGIC, 4) main(intargc,char** argv){ char buf_r[10]; int fifo_fd, car_fd; int nread; car_fd = open("/dev/my_car",0); if(car_fd == -1){ perror("open car devicefailed"); exit(1); } /* 创建管道 */ if((mkfifo(FIFO,O_CREAT|O_EXCL)<0)&&(errno!=EEXIST)) { perror("cannot createfifo\n"); exit(1); } while(1) { fifo_fd=open(FIFO,O_RDONLY,0); memset(buf_r,0,sizeof(buf_r)); if((nread=read(fifo_fd,buf_r,10))==-1) { if(errno==EAGAIN) printf("no datayet\n"); } if(!strcmp(buf_r, "UP")) { ioctl(car_fd, CAR_UP); printf("goup!\n"); } if(!strcmp(buf_r,"DOWN")) { ioctl(car_fd, CAR_DOWN); printf("godown!\n"); } if(!strcmp(buf_r,"LEFT")) { ioctl(car_fd, CAR_LEFT); printf("goleft!\n"); } if(!strcmp(buf_r,"RIGHT")) { ioctl(car_fd, CAR_RIGHT); printf("goright!\n"); } if(!strcmp(buf_r,"STOP")) { ioctl(car_fd, CAR_STOP); printf("gostop!\n"); } close(fifo_fd); } close(car_fd);}

八、Linux无线网卡的使用

       请查阅《基于MINI2440的USB无线网卡使用指南》。


九、结语

       本文档只给大家一个实现的思路,具体实现还得靠自己。完成这个项目需要的知识有:Linux应用程序编程、Linux内核驱动基本知识和CGI编程知识。之所以做这个项目是因为上一个项目H.264监控做的不是很成功,于是考虑使用WEB方式来实现,后来学了一些驱动的知识,然后查阅了一些资料,只用十几天的就拿下了。这个项目和华清远见的一个项目差不多,发现这个项目也不过如此,没多少含金量,所以本人不推荐有一定自学能力的人去进行嵌入式培训。

 

最后,上图,秀一个:















  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于嵌入式web技术的网络视频监控系统是一种将视频监控系统集成到嵌入式设备中的网络化解决方案。该系统通过使用嵌入式硬件和软件技术,可以实时监控和管理多个视频摄像头的画面,并通过网络传输监控数据到远程终端。 该系统的核心是嵌入式设备,其具有小型化、低功耗、高性能的特点,可以运行轻量级的操作系统和网络服务。通过网络连接,监控设备可以将视频流传输到远程终端,用户可以通过浏览器或专用客户端实时观看视频画面,并对监控设备进行控制和配置。 基于嵌入式web技术的网络视频监控系统具有以下优点: 1. 灵活性:该系统可以连接到任何具有网络连接的设备,用户可以通过各种终端(如电脑、手机)实时查看视频画面,方便快捷。 2. 扩展性:可以轻松扩展监控设备的数量和范围,满足不同规模和需求的监控场景。 3. 高效性:嵌入式设备在处理视频数据时具有高效性和稳定性,能够同时处理多个视频流并实时传输。 4. 安全性:该系统支持数据加密和身份验证,保障监控数据的安全性和隐私性。 5. 可管理性:用户可以通过web界面实时监控和管理视频设备,如调整摄像头视角、录制视频和设置报警规则等。 总而言之,基于嵌入式web技术的网络视频监控系统为用户提供了方便、高效、可扩展和安全的监控解决方案,具有广泛的应用前景,可以应用于各种领域,如家庭监控、商业安防等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值