当前位置:首页 > 嵌入式WEB视频监控小车项目指导
嵌入式WEB视频监控小车项目指导
分类: 嵌入式项目2011-12-25 15:02 7438人阅读 评论(18) 收藏 举报
嵌入式webcgi服务器ioc
转载请注明来自: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是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的代码很简单,如下:
[cpp] view plaincopy
1. 2. 3. 4. 5. 6. 7. 8. 9.
…………….. ……………… #define FIFO_SERVER \我的FIFO管道文件 void main() { char *buff= NULL; charcar_bt_value[10]=\; intfifo_fd; 10. buff =getenv(\); 11. sscanf(buff, \, car_bt_value); 12. fifo_fd=open(FIFO_SERVER,O_WRONLY|O_NONBLOCK,0); 13. 14. /* 向管道写入数据 */ 15. write(fifo_fd,car_bt_value,10);close(fifo_fd); return 0;} 16. 17. 18. 19. 20.六、小车驱动
21.小车采用L298N芯片驱动,这是一款功率放大芯片,专门用来驱动小车用的。L298 可驱动2 个电机, OUT1、OUT2 和OUT3、OUT4 之间分别接2 个电动机。5、7、10、12 脚接输入控制电平, 控制电机的正反转, ENA, ENB 接控制使能端, 控制电机的停转。下面是电路和逻辑功能图:
22.23.
24.
25.
所以小车的驱动很容易编写只需要往GPIO写不同的高低电平即可,就和写LED驱动一样。
26.七、小车控制应用程序
27.小车应用程序只需要创建一个FIFO管道,然后从FIFO管道读取到CGI写进去的命令然后调用小车驱动执行相关的操作控制小车即可。代码如下:
28. 29.#include
30. #include 31. #include 32. #include 33. #include 34. #include 35. #include 36. #include 37. #define FIFO\ 38. #include 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(\,0); 54. if(car_fd == -1){ 55. perror(\); 56. exit(1); 57. } 58. 59. /* 创建管道 */ 60. if((mkfifo(FIFO,O_CREAT|O_EXCL)<0)&&(errno!=EEXIST)) 61. { 62. perror(\); 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) 搜索更多关于: 嵌入式WEB视频监控小车项目指导 的文档
共分享92篇相关文档