TA的每日心情 | 开心 2016-8-15 09:30 |
---|
签到天数: 162 天 连续签到: 1 天 [LV.7]常住居民III
|
利用Raspberry Pi DIY 实时视频 远程控制设备(转)
准备工作
道具篇 :1.Raspberry pi (树莓派) Model B
2.U盘
3.SD卡
4.摄像头模块
5.电线若干, 发光二极管若干, 电阻若干( 200-300欧的电阻) 即可
6.线路板
道具准备齐全后就可以开始准备软件啦, 我装的系统是Linux Ubuntu mate 15.04 这里是下载链接: https://ubuntu-mate.org/raspberry-pi/
用一台电脑下载系统后放到U盘里面,利用U盘boot 起raspberry pi, 然后把系统装进SD卡, SD卡要分好区,如果sd内空间没有全部利用的话 就用 fdisk reboot resize2fs 的方法把SD卡内空间全部重新分配,我这边这次用的是lexar的32GB SD卡。
进入系统后, 先配置好wifi, 保证pi可以联网, 然后按惯例更新软件包。为了简便,服务端代码用Nodejs(javascript lib),所以要先安装nodejs:
sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm
准备工作完毕
架构设置
这里先讲一下远程视频和控制的基本架构:
控制部分:
先说控制部分,服务器端 按照RESTful 的结构设计, 做成web service比较有助于以后扩展,当服务端接收到客户端请求后, 利用nodejs 的gpio模块 可以直接控制 gpio也就是说操纵电路。gpio 安装命令:npminstall pi-gpio
视频部分:
再说视频部分, 在ubuntu mate上实现相比raspian比较麻烦, 需要安装v4l2工具(Video for linux 2)
v4l2 安装方法:
sudo apt-get install autoconf gettext libtool libjpeg62-dev
cd v4l-utils
autoreconf -vfi
./configure
make
sudo make install
推流前在命令行运行以下命令 :
sudo modprobe bcm2835-v4l2
目的是把raspberry pi的摄像头模块 映射为 /dev/0, 从而可以让ffmpeg命令推流。
GPIO配置
把软排线跟raspberry pi 链接, 另外一头接T字形 copper, 如图:
需要操纵的GPIO出口使用电线连接并最终连接到电路。
电路配置
二极管用并联方式, 因为我买的不同颜色的二极管的电阻不一样, 需要的电压也不一样, 所以基本相似电阻大小的组成一组
电路图在此:
220~300 欧电阻只是为了保护电路防止电流过大损害二极管寿命而已, 并不是必需的。
电路连接后实际效果图 (密集恐惧症者慎看...):
摄像头配置
摄像头模块同样用软排线连接到raspberry pi主板,需要注意正反:
然后在命令行内输入:
vi /boot/firmware/config.txt
在最后一行添加上 start_x=1 并保存 这样摄像头驱动就设置完毕了。
固定摄像头
将摄像头对正需要拍摄的物体,如图我们这里准备对着拍LED的电路:
至此,硬件部分全部配置完毕。
代码部分由于过多, 就不细说了, 全部代码都放在了github上可供下载:
https://github.com/chaucyzhang/piService
路由器设置
路由器设置主要目的是打开DMZ, 或者说把需要用的端口暴露, 由于网页服务器也是放在raspberry pi上的, 所以DMZ或者端口推送的IP要填pi的局域网IP,我这边为192.168.1.3, 端口一共要用3个, 3000, 8082,8084, 为了安全不开DMZ,只开这些端口然后打开路由器的端口推送也可以。
Raspberry pi IP设置
sudo nano /etc/network/interfaces
把内容改成:
auto eth0
iface eth0 inet static
address 192.168.1.3
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.4.4 8.8.8.8
写完我TMD才发现, 其实ubuntu里有设置可以直接改静态IP。
前端
万年不变的HTML CSS Jquery 组合, 利用HTML5的两大超强功能canvas 和websocket, 让视频流可以通过javascript实现!
运行代码
打开3个命令行窗口 分别输入:
第一个窗口:
sudo nodejs stream-server.js 1234
作用为 启动nodejs 推流服务器, 密码为1234(自定)
第二个窗口:
sudo modprobe bcm2835-v4l2
作用上面已经说过
然后 ffmpeg -s 320x240 -f v4l2 -i /dev/video0 -f mpeg1video -b 400k -r 30 http://127.0.0.1:8082/1234/320/240
作用是将摄像头输入的视频流压制为320x240分辨率, 以400K的码率推流到 本地服务器上,密码为1234(需要跟之前推流服务器设置的密码一致)
第三个窗口:
nodejs piService.js
启动RESTful webservice服务器。
最终网页效果
点击按钮打开LED后:
最终实际效果
|
|