入手树莓派后,参考了网上的一些文章实现了树莓派(Raspberry Pi)远程控制云台来监控我家养的三只陆龟。http://pi.fendou.info(Pagekite映射) http://buzzdao.myds.me:1111/ (路由映射)
下面是实现过程的总结。PS:目前Gor博客内容直接Git clone 自 hugozhu,回头有时间也会把这篇文章以markdown格式整理到上面。
初始化操作
如已经在SD中安装过系统,可以用DiskGenius3.4.5清楚原有数据和Linux分区
安装RaspberryPi操作官方系统 Raspbian “wheezy”下载地址 http://www.raspberrypi.org/downloads 写入SD前先解压出img文件
下载SD卡写入工具Win32DiskImager 翻墙下载 & http://sourceforge.net/projects/win32diskimager/
系统初始化时扩展剩余SD卡空间
配置Pi密码(默认raspberry)、时区、预言、键盘布局并在高级设置中开启SSH
$sudo raspi-config
$sudo apt-get install vim (喜欢这个编辑器)
进入系统配置Wifi
$sudo nano /etc/network/interfaces
$sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
更新RaspberryPi到最新版本(时间较长)
$sudo apt-get update
$sudo apt-get upgrade
安装所要的软件
安装视频捕获软件mjpg-streamer&安装摄像头Logitech(C110\C270)
首先下载mjpg-streamer http://sourceforge.net/projects/mjpg-streamer/files/latest/download
$wget http://hivelocity.dl.sourceforge.net/project/mjpg-streamer/mjpg-streamer/Sourcecode/mjpg-streamer-r63.tar.gz
编译安装mjpg-streamer前,需要安装支持开发库
$sudo apt-get install libjpeg8-dev
解压mjpg-streamer 到文件夹中 并
$make clean all
编译时报错:mjpg_streamer.c:27:28: fatal error: linux/videodev.h: No such file or directory
compilation terminated. 内核版本太高造成
创建符号链接解决:
$sudo ln -s /usr/include/linux/videodev2.h /usr/include/linux/videodev.h
lsusb查看摄像头是否正常识别,然后在mjpg-streamer 文件夹中运行
$./start.sh 启动mjpg-streamer
启动正常后使用浏览器访问 http://RaspberryPi-IP:8080 检查是否正常拍摄
添加mjpg_streamer 开机自动运行脚本
$sudo vim /etc/init.d/webcam (注意修改成自己的mjpg_streamer路径)
#! /bin/sh # /etc/init.d/webcam # Carry out specific functions when asked to by the system case "$1" in start) echo "Starting webcam script" export LD_LIBRARY_PATH=/home/pi/cam_project/mjpg-streamer-r63 /home/pi/cam_project/mjpg-streamer-r63/mjpg_streamer -o "output_http.so -w /home/pi/cam_project/mjpg-streamer-r63/www" & ;; stop) echo "Stopping webcam script" killall mjpg_streamer ;; *) echo "Usage: /etc/init.d/webcam {start|stop}" exit 1 ;; esac exit 0
修改文件权限 $sudo chmod 755 webcam
启动mjpg_streamer $sudo /etc/init.d/webcam start
停止mjpg_streamer $sudo /etc/init.d/webcam stop
设置开机启动 $sudo update-rc.d webcam defaults
重启RaspberryPi $sudo reboot 查看是否开机启动运行mjpg_streamer
安装 webiopi 方便测试Raspberry Pi 的GPIO接口 https://code.google.com/p/webiopi/
首先安装python $sudo apt-get install python3-dev (时间较长)
$ wget https://webiopi.googlecode.com/files/WebIOPi-0.6.0.tar.gz
$ tar xvzf WebIOPi-0.6.0.tar.gz
$ cd WebIOPi-0.6.0
$ sudo ./setup.sh
启动WebIOPi$ sudo /etc/init.d/webiopi start
停止WebIOPi$ sudo /etc/init.d/webiopi stop
设置开机启动 $ sudo update-rc.d webiopi defaults
重启RaspberryPi $sudo reboot 运行WebIOPi后,浏览器中访问http://RaspberryPi-IP:8000 默认用户名/密码为webiopi/raspberry
安装ServoBlaster &接好舵机 红线+5V 棕色或者灰色接地线 黄色链接 Raspberry的GPIO,链接查看webiopi和ServoBlaster README
PS:首先要看你树莓派的版本,不同的版本GPIO不同,其次认真查看webiopi和ServoBlaster的README后发现连接很简单,不会接线可在此留言。v2版本的树莓派有两个5v Power针脚,可直接连接两个9g舵机。
$sudo git -clone https://github.com/richardghirst/PiBits.git
$cd /PiBits/ServoBlaster/
$make clean all
$make
$sudo ./servod
测试命令 $echo 1=160 > /dev/servoblaster
设置开机脚本(很明显这是修改自mjpg_streamer的开机脚本)$sudo vim /etc/init.d/servod
#! /bin/sh # /etc/init.d/servod # Carry out specific functions when asked to by the system case "$1" in start) echo "Starting servod script" export LD_LIBRARY_PATH=/home/pi/cam_project/ServoBlaster /home/pi/cam_project/ServoBlaster/servod & ;; stop) echo "Stopping servod script" killall servod ;; *) echo "Usage: /etc/init.d/servod {start|stop}" exit 1 ;; esac exit 0
设置开机自动启动servod:$sudo update-rc.d servod defaults
Web控制界面
安装mongoose和php5-cgi搭建最精简的web环境
$sudo apt-get install php5-cgi
$wget http://mongoose.googlecode.com/files/mongoose-3.7.tgz
$tar -vzxf mongoose-3.7.tgz
$cd mongoose-3.7
$make clean
$make linux
$sudo ./mongoose -I `which php-cgi` -r wwwroot -a wwwlog/log -p 80
创建启动脚本
$sudo vim /etc/init.d/mongoose
#! /bin/sh # /etc/init.d/mongoose # Carry out specific functions when asked to by the system case "$1" in start) echo "Starting mongoose script" export LD_LIBRARY_PATH=/home/pi/cam_project/mongoose /home/pi/cam_project/mongoose/mongoose -I `which php-cgi` -r /home/pi/cam_project/mongoose/wwwroot -a /home/pi/cam_project/mongoose/wwwlog/log -p 80 & ;; stop) echo "Stopping mongoose script" killall mongoose ;; *) echo "Usage: /etc/init.d/mongoose {start|stop}" exit 1 ;; esac exit 0
$sudo update-rc.d mongoose defaults
重启RaspberryPi 验证Web PHP是否正常解析
$sudo vim /home/pi/cam_project/mongoose/wwwroot/index.php
<?php phpinfo(); ?>
浏览器访问看php页面是否执行
设置软链接方便对网站文件的修改
$cd ~
$ln -s /home/pi/cam_project/mongoose/wwwroot/ wwwroot
时间同步
安装校时工具
$ sudo apt-get install ntpdate
通过网络同步时间
$ sudo ntpdate stdtime.gov.hk
舵机调试
echo 0=90 > /dev/servoblaster
echo 0=95 > /dev/servoblaster
echo 1=90 > /dev/servoblaster
echo 1=95 > /dev/servoblaster
WebUI
1.服务端servo.php
<?php if (isset($_GET['a'])) { //get angle0 bettween 0 to 180 $num = (int)(((int)$_GET['a'] * 11 + 500)/10); //change angle to pulse width in 10ns,because servoblaster use this format system("echo 0=".$num ."> /dev/servoblaster"); //set GPIOxx angle to servoblaster echo $_GET['a']; } if (isset($_GET['b'])) { //get angle1 bettween 0 to 180 $num = (int)(((int)$_GET['b'] * 11 + 500)/10); //change angle to pulse width in 10ns,because servoblaster use this format system("echo 1=".$num ."> /dev/servoblaster"); //set GPIOxx angle to servoblaster echo $_GET['b']; } ?>
2.前台页面(可直接查看http://pi.fendou.info/cam/iframe.html源代码)
修改angle调整舵机转动角度限定范围(别拍到不该拍的地方!!!)
检查网络状态脚本
检测网络状态重启Raspberry Pi
#!/bin/bash export PATH=/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin ping_count() { count=0 `timeout 5 ping 192.168.1.1 | while read LINE; do { if [[ "${LINE}" =~ "64 bytes from" ]]; then let "count = $count + 1" echo "export count=$count" fi } done` echo $count } if [[ $(ping_count) < 1 ]]; then echo "Fatal error: wifi is down, rebooting now..." sudo reboot fi
测试:$sudo ifconfig wlan0 down && /home/pi/cam_project/checknetwork.sh
定时运行:$sudo crontab -e
*/60 * * * * /home/pi/cam_project/checknetwork.sh
利用PageKite做端口映射
安装 Pagekite
$sudo curl -s https://pagekite.net/pk/ |sudo bash
第一次运行配置 Pagekite
$sudo pagekite.py
编辑~/.pagekite.rc 添加映射条目设置开机自启动
service_on = http:@kitename : localhost:80 : @kitesecret service_on = http:fendou.314.pagekite.me : localhost:80 : @kitesecret service_on = http:pi.fendou.info : localhost:80 : @kitesecret service_on = http:cam.fendou.info : localhost:8080 : @kitesecret service_on = ssh:pi.fendou.info : localhost:22 : @kitesecret service_on = http:nas.fendou.info : 192.168.1.4:5000 : @kitesecret
设置开机启动脚本(–optfile=修改自己的配置文件位置)
#! /bin/sh # /etc/init.d/pagekite # Carry out specific functions when asked to by the system case "$1" in start) echo "Starting pagekite script" export LD_LIBRARY_PATH=/usr/local/bin/ /usr/local/bin/pagekite.py --optfile=/home/pi/.pagekite.rc & ;; stop) echo "Stopping pagekite script" killall pagekite.py ;; *) echo "Usage: /etc/init.d/pagekite {start|stop}" exit 1 ;; esac exit 0
添加到启动项
$sudo update-rc.d pagekite defaults
备份Raspberry Pi
下载备份脚本
$sudo curl “https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh” -o dropbox_uploader.sh
设置执行权限
$sudo chmod +x dropbox_uploader.sh
第一次运行生成配置文件(注意生成文件位置,默认为~/.dropbox_uploader)
$sudo ./dropbox_uploader.sh
备份脚本 sudo执行
#/bin/bash TMP_DIR="/tmp/" DATE=$(date +"%d-%m-%Y_%H%M") BKP_FILE="$TMP_DIR/MyPiBkp_$DATE.tar" BKP_DIRS="/home/pi /etc" DROPBOX_UPLOADER=/home/pi/dropbox_uploader.sh tar cf "$BKP_FILE" $BKP_DIRS gzip "$BKP_FILE" $DROPBOX_UPLOADER -f /root/.dropbox_uploader upload "$BKP_FILE.gz" rm -fr "$BKP_FILE.gz"
计划任务 $sudo crontab -e
00 00 * * * /home/pi/backup.sh 2>&1 >> /var/log/backup.log
测试备份 $sudo ./backup.sh
查看结果 $sudo ./dropbox_uploader.sh list
“树莓派(Raspberry Pi)远程控制云台”上的28条回复
挺复杂,步骤不少
这个站 很牛啊
老实说。。这个没看懂。。很高深!
看不懂耶无妨!
棒极了,神州u盘启动制作工具
博主真厉害。
博客加载有点慢
其实吧,我也看着头晕。博主是一个技术男哈,还是很犀利的那种!!!
最近也在搞类似的东西,先学习了
博主的舵机是直接连接raspberrypi吗?我看了一些资料说是容易烧毁板子所以一直没敢试
直接连的两个5g的舵机,之前也有看过别的资料说会烧板子,但是用了半年了没问题。
[…] 已经用RaspberryPi实现了,可以用RaspberryPi操控云台实时监控 http://pi.fendou.info 参考:《树莓派(RASPBERRY PI)远程控制云台》 […]
尝试了一下直接用Raspberry Pi 连接舵机,但执行一次命令后就死机了并且ssh也连不上了
能否请博主介绍一下如何接线?我是红线电源接P4 ,棕色地线接P6, 黄色数据线接P7
测试命令 echo P1-7=150 > /dev/servoblaster
舵机转了一下,然后ssh就掉了
直接看图吧
1、如何查看Pi的版本?我的是256M内存的原装第一代板子。
2、现在这个教程有没有需要更新的地方?
3、有没有远程实时语音的研究?
一代板子pin位置有变化的参考ServoBlaster 的文档;除了接线所有的命令和脚本都有了;语音没有研究,现在电源功率有点不足了(用的htc的充电器)
HTC的充电器的电流值是多少?
我打算用小米的充电器,有1000mA。
弄错了 另一个cubieboard用的HTC充电器,树莓派的用的一个2A的,是买minix带的充电器,如果控制舵机(5g舵机直接接在树莓派上)必须5V,2A,不然会自动重启。
电源还是挺关键的,建议找个靠谱的5v,2A电源。另外我用的舵机驱动在控制舵机的同时播放广播,树莓派会死机,所以建议你试验的时候把每个功能做单独的项目来实现。
一代板子如何接线? 有图么? 或者说说接线的原理也好。
有个回复里面有图的
1、我添加了你的gtalk,请同意,便于更方便的学习。
2、关于”mjpg-streamer”:用这个软件的目的是它适合你的罗技摄像头么?还是说在rpi上的此类功能的视频监控软件只有它适合。此软件的视频帧数很低的,画面卡顿感也很明显。
3、在编译这个软件的时候,你有没有改动软件源码?因为有些摄像头是YUYV的,有些是JPEG的,如何查看自己的摄像头是哪种呢?
4、在硬件上我想除了pi之外,是不是还有别的硬件,可以具体罗列一下么? 我现在手里只一个pi,并且我对andruino方面的东西并不是太清楚,例如具体的型号呀之类的,尚请指教。
注:我是一代,256M内存的rpi.
除了mjpg-streamer 也用过别的(忘记名字了),局域网看着还行,外网实在太卡了,mjpg-streamer 实际是截的图片javascript一帧一帧播放,外网效果比较好。Logitech(C110\C270)两个摄像头免驱,部署简单。我不懂编程,没有修改过mjpg-streamer源码,安装过程和排错文章都有体现,到现在我重装树莓派也得参考。硬件上没有用到andruino,软硬列表如下:
WebIOPi | ServoBlaster | Mongoose | PHP5-CGI @ 2013
RaspberryPi Ver2.0 | Logitech C110 | EDUP EP-N8508GS | TowerPro SG90 | Aircraft FPV
都能在tb上买到
关于舵机接线,可以先安装WebIOPi 可以方便判断哪pin有输出信号
我也想买一台,但是就怕自己不会用
[…] 2013年07月29日 奋斗 25条评论 […]
安装ServoBlaster之后测试的时候,舵机没有发生变化是什么原因呢?连线应该没有问题
好的呀,我有我想买一台