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

  • 所需器材有:树莓派及其电源,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到本地
    • 编译
      • 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退出程序。
  • 外网控制

    • cpolar
      • 官网上说可以搭配noVnc使用,实现外网对于树莓派的桌面化控制,具体内容之后补充

posted on 2019-04-15 12:43  张芙蓉  阅读(4910)  评论(0编辑  收藏  举报

导航