树莓派下安装Django环境

Django是Python下的一款网络服务器框架。Python下有许多款不同的框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。

安装pip

sudo apt-get install python-pip python-dev build-essential sudo pip install –upgrade pip

安装Django

sudo pip install django

安装成功之后我们可以进入python命令行查看django版本

pi@raspberrypi ~/python_test $ python Python 2.7.3 (default, Mar 18 2014, 05:13:23) [GCC 4.6.3] on linux2 Type “help”, “copyright”, “credits” or “license” for more information. >>> import django >>> print(django.VERSION) (1, 6, 5, ‘final’, 0) >>>

启动

使用下面的命令创建项目:

django-admin.py startproject django_site

在当前目录下,将生成django_site文件夹。其文件树结构如下:

pi@raspberrypi ~ $ tree django_site/ django_site/ ├── django_site │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py 1 directory, 5 files

进入django_site,启动服务器:

pi@raspberrypi ~ $ cd django_site/ pi@raspberrypi ~/django_site $ python manage.py runserver 8000 Validating models… 0 errors found May 24, 2014 – 12:46:51 Django version 1.6.5, using settings ‘django_site.settings’ Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.

进入树莓派桌面并打开浏览器,访问http://127.0.0.1:8000,可以看到服务器已经在运行:

第一个网页’hello word’

修改urls.py

pi@raspberrypi ~/django_site/django_site $ vim /home/pi/django_site/django_site/urls.py from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() urlpatterns = patterns(”, # Examples: # url(r’^$’, ‘mysite.views.home’, name=’home’), # url(r’^blog/’, include(‘blog.urls’)), url(r’^admin/’, include(admin.site.urls)), url(r’^$’, ‘django_site.views.first_page’), )

我们添加了最后一行。它将根目录的URL分配给一个对象进行处理,这个对象是django_site.first_page。

用以处理HTTP请求的这一对象还不存在,我们在django_site/django_site下创建views.py,并在其中定义first_page函数:

pi@raspberrypi ~/django_site/django_site $ vim views.py # -*- coding: utf-8 -*- from django.http import HttpResponse def first_page(request): return HttpResponse(“

Hello World

“)

第一行说明字符编码为utf-8,为下面使用中文做准备。first_page函数的功能,是返回http回复,即这里的Hello World 。first_page有一个参数request,该参数包含有请求的具体信息,比如请求的类型等,这里并没有用到。

页面效果如下:

到此就可以尽情感受在树莓派上Django的编程乐趣了!

Adafruit的树莓派教程:DS18B20温度传感器

概览

树莓派操作系统Occidentalis以及2012年12月之后的Raspbian系统已经能够支持DS18B20单总线(1-wire)温度传感器。这种传感器由半导体包裹的头和三个引脚组成,它是一种精确地数字设备。

这节课里,你将学习如何在树莓派上使用DS18B20来读取温度。

因为树莓派没有数模转换器(ADC, Analog to Digital Converter),因此它不能够直接读取像TMP36这样的模拟信号温度传感器,因此,DS18B20是比较合适的。

另外的代码库

如果你是一个Python爱好者,这有另外一种在树莓派上使用DS18B20的类库。

地址在这里:https://github.com/timofurrer/ds18b20(作者是Timo!)

你需要的

要完成这个项目,你需要下面的东西:

树莓派

DS18B20数字温度传感器 + 延长线,也可以是湿度或者高温型号的。另外你需要一个4.7k或者10k欧姆的电阻。

一小块面包板

一把跳线

扩展板

硬件部分

下图展示了基本的DS18B20接法。

DS18B20单总线(1-wire)传感器可以以非并行连接接入,这一点几乎与其他市售的传感器都不同!所有传感器共享相同的针脚,所以你只需要一个4.7k的电阻就够了。

电阻被用于拉高数据输出线(data-line),并且保持数据输出的稳定。

要注意DS18B20的方向,弧形的一边在图中的左侧。如果你接反了,有可能会烧坏传感器。

尽管DS18B20+和TMP36都是温度传感器,但是它们完全不同,因此TMP36不适用于这篇教程!

如果你是用的是防水版的DS18B20,那我们需要连接3个针脚,红,黑,黄,身下一个引脚不用连接。

如果你是用的是高温版本的DS18B20,把橙色引脚接入3.3V,白色接地,蓝色与数据针pin 4相连。

你同样需要一个4.7k~10k的电阻接在3.3v和数据针之间。

DS18B20

尽管DS18B20看上去就像一个普通的传感器,但它内部其实大有文章。

它的芯片包含了一个特别的单总线串行接口,逻辑控制部分以及一个温度传感器。

它的输出针输出数字消息以便Raspbian/Occidentalis能够在某一针上阅读。你可以在运行这个项目之前自己通过命令行或者SSH先试验一下。

在终端窗口里输入下面的命令。当你执行到”devices”目录下时,目录名称开头的”28-”可能与你的不一样,所以cd到你看到的目录下吧。

sudo modprobe w1-gpio sudo modprobe w1-therm cd /sys/bus/w1/devices ls cd 28-xxxx (change this to match what serial number pops up) cat w1_slave

这个接口有点不太稳定,但如果幸运的话系统会告诉我们有一个可供读取的温度。它类似于一个文件,所以我们要做的就是读这个文件。

在返回消息的第一行末尾都会有一个YES或NO,如果是yes,那第二行紧接着就是温度,以1/1000摄氏度为单位,所以在上面的例子中,实际读取到的温度是20.687和26.125摄氏度。

如果你接入了多个传感器,那么你将看到有多个28-xxx的文件,已经插入一个传感器,然后检查一下新生成的文件名,然后为这个传感器做上标记。这样才能区分出哪个传感器对应哪个文件。

软件部分

下面的Python程序处理失败消息并且每秒返回华氏和摄氏温度。

import os import glob import time os.system(‘modprobe w1-gpio’) os.system(‘modprobe w1-therm’) base_dir = ‘/sys/bus/w1/devices/’ device_folder = glob.glob(base_dir + ’28*’)[0] device_file = device_folder + ‘/w1_slave’ def read_temp_raw(): f = open(device_file, ‘r’) lines = f.readlines() f.close() return lines def read_temp(): lines = read_temp_raw() while lines[0].strip()[-3:] != ‘YES’: time.sleep(0.2) lines = read_temp_raw() equals_pos = lines[1].find(‘t=’) if equals_pos != -1: temp_string = lines[1][equals_pos+2:] temp_c = float(temp_string) / 1000.0 temp_f = temp_c * 9.0 / 5.0 + 32.0 return temp_c, temp_f while True: print(read_temp()) time.sleep(1)

在程序的开头运行了一下modprobe命令,来使接口运行。

紧接着的3行用于寻找哪些文件可以从中读取消息。

一个已知的问题是在Raspbian下读取温度时有时候会假死。如果你有同样的问题,使用下面的代码替换掉read_temp_raw方法。然后在程序开头加入一行”import subprocess”。

def read_temp_raw(): catdata = subprocess.Popen([‘cat’,device_file], stdout=subprocess.PIPE, stderr=subprocess.PIPE) out,err = catdata.communicate() out_decode = out.decode(‘utf-8’) lines = out_decode.split(‘

‘) return lines

读取温度是通过两个方法进行的。read_temp_raw通过接口获取消息的前两行。read_temp把它包装了一层并且加入了失败消息检测并且重试直到第一行的末尾有一个YES。这个方法会返回两个值,第一个是摄氏温度,第二个是华氏温度。

你可以像下面这样把两个值分开

deg_c, deg_f = read_temp()

主方法只是一个循环,读取温度,打印出来,然后休息一秒。

要把这个程序传到树莓派上,你可以通过SSH在命令行里打开一个文本编辑器

nano thermometer.py

粘贴上面的代码,然后按一下Ctrl+X然后按一下Y保存。

测试与配置

运行这个程序需要超级用户权限,所以在命令行里运行下面的命令

sudo python thermometer.py

如果一切ok,那你将会看到像下面一样的一系列输出

试试把手指放在温度传感器上来给它升温。

加入更多的传感器

你可以以并行连接方式DS18B20把其他的DS18B20传感器接入到VCC,数据和地线针脚。只用一个4.7k电阻。你将会看到多个/sys/bus/w1/devices/28-nnnnn目录,每一个都有一个唯一的串口编号。目前的python程序只能读取一个传感器,所以你需要自己修改使它能够一次读取多个传感器。

新系统更新后gpio读不了w1了的解决办法:

http://bbs.nxez.com/thread-67-1-1.html

树莓派摄像头模块应用程序文档翻译[转]

更新日志:

2014 年 3 月 24 日更新:根据 2013 年 12 月更新的文档,对原译文进行扩展翻译。翻译完毕。

2014 年 3 月 4 日更新:根据 2013 年 12 月更新的文档,对原译文进行扩展翻译。部分内容未翻译完毕。

2013 年 8 月 4 日更新:根据 Raspberry Pi 官方论坛发布的 RaspiCam 正式文档进行扩展翻译。硬件安装和软件安装部分稍后翻译完成。

2013 年 5 月 31 日更新:根据 eLinux 中的 Wiki 内容添加使用 MP4Box 对视频进行封装的介绍。

2013 年 5 月 24 日更新:根据 2013 年 5 月 10 日更新的官方文档完成了初步翻译。

本文会在适当的时间里进行增删改等操作,如果您对该文感兴趣,可以仅收藏本页。

RaspiCam 文档

本文档将对 2013 年 12 月 7 日为止可用的三个 Raspberry Pi 摄像头应用程序进行介绍。

目前提供了三个应用程序,分别为:raspistill、raspivid、raspistillyuv。其中 raspistill 和 raspistillyuv 非常相似,并且都是用于捕捉图像,而 raspivid 用于捕捉视频。

所有应用程序均基于命令行方式运行,通过 OpenMAX 的 mmal API 进行编写。OpenMAX 的 mmal API 提供了更易使用的系统组件。注意,mmal 是一个由 Broadcom 为 Videocore 4 系统定制的 API。

应用程序使用了四个 OpenMAX(mmal)组件:camera(摄像)、preview(预览)、encoder(编码)、null_sink。所有应用程序均使用了摄像组件,raspistill 使用了图像编码组件,raspivid 使用了视频编码组件,raspistillyuv 没有使用编码组件,而是直接将 YUV 或 RGB 从摄像组件输出到文件。

预览显示为可选参数,但是可以用于全屏或输出到指定的显示器显示区域进行显示。如果预览被禁用,那么 null_silk 组件将会对预览帧进行“吸收”。这是由于尽管不需要摄像头生成供显示所用的的预览帧,但是仍需要使用它们进行曝光计算和白平衡设置的缘故。

此外,还可以省略文件名参数,这样既可以直接预览显示而不写入文件,或者直接输出到标准输出设备上。命令行帮助可以通过直接输入应用程序名称获得。

安装摄像头硬件

警告:摄像头对静电非常敏感。如果您在安装摄像头电路板时没有防静电手环,可以尝试触摸一下水龙头、金属水槽或其它类似的东西即可。

摄像头电路板与 Raspberry Pi 通过一条 15 芯的排线进行连接。仅有两个连接座需要连接,排线需要安装到摄像头电路板和 Raspberry Pi 上。您需要正确安装,否则摄像头无法工作。对于摄像头电路板,排线末端的蓝色标记应该背对着电路板。而 Raspberry Pi 部分,蓝色标记应该正对着网络接口方向(如果您使用的是 Model A,那么也是需要正对着网络接口预留位)。

尽管两部分连接座不尽相同,但它们的工作方式很相似。对于 Raspberry Pi,拉起连接座两端的卡扣。它应该很容易拉起,并能够轻微活动。把排线完全插入到连接座中,并保证竖直,然后轻轻按下两端的卡扣。摄像头电路板方面,也需要您将卡扣向电路板相反方向拉开,然后轻轻插入排线,最后将卡扣推回。摄像头电路板的连接座与 Pi 上的区别就在这里。

安装摄像头软件

执行下文介绍的命令行进行下载并安装最新的内核,GPU 固件及应用程序。您需要连接到互联网才可以实现以下操作。

sudo apt-get update sudo apt-get upgrade

接下来,您首先需要在 Raspberry Pi 的 raspi-config 程序中启用摄像头的支持。

sudo raspi-config

将光标移动到摄像头选项(Camera option)处,并选择启用(Enable)。在退出 raspi-config 时会要求您重新启动。启用选项是为了确保重启后 GPU 固件能够正确运行(包括摄像头驱动和调节电路),并且 GPU 从主内存划分到了足够的内存使摄像头能够正确运行。

测试系统已经完成安装并正常工作,可尝试以下命令:

raspistill -v -o test.jpg

这将显示来自摄像头 5 秒钟的预览图像,并且拍摄一张照片,然后保存为文件 test.jpg,同时显示出需要相关信息。

故障排除

如果摄像头工作不正常,您可以尝试以下操作。

连接排线是否连接正确?它们必须都垂直插入到插槽中。

摄像头模块的连接座是否紧密的贴合到了电路板上?摄像头模块电路板上连接座的黑色卡扣,有时会发生松动。用指甲轻轻拉开,并且重新将排线插入,并且把卡扣按回。

是否运行过 sudo apt-get update 和 sudo apt-get upgrade 了?

是否运行过 raspi-config 并启用了摄像头选项?

您的电源合适吗?除 Raspberry Pi 所要求的电量,摄像头将需要额外的 200-250mA 的电量。

如果仍然无法工作,可以尝试以下操作:

Error : raspistill/raspivid not found. 该提示可以意味着您 update/upgrade 操作失败了。请重试。

Error : ENOMEM displayed. 摄像头没有启动。请再次检查所有的连接线。

Error : ENOSPC displayed. 摄像头可能使 GPU 内存溢出了。检查 /boot/ 目录下的 config.txt 文件内容。gpu_men 选项,最少应该为 128。

如果以上内容都尝试过了,摄像头仍然无法工作,那么它可能出现问题了。可以尝试在 Raspberry Pi 论坛的 Camera 板块找找是否有更多可用的帮助。

通用命令行参数

预览窗口

–preview, -p 预览窗口设置 <‘x,y,w,h’>

允许用户在屏幕上定义预览窗口的大小和位置。注意,这将在所有其它窗口/图像的上层显示。

–fullscreen, -f 全屏预览模式

强制预览屏幕全屏显示。注意,这将会保留输入图像的长宽比例,所以可能会在图像的边缘出现填充条。

–nopreview, -n 不显示预览窗口

完全禁用预览窗口。注意,尽管预览窗口被禁用,但摄像头仍然在进行处理,所以会继续消耗资源。

–opacity, -op 设置预览窗口透明度

设置预览窗口的透明度。0 为完全透明,255 为完全不透明。

摄像头控制参数

–sharpness, -sh 设置图像锐度(-100 – 100)

设置图像的锐度,默认为 0。

–contrast, -co 设置图像对比度(-100 – 100)

设置图像的对比度,默认为 0。

–brightness, -br 设置图像亮度(0 – 100)

设置图像的亮度,默认为 50。0 为最暗,100 为最亮。

–saturation, -sa 设置图像饱和度(-100 – 100)

设置图像色彩饱和度。默认为 0。

–ISO, -ISO 设置捕捉 ISO

为捕捉图像设置 ISO。范围为 100 到 800。

–vstab, -vs 打开视频稳定

仅用于视频模式,用于开启视频稳定。

–ev, -ev 设置曝光补偿

设置图像的曝光补偿。范围为 -10 到 10,默认为 0。

–exposure, -ex 设置曝光模式

可能用到的参数为:

auto – 使用自动曝光模式

– 使用自动曝光模式 night – 夜间拍摄模式

– 夜间拍摄模式 nightpreview -夜间预览拍摄模式(暂且这么称呼)

-夜间预览拍摄模式(暂且这么称呼) backlight – 逆光拍摄模式

– 逆光拍摄模式 spotlight – 聚光灯拍摄模式

– 聚光灯拍摄模式 sports – 运动拍摄模式(高速快门等)

– 运动拍摄模式(高速快门等) snow – 雪景优化拍摄模式

– 雪景优化拍摄模式 beach – 海滩优化拍摄模式

– 海滩优化拍摄模式 verylong – 长时间曝光拍摄模式

– 长时间曝光拍摄模式 fixedfps – 帧约束拍摄模式

– 帧约束拍摄模式 antishake – 防抖模式

– 防抖模式 fireworks – 烟火优化拍摄模式

注意,不是所有的设置都会在对摄像头进行微调时得到相应作用。

–awb, -awb 设置自动白平衡

可能用到的参数为:

off – 关闭白平衡测算

– 关闭白平衡测算 auto – 自动模式(默认)

– 自动模式(默认) sun – 日光模式

– 日光模式 cloud – 多云模式

– 多云模式 shade – 阴影模式

– 阴影模式 tungsten – 钨灯模式

– 钨灯模式 fluorescent – 荧光灯模式

– 荧光灯模式 incandescent – 白炽灯模式

– 白炽灯模式 flash – 闪光模式

– 闪光模式 horizon – 地平线模式

–imxfx, -ifx 设置图像特效

设置应用于图像上的特效

可能用到的参数为:

none – 无特效(默认)

– 无特效(默认) negative – 反色图像

– 反色图像 solarise – 曝光过度图像

– 曝光过度图像 posterize – 色调图像

– 色调图像 whiteboard – 白板特效

– 白板特效 blackboard – 黑板特效

– 黑板特效 sketch – 素描风格特效

– 素描风格特效 denoise – 降噪图像

– 降噪图像 emboss – 浮雕图像

– 浮雕图像 oilpaint – 油画风格特效

– 油画风格特效 hatch – 草图特效

– 草图特效 gpen – 马克笔特效

– 马克笔特效 pastel – 柔化风格特效

– 柔化风格特效 watercolour – 水彩风格特效

– 水彩风格特效 film – 胶片颗粒风格特效

– 胶片颗粒风格特效 blur – 模糊图像

– 模糊图像 saturation – 色彩饱和图像

– 色彩饱和图像 colourswap – 暂未可用

– 暂未可用 washedout – 暂未可用

– 暂未可用 posterise – 暂未可用

– 暂未可用 colourpoint – 暂未可用

– 暂未可用 colourbalance – 暂未可用

– 暂未可用 cartoon – 暂未可用

–colfx, -cfx 设置色彩特效

指定图像 U 和 V 通道的参数(范围 0 到 255)。例如:–colfx 128:128 将得到一张单色图像。

–metering, -mm 设置测光模式

为预览和捕捉指定测光模式

可能用到的参数为:

average – 全画面平衡测光

– 全画面平衡测光 spot – 点测光

– 点测光 backlit – 模拟背光图像

– 模拟背光图像 matrix – 阵列测光

–rotation, -rot 设置图像旋转(0 – 359)

对取景器和最终得到的图像进行旋转。可以接受 0 以上任何值,但由于硬件限制,只支持 0、90、180、270 度。

–hflip, -hf 设置水平翻转

水平翻转预览和保存的图像。

–vflip, -vf 设置垂直翻转

垂直翻转预览和保存的图像。

–roi, -roi 设置传感器感光区域

允许指定用于预览和捕捉的源所使用的传感器区域。该功能中 x 和 y 参数指定了坐上角的坐标,以及定义了宽度和高度值,并且所有值都为标准化坐标(0.0 到 1.0)。那么,感光区域设置为横向和纵向都为一半,并且宽度和高度都为传感器的四分之一时,可以写为:

-roi 0.5,0.5,0.25,0.25

–shutter, -ss 设置快门速度

设置快门的速度为指定的值(单位为微秒)。据当前的考证,目前未定义时,快门速度上限大约为 330000us(330ms 或 0.33s)。

应用程序专有设置

raspistill

–width, -w 设置图像宽度

–height, -h 设置图像高度

–quality, -q 设置 JPEG 品质

品质为 100 时几乎等同于未压缩。75 相对是比较好的选择。

–raw, -r 向 JPEG 元数据中添加 RAW 信息

该参数将从摄像头获取到的 RAW 信息插入到 JPEG 元数据中。

–output, -o 输出文件名

指定输出的文件名。如果不指定,将不保存到文件。如果文件名为“-”,将输出发送至标准输出设备。

–latest, -l 链接最后一帧到文件名

基于该名称做一个指向最后一帧的文件系统链接。

–verbose, -v 在运行过程中输出详细信息

在程序运行过程中,输出调试/详细信息。

–timeout, -t 获取图片前的时间

程序将执行指定的时长,然后进行获取操作(前提是 output 已指定)。如果未指定,将设置为 5 秒。

–timelapse, -tl 间隔拍摄模式

指定多次拍摄之间所间隔的毫秒值。注意,您需要在文件名中加入 %04d 做为画面计数。

-t 30000 -tl 2000 -o image%04d.jpg

将会在 30 秒的时间内,每两秒拍摄一次,并且将文件命名为:image1.jpg、image0002.jpg…image0015.jpg。注意 %04d 表示在文件名中数字部分加入前导零,使其成为 4 位数。例如,%08d 将生成 8 位数字。

如果间隔时间设置为 0,程序将不间断(取决于系统负担及存储速度)进行拍摄。不过需要注意,每次捕捉前还是会有 30ms 的最小暂停时间,用于曝光计算操作。

–thumb, -th 设置缩略图参数(x:y:quality)

允许指定插入到 JPEG 文件中缩略图信息。如果不指定,将为默认的 64×48 质量为 35 的缩略图。

如果设置为 –thumb none,那么将不会向文件中插入缩略图信息。文件的尺寸也会稍微变小。

–demo, -d 运行演示模式

该参数将循环使用所有摄像头参数,并且不会捕捉。而且无论是否完成所有的循环,在超时周期到达时都会停止演示操作。循环之前的时间需要设置毫秒值。

–encoding, -e 指定输出文件的编码

可用的参数为 jpg、bmp、gif、png。注意,未被硬件加速支持的图像格式(gif、png、bmp)在保存的时候要比 jpg 格式耗时更长。还需要注意,文件扩展名在编码时将被完全忽略。

–exif, -x 在捕捉的内容中加入 EXIF 标签(格式为 ‘key=value’)

允许在 JPEG 图像中插入特定的 EXIF 标签。您可以插入 32 条记录。这是非常实用的功能,比如插入 GPS 元数据。例如设置经度

–exif GPS.GPSLongitude=5/1,10/1,15/100

该命令将会设置经度为 5 度 10 分 15 秒。查看 EXIF 文档获得所有可用标签的详细信息。支持的标签如下:

IFD0. 或 IFD1.

EXIF.

GPS.

EINT.

注意,有部分标签将会由摄像头系统自动设置,但是会被命令行执行的 EXIF 操作所覆盖。

如果设置为 –exif none,那么将不会向文件中插入 EXIF信息。文件的尺寸也会稍微变小。

–fullpreview, -fp 全预览模式

这将使预览窗口运行于全分辨率捕捉模式。该模式最大帧率为 15fps,并且预览将和捕捉拥有相同的可视区域。在不进行模式转换时,捕捉动作将进行的更迅速。该功能目前还在开发中。

–keypress, -k 按键模式

摄像头会运行(-t)参数指定的时间,并且每次按下回车键时进行一次捕捉。在超时设置到达前按 X 键然后按回车键将退出程序。如果超时时间设置为 0,摄像头将一直工作,直到按下 X 键和回车键。使用 verbose(-v)参数可以显示输入确认提示,否则不会有任何提示。

–signal, -s 信号模式

摄像头会运行(-t)参数指定的时间,并且每次向摄像进程发送 USR1 信号时进行一次捕捉。该操作可以通过发送 kill 命令进行终止。您可以使用“pgrep raspistill”命令找到摄像进程的 ID。

kill -USR1

raspistillyuv

raspistillyuv 的许多选项与 raspistill 是相同的。本节将对不同的部分进行讲解。

不支持的选项:

–exif, –encoding, –thumb, –raw, –quality

扩展选项:

–rgb, -rgb 以 RGB888 形式保存未压缩数据

该选项强制图像保存为每个通道为 8 bits 的 RGB 格式,而不是 YUV420 格式。

注意,在 raspistillyuv 中所保存的图像在缓冲区中水平尺寸封装为可被 16 整除(所以可能会在每行的结尾都会出现无用的字节以使宽度可被 16 整除)。缓冲区也会将垂直方向封装为可被 16 整除,在 YUV 模式中,每个 Y、U、V 平面都会使用该方式进行封装。

raspivid

–width, -w 设置图像宽度

视频的宽度。范围为 64 到 1920。

–height, -h 设置图像高度

视频的高度。范围为 64 到 1080。

–bitrate, -b 设置码率。

使用比特/秒为单位,所以 10Mbits/s 需要输入 -b 10000000。对于 H264 编码的 1080p30 高清视频,码率需要在 15Mbits/s 或以上。码率最大为 25Mbits/s(-b 25000000),但大于 17Mbits/s 时,在 1080p30 中并没有太大区别。

–output -o 输出文件名

指定输出的文件名。如果不指定,将不保存到文件。如果文件名为“-”,将输出发送至标准输出设备。

–verbose, -v 在运行过程中输出详细信息

在程序运行过程中,输出调试/详细信息。

–timeout, -t 获取图片前的时间

程序将执行指定的时长,然后进行获取操作(前提是 output 已指定)。如果未指定,将设置为 5 秒。设置为 0 意味着程序将一直运行,直到按下 Ctrl-C 才会停止。

–demo, -d 运行演示模式

该参数将循环使用所有摄像头参数,并且不会捕捉。而且无论是否完成所有的循环,在超时周期到达时都会停止演示操作。循环之前的时间需要设置毫秒值。

–framerate, -fps 指定录制的视频每秒的画面数量

目前,最小的帧率为 2fps,最大为 30fps。似乎将来会有所改变。

–penc, -e 在编码完成后显示预览图像

开启该选项会在压缩完成后显示预览图像。显示在预览窗口中的图像会因为压缩的原因出现失真。正常情况下,预览将会显示摄像头输出的原始图像。该功能在未来的版本中可能不再可用。

–intra, -g 指定帧内刷新周期(关键帧率/画面组)

为录制的视频设置帧内刷新周期(画面组)率。H.264 视频在每个帧内刷新周期中都使用了 I-frame。该选项指定了每个 I-frame 之间帧的数量。数字越大,生成的视频尺寸越小,数字越小,视频流将越庞大,直至出错。

–qp, -qp 设置量化参数

为视频流设置初始量化参数。范围从 10 到 40,并且对所录制视频的质量有极大的影响。值越大,质量越低,并且文件尺寸越小。码流设置为 0,并结合此参数一起使用,可用来设置一个完全动态码流的视频。

–profile, -pf 为录制的视频指定 H264 配置文件

为录制的视频指定 H264 配置文件。选项为:baseline、main、high。

–inline, -ih Insert PPS, SPS headers 插入 PPS,SPS 头

强制视频流的 I-frame 都包含 PPS 和 SPS 头信息。某些视频封装格式需要该信息。例如 Apple HLS。这些头信息体积很小,所以不会让文件的尺寸增加太多。

–timed, -td 设置定时切换捕捉和暂停

该选项可以使视频捕捉在特定的时间里暂停并重新开始记录。需要指定开启时间和关闭时间两个值。开启时间是视频的捕捉时长,关闭时间是暂停的时长。总录制时长是又超时选项进行定义的。注意,由于开启时间和关闭时间的设置原因,录制时长将略微比超时设置的时间要长。

例如

raspivid -o test.h264 -t 25000 -timed 2500,5000

将进行 25 秒的录制操作。录制操作包括若干个 2500 毫秒(2.5 秒)录制和 5000 毫秒(5秒)暂停的操作,并且重复时长超过 20 秒。所以该录制过程中实际只录制了 10 秒的内容。包括 4 段 2.5 秒的视频片断 = 被若干个 5 秒钟暂停操作分隔开的 10 秒钟视频。

2.5 秒录制 – 5 秒暂停 – 2.5 秒录制 – 5 秒暂停 -2.5 秒录制 – 5 秒暂停 – 2.5 秒录制

录制了 25 秒。但仅有 10 秒的记录

–keypress, -k 使用回车键在录制和暂停两种状态间进行切换

每次点击回车键将会暂停或重新开始录制进程。点击 X 键后点击回车键将停止录制并关闭程序。注意,超时设置值将影响录制结束时间,但仅在每次回车键点击后进行检查,所以如果系统正在等待按键操作,尽管超时设置已过期,录制进程退出前也会等待按键操作。

–signal, -s 使用 SIGUSR1 信号在录制和暂停两种状态间进行切换

向 Raspivid 进程发送 USR1 信号来切换录制和暂停。该操作可以通过使用 kill 命令来实现。您可以使用“pgrep raspivid” 命令找到 raspivid 的进程 ID。

kill -USR1

注意,超时设置值将影响录制结束时间,但仅在每次发送 SIGUSR1 信号后进行检查,所以如果系统正在等待信号,尽管超时设置已过期,录制进程退出前也会等待信号的发送操作。

–initial, -i 定义启动时的初始状态。

定义摄像头初始状态为暂停或立即开始录像。选项可以为“record”(录像)或“pause”(暂停)。注意,如果您设置的超时时长很短,而且初始状态设置为“暂停”,那么将不会录制任何输出的内容。

–segment, -sg 将视频流分段存储到多个文件

与存储在单个文件中不同,该参数将视频分段存储在以毫秒为单位所指定长度的数个文件中。为了将生成的文件命名为不同的名称,您需要在文件名中合适的位置添加 %04d 或类似的参数来让文件名中显示计数值。例如:

–segment 3000 -o video%04d.h264

将分割成每段长度 3000 毫秒(3 秒)并且命名为 video0001.h264,video0002.h264 等。每个段落都是可无缝连接的(段落之间不会丢帧),但每个片段的长度将取决于帧内周期值,原因是每个分割的段落都需要起始于 I-frame 处。因此,每个段落都会等于或大于指定的时间长度。

–wrap, -wr 设置最大分段数

当输出分段视频时,该参数设置了最大分段数,并且达到最大值时,将返回到初始的第一个段落。该参数赋予了录制分段视频的功能,但是将覆盖之前生成的文件。所以,如果设置为 4,那么上面的例子中所生成的文件名为 video0001.h264,video0002.h264,video0003.h264,video0004.h264。而且,一旦 video0004.h264 文件录制完毕后,计数将回到 1,并且 video0001.h264 将被覆盖。

–start, -sn 设置初始段落数

当输出分段视频时,该参数为初始的段落数,它允许从指定的段落恢复之前的录制操作。默认值为 1。

示例

图像捕捉

默认情况下,传感器将以其支持的最高分辨率进行捕捉。可以在命令行中通过使用 -w 和 -h 参数进行更改。

# 两秒钟(时间单位为毫秒)延迟后拍摄一张照片,并保存为 image.jpg raspistill -t 2000 -o image.jpg

# 拍摄一张自定义大小的照片。 raspistill -t 2000 -o image.jpg -w 640 -h 480

# 降低图像质量,减小文件尺寸 raspistill -t 2000 -o image.jpg -q 5

# 强制使预览窗口出现在坐标为 100,100 的位置,并且尺寸为宽 300 和高 200 像素。 raspistill -t 2000 -o image.jpg -p 100,100,300,200

# 禁用预览窗口 raspistill -t 2000 -o image.jpg -n

# 将图像保存为 PNG 文件(无损压缩格式,但是要比 JPEG 速度慢)。注意,当选择图像编码时,文件扩展名将被忽略。 raspistill -t 2000 -o image.png –e png

# 向 JPEG 文件中添加一些 EXIF 信息。该命令将会把作者名称标签设置为 Dreamcolor,GPS 海拔高度为 123.5米。 raspistill -t 2000 -o image.jpg -x IFD0.Artist=Dreamcolor -x GPS.GPSAltitude=1235/10

# 设置浮雕风格图像特效 raspistill -t 2000 -o image.jpg -ifx emboss

# 设置 YUV 图像的 U 和 V 通道为指定的值(128:128 为黑白图像) raspistill -t 2000 -o image.jpg -cfx 128:128

# 仅显示两秒钟预览图像,而不对图像进行保存。 raspistill -t 2000

# 间隔获取图片,在 10 分钟(10 分钟 = 600000 毫秒)的时间里,每 10 秒获取一张,并且命名为 image_number_001_today.jpg,image_number_002_today.jpg… 的形式,并且最后一张照片将命名为 latest.jpg。 raspistill -t 600000 -tl 10000 -o image_num_%03d_today.jpg -l latest.jpg

# 获取一张照片并发送至标准输出设备 raspistill -t 2000 -o –

# 获取一张照片并保存为一个文件 raspistill -t 2000 -o – > my_file.jpg

#摄像头一直工作,当按下回车键时获取一张照片。 raspistill -t 0 -k -o my_pics%02d.jpg

视频捕捉

图像尺寸和预览设置与图像捕捉相同。录制的视频默认尺寸为 1080p(1920×1080)

# 使用默认设置录制一段 5 秒钟的视频片段(1080p30) raspivid -t 5000 -o video.h264

# 使用指定码率(3.5Mbits/s)录制一段 5 秒钟的视频片段 raspivid -t 5000 -o video.h264 -b 3500000

# 使用指定帧率(5fps)录制一段 5 秒钟的视频片段 raspivid -t 5000 -o video.h264 -f 5

# 发送到标准输出设备一段 5 秒钟经过编码的摄像头流图像 raspivid -t 5000 -o –

# 保存到文件一段 5 秒钟经过编码的摄像头流图像 raspivid -t 5000 -o – > my_file.h264

Shell 错误代码

应用程序将返回完整的错误代码。可能出现的错误代码为:

EX_OK 0 应用程序运行成功

EX_USAGE 64 错误的命令行参数

EX_SOFTWARE 70 软件或摄像头错误

130 由于按下 Ctrl-C,应用程序终止运行

扩展内容

MP4Box

raspivid 通常会将录制的视频保存为 .h264 格式的文件。而我们使用的很多播放器可能无法正常播放该格式的视频文件。这就需要我们将生成的 .h264 格式的文件封装到播放器能够识别的视频容器格式中(比如封装为 mp4 格式)。有很多视频处理软件可以达到这个目的,您也可以直接在 Raspberry Pi 上直接进行封装。这里介绍的是“gpac”中的“MP4Box”。安装和使用的方法如下:

sudo apt-get update sudo apt-get install gpac MP4Box -add filename.h264 filename.mp4

相关网站

原文地址:RaspiCam Documentation

项目地址:RaspiCam

本文链接:Raspberry Pi 摄像头模块应用程序文档翻译

Rpi Camera Module from eLinux

转自 dreamcolor.net

用树莓派打造的智能手机PiPhone

作为用于教育目的的一款卡片式微型电脑,树莓派一经推出便得到了世界各地爱好者的喜爱,而凭借着奇思妙想和强大的动手能力,爱好者们也通过树莓派实现了许多有趣的功能。近日,一位名为David Hunt的爱好者便用树莓派微型电脑和Adafruit屏幕组件打造了一台简易的手机——PiPhone。

除了树莓派和Adafruit屏幕组件以外,David Hunt还使用了Sim900 GSM/GPRS通讯模块来实现通话功能。不过从视频中可以看出,PiPhone还只是一台用于演示功能的非常初级的原型产品。

值得一提的是,PiPhone上运行的交互界面是为该手机量身打造的。如果用户想使用这台手机的话,只需要插入一张通用SIM卡便可以完成打电话、发短信和上网等基本功能。

PiPhone树莓派手机的造价为158美元(约合人民币987元),虽然并不昂贵,不过还是不如直接购买一部廉价智能手机来得合算。当然,自己动手DIY一台手机的乐趣也远非直接购买一台现成的手机所能比的。

via

树莓派做下载机,Aria2!

最近看了很多用树莓派或者openwrt路由器做下载机的。

但是看那些教程,小白肯定是不会弄了,所以我就做这个教程,应该接近小白了,一步一步。

首先树莓派的系统要装好。

首先安装aria2,apache2

sudo apt-get install aria2 apache2

装好之后设置好apache2的权限:

sudo visudo

底部添加这行:

www-data ALL=(ALL) NOPASSWD: ALL

Ctrl + O保存,Ctrl + X退出

然后在搞aria2的

mkdir ~/.aria2 touch ~/.aria2/aria2.session nano ~/.aria2/aria2.conf

aria2.conf里面写这些:

dir=/home/xbian/Download #下载默认的目录 disable-ipv6=true enable-rpc=true rpc-allow-origin-all=true rpc-listen-all=true #rpc-listen-port=6800 continue=true input-file=/home/xbian/.aria2/aria2.session #刚才touch命令的那个文件,路径要绝对路径 save-session=/home/xbian/.aria2/aria2.session #同上,这个文件的作用是保存你的下载列表,不保存的话重启后所有下载都木有了 max-concurrent-downloads=3

完了后运行:aria2c –conf-path=/home/xbian/.aria2/aria2.conf

测试有没有错误,如果没有错误的话Ctrl + C终止程序继续下一步,有错误会提示你conf文件哪里错误。

把aria2做成系统的服务:

sudo nano /etc/init.d/aria2c

内容如下:

#!/bin/sh ### BEGIN INIT INFO # Provides: aria2 # Required-Start: $remote_fs $network # Required-Stop: $remote_fs $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Aria2 Downloader ### END INIT INFO case “$1” in start) echo -n “Starting aria2c” sudo -u xbian aria2c –conf-path=/home/xbian/.aria2/aria2.conf -D #sudo -u后面的是你正在使用的用户名,因为我用的XBian,用debian的是pi(没改用户的话) ;; stop) echo -n “Shutting down aria2c ” killall aria2c ;; restart) killall aria2c sudo -u xbian aria2c –conf-path=/home/xbian/.aria2/aria2.conf -D #同上面的一样,根据自己的用户名改xbian。 ;; esac exit

Ctrl + O 保存后退出

然后设置这个文件的权限。

sudo chmod 755 /etc/init.d/aria2c

测试服务是否可以启动:

sudo service aria2c start

如果只显示Starting aria2c,没有其他错误提示的话就成功了。

添加aria2c服务自动运行:

sudo update-rc.d aria2c defaults

Aria2相关的好了,下面开始网页控制aria2下载。

cd /var/www git clone http://github.com/wzhy90/yaaw

管理器用的是yaaw,网上的是英文的,我已经翻译好中文了。

用浏览器打开yaaw:http://192.168.1.14/yaaw

如果没提示错误就可以了

用迅雷离线需要另外的软件。

firefox的到这里安装这个扩展:https://addons.mozilla.org/en-US … emonkey/?src=search

安装完后打开这个连接安装迅雷离线插件:ThunderLixianExporter.user.js

chrome到这里安装扩展:https://chrome.google.com/websto … eibahhcghphdbjcdmen

然后打开迅雷离线,点右上角的设置。

Aria2 JSON-RPC Path写你自己的ip地址,YAAW网页里面的设置有,可以复制。

保存后离线下载完的文件,选中后点批量导出,选YAAW。

然后你的派就开始下载文件了。

使用U-Boot让树莓派从U盘启动

概述

Das U-Boot, 通常叫做U-Boot, 嵌入式系统的常用bootloader. U-Boot允许使用SD卡上单个指定文件的内容作为额外的启动参数, 为树莓派增加不少灵活性.

本文将详细介绍如何让U-Boot运行在树莓派上, 以及通过SD卡或者从网络走TFTP服务器来启动镜像.

准备U-Boot镜像文件获得源码

现在U-Boot的主分支还不支持树莓派. 我们需要从GitHub上Gonzoua的分支获取代码. 请注意显示为默认的’master’分支是未修改的U-Boot代码 – 我们需要用’rpi’分支获取正确的代码.

你可以通过此链接下载源码的压缩包.

编译源码

首先, 我们需要导出交叉编译器的前缀来指定树莓派. 如果你的gcc库为arm-none-linux-gnueabi-gcc, 运行命令:

CROSS_COMPILE=arm-none-linux-gnueabi-

export CROSS_COMPILE

然后在U-Boot源码目录中, 运行下列命令开始编译:

make rpi_b

整个编译过程应该花不了几分钟时间.

编译镜像文件

不知道如何编译内核的同学请移步内核编译. u-boot.bin文件应该用作输入文件.

在编译完成后, 把kernel.img文件移动到SD卡上. 最好把镜像文件名改成类似uboot.img, 和实际内核镜像区分开来. 在config.txt文件中加上:

kernel=uboot.img

测试镜像

树莓派将会使用新的U-Boot镜像启动. 在屏幕上应该会显示U-Boot加载, 如果你连上了串口还应该有其输出.

编译U-Boot镜像

请确认获取了内核的源码, 并且对内核编译过程比较熟悉. 有内核源码就可以编译U-Boot镜像了, 相比而言编译内核镜像还容易些. 首先, 我们要把U-Boot工具mkimage放到能被编译进程找到的地方, 把工具复制到交叉编译器的bin目录下. 然后在U-Boot源码目录执行命令把路径和前缀替换为实际交叉编译器的相应内容)

cp tools/mkimage /bin/arm-none-linux-gnueabi-mkimage

在内核源码目录, 开始编译U-Boot镜像:

make uImage

生成的启动镜像文件在arch/arm/boot/uImage.

U-Boot引导选项从SD卡启动

从SD卡启动时无需修改config.txt便可以使用多内核镜像. 把uImage文件放到SD卡上, 然后启动. 按任意键进入命令行, 输入以下命令:

mmc rescan

fatload mmc 0:1 ${loadaddr}

bootm

通过网络走TFTP服务器启动

我们需要有一个配置好的TFTP服务器. 将uImage文件放到TFTP根目录中, 并确认有相应文件权限 (允许任何人进行读取 – 如果不确定, 执行一次chmod a+r uImage).

用DHCP启动前, 请先确认DHCP已经设置过next-server和filename参数. 接着启动树莓派, 按任意键进入命令行, 输入以下命令:

usb start

dhcp

bootm

用固定IP启动:

usb start

setenv serverip

setenv ipaddr

tftpboot uImage

bootm

U-Boot脚本文件

上一节的内容可以写进一个文本文件, 然后编译到U-Boot脚本文件中, 以便在启动时自动执行. 用下面的命令来生成脚本:

arm-none-linux-gnueabi-mkimage -A arm -O linux -T script -C none -d boot.scr

把boot.scr文件放在SD卡上, 在树莓派启动的时候会自动使用.

官方:树莓派B+版正式发布

树莓派官网刚发布了“树莓派B+”版本,依然采用 BCM2835 处理器以及和上一代树莓派相同的系统软件。内存也依然是512MB;但是在以下几处关键部件做了改进:

更多的 GPIO 针脚,40针!(老版本是26针)

更多的USB接口,比老版本多2个,现在是4个!并且对热插拔和过流保护做了改良。

用Micro SD插口替换了老的SD插口。

更低的功耗,降低了功耗0.5~1W。

音频优化,音频电路采用了专用的低噪音电源。

更简洁的外形,这个版本将USB接口和电路板边沿对齐了、移除AV接口,并在主板上做了4个固定孔,方便固定。

下面附2张图,分别是新的主板尺寸和GPIO图。

这次虽然不是各位玩家期待的“树莓派2”,但面对和B版一样的价格——35美元,还没买B版的玩家可以果断出手入这块B+了!

官方原文:http://www.raspberrypi.org/introducing-raspberry-pi-model-b-plus/

Adafruit的树莓派教程:网络设置

概览

你想做的第一件事一定是把你的树莓派连接到因特网上。

在这节课里,你将会学到如何:

使用网线连接到以太网

在Raspbian和Occidentalis上使用无线网卡

找到树莓派的IP地址

使用有线网络

最快的把树莓派接入到因特网的方法是使用一根以太网线把树莓派连接到你家的路由器上。

当你把网线连入树莓派的时候,你就会看到网络LED灯开始闪烁了。

对于大多数的家庭网络来说,你就不需要再做任何进一步的配置了。但为了保证正常工作,你的路由器必须打开DHCP(Dynamic Host Configuration Protocal)配置。这个服务运行在你的路由器上,它会给任何通过网线或者WiFi连接到路由器上的设备分发IP地址。

如果你的路由器没有打开DHCP服务,那就要使用另一台已经连接到网络里的计算机进行配置。

你应该找到DHCP配置项然后打开它。

购买一个USB无线网卡

找一款支持RTL8192cu芯片的无线路由,因为最新的Raspbian和Occidentalis已经原生支持这个芯片并且我们发现他回避Ralink的芯片速度快。

如果你已经有一个无线网卡了,那就用那个好了,因为现在许多便宜的无线网卡已经能够在树莓派上正常工作了。

然而WiFi会小号很多电力,所以检查一下你的电源供电。一些无线网卡需要额外的电力提供支持。这里我们建议使用5V1A的电源适配器。所有在Adafruit商店出售的无线网卡都能够很好的工作。

如果你把无线网卡插到树莓派上了,那你只剩一个USB口可以用来接键盘或鼠标了,因此你可能也需要一个有源的USB Hub。

通过图形界面设置Wifi

注意:设置WiFi需要你的路由广播SSID。确认你的路由设置了”广播SSID”。把SSID设置为”私有”就不好办了

在2012-10-28之后发布的Raspbian都带有一个WiFi配置工具。你将会在桌面上找到一个快捷方式。如果你想使用命令行工具通过以太网登录,你可以看看后面的如何手动编辑/etc/network/interfaces。

步骤1.

双击图标你将会看到下面的界面。

步骤2.

点一下Scan按钮将会打开第二个窗口。招待你的无线网名双击它,将会开启一个新窗口。

步骤3.

在PSK框内输入你的密码然后点一下Add。当你回到第一个窗口的时候,你将会看到连接已经可以使用了。你可以使用按钮来控制连接或断开无线网络。注意在窗口底部显示了树莓派的IP地址。

通过命令行配置Wifi

注意:设置WiFi需要你的路由广播SSID。确认你的路由设置了”广播SSID”。把SSID设置为”私有”就不好办了

在Occidentalis上配置WiFi是十分容易的。你只需要把你的无线网名字(SSID)和你的密码添加到配置文件里就可以了。

步骤1.

启动你的树莓派,不要插入无线网卡。

步骤2.

通过点击LXTerminal图标打开一个终端会话,然后键入下面的命令:

sudo nano /etc/network/interfaces

auto lo iface lo inet loopback iface eth0 inet dhcp allow-hotplug wlan0 auto wlan0 iface wlan0 inet dhcp wpa-ssid “ssid” wpa-psk “password”

如果你使用了一个”隐藏的”SSID,试试这篇教程。

auto lo iface lo inet loopback iface eth0 inet dhcp auto wlan0 allow-hotplug wlan0 iface wlan0 inet dhcp wpa-scan-ssid 1 wpa-ap-scan 1 wpa-key-mgmt WPA-PSK wpa-proto RSN WPA wpa-pairwise CCMP TKIP wpa-group CCMP TKIP wpa-ssid “My Secret SSID” wpa-psk “My SSID PSK” iface default inet dhcp

sudo service networking restart

步骤3.

打开一个编辑器编辑wifi的配置文件。

你需要修改最后两行。更改后的文件看起来像这样:

当然啦,你得输入你自己的网络名和密码!注意网络名和密码必须加双引号。

这样的编辑器不能够使用鼠标。所以,你要用方向键来定位了。

步骤4.

当完成时按一下Ctrl+X。系统会提示你是否保存更改。

按一下”Y”将会返回到命令行状态。

步骤5.

关闭你的树莓派,插上无线网卡然后启动它。你就会发现当它启动之后就会自动连接到网络里了。

找到树莓派的IP地址

你可以通过打开树莓派的WiFi配置工具找到你的树莓派IP地址。IP地址将会显示在窗口底部。

如果你使用Occidentalis,或者你想使用命令行来查找。打开一个LXTerminal终端窗口并且键入下面的命令:

sudo ifconfig

你将会在wlan0旁边看到树莓派的IP地址192.168.1.10。

记住!如果树莓派的IP地址以192.168或者10.0开头,那么这是一个内网地址,它意味着你可以访问因特网但是你家网络以外的用户是无法通过这个IP直接访问到树莓派的。如果你想要把小派作为一个能从外网访问的网页服务器,那么这一点非常重要。总而言之,把你的小派放在内网里那它就安全一些不会轻易的被黑掉。

测试和配置

如果你运行了图形界面,打开一个Midori网页浏览器并且跳转到你最喜欢的网站上。

如果你正在使用命令行,那么ping命令可以帮助你确定是否已经连接到因特网。试试ping google.com或者ping adafruit.com来看你能不能到达这些网站。

修复断线问题

如果你发现你的设备经常掉线,你可以十分容易的使用一个命令行来修复它(感谢perseus286!)

创建并编辑文件/etc/modprobe.d/8192cu.conf

sudo nano /etc/modprobe.d/8192cu.conf

并且粘贴下列内容

# Disable power saving options 8192cu rtw_power_mgnt=0 rtw_enusbss=1 rtw_ips_mode=1

然后使用sudo reboot进行重启。

Adafruit的树莓派教程:使用伺服马达

概览

这节课我们来学习如何使用Python来控制一个伺服马达。

伺服马达受不同长度的脉冲控制。这需要相当准确的定时。树莓派上有一针能通过硬件产生脉冲,而不需要依靠操作系统。Occidentalis系统有一个界面可以使用这一针来控制伺服马达。

你需要的:

1个树莓派

1个扩展板和1条26针的IDC电缆

1把公对公的跳线

1块小型面包板

1个伺服马达

Adafruit Occidentalis 0.2或之后版本的操作系统发行版

5号或7号电池座及4节电池

伺服马达

伺服马达的状态由脉冲的长度控制。伺服马达预期每20毫秒接受一次脉冲。如果脉冲的高电平持续1毫秒,那么伺服马达不会转动,如果是1.5毫秒,那它将会转过90度,如果高电平持续2毫秒,那它将会转动180度。

伺服马达的终点位置可能不同,许多伺服马达只能转动大约170度。你也可以购买能”连续”旋转360度的伺服马达。

PWM与伺服马达核心模块(The PWM and Servo Kernel Module)

Adafruit与Sean Cross一起编写了一个核心模块被包含在了Occidentalis发行版里。如果你想在Raspbian或者其他发行版上使用这个模块,参考这里来把模块安装到你的环境里。

这个模块被称为PWM与伺服马达(PWM and Servo)因为在控制伺服马达的同时该模块可以产生PWM(Pulse Width Modulation,脉冲宽度调制)信号,(与额外电源配合)可被用于控制马达的功率或灯光亮度。这节课我们不会使用PWM。

PWM与伺服马达模块使用一种文件类型的接口,你可以通过读取和写入特殊的文件来控制输出针脚和伺服马达的行为。这使得使用Python或者其他语言来编写该接口十分容易。

用于驱动伺服马达的所涉及到的文件列在下方。所有文件可以在树莓派的/sys/class/rpi-pwm/pwm0/目录下找到。

文件 – 描述

active – 1为激活,0为未激活。你可以通过读取它来查找输出针是否被激活,或者通过改写控制它的激活或未激活。

delayed – 如果设置为1,你对其他文件的改动不会起作用直到你使用上面的active来激活输出针。

mode – 改写文件来设置针脚是pwm,servo(伺服马达)还是audio(音频)。显然这里我们要设置为servo。注意这些针也会被小派的音频输出使用,所以你不能在使用声音的同时控制一个伺服马达。

servo_max – 改写这个文件来设置伺服马达的最大角度。我们把它设置为180这样我们就可以很容易的把伺服马达置成0到180度之间的位置了。

servo – 改写这个文件将会设置伺服马达的脉冲长度到一个与servo_max有关的值。比如我们把它设置为90,servo_max的值为180,那伺服马达会保持在中间位置。

硬件

在小派上只有一个针脚能够产生这样的脉冲(GPIO 18针)。它将与伺服马达的控制针脚相连。伺服马达的电源由外接电池控制,因为使用小派的电源可能会在伺服马达开始转动的瞬间产生巨大的电流,导致小派崩溃。伺服马达需要4.8-6V的直流电来驱动马达,但是信号的逻辑电平(脉冲输出)可以是3.3V,所以可以直接把信号线直接连到GPIO的输出针上。

小派扩展板用于连接树莓派和面包板,如果你之前没有使用过扩展板,你可以参考这个系列教程的第四节。

伺服马达通常有一个三针的插座。红色和棕色用于供电(红色为正极)并且第三针黄色或橘黄色的用于控制信号。要把插座连接到面包板上,你需要使用公对公的跳线。

软件

这个项目不需要安装任何Python库。

下面列出的程序使伺服马达前后摆动:

# Servo Control import time def set(property, value): try: f = open(“/sys/class/rpi-pwm/pwm0/” + property, ‘w’) f.write(value) f.close() except: print(“Error writing to: ” + property + ” value: ” + value) def setServo(angle): set(“servo”, str(angle)) set(“delayed”, “0”) set(“mode”, “servo”) set(“servo_max”, “180”) set(“active”, “1”) delay_period = 0.01 while True: for angle in range(0, 180): setServo(angle) time.sleep(delay_period) for angle in range(0, 180): setServo(180 – angle) time.sleep(delay_period)

为了写文件方便,我写了一个工具方法叫做”set”。第一个参数是要被写入的文件名(属性名),第二个参数是要被写入的值。

在程序的开始部分写入了几个文件来关闭delay模式,设置mode为’servo’,设置伺服马达的最大角度为180度最后把输出针设置为激活状态。

一个叫做delay_period的变量用于存储伺服马达每一步的间隔秒数。

while循环会一直进行直到按下CTRL+C终止。在while循环中有两个相似的for循环,第一个从0到180度递增旋转角度,第二个刚好相反,从180到0度递减。

要安装个软件,使用SSH连接到小派上然后输入下面的命令:

nano servo.py

粘贴上面的代码然后使用CTRL+X然后按一下Y保存。

然后在SSH窗口里输入下面的命令来使程序运行:

python servo.py

然后伺服马达就开始转动啦。

测试&配置

如果你想让马达转快一些,尝试改变delay_period到一个更小的值,例如0.001,如果想慢一些,把它增大到0.1.

如果你想控制多个伺服马达,像Adafruit I2C 16 channel servo / pwm controller里一样。你可以通过这篇教程来进行了解。

树莓派创始人访谈:我们是怎么让大家都成为DIY黑客的

原文出处: Linux.CN

请记住它是为喜欢折腾的人准备的只要35美元的计算机

我永远不会忘记我第一次看到树莓派的情形。那个小巧的,信用卡大小的计算机,性能却足够强劲,可以作为一般家用PC,媒体中心,电视游戏机,或是其他任何你能够想像的东西。只有35美元的价格,它是任何年龄段的动手爱好者都可以拥有的小东西,可以在上面捣腾硬件和软件试验,而不用担心会弄坏昂贵的家庭电脑。

Eben Upton,是树莓派基金会的共同创始人,通常被誉为这个神奇机器背后的魔法师。在剑桥大学的计算机实验室攻读哲学博士学位的时候,他费尽苦心地手工打造了树莓派的原型机。

如今,Upton是树莓派基金会下面贸易公司的CEO,监督着树莓派的生产和销售,目前销量已经达到250万台。

天上的派

ReadWrite网: 一开始是什么让你对技术这么感兴趣?它又是如何偶然地引导你创建树莓派项目的?

Eben Upton: 在我还是孩子的时候就开始对技术感兴趣了。我有个对工程技术有很大兴趣的父亲,他自己不是工程师,而是一个英语老师。我们的房子里经常到处堆着各种电子器件,在还不知道这些东西是干嘛的时候,我就开始摆弄了。都是些小玩意,比如在床头装个灯,在“关灯”后还可以继续看书之类的。

之后我有了一台计算机。在英国,我们把这种机器叫做BBC微计算机,实际上是8位单片机,做教学用的。我们在学校的时候接触到这种机器,我之后就学会了编程,而且还蛮喜欢的。

这些机器在学校里并不一定是用来编程的,或者说他们根本不是用来编程的,一般都运行教学软件。但是我却给它编程,之后我还买了一台回家,在我买了这台BBC微机后,我就泡在了房间里,再没出来过。[笑]

编程对于小孩来说太神奇了。当你还是小孩的时候,并没有太多力量。没有听话的随从,反而身边有很多的限制。编程最伟大的地方在于,这是一个可以让你随心所欲的小世界。而这当然让我无法抗拒。

我一直都对科学和数学,以及理科感兴趣。我在我的BBC微机上做了大量的计算和编程,之后我拥有了一台Commodore Amiga。

在大学里我学习了物理,工程和计算机科学。这是激发树莓派项目想法的原因,因为当我在学校呆了10年的时候[当时在读博士学位],我发现那些新来的孩子们在他们小时候并没有机会获得这方面的经验。你也许仍然能拥有乐高玩具,但是它不是我们要的梯子。

在一定程度上我们把身后的梯子撤掉了。我们造出了这些非常复杂而且用户友好的计算机给小孩使用,或者不仅仅是计算机,还包括电视游戏机,电话和平板,以及一些家用电器。但是,人们却没有机会自己动手改一改。所以实际上,树莓派是回到最初的一种尝试,当然也不会过于原始,希望找到在过去25年里计算机发展中迷失掉的那种感觉。

RW: 你需要克服的最大的障碍有哪些?

EU: 好吧,我们没有任何投资者,当然这也是一件好事情。我们从2006年就开始尝试做这件事情,你可以看到它花了我们很长时间才把树莓派从一个想法变成一件能卖的东西。在价格和性能之间或是价格和可编程性之间找到平衡,是一件很重要的事情。

另外一件麻烦事是募集资金。我们是非营利组织,所以我们得去找人赞助,而这最后都变成了董事会中的几个人自掏腰包。我们有25万美元的启动资金是从我和其他几个成员自己借的。所以我觉得,当初这样做还挺有勇气。

从东方到西方

为了找到价格合适的生产方式,我们选了一条不同寻常的路线。通常人们生产更传统的产品时,当量不大的时候都会选择在本地生产,然后[制造商]再制定较高的价格。大多数都能获得比树莓派丰厚的利润。

所以他们开始会在西方生产。然后,为了追求更高的利润,当产品有一定的量就会想减少生产成本,所以转到远东地区。

我们的问题是,因为我们没有足够的利润来支撑这种模式的订单,所以我们在中国制造了第一批产品。当然一开始会有一点不好的预感。我一点也不了解中国制造,最后,我们把价值5万美元的芯片和5万美元现金交给一个香港人,他需要还给我们2000片可以工作的树莓派。

之后交期出现了延时,我们甚至都开始相信自己被骗了。然后终于有一天,现在250万台树莓派中最早的2000台放在托板上来到了门口。

那个UPS快递员从卡车里拖出一个托板,并拉到我们车库里。托板上放着2000台树莓派,它们中每一台都比我小时候用过的计算机强多了。我们随机抽查了几台,都可以完美地工作。

所以我觉得还挺幸运,中国你懂的。然后我们的产品终于开始有量了,我们选择了跟其他所有人不同的方向。我觉得这是这个项目中的另一个决定性时刻,我们认识到,以目前的订单量,我们可以用和在中国同样的成本在西方生产。所以我们可以回归,把所有的生产制造搬回威尔士,也是我出生的地方。像是一个美妙的圆圈。

RW: 有没有一些树莓派的前身没有被制造出来的?

EU: 有的,我们做了许多不同的原型机。我们希望做出一个可以编程,也能吸引小朋友兴趣的东西。“吸引小朋友兴趣”意味着,在某些方面要足够强大。比如,播放视频,玩游戏,以及上网。

我们有许多能够达到价格目标和可编程目标的原型,但是等我们确定一个合适的方案,它足够强大能够吸引孩子们的热情,已经挺晚了,都到2010年底2011年初了。

派是从哪儿烤好的

RW: 跟我们说说发明树莓派的故事

EU: 我们尝试过基于所谓的微控制器技术做了几台机器。不知道你有没有听过一个叫Arduino的[开源电子原型]平台?它们的性能跟Arduino是一个级别的,优点是很容易买到,是常用的元器件,非常便宜,也很容易掌握。

所以我们试了一下。最后的成品只能从技术上来说还是计算机,你可以把它接到电视机或其他显示设备上。但是,它太原始了,很明显不能吸引孩子们的兴趣。这个是一号原型机,它在爱尔兰一家博物馆的叫“失败”的展览中展出[笑]。我下个月会去看看。它现在被装载一个玻璃盒子里,作为一次辉煌失败的典型。

好的一面是它是手工制作的,你不可能手工制作一块现代的树莓派。但是,这个原型太原始了,你实际上可以把所有器件手工焊接到一起,它就是我一个星期里做好的,是个挺好的小玩具。

我在大学里呆了差不多10年以后,进入到一家叫Broadcom的公司工作,总部在南加利福尼亚但是在剑桥有个大办公室,主要生产手机芯片。然后,我意识到这种手机芯片非常适合,它是制作像派这样的设备的非常合适的平台,因为它有优秀的图形性能。

我基于Broadcom开发工具制作了一个原型。这次的原型非常强大,也有更多功能,价格也差不多。不过问题是,它有一套定制的开发环境,而不是一个标准的平台。

我们得写自己的SD卡驱动,自己的文件系统,自己的文本编辑器。你会发现你得做大量基础工作,虽然最后你能够得到一个强大的可编程的平台,但是它却是完全非标准的[而且]和其他设备完全不一样。从而无法重用那些已经在台式机系统中已经做过的工作。这个是二号原型机。

真正的突破是三号原型机。我们从Broadcom拿到了另一种应用了ARM处理器的芯片,可以直接运行标准Linux。我们意识到终于可以做出能够满足所有的需求的机器了,这就是我们推向市场的产品。

黑一黑下一代黑客

RW: 八岁的孩子就开始用树莓派做项目了。这在你意料中吗,还是说让你意外了?

EU: 八岁是很好的年纪。我想每个人都会把自己开始编程的年龄定义成合适的年龄。我就是八岁开始编程的。某种程度上来说,孩子们所需要的只是年龄大到拥有相对完整的认知技能,或者说是解决问题的技能。也许在学校学一点数学就够了。

年龄大到可以计划任务,编程就是终极的计划任务。还是得有一定的智力基础去做这个事情。八岁的时候,大多数孩子在自己的思维上已经非常成熟了。另外还需要敏捷的身手,对更小的孩子来说还存在一个问题就是,他们还不够灵巧去使用键盘。

所以说,八岁是很好的年纪。你有合适的身体,有合适的心智,而且还处于生命中能轻松学习新知识的时候。你的大脑还具有非常大的可塑性,可以学习语言。。。

我的意思是,你要是想让你的小孩学习法语的话,八岁就开始教他,不要等到16岁才开始。正式的计算机教育有一个历史性的缺点,就是太晚开始了,然后就很惊讶为何学生们理解起来概念有困难。所以我认为越早接触越好,而八岁是奇妙的年纪。八岁,十岁,十二岁,十二岁可能都有点晚了。

我们基金会的CEO,Lance [Howarth],对初级教育特别热心。他真的认为这是一个实际的机会来做点非常特别的事情。

RW: 所以这是树莓派项目的目的,让小孩子们编程?

EU: 我想我们一直认为可以让孩子们玩编程只是举个例子。但是树莓派的目的是把这个东西做出来看看谁会买它。我们一直相信至少有一部分年轻的孩子会觉得它令人激动。现在我们已经有知识宽度和规模来支持孩子们玩它了。

[仅仅]做出一个像树莓派的平台和提供相关支持是有很大区别的,如果只是做出来的话,你会发现有1%的八岁孩子会喜欢它并且玩起来,不管你提供多或者少的支持。

我觉得现在基金会的一个实际的机会是,我们已经可以承担得起开发教材了,我们还可以提倡培训这方面的教师。有个机会是我们可以吸引比1%更多的孩子。还有个机会是吸引那些没有独自处理复杂技术问题倾向的机灵小孩。如果能够提供良好的教程和让他们感兴趣的教材,就能够吸引10%,20%,50%,甚至更多的孩子。

我们认为80年代是[学习编程]的黄金年代,而实际上,只有很少一部分人学习编程并达到一定深度。大部分人也许可以写个几行,但是能够编写大型程序的还是很少见。

所以我认为我们目前有一个实际的机会,因为我们可以参与到教材和教师培训的级别,我们也许可以超越80年代。现在有更多的参与者,两性之间也更平等。在80年代,编程很大程度上是男孩们的事情,而这也能反映到我们的工程师社区构成上。我觉得现在有个很好的机会,让更多的女孩子接触电脑编程。这个是挂在枝头上垂得最低的果子了,做到这个,人数马上增加了一半。

机会有很多,我对树莓派最满意的地方就是我们已经有点规模可以吸引部分人的注意了。

每个人的派

RW: 关于像派这样的项目的潜在需求,对于你来说意味着什么?是不是有一天我们都会变成DIY黑客?

EU: 是的,我意思是,就是这样的。有非常大的这种需求。而且我认为有一条通向制作者社区的纽带。美国的制作者社区比英国成熟多了。我们也确实在举办制作者集会和黑客空间,但是差不多比美国落后了5年左右。

所以在开始讨论树莓派之后我发现了一件事情,在它获得国际关注的时候,我们发现我们受到一些非常稳定的社区的成员的追捧,他们喜欢各种各样的DIY活动:编织,或者,你知道的,木工。

所以,这也是为树莓派带来意外增长的其中一个因素。制作者们把它当作用来构建自己项目的模块。这太棒了!

RW: 你怎么看现在出现的主流硬件黑客文化?

EU: 我觉得,这太美妙了,不是吗?这是在软件工程领域里完全无法想到的。我接触这些之前就有软件背景,所以,实际上人们用树莓派制作的大多数很酷的东西都是硬件相关的,让我很惊讶。当然现在没那么吃惊了,不过一开始是有的。

我认为这是非常积极的趋势,基于所有这些因素。因为它给孩子们带来了相关的经验。在我看来,在屏幕上移动一下像素还是很酷的,不过事实上,它没有像80年代那样酷了。我觉得,在现实世界里移动一些物体,比如机器人,对于现在的孩子来说是非常酷的。

当有更多实用性的时候,就会吸引更多的女孩。确实存在一种潜在趋势,尝试和设计针对女孩子的科技活动。不过实际上这并不是关于女孩子,而是关于扩展用户的迫切要求。

有这样一小段-我之前谈过的关于有1%的小孩会觉得抽象的计算机编程很有趣。“让我们开始学习变量!”我就是他们其中一个。但是,那只是很小一部分,而且看起来更大部分是男孩子。我不知道是不是文化因素或其他的,但是看起来这个世界就是这样的。

在人们谈论追求实用性来吸引女孩子的时候,根本不关女孩子的事。而是吸引那一小部分男孩之外的所有人。不仅仅吸引女孩,也包括其他男孩。

从教育的角度来看有一件美妙的事情是,在现实世界里应用计算机做点实际的东西,自然而然会比仅仅在计算机本身上面做点事情有用多了。所以,这就提供了一个方式来吸引女孩子进入这个领域,同样也可以吸引更多的男孩子进入这个领域。

不再是一个人很好。能够加入到这波兴趣的浪潮中,和许多制作现实世界东西的人一起,也是很精彩的事情。我认识一个南加利福尼亚的小伙,他有两个兴趣就是倒腾派和制作他的锁链甲。有人做这些事情本身就是一件很美妙的事情。

分享你的派

RW: 关于吸引比1%更多人的“实用”项目,能举个例子吗?

EU: 整个机器人技术领域就是个很好的例子。有很多人基于派来制作小型机器人,让它们四周跑跑或做点事情。特别是现在,我们增加了摄像头模块,可以一定程度上实现计算机视觉。

我觉得其他基于摄像头的项目也会变得更活跃。那些从事野外摄影的人们,以及从事缩时摄影的人们,因为有了这个25美元的摄像头模块,应用范围宽了许多。还有红外版本的模块,所以你可以在晚上拍摄野生动物-写脚本在晚上拍摄相片,然后选择保存里面包含了动作的。这些都非常好。

我特别喜欢应用到高空气球的任何项目。环境监控-有一些英国的高中学生在IndieGoGo发起了一个叫AirPi的项目,这是一个污染监控防御系统,底层将用到树莓派。所以会有许多这样的项目,你可以用派来处理物理的,或化学的,或者生物的事情。-这些都是我认为有实用性的事情。这种项目也更容易向孩子们证明,这是值得他们关注的项目。

RW: 我们什么时候可以看到树莓派C型?

EU: 暂时还没有计划。我们目前都还在处理软件工作。我觉得我们还有机会通过调整软件来大幅提升系统性能,再优化一下。

如果我们现在就启动制作C型,将会抛弃250万使用目前平台的用户。所以我觉得,至少现在,我们决心要继续软件工作,因为这可以帮到所有已经在这个领域里的人。我们感觉通过软件优化还有很大的性能提升空间。

显然,我们同时也必须做一点[硬件方面]的事情。我真的不知道具体在什么时候。如果到了2017,2018,我们还在销售树莓派B型的话,那也挺糟糕的。但是,我认为我们也许在一年后再认真考虑后面要做什么。

RW: 很多人的项目同时用到了派和Arduino(一个DIY电子调试工具套件)。你在设计派的时候,有考虑类似Arduino的工具吗?

EU: 实际上没有,但是我们很早就意识到,媒体可能会倾向于把我们和Arduino看作竞争者。对于这件事情我们有点多疑,我觉得,因为我认为派和Arduino分别处理不同的事情,而且他们都做得很好。

我们并没有把它设计成配合Arduino工作,但是Arduino被设计成配合家用PC一起工作。所以,我们实际上为Arduino制作了一台非常低功耗的家用PC。所以好吧,只是巧合,我猜。

RW: 你在家里用树莓派做什么?工作中呢?

EU: 在家里,我把它当作一个媒体中心;这是树莓派一个非常普通的应用。有趣的事,有些从事消费电子的人,把它当作消费电子来用。我当然也是其中之一。

在工作中,我总是没有我想要的那么多时间来玩玩树莓派。通常在工作的时候如果在用派的话,那是因为我需要测试刚拿到的一些软件更新。大多数时候我用它来检查我花钱请的承包人是否把工作做好了。

我真心希望明年会有更多休息时间。有时我感觉,除了媒体中心之外,我参与制作了这么神奇的玩具,但是因为它太成功了,我都没有时间去好好玩玩它。

不过,看到这么多的人喜欢它,看到它被出现在各种不同的地方,也是很开心的。我听说在《生活大爆炸》中提到了我们,我要去找找是哪一集。它出现在所有的这些不可思议的地方。真是非常开心,看到这么多人把它放在心上,开始用它做点事情。

将树莓派打造成音乐播放服务器

几个月前,我发布了一篇文章《我对探寻终极音乐播放器的探寻》(My Quest to Build the Ultimate Music Player),在那篇文章里面描述了我对一款开源的音乐播放服务器Groove Basin断断续续将近4年的痛苦折腾过程。

它的客户端基于web页面,如下图:

你也可以在这里尝试它的在线demo版本。

如果你把它安装在树莓派里面,你可以把speakers附加上去,使用它你可以远程控制,也可以通过在浏览器中的点击“stream”就可以远程收听自己的音乐。

然而,在鼓捣这个之前,我需要指出的是,如果你在决定是否入手一台树莓派,答案是,不要。树莓派被过度夸大了,其实还有更好的选择。这就是为什么我写这篇教程。在这里我要提到一个,就是Beagle Bone Black 。

你可以用这个来代替的原因如下:

更快的cpu和内存 1GHz处理器,而非700MHz DDR3内存,而非SDRAM

它可以直接运行Debian和Ubuntu armhf,而非运行类似Respbian的系统。在Debian已经有armhf端口的情况下仍然存在Raspbian简直就是愚蠢的行为。如果你只是安装普通的armhf Ubuntu在Beagle Bone Black上,这篇文章的剩余部分就没有必要再看下去了,你只需 apt-add-repository ppa:andrewrk/libgroove apt-get update apt-get install libgroove-dev 然后你就已经做完了。实际上,libgroove在Debian Testing和Ubuntu Utopic Unicorn两个版本上面已经存在了,所以一年半载之内这些发行版升级了,你也无需添加额外的个人软件包档案

Debian官方不推荐树莓派,因为它在运行时候需要非自由软件。Debian特别推荐了Beagle Bone Black。

如果你像我一样,同时在你收到更好建议之前不幸的买了一台树莓派,你需要跳过很多坑来让它运行起来。这篇文章就会手把手的交给你怎么绕过所有的坑,而无需自己浪费时间去自己费劲琢磨。

这篇文章开始时会假设你手上有一台全新的甚至还未装操作系统的树莓派。如果你已经做过了这一步,可以直接跳到下一部分。

目录

安装Raspbian并获取SSH连接

转到树莓派下载页面,下载Raspbian Debian Wheezy种子(或者直接下载,如果你不是大虾的话)

解压压缩包,得到img文件后将其刷入你有的最大的SD卡上面。因为你需要很大的空间存放音乐!

我是在Ubuntu上面,我所需要做的仅仅是在文件管理器中右击img文件, open with, Disk Image Writer:

我确信做这一步有很多种方式,我使用的这种方式只是对我来说最简单的。

这步完成后,找一个键盘、显示器和HDMI线,你就可以看到你正在做的事情了。我们的目标是可以尽快的使用上SSH连接,从而使树莓派可以除了电源线和网线之外什么都不用插就可以工作。

树莓派第一次启动后它会给您一个清单,包含你可以做的事情。下面是我做的事情:

Expand the file system to fit the full SD card.

Set pi user password.

Advanced Options, enable SSH server.

现在我们将其设置为每次启动时候都有固定ip。下面是我使用的设置,你可以按照自己的需要照猫画虎:

sudo vi /etc/network/interfaces

将 iface eth0 inet dhcp 代替为:

auto eth0 iface eth0 inet static address 192.168.1.99 netmask 255.255.255.0 gateway 192.168.1.1

现在我们可以拔除TV和键盘了,我们已经无须这些废物了。直接插入网线然后开机吧!

在你现在用的电脑上面你可以用ssh连接到树莓派上面了,就像这样:

ssh pi@192.1.68.1.99

我喜欢在我的 ~/.ssh/config 文件中添加传送门,就像这样:

host pi hostname 192.168.1.99 user pi

它需要你输入密码,但我们也可以解决:

ssh-copy-id pi

现在连接树莓派已经可以ssh pi这么简单了。

你需要做的第一件事就是更新所有的过时的软件到最新版:

sudo apt-get update sudo apt-get dist-upgrade

额,我在这里看到了什么?

Unpacking replacement raspberrypi-bootloader

Bootloader都被代替了?最好重启一下看看他是不是还能用。

好了,这个时候我们还是可以通过ssh连接上我们的树莓派,所有的软件包也完全更新了。

安装Groove Basin

首先安装一些软件包:

sudo apt-get install htop vim git cmake screen

建议你在做这个的时候在screen或者tmux这类环境下,因为一旦你的网络断了,我们的命令还可以继续。这也让我们可以在树莓派运行时候去做点其他的事情。

我需要一次解释清楚如何执行这一步。然而,记住有3个重要的编译需要用好长时间,所以如果你想同时开始这3个任务并且离开电脑8个小时或更久,你可以跳过这个教程并开始同时执行它们了。这3个软件的make步骤为:

SDL2

libav

Node.js

libgroove,第一部分

得到libgroove源代码,在源码里面创建build文件夹:

cd git clone https://github.com/andrewrk/libgroove cd libgroove mkdir build cd build

我们在debug模式build,这样在有任何错误的时候就可以得到有用的堆栈信息。

记住,你可以跳过下面的步骤,它仅花一两分钟时间就可以完成,这些命令仅供参考,我也已经在下面贴出了在我机器的输出:

cmake .. -DCMAKE_BUILD_TYPE=Debug

Installation Summary ——————– * Install Directory : /usr/local * Build libgroove : yes * Build libgrooveplayer : yes * Build libgrooveloudness : yes * Build libgroovefingerprinter : yes Bundled Dependencies ——————– * SDL2 : using system library * libav : using system libraries * libebur128 : using system library System Dependencies ——————- * C99 Compiler : OK * threads : OK * SDL2 : OK * ebur128 : OK * chromaprint : OK * libavformat : OK * libavcodec : OK * libavfilter : OK * libavutil : OK

信息显示缺失了以下库:

chromaprint

libebur128

SDL2

libav

我们可以让安装libgroove自动解决依赖问题,但是在系统上面事先安装这些依赖的软件包更简单。我们就这么做。

chromaprint

幸运的是,chromaprint已经在软件仓库里面了:

sudo apt-get install libchromaprint-dev

libebur128

下一步我们编译最简单的一个,libebur128.

cd git clone https://github.com/jiixyj/libebur128 cd libebur128 mkdir build cd build cmake .. -DCMAKE_BUILD_TYPE=Debug

矮油,好像我们缺少了一些依赖软件:

– checking for module ’speexdsp’ – package ’speexdsp’ not found 最好安装这个: 重新试试那一行配置行: cmake .. -DCMAKE_BUILD_TYPE=Debug

– checking for module ’speexdsp’ – found speexdsp, version 1.2rc1 – speexdsp library dirs: – speexdsp cflags: – speexdsp include dirs: – speexdsp libraries: speexdsp – speexdsp ldflags: – status found / disabled – – queue.h: yes using system copy of queue.h – speexdsp: yes no – not building tests, set ENABLE_TESTS to ON to enable – Configuring done – Generating done – Build files have been written to: /home/pi/libebur128/build

这样好多了。

现在编译并安装源码:

make sudo make install

[ 50%] Built target ebur128 [100%] Built target ebur128_static Install the project… – Install configuration: ”Debug” – Up-to-date: /usr/local/include/ebur128.h – Installing: /usr/local/lib/arm-linux-gnueabihf/libebur128.so.1.0.1 – Installing: /usr/local/lib/arm-linux-gnueabihf/libebur128.so.1 – Installing: /usr/local/lib/arm-linux-gnueabihf/libebur128.so – Installing: /usr/local/lib/arm-linux-gnueabihf/libebur128.a

由于Debian cmake包中的一个bug,它把库文件放在 /usr/local/lib/arm-linux-gnueabihf/

我们来改一下:

sudo mv /usr/local/lib/arm-linux-gnueabihf/* /usr/local/lib/ sudo rmdir /usr/local/lib/arm-linux-gnueabihf sudo ldconfig

SDL2

接下来我们让SDL2跑起来。树莓派自带的SDL有什么问题?是因为它自带的是1.2版本,而libgroove是基于版本2的。

在SDK下载页面找到最新的SDL2的源码URL:

cd wget https://www.libsdl.org/release/SDL2-2.0.3.tar.gz tar xvf SDL2-2.0.3.tar.gz cd SDL2-2.0.3/

SDL需要音频后端才可以工作,现在我们在配置命令之前先安装它:

sudo apt-get install libasound2-dev

我们只需要SDK2的音频特性,而且实际上,它的视频的一些功能还会带有编译的问题。所以我们在configure的时候禁止掉所有我们不需要的功能:

./configure –enable-audio –disable-video –disable-render –disable-events –disable-joystick –disable-haptic –disable-power –disable-file –disable-timers –disable-loadso –disable-cpuinfo

这步要费一些时间,但是在完成后,你可以看到这样的一行:

Audio drivers : disk dummy oss alsa(dynamic)

这很重要,你除了有声卡驱动外还有disk、dummy和oss

make

找点事情做,这一步要个把小时才可以完成。或者如果你想让你的树莓派投降,你可以跳过本教程,同时编译libav。但是我要假设你正在按顺序做这些,而且让你自己来决定如何跳过这篇文章。

这个时候,冗长的编译过程终于成功了,我们可以安装SDL了:

sudo make install

libav

我们回到home文件夹(或者我们决定安装的目录):

cd

从libav下载页面(http://www.libav.org/download.html)得到libav最新的版本10的URL:

wget http://www.libav.org/releases/libav-10.1.tar.gz tar xvf libav-10.1.tar.gz cd libav-10.1/

先做些预备工作,然后开始configure:

sudo apt-get install libmp3lame-dev libvorbis-dev ./configure –enable-shared –enable-debug –disable-static –enable-gpl –enable-libmp3lame –enable-libvorbis

同样,树莓派还是会非常困难的完成configure命令,特别是你同时也在编译SDL2,所以如果它用了一两分钟,不要着急

make

这个过程要长达8个小时。认真的说,我会开始这个过程后直接去睡觉。如果你希望同时开始所有的编译,你可能会同时开始Node.js的编译。

libav编译成功后:

sudo make install

我们终于完成了libgroove的依赖软件的安装,我们终于可以开始安装libgroove本身了。

libgroove,第二部分

这个时候,你已经等了很长时间了,树莓派也已经编译libav和SDL2成功,你也已经安装了它们。如果这些还没做完,你需要搞明白为什么,然后在接下来这个教程开始之前将其修复。

sudo ldconfig cd ~/libgroove/build/ cmake .. -DCMAKE_BUILD_TYPE=Debug

Installation Summary ——————– * Install Directory : /usr/local * Build libgroove : yes * Build libgrooveplayer : yes * Build libgrooveloudness : yes * Build libgroovefingerprinter : yes Bundled Dependencies ——————– * SDL2 : using system library * libav : using system libraries * libebur128 : using system library System Dependencies ——————- * C99 Compiler : OK * threads : OK * SDL2 : OK * ebur128 : OK * chromaprint : OK * libavformat : OK * libavcodec : OK * libavfilter : OK * libavutil : OK

这个输出比前面的好看多了。

make

这个make相对而言应该快多了。

sudo make install sudo ldconfig

这个时候我们已经把必要的库安装好了:

ls /usr/local/lib/

libavcodec.so libebur128.a libgroove.so.4 libavcodec.so.55 libebur128.so libgroove.so.4.1.0 libavcodec.so.55.34.1 libebur128.so.1 libSDL2-2.0.so.0 libavdevice.so libebur128.so.1.0.1 libSDL2-2.0.so.0.2.1 libavdevice.so.54 libgroove.a libSDL2.a libavdevice.so.54.0.0 libgroovefingerprinter.a libSDL2.la libavfilter.so libgroovefingerprinter.so libSDL2main.a libavfilter.so.4 libgroovefingerprinter.so.4 libSDL2.so libavfilter.so.4.2.0 libgroovefingerprinter.so.4.1.0 libSDL2_test.a libavformat.so libgrooveloudness.a libswscale.so libavformat.so.55 libgrooveloudness.so libswscale.so.2 libavformat.so.55.12.0 libgrooveloudness.so.4 libswscale.so.2.1.2 libavresample.so libgrooveloudness.so.4.1.0 pkgconfig libavresample.so.1 libgrooveplayer.a python2.7 libavresample.so.1.1.0 libgrooveplayer.so python3.2 libavutil.so libgrooveplayer.so.4 site_ruby libavutil.so.53 libgrooveplayer.so.4.1.0 libavutil.so.53.3.0 libgroove.so

Node.js

我们现在需要Node.js。从它的下载页面(http://nodejs.org/download/)找到最新的stable源码

cd wget http://nodejs.org/dist/v0.10.29/node-v0.10.29.tar.gz tar xvf node-v0.10.29.tar.gz cd node-v0.10.29/ ./configure make

编译过程要持续数个小时。

安装完成后需要执行:

sudo make install

Groove Basin

现在是开始音乐播放服务器Groove Basin的时间了。

cd git clone https://github.com/andrewrk/groovebasin cd groovebasin/ npm run build

这个过程要持续数分钟,它会下载和编译Groove Basin依赖的软件。

我们建立音乐目录,如果没有的话:

mkdir ~/music/

把你所有的音乐都拷贝到这个目录下。

node lib/server.js

现在需要启动服务器了。如果你想要改变configure选项,使用Ctrl+C结束服务器然后编辑 config.js

享用吧!请自由的关注GitHub上面的GrooveBasin主页,报告bug report或者需要的特性,或者加入在irc.freenode.org上面的 #libgroove 讨论获取故障帮助。

我们对pull request非常欢迎,特别是可以让groovebasin.com看起来更漂亮的Pull request。

红外感应模块+蜂鸣器实现简易报警

拿到了一个红外感应模块HC-SR501,于是就用它和蜂鸣器简单试验了下。主要是试验一下这个红外感应模块的功能,所以代码也写的很随便啦,逻辑上也欠考虑。

实现基本功能:运行脚本后,感应模块每隔一定时间检测,如有人靠近,则发出哔哔报警声,并在屏幕打印提示信息,人若离开,则停止鸣叫。

简易的电路图如下:

Python脚本:

import RPi.GPIO as GPIO import time #初始化 def init(): GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(12,GPIO.IN) GPIO.setup(21,GPIO.OUT) pass #蜂鸣器鸣叫函数 def beep(): while GPIO.input(12): GPIO.output(21,GPIO.LOW) time.sleep(0.5) GPIO.output(21,GPIO.HIGH) time.sleep(0.5) #感应器侦测函数 def detct(): #因为是仅仅试验,所以只让它循环运行100次 for i in range(1,101): #如果感应器针脚输出为True,则打印信息并执行蜂鸣器函数 if GPIO.input(12) == True: print “Someone isclosing!” beep() #否则将蜂鸣器的针脚电平设置为HIGH else: GPIO.output(21,GPIO.HIGH) print “Noanybody!” time.sleep(2) time.sleep(5) init() detct() #脚本运行完毕执行清理工作 GPIO.cleanup()

作者sxmcody,转自百度贴吧。

Mac OSX下给树莓派安装Raspbian系统

先到树莓派的官方网站去下载一个系统镜像,推荐下载Raspbian。

下载完成后得到一个img镜像:

[zhangshenjia@mac: pi]$ls -lh total 3788800 -rw-r–r– 1 zhangshenjia staff 1.8G 2 9 03:44 2013-02-09-wheezy-raspbian.img

插入SD卡,用df命令查看当前已挂载的卷:

[zhangshenjia@mac: pi]$df -h Filesystem Size Used Avail Capacity Mounted on /dev/disk0s2 112Gi 96Gi 15Gi 87% / devfs 183Ki 183Ki 0Bi 100% /dev map -hosts 0Bi 0Bi 0Bi 100% /net map auto_home 0Bi 0Bi 0Bi 100% /home /dev/disk1s1 15Gi 2.3Mi 15Gi 1% /Volumes/未命名

对比Size和Name可以找到SD卡的分区在系统里对应的设备文件(这里是/dev/disk1s1),如果你有多个分区,可能还会有disk1s2之类的。使用diskutil unmount将这些分区卸载:

[zhangshenjia@mac: pi]$diskutil unmount /dev/disk1s1 2 Volume 未命名 on disk1s1 unmounted

通过diskutil list来确认设备:

[zhangshenjia@mac: pi]$diskutil list /dev/disk0 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *121.3 GB disk0 1: EFI 209.7 MB disk0s1 2: Apple_HFS Macintosh HD 120.5 GB disk0s2 3: Apple_Boot Recovery HD 650.0 MB disk0s3 /dev/disk1 #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *15.8 GB disk1 1: Windows_NTFS 未命名 15.8 GB disk1s1

使用dd命令将系统镜像写入,需要特别特别注意disk后的数字,不能搞错!

(说明:/dev/disk1s1是分区,/dev/disk1是块设备,/dev/rdisk1是原始字符设备)

[zhangshenjia@mac: pi]$dd bs=4m if=2013-02-09-wheezy-raspbian.img of=/dev/rdisk1

经过几分钟的等待,出现下面的提示,说明SD卡刷好了:

462+1 records in 462+1 records out 1939865600 bytes transferred in 163.133220 secs (11891297 bytes/sec)

用diskutil unmountDisk卸载设备:

[zhangshenjia@mac: pi]$diskutil unmountDisk /dev/disk1 Unmount of all volumes on disk1 was successful

现在就可以拔下SD卡,插到树莓派上启动系统了。第一次启动会进入Raspi-config,后面配置方法同其他平台一样,参考使用raspi-config配置树莓派即可。