树莓派新手入门教程

作者: 阮一峰

日期: 2017年6月15日

树莓派(Raspberry Pi)是学习计算机知识、架设服务器的好工具,价格低廉,可玩性高。

本文根据我的亲身经验,介绍如何从零开始,搭建一个树莓派服务器,控制 LED 灯。你会看到,树莓派玩起来实在很容易。

我要感谢 100offer 对我提供赞助。100offer 是国内第一流的人力资源服务网站,本文结尾有他们的简介,最近想换工作的朋友可以看一下

一、型号

树莓派是一个迷你电脑,集成在一块电路板。目前,最新的型号有两个。

(1)Raspberry Pi 3代 B 型

(2)Raspberry Pi zero (含 zero w)

虽然后者便宜,但是少了许多接口(比如只有一个 USB 口),CPU 和内存都比较低,配件也少,因此推荐购买第3代的 B 型。以下都针对这个型号,但大部分内容对 zero 也适用。

二、配件

树莓派本身只是一个主机。要运行起来,必须有配件。

(1)电源

Micro USB 接口的手机充电器,就可以充当电源,但输出必须是 5V 电压、至少 2A 电流。充电宝当电源也没问题。

(2)Micro SD 卡

树莓派不带硬盘,Micro SD 卡就是硬盘。最小容量8G,推荐使用16G和32G的卡。

(3)显示器

树莓派有 HDMI 输出,显示器必须有该接口。如果有 HDMI 转 VGA 的转接线,那么 VGA 显示器也可以。我用的是一个 7 寸的液晶监视器。

不过,显示器只在安装系统时需要,后面可以 SSH 登录,就不需要了。

(4)无线键鼠

树莓派内置蓝牙,USB 或蓝牙的无线键鼠都可以用。

就像显示器一样,如果树莓派已经装好系统,而且只当作服务器,无线键鼠也可以不配。

三、电子元件

除了配件,下面的实验还需要一些电子元件。

(1)面包板(一块)

(2)连接线(若干)

注意,连接线必须一端是公头,一端是母头。

另外,最好也备一些两端都是公头的连接线。

(3)LED 二极管(若干)

(4)270欧姆的电阻(若干)

四、安装系统

如果商家已经装好系统,可以跳过这一步,否则需要自己安装操作系统。

官方提供的操作系统是 Raspbian,这是 Debian 系统的定制版。

官方还提供一个安装器 NOOBS,建议通过它来安装 Raspbian,相对简单一点。

  1. 下载 NOOBS
  2. 格式化 Micro SD 卡为 FAT 格式(操作指导)。
  3. 解压NOOBS.zip到 Micro SD 卡根目录。
  4. 插入 Micro SD 卡到树莓派底部的卡槽,接通电源,启动系统。

正常情况下,按照屏幕上的提示,一路回车,就能装好系统。

五、SSH 登录

安装系统后,树莓派就可以上网了(Wifi 或者网线)。这时,你要看一下它的局域网 IP 地址,可以使用下面的命令。


$ sudo ifconfig

然后,更改系统设置,打开 SSH 登录(默认是禁止的)。

接着,从另一台电脑 SSH 登录树莓派。下面的命令是在局域网的另一台电脑上执行的。


$ ssh [email protected]

上面代码中,192.168.1.5是我的树莓派的地址,你要换成你的地址。树莓派的默认用户是pi

树莓派会提示你输入密码。pi的默认密码是raspberry。正常情况下,这样就可以登录树莓派了。接着,就可以进行各种服务器操作了,比如修改密码。


$ passwd

后面的实验需要将用户加入gpio用户组。


$ sudo adduser pi gpio

上面的代码表示将用户pi加入gpio用户组。

六、安装 Node

为了运行 Node 脚本,树莓派必须安装 Node,可以参考这篇文章


$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt install nodejs

正常情况下,Node 8.x 版就已经安装成功了。


$ node -v
v8.1.0

七、点亮 LED

树莓派提供了一组对外的 IO 接口,称为 GPIO( 通用 IO 接口,General-purpose input/output)。

它的 40 个脚的定义如下图。

注意,左上角的第1针(3.3V)是一个方块,其他针脚都是圆的。将树莓派翻过来,背后可以看到 GPIO 有一个角是方的,通过这种方法就可以确认哪一个针眼是3.3V。

通过 GPIO ,树莓派可以与其他电子元件连接。下面根据 Jonathan Perkin 的文章,使用树莓派连接 LED 二极管。

这里需要用到面包板。本质上,面包板就是几根导线,上面开了许多可以连到导线的孔。

+极和-极是两根垂直的导线,标着1510这些数字的行,每一行都是一根水平的导线。导线与导线之间互不连接,另外,面包板的左右两半也是互不连接的。

然后,按照下面的图,将树莓派、面包板、LED 灯、电阻连起来。

上图中,红色导线表示电流的正极,从 GPIO 的第1针(3.3V)连到面包板。黑色导线表示电流的负极,从 GPIO 第三排的第6针(ground)连到面包板。它们连到面包板的哪个眼并不重要,但必须保证能组成一个完整的电路(上图的箭头流向)。注意,LED 二极管也有正负极,长脚表示正极,短脚表示负极。电阻没有正负极。

连接完成后,打开树莓派的电源,LED 应该就会亮起来了。

八、LED 控制脚本

下面,我们使用 Node 脚本控制 LED。

首先,将正极的导线从1号针脚(3.3V)拔出,插到第6排的11号针脚(上图的 GPIO 17)。这个针脚的电流是脚本可以控制的。

然后,在树莓派上新建一个实验目录,并安装控制 GPIO 的 Node 模块rpio。。


$ mkdir led-demo && cd led-demo
$ npm init -y
$ npm install -S rpio

接着,新建一个脚本led-on.js


// led-on.js
var rpio = require('rpio');

// 打开 11 号针脚(GPIO17) 作为输出
rpio.open(11, rpio.OUTPUT);

// 指定 11 号针脚输出电流(HIGH)
rpio.write(11, rpio.HIGH);

运行这个脚本,应该就会看到 LED 灯泡变亮了。


$ node led-on.js

再新建一个led-off.js脚本,只要改一行(完整代码看这里)。


// led-off.js
//...

// 指定 11 号针脚停止输出电流(LOW)
rpio.write(11, rpio.LOW);

运行这个脚本,LED 灯泡应该就会熄灭了。


$ node led-off.js

有了这两个脚本,让 LED 闪烁就轻而易举了。新建一个led-blink.js脚本。


// led-blink.js
var rpio = require('rpio');
rpio.open(11, rpio.OUTPUT);

function blink() {
  rpio.write(11, rpio.HIGH);
  setTimeout(function ledoff() {
    rpio.write(11, rpio.LOW);
  }, 50);
}

setInterval(blink, 100);

上面的脚本让 LED 每秒闪烁10次。


$ node led-blink.js

九、HTTP 服务器

通过控制 LED 可以做很多事,比如架设一个 HTTP 服务器,每当有人访问,LED 就闪烁一下。

首先,在刚才的目录里面装一个服务器模块。


$ npm install -S server

然后,新建一个脚本server.js(完整代码看这里)。


// server.js
var server = require('server');
var { get } = server.router;

// ...

server({ port: 8080 }, [
  get('/' ,  ctx => {
    console.log('a request is coming...');
    blink();
  }),
]);

console.log('server starts on 8080 port');

运行这个脚本。


$ node server.js

然后,再打开一个命令行终端,访问8080端口,LED 就会闪一下。


$ curl http://localhost:8080

好了,今天的教程就到这里。接下来,你可以自己探索,做更多的尝试,比如写一个测试用例脚本,只要测试失败 LED 就会长亮,或者组装一个8位的加法器

(正文完)

================================

下面是推广时间,向大家推荐求职就业的好帮手----100offer

如果你对现在工作不甚满意,希望寻找更好的职位,或者你已经有了很多工作邀请,感到无所适从,不知道哪个最合适自己,请尝试一下 100offer。它能让你节省精力,从海量机会中找到最适合自己的那个。

100offer 会对平台上的人才和企业进行严格筛选,让"最好的人才"和"最好的公司"相遇。点击这里注册,提交资料并通过网站对您的评估和配对后,就可以收获 5~10 个满足你要求的好机会。

(完)

留言(56条)

发现一个错别字:首先,将正极的导线从1号针脚(3.3V)拔出,查到第6排的11号针脚
插到,误写作查到,拼音输入法的错

这两天刚准备入手一个,阮大就写了一篇关于树莓派的。威武!开心!

@顾唐散人:

已经改正了,谢谢。

为啥js 能控制LED 我大学的是汇编控制LED

可以用 usb-ttl 线加 telnet 就可以不用接显示器和键盘来第一次启动系统和配置。

补充一下,ssh默认是关闭的,需要在设置里打开。

引用搅屎棍的发言:

为啥js 能控制LED 我大学的是汇编控制LED

控制硬件就是向一个内存地址写入数据吧,然后这样就可以了.什么语言都具有这种能力,但是汇编粗暴一点.我个人认为是这样,没玩过这种,观点有误请指正

node 真是太好了 - -
房子弄好,我就要开始我的 iot 了

引用搅屎棍的发言:

为啥js 能控制LED 我大学的是汇编控制LED

是 js 使用 rpio 控制了 gpio,而 gpio 能控制树莓派的那些阵脚电流。

国产有一款 orange pi 也很不错哟!
性价比很高的!某宝上卖的也不错!

感谢阮大分享的文章;之前做uart开发,一直搞不清楚相关的问题,比如这个公头母头,今天又学到了,非常感谢!

前端开发web,还有市场么?目前都是移动端了。

感觉还是原来的字体好

针脚说明图 配错了 明明说有40个针脚 图上没有,另外线路连接图也配错了 Google一下 raspberry pi 3 GPIO 就可以看到

ssh 默认不开启,可以在安装镜像盘中新建一个ssh空白文件(没有后缀名的),启动后ssh就会开启了

@Apying:

不好意思,那两张图是拷贝老外的,用的是以前的老型号。我自己的一时忘了拍照,暂时还没法换掉。

后面还会有树莓派的教程吗

引用搅屎棍的发言:

为啥js 能控制LED 我大学的是汇编控制LED

他是用的一个node模块,你用python,c都可以的,其他的应该也可以,但是比较成熟的是c和pyhton

树莓派吃灰的难道只有我一个?(树莓派官方系统raspbian里面今年的某一个版本后确实默认不开启ssh了,所以必须得有显示器才行)

阮大神,玩树莓派做什么,在研究计算机底层技术吗

希望有后续长篇,谢谢

这一套弄下来预算多少?

准备在此基础上搞一个网站流量监控,输出到led上

后面还会有树莓派的教程吗?????

软男神,我大学专业就是这个电子信息工程,做硬件,也会涉及到程序,我现在在学前端,请问这两者有什么联系嘛~

只能用来折腾了,毕竟没有固定IP是硬伤,第三方映射也很坑。

我用的是 ubuntu MATE 系统,它的图像界面比较漂亮。

我的派,还在吃灰中.... 本想着破解周围WIFI密码,无奈总提不起精神.

其实显示器都不用,远程桌面就可以了。

作者都开始玩硬件了,看来全民硬创的时代真的到来了

阮大大也在拨弄这个啦!
可以看看makeblock的几个开发板子,待我们前端小组开源一个库,让前端人也能轻松玩玩这些硬件~

引用搅屎棍的发言:

为啥js 能控制LED 我大学的是汇编控制LED

控制硬件的本质都是去写register,只要能touch到寄存器,用什么语言都没有问题呀

阮老师,那个绿色的gpio接口图贴错了吧,这个不是3B型的40针脚图,貌似是2B型的……

你好 麻烦问下raspbian在那买的? 能否发下链接给我

阮老师,真是各方面都涉猎,佩服佩服。

第一幅图是2b,不是3b,3b有wifi。

我正在学习怎么用树莓派,一窍不通,有没有简单粗暴一些的教程,比如第一步做什么下载什么然后做什么,对于没有基础的菜鸟来说比较有用,我就是一枚小白,对于这些完全看不懂,求阮大大指教

已經玩過了 B板比較容易懷

玩树莓派是为了进军物联网吗

做了一个桌面级小机器人,用的树莓派+ python2.7 开发,开源地址:https://github.com/weedge/doubanFmSpeackerPi , 欢迎DIY使用

阮老师要是能再多出些树莓派的教程就好了

我做了一个android端的程序(是公司要求做的,我个人没那么无聊), 可以通过蓝牙通讯控制raspberrypi连接wifi, 连接wifi后可以显示ip地址等信息, 但是苦于别人刚刷的官方系统里面没有控制端程序, 所以必须要先安装程序才能通讯, 这样就死循环了, 我有想过让大家刷我自制的raspberrypi的系统, 里面的通讯程序是自动启动的, 但是我觉得别人总感觉不放心, 怕我在系统里安装啦后门程序, 所以这个程序做完我就丢了, 没用起来。

https://github.com/jamesruan/pybtsp 这个是服务端程序

大神,请问你是在哪购买的Pi 3 B,淘宝上太多了看花眼,麻烦推荐一个。
期待大神出更多的教程!

树莓派,经实际测试,可以不用显示器完成安装。
步骤如下:
1.把系统镜像,刷到TF卡上。
2.单独修改 /boot/wpa_supplicant.conf 文件配置 WiFi 的 SSID 和密码,这样树莓派启动后会自行读取 wpa_supplicant.conf 配置文件连接 WiFi 设备。
3.在 boot 分区新建一个文件,空白的即可,文件命名为 ssh。注意要小写且不要有任何扩展名。
树莓派在启动之后会在检测到这个文件之后自动启用 ssh 服务。
4.使用ipSCAN,搜索你的树莓派,在Wifi局域网中的IP。然后用XShell之类的工具,进行远程SSH连接。
5.树莓派的默认账号是pi,默认密码是raspberry。

大佬,有问题想请教您,可以单独联系不?

谢谢博主,我参考你的文章做了一个树莓派遥控小车,源码和教程在这里:http://blog.starrtc.com/?p=48

@PHP最好的语言:

第2、3步骤是不是要先于第1步?

引用支持阮老师的发言:

@PHP最好的语言:

第2、3步骤是不是要先于第1步?

应该不是,没有解压后的文件目录,你的修改没办法进行吧。

刷系统镜像 ,linux 系统下最快:
sudo dd bs=4M if=/home/${USER}/Downloads/OpenELEC-RPi2.arm-8.0.4.img of=/dev/mmcblk0 && sync

https://github.com/leson/guides/blob/master/rpi/os_install.md

您好,我想咨询下,我想在树莓派上实现一个人脸识别认证,这个人脸认证调用百度的API,认证通过后可以弹出来一个窗口进行个人信息输入,请问这个怎么做?没有一点思路

这个很好记 插别人的就是公头 被插的就是母头

引用陈棋的发言:

控制硬件就是向一个内存地址写入数据吧,然后这样就可以了.什么语言都具有这种能力,但是汇编粗暴一点.我个人认为是这样,没玩过这种,观点有误请指正

他大学的汇编控制LED,应该是基于无操作系统的单板吧?
树莓派是智能设备,有通用操作系统,所以能支持多种语言。

我想知道有没有树莓派的应用场景或者案例

香橙派能完全代替树莓派吗?现在树莓派感觉太贵了

我要发表看法

«-必填

«-必填,不公开

«-我信任你,不会填写广告链接