欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

基于树莓派的远程可控无线网络摄像头的设计与实现

程序员文章站 2022-07-05 15:32:49
所需器材有:树莓派及其电源,usb摄像头,路由器,两台伺服舵机及其外壳,一台笔记本,一根网线 树莓派的基本操作及学习网站与资料 "树莓派实验室" "树莓派3代入门资料及安装教程" 按照以上操作初始化树莓派 树莓派控制摄像头进行视频流传输,并在pc端接收视频 推荐使用 "MJPG streamer" ......
  • 所需器材有:树莓派及其电源,usb摄像头,路由器,两台伺服舵机及其外壳,一台笔记本,一根网线

  • 树莓派的基本操作及学习网站与资料

    • 按照以上操作初始化树莓派
  • 树莓派控制摄像头进行视频流传输,并在pc端接收视频
    • 推荐使用mjpg-streamer,在github上面是一个开源的项目.
    • 在树莓派上面安装如下库:
      • sudo apt-get update
      • sudo apt-get install subversion
      • sudo apt-get install libjpeg8-dev
      • sudo apt-get install imagemagick
      • sudo apt-get install libv4l-dev
      • sudo apt-get install cmake
      • sudo apt-get install git
    • 使用git将远端项目pull到本地
      • sudo git clone
    • 编译
      • cd mjpg-streamer/mjpg-streamer-experimental
      • make all
      • sudo make install
    • 使用
      • ./start.sh
    • 如果可以以桌面化的形式在pc上打开树莓派系统,那么可以在树莓派系统的浏览器输入http://raspberry-ip-address:8080/,即可以看见摄像头采集的视频信息
      • 基于树莓派的远程可控无线网络摄像头的设计与实现
    • 如果没有以桌面化的形式打开树莓派,可以在pc上的浏览器中输入http://raspberry-ip-address/?action=stream,也可看见树莓派采集的信息。raspberry-ip-address表示的是局域网中树莓派的ip地址
      • 基于树莓派的远程可控无线网络摄像头的设计与实现
  • python通过gpio控制舵机云台的转动
      import rpi.gpio as gpio
      import time
      import signal
      import atexit
    
      import os
      import sys
      import tty, termios
    
      atexit.register(gpio.cleanup)
    
      servopin = 22
      servopin2 = 21
      gpio.setmode(gpio.bcm)
      gpio.setup(servopin, gpio.out, initial=false)
      p = gpio.pwm(servopin, 50)
      p.start(0)
    
      gpio.setup(servopin2, gpio.out, initial=false)
      p2 = gpio.pwm(servopin2, 50)
      p2.start(0)
      time.sleep(2)
    
      i = 0
      j = 0
      while true:
            fd = sys.stdin.fileno()
            old_settings = termios.tcgetattr(fd)
            try:
                tty.setraw(fd)
                ch = sys.stdin.read(1)
            finally:
                termios.tcsetattr(fd, termios.tcsadrain, old_settings)
            if ch == 'a':
                if i - 10 >= 0:
                i = i - 10
                p.changedutycycle(2.5 + 10 * i / 180)
                time.sleep(0.02)
                p.changedutycycle(0)
                time.sleep(0.2)
            if ch == 'd':
                if i + 10 < 181:
                i = i + 10
                p.changedutycycle(2.5 + 10 * i / 180)
                time.sleep(0.02)
                p.changedutycycle(0)
                time.sleep(0.2)
            if ch == 'w':
                if j + 10 < 181:
                j = j + 10
                p2.changedutycycle(2.5 + 10 * j / 180)
                time.sleep(0.02)
                p2.changedutycycle(0)
                time.sleep(0.2)
            if ch == 's':
                if j - 10 >= 0:
                j = j - 10
                p2.changedutycycle(2.5 + 10 * j / 180)
                time.sleep(0.02)
                p2.changedutycycle(0)
                time.sleep(0.2)
            if ch == 'q':
                print "shutdown"
                break;
    • 运行python servo.py,此时在pc端输入wasd,树莓派可以接受来自pc端的键盘方向控制信息,控制舵机云台的转动方向,输入q退出程序。
  • 外网控制
      • 官网上说可以搭配novnc使用,实现外网对于树莓派的桌面化控制,具体内容之后补充