Category Archives: Raspberry Pi

【RPi树莓派使用指南】树莓派官方7寸屏入门指南

1. 引子

在树莓派官方触摸屏发布之前,市场上可用的屏幕有以下三种:

  • 直接和GPIO插口对接的屏幕,使用SPI与CPU进行通信。需要特殊的驱动程序将framebuffer的内容发送到LCD控制器上,一般带有触屏功能,大小以3.5寸为主流。受限于SPI通信速度,刷新速率不高;
  • 专用USB接口的屏幕,如RoboPeak Mini USB Display。这类屏幕通过USB连接,需要本地运行驱动程序;
  • 通用LCD屏幕,通过HDMI和树莓派连接。因其通用性不需要特殊的驱动程序,但是很多都不支持触屏功能,而且都需要额外的转接板,体积较大;

rpilcd-front-with-base
▲ 图.  树莓派官方7寸屏实拍

我自己的需求是将树莓派作为信息显示中心,在屏幕上显示我的HP服务器的运行信息,另外提供一些快捷的传感器监控和控制操作接口。最初一直在官方屏幕和HDMI屏幕之间犹豫,最后还是选择了官方触摸屏。归结起来主要有几个原因:

  • 官方屏的LCD模组最有保证,淘宝上的HDMI LCD一般成像质量不高;
  • 官方屏的触摸功能在所有方案中是支持的最好的,有十点电容触摸(目前Raspbian还只支持单点,以后会升级),且不需要额外驱动。而HDMI接口的LCD如果有触摸功能,都需要额外接一根USB用于提供触摸控制;
  • 官方触屏和树莓派3可以直接通过铜柱物理连接,无需额外的驱动电路板。连线也非常少,只需要一根DSI软排线和供电接口即可。

总体上来说,虽然官方屏的价格高了一些,但是却是所有方案中最可靠、简洁的,所以最后也没有多犹豫就从网上下单了。rpilcd-front-without-base
▲ 图. 树莓派官方LCD屏实拍 – 正面

Read more »

【RPi树莓派使用指南】树莓派3代介绍及历代树莓派比较

树莓派自从12年02月最初发布之后,目前已突破800万的总销量。作为树莓派的早期支持者,云飞实验室也一直在关注着它的发展。如今在经历了4年的设计迭代之后,树莓派于16年02月推出了最新一代的树莓派3。树莓派3的本次发布与之前的2代只相差了整整一年时间,但是得益于目前芯片行业的快速发展,树莓派3的性能将会有很大的提升。这主要表现在以下几点:

  • 更高的处理速度。树莓派3首次采用了64位处理器:基于Cortex-A53的博通BCM2837。BCM2837为四处理器核心,主频也由树莓派2的900MHz提高到了1.2GHz。根据官方提供的数据,这将使树莓派3的处理速度较2代提高50%。如果和1代的700MHz单核相比,提升大约在3 – 4倍。更高的CPU速度使得树莓派可以胜任更大负荷的运算工作:如科学计算,机器人路径规划等。
  • 更高的互联性。树莓派3使用了集成蓝牙4.0和WiFi的设计。集成通信的设计的意义是多方面的。首先,使用者无需再购买额外的USB设备,从一定程度上来说,鼓励了用户在自己的设计中使用这些通信功能;其次,集成的通信模块可以进行更好的功耗管理,同时IO吞吐的性能也会得到提高;最后,可以更进一步的优化内核,只针对板载的芯片专门进行优化。避免可能出现的兼容性或者未优化的驱动导致通信性能下降问题。

rasp-pi-3-board
图1. 树莓派3外观

rasp-3_Model_B
图2. 树莓派3外观 (设计渲染图) 

从这两点来看,树莓派3代将很有可能再次扩展自己的使用领域,同时在物联网和机器人中得到应用。同类产品如果还是单从硬件角度进行提升,已经无法再与之竞争。因为性能的显著提升且维持原价,在树莓派2代出来时没有入手的玩家,这一次也难免蠢蠢欲动。同时因其性价比的纯粹提升,树莓派1代与2代的销量会大幅下降。因为2代只发布了1年,所以很可能成为绝版,如果出于收藏的目的可以尽早买之。总体上来说,这次树莓派3已经具备了IoT所需要的基本条件(性价比,互联性,体积与功耗)。今后的方向可能是增加更多的IO功能,如PWM和ADC等,是被大多数玩家需要却还没有被支持的。

以下是我对历代树莓派版本的整理与对比:

表1. 发布时间及主要特点

型号 发布时间 主要特点
PI 1 Model B 2012年02月 第一代树莓派。Model A不含以太网。
PI Compute Module 2014年04月 模块化设计,使用SODIMM大小的金手指接口。
PI 1 Model B+ 2014年07月 增加了2个USB接口,增加了9个GPIO:26脚->40脚。
使用MicroSD卡。
PI 2 Model B 2015年02月 升级处理器:四核900MHz Cortex-A9。升级为1GB RAM。
PI Zero 2015年11月 无网络通信功能,廉价,小尺寸。
PI 3 2016年02月 升级处理器:64bit四核1.2GHz Cortex-A53。
内置蓝牙4.0和WiFi。

 

表2. 树莓派历代版本硬件比较

型号 处理器 主频 内存 GPIO 互联性 功耗级别
PI 1 Model B BCM2835
(ARM11)
700MHz 512MB 26 2 USB
HDMI
10/100M Ethernet
700mA (3.5W)
PI Compute Module BCM2835
(ARM11)
700MHz 512MB 0 无。需要配合扩展板使用。 200mA (1W)
PI 1 Model B+ BCM2835
(ARM11)
700MHz 512MB 40 4 USB
HDMI
10/100M Ethernet
600mA (3W)
PI 2 Model B BCM2836
(Cortex-A9 四核)
900 MHz 1GB 40 4 USB
HDMI
10/100M Ethernet
800mA (4W)
PI Zero BCM2835
(ARM11)
1 GHz 512MB 40 (无排针) 1 Micro-USB
Mini HDMI
无板载网卡
160mA (0.8W)
PI 3 BCM2837
(Cortex-A53 64位四核)
1.2 GHz 1GB 40 4 USB
HDMI
Bluetooth 4.1
WiFi 802.11n
10/100M Ethernet
800mA (4W)

 

Read more »

【RPi树莓派使用指南】在树莓派上安装MySQL数据库

在嵌入式Linux平台下如果需要使用数据库功能,一般会选择SQLite或MySQL。SQLite是轻量级、基于文件的关系数据库,系统资源占用较少;但是SQLite的缺点是不支持远程部署和访问。对于大多数应用,SQLite是很易用的数据库,我之前就使用过它开发过一套生产管理系统;但是当需要远程访问数据并提供数据库安全时,MySQL则是更好的选择。考虑到树莓派的性能局限,其本身并不适合集成数据展示功能(无论是基于GUI的还是基于web的)。于是可以将其只作为数据记录平台,而将数据的整理、展示在PC端完成。这种模式下,树莓派可以作为数据采集主机,将有线 / 无线节点的数据进行集中采集记录,再通过PC进行分析和展示。在这样的初衷驱使下,我研究并整理了如何在树莓派上安装和使用MySQL。

1. 安装MySQL
使用管理员权限运行apt-get获取最新的MySQL及Python编程接口(之后用于数据库编程):

$ sudo apt-get install mysql-server python-mysqldb

安装过程中需要输入root管理员的密码,该密码之后用于访问数据库系统。

2. 测试MySQL
通过以下命令运行MySQL的命令提示系统,并输入在安装过程中设置的密码:

mysql -u root -p

Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 47
Server version: 5.5.41-0+wheezy1 (Debian)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

查看当前已建立的数据库:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

3. 创建一个新的数据库和表单
以上数据库都是系统建立的数据库,要想开始插入数据,首先需要建立新的数据库和表单。这里假设要实现一个CPU温度记录的功能,存放在名为”sensordb”的数据库中。使用以下命令建立数据库:

mysql> CREATE DATABASE sensordb;
Query OK, 1 row affected (0.00 sec)

查看数据库是否建立成功:

mysql> SHOW databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sensordb           |
+--------------------+
4 rows in set (0.01 sec)

在sensordb数据库下创建一个表单(table),该表单包含两个域(fields):日期和当天平均CPU温度。时间域使用的数据格式为DATE;而温度使用DECIMAL(4,1),即最大三位整数加一位小数。

mysql> USE sensordb;
Database changed

mysql> CREATE TABLE cputemptable(recordtime DATE, temp DECIMAL(4,1));
Query OK, 0 rows affected (0.03 sec)

查看表单是否建立成功:

mysql> SHOW TABLES;
+--------------------+
| Tables_in_sensordb |
+--------------------+
| cputemptable       |
+--------------------+
1 row in set (0.00 sec)

查看表单的域名称与类型:

mysql> DESCRIBE cputemptable;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| recordtime | date         | YES  |     | NULL    |       |
| temp       | decimal(4,1) | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

4. 向数据库中插入测试数据
在上一步中已经成功建立了用于CPU温度采集的数据库和表单,但是因为没有任何数据,所以该表单中没有任何内容。现在通过手动插入的方式向该表单中插入若干数据,测试是否可以正常运行。

mysql> INSERT INTO cputemptable
    -> values('2015-03-25', 36.5);

mysql> INSERT INTO cputemptable
    -> values('2015-03-26', 39.5);

以上每条如果操作成功,都回返回提示:

Query OK, 1 row affected (0.00 sec)

5. 查看数据库操作的结果
为了验证以上数据是否成功插入,可以通过select语句检索数据库:

mysql> SELECT * FROM cputemptable;
+------------+------+
| recordtime | temp |
+------------+------+
| 2015-03-25 | 36.5 |
| 2015-03-26 | 39.5 |
+------------+------+
2 rows in set (0.00 sec)

可以看到之前的两条数据已经成功插入到cputemptable数据表中。

最后使用quit退出交互系统:

mysql> quit
Bye

整个过程下来,发现MySQL在树莓派上的部署与操作与在桌面Linux平台上几乎没有差别。这里唯一需要注意的是,因为树莓派的硬件资源有限,所以在配置MySQL的优化选项时,需要降低其对系统资源的使用。具体配置细节在我亲自研究试验之后再进行补充。

下篇预告:在树莓派上使用Python进行MySQL数据库编程

【RPi树莓派使用指南】树莓派常见问题整理与解答

这篇博文整理了在使用树莓派的过程中常见的问题和解答,以及我自己在使用时遇到的问题与总结,供树莓派爱好者快速查阅。本文根据需要不断更新,也欢迎读者留言提问与补充。

一、基本操作与管理

Q: 树莓派的默认登录密码是什么?
A: 用户名: pi,密码: raspberry

Q: 树莓派如何解锁root?
A: 解锁方法如下:

#设置root密码
$sudo passwd root

#解锁root用户
$sudo passwd --unlock root

#切换当前用户到root
$su root

Q: 如何启动树莓派的图形界面?
A: 命令行中输入startx。如果要设置开机启动默认为图形模式,可使用 raspi-config 命令进行配置。

Q: 如何格式化输出当前系统时间?
A: 使用 date -d today +“格式化参数” 。如下例所示,引号内为格式化字符串,可自行修改为需要的格式:

date -d today +"%Y-%m-%d %H:%M:%S"

Q: 如何读取树莓派CPU和GPU的温度?
A: 查看CPU温度(读数除以1000):

$cat /sys/class/thermal/thermal_zone0/temp

查看GPU温度:

$/opt/vc/bin/vcgencmd measure_temp

Q: 如何修改树莓派HDMI显示的分辨率?

A: 修改SD卡中的 config.txt  配置文件,配置方法见此处

Q: 树莓派如何设置静态IP地址?
A: 修改 /etc/network/interfaces  配置文件,配置方法为:

iface eth0 inet static
address 192.168.1.100  # Static IP Address
netmask 255.255.255.0  # Netmask
gateway 192.168.1.1    # Gateway

Q: 如何查看树莓派当前进程与CPU使用情况?
A: 查看所有进程:ps -a ,查看CPU当前使用情况:top

Q: 如何查看树莓派当前内存及硬盘使用情况?
A: 使用 free 命令查看内存使用情况,也可以使用 free -m 以MB为单位显示。对应的可以使用 df 或者 df -m 查看硬盘使用情况。

Q: 如何查看树莓派已载入的模块和已加载的USB设备?
A: 分别使用 lsmod lsusb 命令。如果要查看所有加载的设备,直接输入 ls /dev 查看设备虚拟文件夹。

Q: 树莓派支持哪些USB摄像头?
A: 见 RPi USB Webcameras。支持的较好的还是罗技和微软的低分辨率型号。有些摄像头功耗较大,需要外部供电。

Q: 树莓派支持哪些USB无线网卡?
A: 见 RPi USB Wi-Fi Adaptors。推荐EDUP的迷你WiFi网卡以及树莓派官方销售的配套网卡。

Q: 树莓派如何配置无线网络?

A: 分为两步:1、设置wlan0接口,2、设置WiFi配置文件。

第一步,在树莓派命令行中输入:sudo vim /etc/network/interfaces

在打开的文件中添加:

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

第二步,在树莓派命令行中输入:sudo vim /etc/wpa_supplicant/wpa_supplicant.conf

在打开的文件中末尾添加WiFi ssid和密码:

network={
ssid="无线网络ssid"
psk="无线网络密码"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
}

插入无线网卡,重启树莓派即可。

Q: 树莓派如何和电脑之间传输数据?
A: 树莓派默认打开了SFTP服务,只需要使用专用的FTP软件(如 FlashFXP),并在登陆时选择SFTP方式登陆即可,连接URL填写树莓派的IP地址,而登陆的账号密码和开机密码相同。

Q: 树莓派兼容的SD卡?
A: 该页面给出了所有树莓派可以使用的SD卡型号和大小:RPi_SD_cards

二、多媒体

Q: 树莓派如何播放MP3音乐?
A: 因为树莓派没有音频输出,首先需要配一个USB声卡或者专用的Walfson扩展板。之后安装 mplayer 音乐播放器 sudo apt-get install mplayer。使用以下命令将当前目录下的所有MP3文件创建为一个Playlist:

find ./ -type f -iname "*.mp3" > playlist.m3u

Q: 树莓派如何播放视频?
A: 安装 omxplayer,支持 1080P 的 AVI 和 MP4 硬解码。

三、应用开发

Q: 树莓派支持哪些编程语言?
A: 树莓派自身包含了gcc / g++ 4.6 编译器,所以支持C和C++的开发;不过我推荐使用的语言还是Python,树莓派内置两个版本的Python,分别为 Python 2.7 和 Python 3.2。Python对于网络和串口的开发也有对应支持,而且也有支持Python的GPIO库 (RPi.GPIO)。

Q: 树莓派如何连接Arduino?
A: 三种方法,第一种为直接使用USB线缆进行连接,对于使用独立USB串口芯片的型号,在Linux中的显示名称为 /dev/ttyUSB0, 而对于使用另一片Arduino进行USB通信的型号显示为 /dev/ttyACM0;第二种为使用树莓派的IO串口进行通信,此方法的相关配置见此处;第三种方法还可以使用无线模块进行远程通信。

Q: 树莓派如何使用TTS功能?
A: 首先需要树莓派具有音频输出设备(如USB声卡)。下载festival程序库,sudo apt-get install festival。使用方法为:

$echo "Do not touch me. I am dangerous!" | festival --tts
$festival --tts Simple_Test.txt

Q: 如何操作树莓派的GPIO?
A: 可以使用RPi.GPIO, WiringPI或bcm2835 c库三种方法。我在另一篇博文”【RPi树莓派使用指南】树莓派接口定义及GPIO驱动方法“里详细介绍了这三种方法。

Q: 树莓派如何支持模拟量采集?
A: 目前还没有标准方案,不过可以通过与Arduino的通信实现模拟量采集及PWM输出功能。

Q: 树莓派如何安装OpenCV?
A: 执行以下命令安装OpenCV及Python支持库。

$sudo apt-get install libopencv-dev python-opencv

Q: 树莓派如何编译Kernel?
A: 见官方的“树莓派编译指南”及Argu的“树莓派 Kernel 编译笔记”。

【RPi树莓派使用指南】Raspberry PI网络配置与SSH远程登录

树莓派虽然支持鼠标、键盘和显示屏等交互外设,但是每次使用时都要连接很多线缆,很不方便。而使用远程登陆就不会有这些不便。之前在 【RPi树莓派使用指南】使用VNC远程查看桌面 一文中介绍了远程查看桌面的方法,但是远程查看桌面会占用大量网络带宽,影响操作速度。对于不需要查看图形桌面,只需要使用terminal的情况,这里再介绍一下使用SSH远程使用树莓派控制台的方法。

在配置远程登陆之前,最好将树莓派的IP地址由 DHCP 改为 静态IP 地址,这样可以保证树莓派每一次上电后在路由器上注册的地址是一致的,从而在远程登陆时不需要再去确认树莓派的当前IP。配置的方法是修改网络配置文件:

sudo nano /etc/network/interfaces

将eth0的相关配置由 dhcp 修改为 static,并增加要设置的静态IP地址、子网掩码和网关地址:

iface eth0 inet static
address 192.168.1.100  # Static IP Address
netmask 255.255.255.0  # Netmask
gateway 192.168.1.1    # Gateway

重新启动树莓派使配置生效。

远程登陆的软件推荐使用轻量级的PuTTY,该软件是绿色、单个文件的程序,其下载地址为:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

下载完成后运行PuTTY,输入树莓派的地址,并将连接模式选择为SSH(默认):

140910_puTTY
Figure 1.1  PuTTY的设置界面

点击 Open 建立连接,如果弹出警告窗口直接按确认即可。如果连接无误,将会看到输入用户和密码的提示,此时输入用户名 pi,密码 raspberry,即可完成远程连接的建立:

140910_puTTY2Figure 1.2  PuTTY登陆成功界面

连接成功之后,就可以像在本地操作树莓派一样通过 terminal 来操作树莓派了。

【RPi树莓派使用指南】树莓派连接HDMI显示器及配置方法

之前在”【RPi树莓派使用指南】使用VNC远程查看桌面“一文中介绍了在没有LCD的情况下,如何访问树莓派的图形桌面。不过有些时候还是外接显示屏比较方便,尤其是像用IDLE调试Python程序的时候。

因为树莓派只有AV和HDMI接口,而目前大多数电脑显示器都没有这两种接口,接电视上又不方便。淘宝上虽然有一些支持树莓派的显示模组,不过不仅价格贵,而且大多数尺寸都很小。

其实有一个很简单的方法,就是找一个迷你的液晶电视,因为现在的电视一般都会含有HDMI接口。我在ebay上就买到一个15.6寸的迷你液晶电视,可以直接用HDMI – HDMI线缆连接树莓派。其15.6寸的大小和有些笔记本一样大,携带也很便捷。对于基于pygame和Arduino的应用,有了显示屏确实会方便许多。

目前对普通电脑显示器增加HDMI接口也是趋势,相信不久也会有更多支持HDMI接口的液晶显示器了。当然对于普通的VGA显示器还可以使用VGA – HDMI转换器,不过这种方法不是很稳定,据说有些质量不好的转换器还会损坏树莓派的HDMI芯片,所以并不推荐。

DSC01302

不过在实际使用时,发现有时会出现屏幕显示不完全或字体过小的情况,此时就需要手动配置HDMI的显示分辨率。树莓派HDMI分辨率的配置方法如下:

Read more »

【RPi树莓派使用指南】树莓派电源系统解析

闲来无事,画了一张树莓派的电源系统结构:PI Power Tree

【RPi树莓派使用指南】树莓派串口通信介绍

树莓派的外部接口中含一路UART串行接口,利用该接口可以实现树莓派与Arduino、GPRS模块、GPS等其他外部系统的对接。

由于这一路串口兼做Linux的控制台输出口,所以在使用前必须先将调试输出功能关闭,方法如下:

1. 去除Kernel的启动信息

/boot/cmdline.txt 中,去除 parameterconsole=ttyAMA0,115200,并保存;

2. 去除Kernel的调试信息

同样在 /boot/cmdline.txt 中,去除 kgdboc=ttyAMA0,115200,并保存;

3. 关闭登陆提示

在 /etc/inittab 中去除 T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100,保存。

经过以上三步,就可以正常使用串行口了 (对于树莓派3,因为原生串口与蓝牙模块共用一组UART,还需要禁用蓝牙)。

(*)注意,因为树莓派与Arduino的串口电平不一致,必须使用电平转换芯片,或串联电阻限流,否则有可能损坏树莓派IO口!

编程时可以使用C语言以文件形式操作串口,也可以利用python的 python-serial 库进行编程。

这里以C语言为例,贴出示例代码:

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])  {
	int fd, len;
	fd = open("/dev/ttyAMA0", O_RDWR, S_IRUSR | S_IWUSR);
	char temp;

	while(1)  {

		len = read(fd, &temp, 1);

		if (len > 0)  {
			write(fd, &temp, 1);
			printf("%c", temp);
		}
		else  {
			usleep(10);
		}
	}

	close(fd);

	return 0;

}

该代码从串口中接收一个字符,接收成功后将该字符打印在控制台上并通过串口回发。

【修订历史】

v1.2   09/12/2014   调整了文字版式,增加了串口电平不一致的说明。
v1.1   09/11/2014   调整了代码的结构,增加了对代码的说明。