完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 长河柱天 于 2017-7-9 16:06 编辑 大四毕业导致没有按时结项,很抱歉。 一、概述 nanopi的板载资源如spi、uart和wifi都在前面的贴子中提到过,最后的结项是服务器运行与监控系统。在nanopi上跑起来mongoose服务器和一个周期性连接的摄像头,客户端通过8080端口和8088端口,在html上发送post请求,可以查看之前的监控照片。 二、摄像头采集部分 我没有独立摄像头,因此在旧安卓手机上安装了ip摄像头,其局域网ip地址为192.168.1.100:8080,截图地址为192.168.1.100:8080/shot.jpg。为了把图片保存到本地,用Python3做了一个小脚本: import urllib.request import time import string jpg_link='http://192.168.1.100:8080/shot.jpg' path1='home/fa/Desktop/Monitor/070' path3='.jpg' i=1 path2='1' while i>0 : path2=str(i) path=path1+path2+path3 urllib.request.urlretrieve(jpg_link,path) time.sleep(10) i=i+1 由于是模拟监控,所以每10s保存一次照片。(对于嵌入式的设备来说,如果保存的是视频,将消耗很大的内存资源) 另外,上述Python脚本是Python3版本,需要给nanopi装上python3才能使用。 三、mongoose服务器 这是一个开源服务器,代码存放在github,百度也能很容易搜到。主要文件就是mongoose.c和mongoose.h,把用户编写的程序和mongoose.c文件编译连接之后就能得到一个服务器客户端,例如:cc app.c mongoose.c -o app -lpthread,由于要处理客户端的请求,所以借用了官方例程的post.c,代码改动之后如下: #include #include #include "mongoose.h" static const char *html_form = "Play-Back Monitor." "" ""; char html_form2[100] = "Play-Back Monitor. " "" ""; //73-76 static int handler(struct mg_connection *conn) { char var1[500], var2[500]; if (strcmp(conn->uri, "/handle_post_request") == 0) { // User has submitted a form, show submitted data and a variable value // Parse form data. var1 and var2 are guaranteed to be NUL-terminated mg_get_var(conn, "input_1", var1, sizeof(var1)); mg_get_var(conn, "input_2", var2, sizeof(var2)); // Send reply to the client, showing submitted form values. // POST data is in conn->content, data length is in conn->content_len //mg_send_header(conn, "Content-Type", "text/plain"); html_form2[71]=var1[0]; html_form2[72]=var1[1]; html_form2[73]=var2[0]; html_form2[74]=var2[1]; html_form=html_form2; mg_send_data(conn, html_form2, strlen(html_form2)); } else { // Show HTML form. mg_send_data(conn, html_form, strlen(html_form)); } return 1; } int main(void) { struct mg_server *server = mg_create_server(NULL); mg_set_option(server, "listening_port", "8080"); mg_add_uri_handler(server, "/", handler); printf("Starting on port %sn", mg_get_option(server, "listening_port")); for (;;) { mg_poll_server(server, 1000); } mg_destroy_server(&server); return 0; } 代码的大概思路是,开启监控客户端的请求之后,如果客户端提交了请求之后,将数据取出并把html_form2这个html中的图片链接更改为相应的图片名称。比较坑的一个问题是,运行这个post程序后(./post),它打开8080端口,但是此时它不支持从这个端口访问服务器根目录下的任何资源。 被迫采用一个鸡肋的做法,再开一个不处理任何请求的进程app,让它打开8088端口,这样用户通过8080端口提交自己要查看某个时间段的图片记录后,post进程发送给客户的网页中,图片链接是以8088端口的形式给出来的。在app这个进程中,还可以通过调用shell来开启从ip摄像头捕获图片的Python后台。app.c的源码如下: #include "mongoose.h" #include int main(void) { struct mg_server *server = mg_create_server(NULL); mg_set_option(server, "document_root", "."); mg_set_option(server, "listening_port", "8088"); system("/home/jiao/mydoc/EmbededServer/hello.sh"); for (;;) mg_poll_server(server, 1000); // Infinite loop, Ctrl-C to stop mg_destroy_server(&server); return 0; } 四、运行结果 上图是浏览器上的操作效果。 上图是nanopi连接到vnc的显示效果,可以看到Python后台一直在保存图片,post打开了8080端口。 五、总结 mongoose服务器以其超轻量很适合在低配置的设备上运行,配合相应的网页可以配制成一个很节省资源的监控系统。感谢电子发烧友给我这次试用的机会!再次为迟到表示歉意~ |
|
相关推荐
1 个讨论
|
|
只有小组成员才能发言,加入小组>>
370个成员聚集在这个小组
加入小组NanoPi m3适合刷什么系统,刚接触玩,我刷了一个比较卡
5438 浏览 1 评论
7171 浏览 1 评论
4773 浏览 1 评论
【NanoPC-T4试用体验】4、手把手教你从单片机移植驱动到ARM Linux上
7736 浏览 1 评论
【NanoPC-T4试用体验】NanoPC-T4控制步进电机
24586 浏览 1 评论
NanoPi m3适合刷什么系统,刚接触玩,我刷了一个比较卡
5438浏览 1评论
435浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 10:28 , Processed in 0.494096 second(s), Total 39, Slave 32 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号