3回答

3收藏

利用Raspberry Pi DIY 实时视频 远程控制设备

Raspberry Pi Raspberry Pi 6639 人阅读 | 3 人回复 | 2016-01-28

利用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后:


最终实际效果


分享到:
回复

使用道具 举报

回答|共 3 个

倒序浏览

沙发

幸得安然

发表于 2016-1-28 10:43:39 | 只看该作者

有点意思
板凳

yanhaijian

发表于 2016-1-28 11:08:28 | 只看该作者

跟大家说说你怎么一步步变得这么牛逼的。
地板

omyrono

发表于 2016-12-5 11:02:31 | 只看该作者

这杜邦线插的,强人啊
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条