硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3063|回复: 0
收起左侧

用单片机控制USB摄像头拍照 -- Ameba Arduino

[复制链接]

27

主题

20

回帖

101

积分

初级会员

积分
101
发表于 2020-10-26 10:44:59 | 显示全部楼层 |阅读模式
大家家里经常会有一些闲置的USB摄像头或是废弃电脑上的摄像头,这些摄像头都是使用UVC (USB Video Class)的协议,因此可以通过支持USB协议的单片机对他们进行废物利用,再加上单片机自带的wifi,我们就可以以超低成本制作一个无线的家庭监控系统,这里我们以瑞昱RTL8195 物联网单片机为例,向大家演示一下把闲置摄像头变废为宝是非常容易的:

使用 UVC 将照片传出
[size=1.125em]
材料准备
  • Ameba x 1
  • Logitech C170 web cam x 1
  • Micro USB OTG adapter x 1

范例说明
这个范例里,会将Camera设定成Motion JPEG模式,然后每秒尝试将照片从TCP传出到网路另一端。
另一端则需要使用TCP来接收照片,这个范例里会使用linux的netcat来接收照片。
首先打开范例 “File” -> “Examples” -> “AmebaUVC” -> “uvc_jpeg_capture”
接着需要修改几个设定:
  • Wifi连线需要使用的ssid/password
  • 接收端的IP,在linux底下可以打ifconfig看目前的IP
接线如同之前的UVC范例。
接着在linux的电脑上打: nc -l 5001 > my_jpeg_file.jpeg
这个命令会停着直到socket结束或出现问题。这个范例里我们会让Ameba传完照片之后将socket关掉。
我们将程式码编译并上传至Ameba,完成之后按下Reset按钮,会看到Ameba连线完成之后,将第一张照片成功发出去,之后会出现Fail to connect,代表这个范例完成了。
同时会在linux端看到原本等待资料的nc命令已经结束,在命令列当前的目录也出现了my_jpeg_file.jpeg的档案,打开看一下照片是否完整。如果需要再收一次照片,再下一次nc命令即可,Ameba端会每秒尝试送照片。


程式码说明
在UVC begin()的地方多了一个参数可以使用:,最后面的地方指定成JPEG_CAPTURE,这样就不会启动RTSP service,但仍会抓取Camera的封包。
UVC.begin(UVC_MJPEG, 640, 480, 30, 0, JPEG_CAPTURE);
在loop()里面,将JPEG存到预先定义好的jpegbuf
int len = UVC.getJPEG(jpegbuf);
接着尝试透过TCP将jpegbuf的资料传出去即可。




评分

参与人数 1金币 +6 收起 理由
yunqi + 6

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-14 07:50 , Processed in 0.185910 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表