查看: 5915|回复: 3

[项目] 利用Raspberry Pi DIY 实时视频 远程控制设备

[复制链接]
  • TA的每日心情
    开心
    2016-8-15 09:30
  • 签到天数: 162 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-1-28 09:33:13 | 显示全部楼层 |阅读模式
    分享到:
    利用Raspberry Pi  DIY 实时视频 远程控制设备(转)

    准备工作
    道具篇 :1.Raspberry pi (树莓派) Model B
    1.jpg    2.U盘

    3.SD卡
    4.摄像头模块
    2.jpg

    5.电线若干, 发光二极管若干, 电阻若干( 200-300欧的电阻) 即可
    3.jpg

    6.线路板
    4.jpg

    道具准备齐全后就可以开始准备软件啦, 我装的系统是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

    准备工作完毕

    架构设置
    这里先讲一下远程视频和控制的基本架构:

    控制部分:

    5.jpg


    先说控制部分,服务器端 按照RESTful 的结构设计, 做成web service比较有助于以后扩展,当服务端接收到客户端请求后, 利用nodejs 的gpio模块 可以直接控制 gpio也就是说操纵电路。gpio 安装命令:npminstall pi-gpio


    视频部分:
    6.jpg


    再说视频部分, 在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, 如图:
    7.jpg 8.jpg
    需要操纵的GPIO出口使用电线连接并最终连接到电路。

    电路配置
    二极管用并联方式, 因为我买的不同颜色的二极管的电阻不一样, 需要的电压也不一样, 所以基本相似电阻大小的组成一组
    9.jpg

    电路图在此:
    10.jpg 220~300 欧电阻只是为了保护电路防止电流过大损害二极管寿命而已, 并不是必需的。


    电路连接后实际效果图 (密集恐惧症者慎看...):
    11.jpg


    摄像头配置

    摄像头模块同样用软排线连接到raspberry pi主板,需要注意正反:
    12.jpg

    然后在命令行内输入:
    vi /boot/firmware/config.txt



    在最后一行添加上 start_x=1 并保存 这样摄像头驱动就设置完毕了。


    固定摄像头

    将摄像头对正需要拍摄的物体,如图我们这里准备对着拍LED的电路:
    13.jpg

    至此,硬件部分全部配置完毕。




    代码部分由于过多, 就不细说了, 全部代码都放在了github上可供下载:
    https://github.com/chaucyzhang/piService


    路由器设置
    路由器设置主要目的是打开DMZ, 或者说把需要用的端口暴露, 由于网页服务器也是放在raspberry pi上的, 所以DMZ或者端口推送的IP要填pi的局域网IP,我这边为192.168.1.3, 端口一共要用3个, 3000, 8082,8084, 为了安全不开DMZ,只开这些端口然后打开路由器的端口推送也可以。
    14.jpg
    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服务器。


    最终网页效果
    15.jpg
    点击按钮打开LED后:
    16.jpg

    最终实际效果
    17.jpg

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-11-15 17:06
  • 签到天数: 30 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2016-1-28 10:43:39 | 显示全部楼层
    有点意思
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-3-13 10:11
  • 签到天数: 1088 天

    连续签到: 2 天

    [LV.10]以坛为家III

    发表于 2016-1-28 11:08:28 | 显示全部楼层
    跟大家说说你怎么一步步变得这么牛逼的。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-12-5 10:15
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-12-5 11:02:31 | 显示全部楼层
    这杜邦线插的,强人啊
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-6-12 04:00 , Processed in 0.146792 second(s), 21 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.