DIY树莓派外壳,简单但实用
树莓派
做手工没想象中简单,原来准备的设计图都没用上,雕一个图雕残了,最后整了个简单版树莓派外壳,ps:亚克力板味道好难闻。
树莓派
做手工没想象中简单,原来准备的设计图都没用上,雕一个图雕残了,最后整了个简单版树莓派外壳,ps:亚克力板味道好难闻。
关键词:树莓派、移动硬盘、MINIDLNA、电影服务器、NAS、ipad看片利器、DLNA、UPnP
DLNA/UPnP概念,请自行搜索了解~~
一直想实现用ipad观看移动硬盘中的电影,所以有了这个方案,再配合下载工具(aria2或Transmission)将树莓派打造成下载机,就能低成本,低功耗的实现NAS。
我用samba和minidlna搭好NAS后,分别进行了测试,很明显minidlna的速度和资源损耗要比samba小的多,minidlna上到5G的电影也基本不卡,而samba就非常吃力,而且支持samba的视频播放器显示比DLNA/UPnP的要少!
本方案主要由两部份组成:媒体服务器和ipad或其它移动设备客户端。
1、挂载FAT32格式的硬盘
#创建挂载点
sudo mkdir /mnt/myusbdrive
#编辑fstab让移动硬盘开机自动挂载
sudo nano /etc/fstab
#在最后一行添加如下内容
/dev/sda1 /mnt/myusbdrive auto defaults,noexec,umask=0000 0 0
#保存重启,即可生效
说明:
sda1是取决于你的实际情况,a表示第一个硬盘,1表示第一个分区。
umask=0000 0 0
前面四个0就是对所有人,可读可写可执行, 后面两个0,第一个代表dump,0是不备份
第二个代表fsck检查的顺序,0表示不检查
卸载:sudo umount /mnt/myusbdrive
2、挂载NTFS格式的硬盘(读写方式挂载)
默认挂载NTFS格式的硬盘只有只读权限,需要借助其它工具实现。
#安装所需软件包
sudo apt-get install fuse-utils ntfs-3g
#加载内核模块
modprobe fuse
#编辑fstab让移动硬盘开机自动挂载
sudo nano /etc/fstab
#在最后一行添加如下内容
/dev/sda1 /mnt/myusbdrive ntfs-3g defaults,noexec,umask=0000 0 0
#保存重启,即可生效
3、测试硬盘挂载是否成功:
cd /mnt/myusbdrive
ls
1、安装
sudo apt-get install minidlna
2、修改配置
#打开配置文件
sudo nano /etc/minidlna.conf
#可参考修改的项有:
#媒体文件目录:
media_dir=/mnt/myusbdrive/
#数据库目录,minidlna使用的是sqlite数据库来索引文件
db_dir=/var/lib/minidlna
#服务器IP
listening_ip=192.168.1.106
#端口
port=8200
#网络名称,用于其它设备发现当前设备
friendly_name=DLNA
3、你可以选择让minidlna随机启动
sudo update-rc.d minidlna defaults
4、启动minidlna服务
sudo service minidlna start
5、当你修改配置文件及媒体资源更新时,需要强制刷新,以便minidlna将最新的媒体文件进行索引
sudo service minidlna force-reload
6、查看资源个数
7、取消minidlna的开机自动启动
sudo update-rc.d -f minidlna remove
8、停止minidlna服务
sudo service minidlna stop
9、停止minidlna所有进程
sudo killall minidlna
10、卸载minidlna
sudo atp-get remove --purge minidlna
总的来说,IOS下几乎没有好的免费软件来支持UPnP和Samba视频,试用多个软件后总结如下:
1、Yxplayer免费版,播放视频时有广告,索引UPnP资源时大概要5分钟才能索引完100多部电影
2、playerXstreme免费版,虽然免费,但是要使用UPnP功能时,需要额外的花¥6买一个扩展功能,但非常悲剧的时,买好了,索引UPnP资源时,一个小时都没有结果,而且很容挂着,几乎钱是白花了。
3、AVPlayer解码能力很强,不支持UPnP,某些网站有介绍说支持,千万别上当。
4、【能用】BUZZ Player,¥25,能用,而且索引UPnP资源非常快,唯一不足,还有一些小BUG,有时会挂掉。
w3c其实有一个标准的API,来支持DLNA/UPnP,即Network Service Discovery API(navigator.getNetworkServices() )但目前只有opera有一个实验版本可以支持这个最新的API。
chrome支持mkv视频,经测试Chrome html5 video支持mkv格式的视频,但不能外挂字幕!显示Google利用于自己收购的VP8编码技术力挺WebM(VP8/Vorbis/WebM),mkv也属于WebM的一种。
移动硬盘挂载及NAS相关请参阅上文《【智能家居】用树莓派+移动硬盘+MINIDLNA打造家用媒体服务器(电影服务器、NAS、ipad看片利器)》
1、安装aria2
sudo apt-get install aria2
2、安装aria2 web在线管理端YAAW
YAAW项目地址:https://github.com/binux/yaaw
下载资源包,放置http服务器下,http服务器的相关配置,本文不做详细介绍
DEMO:http://binux.github.com/yaaw/demo/
aria2在线手册:http://aria2.sourceforge.net/manual/en/html/
一些有用的aria2参数:
-i 导入从loli.lu导出的aria2文件
-j 同时下载数限制,由于路由和总带宽限制,建议设为3(默认5)
-x 同一个服务器的同时链接数,建议为5-10(默认1)
-k 文件最小分片,文件最多的线程数取决于能分出多少片,当文件小于最小分片大小时,只能开出一个线程,建议为2M(默认20M)
-s 一个文件最多用几个线程下载,建议为8-10(默认5)
–file-allocation 文件预分配,如果USB设备是U盘,SD卡,预分配浪费时间,建议为none(默认prealloc)
创建配置文件:
#创建空白session文件
sudo touch /home/pi/aria2.session
#创建配置文件
sudo nano /home/pi/aria2.conf
在配置文件中放入:(以下内容不解释,请查阅手册)
#下载目录,自行修改
dir=/mnt/myusbdrive/moive/download/
disable-ipv6=true
#打开rpc的目的是为了给web管理端用
enable-rpc=true
rpc-allow-origin-all=true
rpc-listen-all=true
#rpc-listen-port=6800
continue=true
input-file=/home/pi/aria2.session
save-session=/home/pi/aria2.session
max-concurrent-downloads=3
sudo aria2c --conf-path=/home/pi/aria2.conf
若以上执行正常,没有报错,可以再加一“-D”的参数,让aria2随机启动。
sudo aria2c --conf-path=/home/pi/aria2.conf -D
bug描述:XBMC无法启动、黑屏,找不到“libEGL.so”
用SSH登陆并执行以下命令:
sudo su #default password = 'raspberry'
echo "/opt/vc/lib" > /etc/ld.so.conf.d/00-vmcs.conf
ldconfig
reboot
bug描述:XBMC不能保存视频源
用SSH登陆并执行以下命令:
sudo /etc/init.d/xbmc stop #default password = 'raspberry'
sudo chown xbian:xbian .xbmc/userdata/sources.xml
sudo /etc/init.d/xbmc start
bug描述:视频播放失败(一段时间后)黑屏
用SSH登陆并执行以下命令:
sudo su #default password = 'raspberry'
sed -i 's/gpu_mem_256=100/gpu_mem_256=128/g' /boot/config.txt
sed -i 's/gpu_mem_512=100/gpu_mem_512=128/g' /boot/config.txt
reboot
目前发现该版本,无法使用左下角的退出到命令行界面,播放“优酷”、“奇艺”等切换到下段时,只有声音,没有图像,黑屏。
用上面第三个方法,应该能解决黑屏问题。
实现家庭室内温度远程监控只是“智能家居”的初步,目的是下班前如果发现家里温度过高,可提前用手机发送指令提前5-10分钟打开空调降温。
1、树莓派(Raspberry Pi)一个
2、DS18B20温度传感器一个(淘宝大概5元左右)
3、4.7kΩ电阻一个 或 DS18B20模块一个(笔者用,淘宝1.5元一个,其实就是店家帮忙把电阻焊好了,接线稍好看些)。
4、杜邦线三根(双头母)
调了两个晚上,经过无数次的编译失败后,终于调试成功了,特分享一下安装过程。
本文以下将树莓派简称:RasPi
1、RasPi主控板
2、实现 UVC 协议的摄像头,支持列表可查看:http://linux-uvc.berlios.de/ (本文采用淘宝购买的32元天敏N82)
官网:
推荐版本:
下载SVN的mjpg-streamer的172版。
1、mjpg-streamer-r63.tar.gz
RasPi B版使用此版本包,编译时会报如下错误:
error: linux/videodev.h: No such file or directory
这是因为内核版本太高的原因,videodev.h这个接口不支持了。
解决办法:
安装:libv4l-dev
sudo apt-get -f install libv4l-dev
然后还需把这装包中,所有.c和.h文件中的头替换掉:
#include <linux/videodev.h>
代码,改为下面这行
#include <libv4l1-videodev.h>
但很不幸,笔者还是没能成功通过编译,虽然不报这个错误了,但是报出其它错误。
2、报jpg不支持,需安装
sudo apt-get install libjpeg62-dev
3、i: init_VideoIn failed错误
错误原因:市面上大部分摄像头都是支持YUV的,而不是JPEG的。mjpg-stream支持JPEG和YUV两种格式。
解决方法:
1、打开以下文件:
sudo nano mjpg-streamer/plugins/input_uvc/input_uvc.c
2、翻到大概第三页
将一行中的: int width = 640, height = 480, fps = -1, format = V4L2_PIX_FMT_MJPEG, i;
改成:V4L2_PIX_FMT_YUYV
需要重新编译才会有效。
推荐使用第二步下载的安装包(172版),或才用SVN进行下载。
svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer
以上操作,前提是需要安装SVN,如果你没有安装,也可以通过
sudo apt-get install subversion
安装:
tar -xvzf mjpg-streamer.tar.gz
cd mjpg-streamer/mjpg-streamer
#以下操原因,见错误3
sudo nano plugins/input_uvc/input_uvc.c
#将V4L2_PIX_FMT_MJPEG改成V4L2_PIX_FMT_YUYV后保存退出
make
./start.sh
http://你的IP:8080/stream.html(如:http://192.168.1.106:8080/stream.html)
sudo apt-get install python-dev
正常情况下,以上在线安装命令即可安装成功,但运气不好的是,笔者在安装时,在线命令安装资源包404。
python2.7-dev_2.7.3~rc2-2.1_armhf.deb
找不到,后来只能手动找了以下包安装。
wget http://ftp.debian.org/debian/pool/main/p/python2.7/python2.7-dev_2.7.3-6_armhf.deb
sudo dpkg -i python2.7-dev_2.7.3-6_armhf.deb
Google Code项目地址:http://raspberry-gpio-python.googlecode.com
wget http://raspberry-gpio-python.googlecode.com/files/RPi.GPIO-0.4.1a.tar.gz
tar -xvzf RPi.GPIO-0.4.1a.tar.gz
cd RPi.GPIO-0.4.1a
sudo python setup.py install
Google Code项目地址:http://code.google.com/p/webiopi/
wget http://webiopi.googlecode.com/files/WebIOPi-0.5.3.tar.gz
tar xvzf WebIOPi-0.5.3.tar.gz
cd WebIOPi-0.5.3
sudo ./setup.sh
sudo webiopi-passwd
用户名是:webiopi
如不修改密码,默认密码是:raspberry
sudo python -m webiopi 8000
端口可自行修改,默认是8000
sudo /etc/init.d/webiopi start
and
sudo /etc/init.d/webiopi stop
sudo update-rc.d webiopi defaults
http://192.168.1.106:8000/webiopi/
控制方法:
首先查看树莓派外设兼容列表:http://elinux.org/RPi_VerifiedPeripherals#USB_Wi-Fi_Adapters,以确定自己的无线网卡是否可用,一般免驱的大多可用。这种USB无线网卡,一般只要二三十块钱就可以搞定,推荐易迅购买。
另外新版的镜像,包含的驱动比较多。
查看挂载的USB设备
sudo lsusb
我的RPI显示如下:
pi@raspberrypi:/$ sudo lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter
最后一行标有802.11n WLAN Adapter即是我的无线网卡,表明设备可用。
sudo iwlist wlan0 scan
细心看,找到自己无线路由器的ssid(即用手机搜wifi,显示的wifi名字,路由器中可以配置) 笔者ssid是:TP-LINK_FB5906
sudo nano /etc/network/interfaces
将wlan0的部份修改为:
auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet static
wpa-ssid 你要连接的wifi ssid
wpa-psk 你的wpa连接密码
address 192.168.1.106 # 设定的静态IP地址
netmask 255.255.255.0 # 网络掩码
gateway 192.168.1.1 # 网关
network 192.168.1.1 # 网络地址
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
笔者把IP设在了静态的了,你总不想每次SSH登陆还要换IP吧!建议设成静态的
树莓派(Raspberry Pi)是啥?树莓派有啥用?请参考wikipedia上树莓派条目。
GPIO,通用型的输入输出(General Purpose I/O)的简称。
nodejs真是无处不在,可玩性越来越高了,连硬件控制都能胜任了。
pi-gpio,是帮助树莓派控制GPIO的nodejs基础库,代码托管地址:https://github.com/rakeshpai/pi-gpio
树莓派GPIO引脚,较为混乱,各引脚之间没有逻辑关系,使用的是Broadcom芯片的命名。pi-gpio使GPIO的管理更加简单,参考以下图来进行管理。 P1在左上角。
图一:(来自pi-gpio)
图二:(更详细的GPIO引脚分布图)
图三:(GPIO物理分布图)
1、如果你还没有安装nodejs的npm,你可以通过以下方式简易安装
sudo apt-get install nodejs npm
2、在树莓派下做以下操作(安装pi-gpio所有操作,请使用root账户登陆)
git clone git://github.com/quick2wire/quick2wire-gpio-admin.git
cd quick2wire-gpio-admin
make
sudo make install
sudo adduser $USER gpio
3、接下来,在打开工程目录,用nodejs的npm安装 pi-gpio
npm install pi-gpio
var gpio = require("pi-gpio");
gpio.open(16, "output", function(err) { // Open pin 16 for output
gpio.write(16, 1, function() { // Set pin 16 high (1)
gpio.close(16); // Close pin 16
});
});
方法列表:
每个方法都有一个回调函数,因为引脚操作是异步的。
1、.open(pinNumber, [direction = "output"], [callback])
打开引脚,别名:.export
pinNumber:引脚号码,记住,引脚号码树莓派上的物理引脚号码
direction:[可选],方向可以是“input”(简写:in)或“output”(简写:out),这取绝于你要做什么引脚。默认是“output”
callback:[可选],引脚可用时的回调函数,当出错时,第一个错误即是error对象
2、.close(pinNumber, [callback])
关闭引脚
参数解释类似.open
3、.setDirection(pinNumber, direction, [callback])
改变方向
参数解释类似.open
4、.read(pinNumber, [callback])
读取引脚当前的值,当方向为“输入input”时,用途更大;
参数解释类似.open
callback,有两个参数,第一个参数为可能出错的参数error,第二个参数为引脚的当前值可能是数字“0”或“1”
5、.write(pinNumber, value, [callback])
写入一个引脚的值;第二个参数必须数字“0”或“1”;
运行和测试:
npm install && npm test