«

»

Nov 13 2013

使用树莓派制作近距离遥控摄像机(无线网卡+摄像头,手机或平板等移动终端控制)

其实早就做好了,只不过一直坑着……使用树莓派制作近距离遥控摄像机(无线网卡+摄像头,手机或平板等移动终端控制)

 

先说一下我这篇文章说的东西做出来是啥,就是一个树莓派+无线网卡+摄像头+移动电源的东西。

基本用法就是只要树莓派开机,就可以用无线设备随时进行视频监控或者视频采集,或者同时做,可移动的无线摄像头。与其他教程不太相同的是,这回树莓派不再是接入无线路由或者其他接入点,而是直接自己作为接入点,不再有依赖外在接入点信号范围的束缚。

 

其实没啥用,没啥实际用途,真的。做这玩意其实就是想随意弄个随身摄像机啥的,但是又没小屏幕,于是就对手机和平板起了邪念(啥?)

 

炫耀展示:

使用树莓派制作近距离遥控摄像机(无线网卡+摄像头,手机控制)

点击查看大图

 

基本思路:

装一台Raspbian系统的Raspberry Pi,使用无线网卡配合hostapd作为无线接入点,使用摄像头配合MJPG-Streamer进行图像的实时监控、录制保存或监控录制同时进行,使用移动电源进行移动供电,使用手机或其他移动设备进行无线遥控。


(注:本文使用的树莓派为 树莓派1B ,为2012年款。无论是机型还是系统都已过时。本文仅供参考。)

 

文章目录:

 

A、开始前准备

B、准备材料

C、制作步骤

一、安装系统 (已安装系统的可以跳过此步)

二、编译网卡驱动和hostapd

三、安装DHCP服务

四、安装mjpg-streamer

五、变成接入点

六、脚本准备

七、遥控器准备:

八、实战

D、已知缺陷

E、后记

F、资源下载(百度盘)

G、文档更新日志

(请大家根据自己的情况选择跳过个别步骤)

 

 

 

开始前准备:

如果您确定想要着手操作的话,首先您应该了解linux的一些基础知识、ssh,shell和bash基本操作、基本编译等,并且要有一定的英语基础。这是一篇面向有一定基础的读者的文章,文中部分知识在本文中不会详细解释,如果您有什么不懂的地方,你来打我啊,咳咳,建议您先从基础学起。

 

准备材料:

1、树莓派1B型(因为要用到2个USB口),以及4G或以上SD卡一张

2、USB无线网卡一根(需要支持无线AP)

3、USB摄像头一个(需要支持MJPG)

4、移动电源一块

5、PC一台,路由器一台,网线一根(这些材料用于第一次安装)

6、无线设备一台(用于无线遥控)

附博主使用的材料:

1、树莓派1B型,以及一个不太结实的亚克力外壳+8G class10东芝SD卡

2、EDUP MS8512 USB无线网卡

3、罗技C270 USB摄像头

4、爱国者充电宝D5

5、支持无线网络的笔记本一台,无线路由器一台

6、支持wifi的安卓手机一台,Ipad4(4G)一台

使用树莓派制作近距离遥控摄像机_基本材料

 

博主建议:

1、树莓派的盒子请尽量选择结实的以免携带的时候损坏

2、无线网卡请尽量选择linux下支持的比较好的,博主用的是Realtek芯片的,系统自带的hostapd不支持,MAC修改不支持,BSSID指定不支持(所以3DS无线擦建站一直搞不定)。至于是否外置天线,就随各位爱好吧,无天线的便携性就高,但是无线操作距离就会变低,大家自由取舍。

3、摄像头不是很了解,C270太火了哪的教程都用,虽然我是2010年就买了。

 

制作步骤:

大家注意到了这个教程中没有显示器,也就是说这次是要在无显示器的情况下安装系统。

一、安装系统 (已安装系统的可以跳过此步)
1、SD卡插读卡器上,读卡器插电脑上,刷raspbian上去,没啥说的
2、SD卡再插到树莓派上,先别急着加电,先用网线把树莓派用网线连接到路由器上,再开机。
3、一段时间后用PC登陆到路由器界面,看树莓派用DHCP获取的IP是多少。

使用树莓派制作近距离遥控摄像机_路由器

(博主是因为已经长时间在用树莓派了,所以在路由器上写了静态DHCP)

 

4、使用PC的ssh客户端(推荐用putty,也可脸皮厚点用SecureCRT)登陆到树莓派,根据提示进行首次设置。
(系统装完,搞不定也别来求我)

使用树莓派制作近距离遥控摄像机_SecureCRT登陆

5、虽然不是必须,不过还是建议大家运行一次rpi-update和apt-get update(没准你的不能用的摄像头就能用了,当然,也没准你的无线网卡就不能用了。)

 

二、编译网卡驱动和hostapd
虽然raspbian自带非常多的驱动,而且官方源也包含hostapd,然而却并不能支持每一款无线网卡。我手里的这款EDUP-MS8512就是,虽然能驱动起来,可以连wifi,但是hostapd却无法正常工作(芯片是Realtek的,支持不好)。所以建议大家还是自己编译网卡驱动和hostapd。至于教程,参见您网卡驱动中的README。(坑)

小技巧:编译驱动需要内核代码,还需要各种乱七八糟的东西

需要.config文件么,只要998!

gzip -dc /proc/config.gz >.config

需要Module.symvers文件么,只要你够了

wget https://github.com/raspberrypi/firmware/raw/master/extra/Module.symvers

别忘了make modules_prepare

中途可能会报错找不到openssl/opensslv.h,装一个libssl-dev搞定

 

三、安装DHCP服务

因为接下来要将树莓派作为接入点,使用其他无线设备进行遥控,所以需要DHCP-server为”遥控器”分配IP,具体的,嗯,总之你只要安装isc-dhcp-server这个包就行了。(安装完成时会自行启动,自行启动会因为没有正确的配置文件报错,无视之)

 

四、安装mjpg-streamer

mjpg-streamer是用于视频的录制和监控的,消耗资源也少,安装步骤,嗯,虽然网上一大堆,不过还是发出来吧蛤蛤。当然也是因为网上很多教程缺胳膊少腿,自己想补充一下,这回就不那么坑了。

 

1、安装依赖

sudo apt-get install libv4l-dev libjpeg8-dev imagemagick

使用树莓派制作近距离遥控摄像机_安装必要的依赖包

 

2、下载源码:

svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer

(比较坑爹的就是Raspbian虽然自带git,但是却不带svn,所以没有安装svn的请先安装svn客户端,包名:subversion)

svn死活抠不下来的朋友,(请感谢我们伟大的方校长并祝愿病魔早些战胜校长),您可以在本文最下方找到我的压缩包,Checked out revision 182.

(在网上搜mjpg-streamer的话可能会搜出一个mjpg-streamer-r63,这个包我在树莓派上亲测编译不成功,看报错应该是环境问题,没有过多尝试,有兴趣的朋友可以研究研究)

 

3、编译安装:

根据mjpg-streamer的文档,编译需要libjpeg,但是mjpg-streamer的代码依赖是libjpeg7的,我们使用的是libjpeg8,文件名不同,所以要做一个软连接。不然会报错:

mjpg_streamer.c:27:28: fatal error: linux/videodev.h: No such file or directory
compilation terminated.
make: *** [mjpg_streamer.o] Error 1

软连接:sudo ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h

linux/videodev.h软链接

进入目录并编译:

cd mjpg-streamer
make USE_LIBV4L2=true clean all

 

4、功能测试:

执行:

sudo ./mjpg_streamer -i “./input_uvc.so -d /dev/video0  -r 1280×720 -f 12” -o “./output_http.so -p 8090 -w ./www”

(-r后是分辨率参数,-f后面是帧率,请根据您的摄像头参数进行调整)

之后在PC上打开浏览器,在地址栏填写树莓派的地址+:8090,如果成功的话就会打开mjpg-streamer提供的页面:

使用树莓派制作近距离遥控摄像机_MJPG_streamer

证明mjpg_streamer成功编译并运行了,恭喜,您已经搞定一个核心功能点了。

还可以进入stream页面看一下效果

使用树莓派制作近距离遥控摄像机_MJPG_streamer

 

五、变成接入点

要把树莓派的无线网卡变成接入点,其实并不是很难,很多地方都有教程,这里只列出一些必要步骤或基本命令,不做解释。每条命令的具体意义希望大家自己学习。

 

1、准备无线网卡基本配置

sudo vi /etc/network/interfaces

iface wlan0 inet static
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp
address 10.5.5.1
netmask 255.255.255.224

 

2、准备hostapd的配置文件(一般是rtl_hostapd_2G,具体请参考网卡驱动中的文档)

vi rtl_hostapd_2G

##### hostapd configuration file ##############################################

interface=wlan0
ctrl_interface=/var/run/hostapd
ssid=rtwap
channel=6
wpa=2
wpa_passphrase=87654321
#bridge=br0

 

3、准备DHCP的配置文件

sudo vi /etc/dhcp/dhcpd.conf

保证这段生效(具体怎么做请自行领悟)

subnet 10.5.5.0 netmask 255.255.255.224 {
interface wlan0;
  range 10.5.5.26 10.5.5.30;
  option domain-name-servers 8.8.8.8 , 8.8.4.4;
  option domain-name “pi.wifi.catscarlet.com”;
  option routers 10.5.5.1;
  option broadcast-address 10.5.5.31;
  default-lease-time 600;
  max-lease-time 7200;
}

 

4、准备启动脚本:

(这段其实不应该这么写,这段应该写在无线网卡的配置文件里,也就是interface,使之当插入无线网卡的时候载入,拔出无线网卡的时候卸载。我还没时间仔细研究,所以就对付到启动脚本里了)

sudo vi /etc/init.d/rc.local

在最下方新增两行:

/home/pi/hostapd /home/pi/rtl_hostapd_2G.conf  >> /var/log/hostapd.log

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

(这样AP和NAT就都有了,DHCP开机如果有无线网卡的话会自己载入)

 

5、开启路由转发

/etc/sysctl.conf

将net.ipv4.ip_forward=0修改为net.ipv4.ip_forward=1

 

6、功能测试:

重启树莓派,重启后使用无线设备搜索无线信号rtwap,密码87654321,接入,测试是否可以获取IP和DNS,并且确认是否可以上网。

使用树莓派制作近距离遥控摄像机_登陆

 

六、脚本准备

根据前面的内容,现在我们的树莓派可以作为无线路由器了,也可以作为视频监控了,那么我们现在只要只要同时启用这两个功能,我们就已经接近目标了。

 

现在我们的树莓派在接入无线网卡的情况下开机,就可以作为无线路由使用,所以关于连接方面我们可以不再操心了,只要一心关注如何进行视频的监控和采集即可。

这里提供三个脚本(可在文章末尾打包下载)

 

pi@raspberrypi ~ $ cat 1_start-mjpeg_streamer.sh
cd ~/src/mjpg-streamer/
sudo nohup ./mjpg_streamer -i “./input_uvc.so -d /dev/video0  -r 1280×720 -f 12” -o “./output_http.so -p 8090 -w ./www” &

pi@raspberrypi ~ $ cat 2_start-record.sh
cd ~/src/mjpg-streamer/
sudo nohup ./mjpg_streamer -i “./input_uvc.so -d /dev/video0  -r 1280×720 -f 12” -o “./output_file.so -f /home/pi/tmp/” &
sudo nohup ./mjpg_streamer -i “./input_file.so -f /home/pi/tmp/” -o “./output_http.so -p 8090 -w ./www” &

pi@raspberrypi ~ $ cat 3_stop-mjpeg_streamer.sh
sudo killall mjpg_streamer

pi@raspberrypi ~ $

 

第一个脚本是后台开启视频监控,只能进行监控,不做记录;

第二个脚本是后台开启视频采集并进行实时监控,在做记录的同时可以开浏览器进行监控。记录的文件存放在 /home/pi/tmp/ 中

第三个是干掉楼上两个关闭已开启的视频监控和采集

脚本意义请自行理解并修改,这里不再多述。

 

七、遥控器准备:

一般的无线设备都可以作为遥控器,带有无线网卡的笔记本,安卓手机或平板,ios设备,只要有SSH客户端和支持stream的浏览器即可。

 

浏览器推荐:

实测PC的Firefox、Chrome可用,IE10不可用;ipad的Safari可用。因为我手机不清楚浏览器核心是什么就不提了。

 

移动设备ssh客户端推荐:

安卓系统如果有终端模拟器则可以直接用ssh,没有的话可以安装一款名叫connectbot的应用(谷歌Play

ipad可以安装一款名叫vSSH Lite的应用(App Store),本人没有iphone和WP,这里就不乱推荐了。

 

八、实战

无线监控:

重启过的树莓派应该已经可以进行无线接入了(不能的话就请自行排错吧,这个只能靠经验累积了)

使用无线设备接入树莓派,并确认接入成功。

使用SSH客户端打开地址:[email protected]

使用树莓派制作近距离遥控摄像机_登陆

 

进入到放置三个脚本的目录:

使用树莓派制作近距离遥控摄像机_shell

执行./1_start-mjpeg_streamer.sh (这里说一个小技巧,输入./1之后直接按下tap键<如果有的话>,bash会自动补全,这也是为什么3个脚本都是用数字开头的原因)

start-mjpeg_streamer.sh

进程运行起来了。

再打开浏览器,输入地址:http://10.5.5.1:8090

http://10.5.5.1:8090

再点击Stream进入监控页

http://10.5.5.1:8090

如果想片平查看可以点上面那个here链接

2013-11-12 17.46.49.000_x

点击查看大图

 

近乎大功告成

 

录制+监控:

回到ssh,执行./3_stop-mjpeg_streamer.sh把刚才那个仅监控不录制的进程干掉

之后执行./2_start-record.sh,执行之后树莓派就开始录制了,同时可以继续进入http://10.5.5.1:8090进行监控,堪比一台小型录像机。

录制的文件保存在/home/pi/tmp下,是一堆图片文件,需要进一步转换才能编程视频,请自行解决。

使用树莓派制作近距离遥控摄像机_录制的文件

注:在不干掉录制进程的情况下,mjpeg_streamer会一直写文件,请人工保证别把分区写爆了。有一定基础的话可以再搞一个分区专门做存储。

 

完成:

递归

无限递归递归递归递归递归递归递归递归

现在,拔掉电源,拔掉网线,把移动电源准备好,树莓派往你喜欢的地方随便一扔吧。

请不要用於非法用途。

 

 

已知缺陷:

1、连接到树莓派之后会因为占用wifi资源,无线设备将无法上网。笔记本可以在接入有线网络的情况下调整路由规避,但平板和手机就没办法了。

2、有些情况下摄像头或无线网卡会因为耗电过大,导致树莓派主板供电不足,系统或网卡重启,导致IP丢失。大家按心情自行解决吧

3、整套东西都只关心图像,对声音完全没有获取,很是遗憾。

4、因为没有使用usb hub,所以一个接口接了无线网卡,一个接口接了摄像头,没有空余的接口再连接U盘或者其他存储设备了,所以请准备好足够的SD卡空间。不过720p 12fps,每秒的大小不足1M,io不是问题。

5、操作方面现在只能靠ssh进行操作。其实mjpeg_streamer已经提供了web模板,只要稍微改改模板就可以完全依靠浏览器进行控制了。未来神马的就交给你拯救了。

 

后记:

其实不写网卡编译教程的原因很简单,一家网卡一个方法,写的不好反而会误导人,干脆不写。编译东西,大家应该首先看每个包的README。被奶大的孩子永远长不大。

另外近期发现树莓派的内核从3.6+更新到3.10+了,导致一大堆驱动都不能用了,包括个人编译的和内核自带的,话说系统自带的驱动在内核升级之后就不能用是个什么鬼逻辑啊,难道不知道先祖产品都是怎么死的了么?

 

另外我并没有打算把这个提交到git或者svn的想法。

这个实在太小了,编程的精华在于思路,而不是代码。能理解我要做的是什么,哪里做得好,哪里更待优化,才是正道。单纯的在那抄写代码,农民都不如。

这个东西的扩展性很高,如果有实力和条件的话就可以继续加做遥控车甚至是机器人,相比之下一个小小的视频录制功能只够塞牙缝的。

 

 

资源下载(百度盘):

mjpg-streamer_svn_r182.tar(Checked out revision 182.)

linux-rpi-3.6.y.tar

linux-rpi-3.10.y.zip(这是从git上抠下来的,在windows上测试没问题,但是在pi上解压就报错,估计他们打包的时候脑残的把权限也打进去了)

摄像头控制脚本123

Module.symvers

 

最后(有完没完啊),如果文中有什么写的不够详细或者错误之类的地方,请在评论下留言。

欢迎转载,转载请注明出处:https://blog.catscarlet.com/201311131578.html

 

文档更新日志:

2013 年 11 月 13 日上午 1:36:文档新建

2013 年 11 月 13 日下午 12:18:附件上传

2013 年 12 月 04 日上午 1:34:更新文档目录结构,修改部分措辞。不影响文章理解。

2024 年 2 月 20 日:更新机型信息。

 

28 comments

Skip to comment form

  1. 洛城东华

    作为一个Linux盲,我只注意到了三张挂画

    1. 石樱灯笼

      其实主要目的就是show 挂画

  2. 涼月かえで

    表示第一眼只看到了挂画

    1. 石樱灯笼

      其实主要目的就是show 挂画

  3. 雀巢触屏

    你好,我用ARM9也实现了一些功能。
    现在想要从外网看到视频数据,有什么办法吗?

    1. 石樱灯笼

      如果server放在内网的话,在路由器上做端口映射就可以了

      1. 雀巢触屏

        你的登录网页还可以控制摄像头移动吗?

        1. 石樱灯笼

          我没有云台硬件,没有开发相关功能

          1. 雀巢触屏

            还有一个问题,MJPG-Streamer能够录制视频吗?
            我的貌似只能保存一幅幅图片。

          2. 石樱灯笼

            MJPG-Streamer的标准输出就是单幅图片,需要用格式转换工具转换成视频。树莓派的机能太弱,无法做到录制时转换。需要转换成视频请使用其他硬件(比如PC)做视频转换。

  4. 瞎猫

    你这里,是不是需要两个无线WIFI设备,一台做发射,一台做接收?

  5. marko

    楼主有没有遇到过画面延迟大的问题?
    不是每次都会出现,但是大多时候会有延迟,即使在局域网内直接访问延迟也很大。
    摄像头跟楼主用的是同一个型号,网络用的是有线连接,排除了网络问题和电力问题。

    1. 石樱灯笼

      延迟的话除了网络问题就是性能问题了,你可以看一下CPU使用率,看看是不是处理不过来

  6. 指尖流逝的年华

    请求教我如何使用树莓派制作近距离遥控摄像机的具体细节,w8系统

  7. 天轩青

    我树莓派用mjpg-streamer远程监控,可是mjpg-streamer打开后,没有图像

    1. 石樱灯笼

      新系统貌似对mjpg-streamer支持不太好,我用新系统也没有图像。我现在用的是2013-09-25-wheezy-raspbian,很旧的版本。

      1. 天轩青

        可以传给我吗?我的QQ号/微信号:1025640858

        1. 石樱灯笼

          请在官网下载:http://downloads.raspberrypi.org/raspbian/images/

          1. 天轩青

            2013-09-25-wheezy-raspbian版本刷进去,树莓派没反应,红绿灯常亮,是系统问题吗???

          2. 天轩青

            mjpg可以实现多路视频吗

    2. 石樱灯笼

      而且我也没有apt-get upgrade,不然升级之后也没有图像。mjpg-streamer毕竟年久失修,建议换用其他方案

      1. 天轩青

        我装motion失败了,哭(┬_┬)

      2. 天轩青

        您好,有其他传输视频的方式吗?毕业要用,(┬_┬)哭,谢谢

      3. 天轩青

        我用的树莓派2B只能用新版系统(┬_┬),还有其他传输视频的软件或者是教程吗

        1. 石樱灯笼

          可以考虑下vlc和v4l组合Streaming video with Raspi, VLC and Logitech C270

  8. 天轩青

    这个可以多路传输视频吗??

  9. 天轩青

    可以留下联系方式吗?

  10. 小彦

    谢谢分享,我也玩过树莓派,不过没装过这个监控服务,
    我玩的是手机网页控制即时截摄像头的图,也挺好玩~

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据