Python 物联网入门指南(一)

原文:zh.annas-archive.org/md5/4fe4273add75ed738e70f3d05e428b06

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

这个学习路径将带您进入机器人世界,并教会您如何利用树莓派和 Python 实现一切。

它教会您如何利用树莓派 3 和树莓派零的力量构建卓越的自动化系统,可以改变您的业务。您将学会创建文本分类器,预测单词的情感,并使用 Tkinter 库开发应用程序。当您使用 Python 构建人脸检测和识别系统以及家庭自动化系统时,事情将变得更有趣,不同的设备将使用树莓派进行控制。通过这些多样化的机器人项目,您将掌握机器人学的基础知识和功能,并了解机器人与物联网环境的整合。

通过学习路径的最后,您将涵盖从配置机器人控制器到使用 Python 创建自驾动机器车的一切。

这个学习路径包括以下 Packt 产品的内容:

  • Raspberry Pi 3 Cookbook for Python Programmers - Third Edition by Tim Cox, Dr. Steven Lawrence Fernandes

  • Python Programming with Raspberry Pi by Sai Yamanoor, Srihari Yamanoor

  • Python Robotics Projects by Prof. Diwakar Vaish

本书适合对象

这本书专为想要通过创建可以改善人们生活的机器人来提升技能的 Python 开发人员设计。熟悉 Python 和电子学将有助于理解本学习路径中的概念。

充分利用本书

要开始使用本书,读者应该了解 Python 编程的基础知识。读者对机器学习、计算机视觉和神经网络有基本的了解将是有益的。还建议使用以下硬件:

  • 带有任何操作系统的笔记本电脑

  • 树莓派

  • 一个 8GB 或 16GB 的 MicroSD 卡

  • USB 键盘、鼠标和 WiFi 卡

  • 带有 HDMI 输入的显示器

  • 电源供应,最低 500 毫安

  • 显示器电缆和其他配件

读者需要下载并安装 RASPBIAN STRETCH WITH DESKTOP;这将为我们提供树莓派的 GUI 界面

下载示例代码文件

您可以从www.packt.com的帐户中下载本书的示例代码文件。如果您在其他地方购买了本书,可以访问www.packt.com/support并注册,以便直接通过电子邮件接收文件。

您可以按照以下步骤下载代码文件:

  1. www.packt.com登录或注册。

  2. 选择“支持”选项卡。

  3. 单击“代码下载和勘误”。

  4. 在搜索框中输入书名,然后按照屏幕上的说明操作。

文件下载完成后,请确保使用最新版本的解压缩或提取文件夹:

  • WinRAR/7-Zip 适用于 Windows

  • Zipeg/iZip/UnRarX 适用于 Mac

  • 7-Zip/PeaZip 适用于 Linux

该书的代码包也托管在 GitHub 上,网址为github.com/PacktPublishing/GettingStartedwithPythonfortheInternetofThings。如果代码有更新,将在现有的 GitHub 存储库上进行更新。

我们还有其他代码包,来自我们丰富的图书和视频目录,可在github.com/PacktPublishing/上找到。去看看吧!

使用的约定

本书中使用了许多文本约定。

CodeInText:表示文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。以下是一个例子:“input()方法用于从用户那里获取输入。”

代码块设置如下:

try:         
    input_value = int(value)      
except ValueError as error:         
    print("The value is invalid %s" % error)

任何命令行输入或输出都以以下形式编写:

sudo pip3 install schedule

粗体:表示一个新术语,一个重要词或屏幕上看到的词。例如,菜单或对话框中的单词会在文本中显示为这样。这是一个例子:“如果你需要不同的东西,点击页眉中的下载链接以获取所有可能的下载:”

警告或重要说明会显示为这样。提示和技巧会显示为这样。

第一章:开始使用树莓派 3 电脑

在本章中,我们将涵盖以下主题:

  • 连接外围设备到树莓派

  • 使用 NOOBS 设置您的树莓派 SD 卡

  • 通过 LAN 连接器将您的树莓派连接到互联网

  • 在树莓派上使用内置的 Wi-Fi 和蓝牙

  • 手动配置您的网络

  • 直接连接到笔记本电脑或计算机

  • 通过 USB 无线网络适配器将您的树莓派连接到互联网

  • 通过代理服务器连接到互联网

  • 使用 VNC 通过网络远程连接到树莓派

  • 使用 SSH(和 X11 转发)通过网络远程连接到树莓派

  • 通过 SMB 共享树莓派的主文件夹

  • 保持树莓派最新

介绍

本章介绍了树莓派 3 和首次设置的过程。我们将树莓派连接到合适的显示器,电源和外围设备。我们将在 SD 卡上安装操作系统。这是系统启动所必需的。接下来,我们将确保我们可以通过本地网络成功连接到互联网。

最后,我们将利用网络提供远程连接和/或控制树莓派,以及确保系统保持最新状态的方法。

完成本章中的步骤后,您的树莓派将准备好供您进行编程使用。如果您已经设置并运行了您的树莓派,请确保您浏览以下部分,因为其中有许多有用的提示。

树莓派介绍

树莓派是由树莓派基金会创建的单板计算机,该基金会是一个旨在向英国儿童重新介绍低级计算机技能的慈善机构。其目标是重新点燃 20 世纪 80 年代的微型计算机革命,这产生了一整代熟练的程序员。

即使在 2012 年 2 月底发布计算机之前,树莓派已经在全球范围内获得了巨大的追随者,并且在撰写本书时已经销售了超过 1000 万台。以下图片显示了几种不同的树莓派型号:

树莓派 3B 型号,A+型号和 Pi Zero

名字是怎么回事?

树莓派的名称是希望创建一个以水果命名的替代计算机(如苹果,黑莓和杏子),并向最初的概念致敬,即可以使用 Python 编程的简单计算机(缩写为 Pi)。

在这本书中,我们将拿起这台小电脑,了解如何设置它,然后逐章探索它的功能,使用 Python 编程语言。

为什么选择 Python?

经常有人问:“为什么选择 Python 作为树莓派上的编程语言?”事实上,Python 只是可以在树莓派上使用的许多编程语言之一。

有许多编程语言可供选择,从高级图形块编程,如 Scratch,到传统的 C,再到 BASIC,甚至原始的机器码汇编语言。一个优秀的程序员通常必须精通多种编程语言,以便能够充分发挥每种语言的优势和劣势,以最好地满足其所需应用的需求。了解不同语言(和编程技术)如何克服将您想要的转换为您得到的的挑战是有用的,因为这也是您在编程时所要做的。

Python 被选为学习编程的良好起点,因为它提供了丰富的编码工具,同时又允许编写简单的程序而无需烦恼。这使得初学者可以逐渐了解现代编程语言的概念和方法,而无需从一开始就了解所有内容。它非常模块化,有许多额外的库可以导入以快速扩展功能。随着时间的推移,您会发现这会鼓励您做同样的事情,并且您会想要创建自己的模块,可以将其插入到自己的程序中,从而迈出结构化编程的第一步。

Python 解决了格式和表现方面的问题。缩进会增加可读性,在 Python 中缩进非常重要。它们定义了代码块如何组合在一起。一般来说,Python 运行速度较慢;因为它是解释性的,所以在运行程序时创建模块需要时间。如果需要对时间关键事件做出响应,这可能会成为一个问题。然而,您可以预编译 Python 或使用其他语言编写的模块来克服这个问题。

它隐藏了细节;这既是优点也是缺点。对于初学者来说很好,但当您不得不猜测数据类型等方面时可能会有困难。然而,这反过来又迫使您考虑所有可能性,这可能是一件好事。

Python 2 和 Python 3

对于初学者来说,一个巨大的困惑来源是树莓派上有两个版本的 Python(版本 2.7版本 3.6),它们彼此不兼容,因此为 Python 2.7 编写的代码可能无法在 Python 3.6 上运行(反之亦然)。

Python 软件基金会不断努力改进并推动语言向前发展,这有时意味着他们必须牺牲向后兼容性来拥抱新的改进(并且重要的是,去除多余和过时的做法)。

支持 Python 2 和 Python 3

有许多工具可以帮助您从 Python 2 过渡到 Python 3,包括转换器,如2to3,它将解析并更新您的代码以使用 Python 3 的方法。这个过程并不完美,在某些情况下,您需要手动重写部分代码并进行全面测试。您可以编写同时支持两者的代码和库。import __future__语句允许您导入 Python 3 的友好方法,并在 Python 2.7 中运行它们。

您应该使用哪个版本的 Python?

基本上,选择使用哪个版本将取决于您的意图。例如,您可能需要 Python 2.7 库,这些库尚未适用于 Python 3.6。Python 3 自 2008 年就已经推出,因此这些库往往是较老或较大的库,尚未被翻译。在许多情况下,旧库有新的替代方案;然而,它们的支持程度可能有所不同。

在这本书中,我们使用的是 Python 3.6,它也兼容 Python 3.5 和 3.3。

树莓派家族 - 树莓派的简史

自发布以来,树莓派已经推出了各种版本,对原始的树莓派 B 型进行了小型和大型的更新和改进。虽然一开始可能会令人困惑,但树莓派有三种基本类型可用(以及一个特殊型号)。

主要的旗舰型号被称为B 型。它具有所有的连接和功能,以及最大的 RAM 和最新的处理器。多年来,已经推出了几个版本,最值得注意的是 B 型(拥有 256MB 和 512MB RAM),然后是 B+型(将 26 针 GPIO 增加到 40 针,改用 microSD 卡槽,并将 USB 端口从两个增加到四个)。这些原始型号都使用了 Broadcom BCM2835 系统芯片SOC),包括单核 700MHz ARM11 和 VideoCore IV 图形处理单元GPU)。

2015 年发布的树莓派 2 型 B(也称为 2B)引入了新的 Broadcom BCM2836 SOC,提供了四核 32 位 ARM Cortex A7 1.2 GHz 处理器和 GPU,配备 1GB 的 RAM。改进的 SOC 增加了对 Ubuntu 和 Windows 10 IoT 的支持。最后,我们有了最新的树莓派 3 型 B,使用了另一个新的 Broadcom BCM2837 SOC,提供了四核 64 位 ARM Cortex-A53 和 GPU,以及板载 Wi-Fi 和蓝牙。

A 型一直被定位为精简版本。虽然具有与 B 型相同的 SOC,但连接有限,只有一个 USB 端口,没有有线网络(LAN)。A+型再次增加了更多的 GPIO 引脚和一个 microSD 卡槽。然而,RAM 后来升级为 512MB,再次只有一个 USB 端口/没有 LAN。Model A 上的 Broadcom BCM2835 SOC 到目前为止还没有更新(因此仍然是单核 ARM11);但是,可能会推出 3A 型(很可能使用 BCM2837)。

Pi Zero是树莓派的超紧凑版本,适用于成本和空间有限的嵌入式应用。它具有与其他型号相同的 40 针 GPIO 和 microSD 卡槽,但缺少板载显示(CSI 和 DSI)连接。它仍然具有 HDMI(通过迷你 HDMI)和单个 micro USB on-the-goOTG)连接。尽管在 Pi Zero 的第一个版本中没有,但最新型号还包括用于板载摄像头的 CSI 连接。

Pi Zero 在 2015 年被著名地发布,并随树莓派基金会的杂志The MagPi一起赠送,使该杂志成为第一本在封面上赠送计算机的杂志!这让我感到非常自豪,因为(正如你可能在本书开头的我的传记中读到的那样)我是该杂志的创始人之一。

特殊型号被称为计算模块。它采用 200 针 SODIMM 卡的形式。它适用于工业用途或商业产品中,所有外部接口将由主机/主板提供,模块将插入其中。示例产品包括 Slice Media Player(fiveninjas.com)和 OTTO 相机。当前模块使用 BCM2835,尽管有一个更新的计算模块(CM3)。

树莓派维基百科页面提供了所有不同变体及其规格的完整列表:en.wikipedia.org/wiki/Raspberry_Pi#Specifications

此外,树莓派产品页面提供了有关可用型号和配件规格的详细信息:www.raspberrypi.org/products/

选择哪种树莓派?

本书的所有部分都与当前所有版本的树莓派兼容,但建议首选 3B 型作为最佳型号。这提供了最佳性能(特别是对于 OpenCV 示例中使用的 GPU 示例,如第五章中的检测图像中的边缘和轮廓),大量连接和内置 Wi-Fi,非常方便。

Pi Zero 被推荐用于需要低功耗或减少重量/尺寸但不需要 Model 3B 全面处理能力的项目。然而,由于其超低成本,Pi Zero 非常适合在开发完成项目后部署。

连接到树莓派

有许多方法可以连接树莓派并使用各种接口查看和控制内容。对于典型的用途,大多数用户将需要电源、显示器(带音频)和输入方法,如键盘和鼠标。要访问互联网,请参阅通过 LAN 连接器将树莓派连接到互联网在树莓派上使用内置 Wi-Fi 和蓝牙

准备就绪

在使用树莓派之前,您需要一个安装了操作系统或者在其中安装了新开箱系统NOOBS)的 SD 卡,如使用 NOOBS 设置树莓派 SD 卡中所讨论的那样。

以下部分将详细介绍您可以连接到树莓派的设备类型,以及重要的是如何在哪里插入它们。

正如您将在后面发现的那样,一旦您设置好了树莓派,您可能会决定通过网络连接远程连接并使用它,在这种情况下,您只需要电源和网络连接。请参考以下部分:通过 VNC 远程连接树莓派通过 SSH(和 X11 转发)远程连接树莓派

操作步骤如下...

树莓派的布局如下图所示:

树莓派连接布局(3 B 型,A+型和 Zero 型)

有关上图的更多信息如下:

  • 显示:树莓派支持以下三种主要的显示连接;如果 HDMI 和复合视频都连接了,它将默认为仅 HDMI:

  • HDMI:为了获得最佳效果,请使用具有 HDMI 连接的电视或显示器,从而实现最佳分辨率显示(1080p)和数字音频输出。如果您的显示器具有 DVI 连接,您可以使用适配器通过 HDMI 连接。有几种类型的 DVI 连接;一些支持模拟(DVI-A),一些支持数字(DVI-D),一些都支持(DVI-I)。树莓派只能通过 HDMI 提供数字信号,因此建议使用 HDMI 到 DVI-D 适配器(在下图中带有勾号)。这缺少了四个额外的模拟引脚(在下图中带有叉号),因此可以适配到 DVI-D 和 DVI-I 类型插座中:

HDMI 到 DVI 连接(DVI-D 适配器)

如果您希望使用旧的显示器(带有 VGA 连接),则需要额外的 HDMI 到 VGA 转换器。树莓派还支持一个基本的 VGA 适配器(VGA Gert666 Adaptor),它直接驱动 GPIO 引脚。然而,这会使用 40 针引脚排头的所有引脚(旧的 26 针型号不支持 VGA 输出):

HDMI 到 VGA 适配器

    • 模拟:另一种显示方法是使用模拟复合视频连接(通过音频插孔);这也可以连接到 S-Video 或欧洲 SCART 适配器。然而,模拟视频输出的最大分辨率为 640 x 480 像素,因此不太适合一般使用:

3.5 毫米音频模拟连接

在使用 RCA 连接或 DVI 输入时,音频必须通过模拟音频连接单独提供。为了简化制造过程(避免穿孔元件),Pi Zero 没有模拟音频或模拟视频的 RCA 插孔(尽管可以通过一些修改添加):

    • 直接显示 DSI:由树莓派基金会生产的触摸显示器将直接连接到 DSI 插座。这可以与 HDMI 或模拟视频输出同时连接和使用,以创建双显示设置。
  • 立体声模拟音频(除 Pi Zero 外):这为耳机或扬声器提供了模拟音频输出。可以通过树莓派桌面上的配置工具或通过命令行使用amixeralsamixer在模拟(立体插孔)和数字(HDMI)之间进行切换。

要了解有关终端中特定命令的更多信息,您可以在终端读取手册之前使用以下man命令(大多数命令应该都有手册):

 man amixer

有些命令还支持--help选项,以获得更简洁的帮助,如下所示:

 amixer --help

  • 网络(不包括 A 型和 Pi Zero):网络连接将在本章后面的通过 LAN 连接器将树莓派连接到互联网配方中进行讨论。如果使用 A 型树莓派,可以添加 USB 网络适配器来添加有线或无线网络连接(参考通过 USB Wi-Fi dongle 将树莓派连接到互联网配方)。

  • 内置 Wi-Fi 和蓝牙(仅限 Model 3 B):Model 3 B 具有内置的 802.11n Wi-Fi 和蓝牙 4.1;参见在树莓派上使用内置的 Wi-Fi 和蓝牙配方。

  • USB(1x Model A/Zero,2x Model 1 B,4x Model 2 B 和 3 B):使用键盘和鼠标:

  • 树莓派应该可以与大多数 USB 键盘和鼠标兼容。您也可以使用使用 RF dongles 的无线鼠标和键盘。但是,对于使用蓝牙 dongles 的设备需要额外的配置。

  • 如果您的电源供应不足或设备正在吸取过多电流,您可能会发现键盘按键似乎卡住了,并且在严重情况下,SD 卡可能会损坏。

早期 Model B 修订版 1 板的 USB 电源可能存在问题,这些板在 2012 年 10 月之前就已经上市。它们在 USB 输出上包含了额外的Polyfuses,如果超过 140 mA 的电流被吸取,就会跳闸。Polyfuses 可能需要数小时甚至数天才能完全恢复,因此即使电源改善了,也可能导致不可预测的行为。

您可以通过缺少后期型号上存在的四个安装孔来识别修订版 1 板。

    • Debian Linux(Raspbian 的基础)支持许多常见的 USB 设备,如闪存驱动器、硬盘驱动器(可能需要外部电源)、相机、打印机、蓝牙和 Wi-Fi 适配器。一些设备将被自动检测,而其他设备将需要安装驱动程序。
  • Micro USB 电源:树莓派需要一个能够舒适地提供至少 1,000 mA(特别是对于更耗电的 2 型和 3 型,建议提供 1,500 mA 或更多)的 5V 电源,带有一个 micro USB 连接。可以使用便携式电池组来为设备供电,比如适用于平板电脑的电池组。再次确保它们可以提供 5V 的电压,至少 1,000 mA。

在连接电源之前,您应该尽量将所有其他连接连接到树莓派上。但是,USB 设备、音频和网络可以在运行时连接和移除,而不会出现问题。

还有更多...

除了标准的主要连接之外,树莓派还具有许多其他连接。

次要硬件连接

以下每个连接都提供了树莓派的其他接口:

  • 20 x 2 GPIO 引脚排针(Model A+,B+,2 B,3 B 和 Pi Zero):这是树莓派的主要 40 针 GPIO 引脚排针,用于直接与硬件组件进行接口。本书中的章节也适用于具有 13 x 2 GPIO 引脚排针的较旧型号的树莓派。

  • P5 8 x 2 GPIO 引脚排针(仅限 Model 1 B 修订版 2.0):我们在本书中不使用这个接口。

  • 复位连接:这个连接出现在较新的型号上(没有插脚)。当引脚 1(复位)和引脚 2(GND)连接在一起时,会触发复位。我们在第七章的A controlled shutdown button概念中使用了这个接口,Using Python to Drive Hardware

  • GPU/LAN JTAG联合测试行动组JTAG)是用于配置和测试处理器的编程和调试接口。这些接口出现在较新的型号上作为表面垫。使用这个接口需要专门的 JTAG 设备。我们在本书中不使用这个接口。

  • 直接相机 CSI:这个连接支持树莓派相机模块。请注意,Pi Zero 的 CSI 连接器比其他型号要小,因此需要不同的排线连接器。

  • 直接显示 DSI:此连接支持直接连接的显示器,例如 7 英寸 800 x 600 电容触摸屏。

使用 NOOBS 设置您的 Raspberry Pi SD 卡

在启动之前,树莓派需要将操作系统加载到 SD 卡上。设置 SD 卡的最简单方法是使用NOOBS;您可能会发现可以购买已经加载了 NOOBS 的 SD 卡。

NOOBS 提供了一个初始启动菜单,提供了安装几种可用操作系统到您的 SD 卡的选项。

准备工作

由于 NOOBS 创建了一个RECOVERY分区来保存原始安装映像,建议使用 8GB 或更大的 SD 卡。您还需要一个 SD 卡读卡器(经验表明,一些内置读卡器可能会导致问题,因此建议使用外部 USB 类型读卡器)。

如果您使用的是以前使用过的 SD 卡,可能需要重新格式化以删除任何先前的分区和数据。NOOBS 期望 SD 卡由单个 FAT32 分区组成。

如果使用 Windows 或 macOS X,您可以使用 SD 卡协会的格式化程序,如下面的屏幕截图所示(可在www.sdcard.org/downloads/formatter_4/找到):

使用 SD 格式化程序清除 SD 卡上的任何分区

从选项设置对话框中,设置 FORMAT SIZE ADJUSTMENT。这将删除以前创建的所有 SD 卡分区。

如果使用 Linux,您可以使用gparted清除任何先前的分区并将其重新格式化为 FAT32 分区。

完整的 NOOBS 软件包(通常略大于 1GB)包含了 Raspbian,最受欢迎的树莓派操作系统映像。还提供了一个精简版的 NOOBS,它没有预装的操作系统(尽管需要 Raspberry Pi 上的较小的初始下载 20MB 和网络连接来直接下载您打算使用的操作系统)。

NOOBS 可在www.raspberrypi.org/downloads上获得,文档可在github.com/raspberrypi/noobs上获得。

如何做...

通过执行以下步骤,我们将准备好 SD 卡来运行 NOOBS。然后,这将允许我们选择并安装我们想要使用的操作系统:

  1. 准备好您的 SD 卡。

  2. 在新格式化或新的 SD 卡上,复制NOOBS_vX.zip文件的内容。复制完成后,您应该得到类似于 SD 卡以下屏幕截图的东西:

从 SD 卡中提取的 NOOBS 文件这些文件可能会因不同版本的 NOOBS 而略有不同,并且在您的计算机上显示的图标可能会有所不同。

  1. 您现在可以将卡插入树莓派,连接键盘和显示器,然后打开电源。有关所需的详细信息和操作方法,请参阅连接到树莓派配方。

默认情况下,NOOBS 将通过 HDMI 连接显示。如果您有其他类型的屏幕(或者什么也看不到),您需要通过按 1、2、3 或 4 手动选择输出类型,具体操作如下:

  • 键 1 代表标准 HDMI 模式(默认模式)

  • 键 2 代表安全 HDMI 模式(如果未检测到输出,则为备用 HDMI 设置)

  • 键 3 代表复合 PAL(通过 RCA 模拟视频连接进行连接)

  • 键 4 代表复合 NTSC(同样,适用于通过 RCA 连接器连接)

此显示设置也将用于安装的操作系统。

过了一会儿,您将看到列出可用发行版的 NOOBS 选择屏幕(离线版本仅包括 Raspbian)。 有许多其他可用的发行版,但只有选定的发行版可以直接通过 NOOBS 系统获得。 点击 Raspbian,因为这是本书中使用的操作系统。

Enter或单击“安装操作系统”,并确认您希望覆盖卡上的所有数据

卡。 这将覆盖以前使用 NOOBS 安装的任何发行版,但不会删除 NOOBS 系统; 您可以在任何时候按下Shift键返回到它。

根据其速度,写入数据到卡上大约需要 20 到 40 分钟。 当完成并出现“图像应用成功”消息时,单击“确定”,树莓派将开始引导到树莓派桌面

它是如何工作的...

以这种方式将映像文件写入 SD 卡的目的是确保 SD 卡格式化为预期的文件系统分区和文件,以正确引导操作系统。

当树莓派启动时,它会加载存储在 GPU 内存中的一些特殊代码(通常被树莓派基金会称为二进制块)。 二进制块提供了读取 SD 卡上的BOOT分区所需的指令(在 NOOBS 安装的情况下,将从RECOVERY分区加载 NOOBS)。 如果此时按下Shift,NOOBS 将加载恢复和安装菜单。 否则,NOOBS 将根据SETTINGS分区中存储的首选项开始加载操作系统。

在加载操作系统时,它将通过BOOT分区引导,使用config.txt中定义的设置和cmdline.txt中的选项最终加载到root分区上的桌面。 请参阅以下图表:

NOOBS 在 SD 卡上创建了几个分区,以允许安装多个

操作系统,并提供恢复

NOOBS 允许用户在同一张卡上选择性地安装多个操作系统,并提供引导菜单以在它们之间进行选择(在超时期间设置默认值的选项)。

如果以后添加、删除或重新安装操作系统,请首先确保复制任何文件,包括您希望保留的系统设置,因为 NOOBS 可能会覆盖 SD 卡上的所有内容。

还有更多...

当您首次直接启动树莓派时,将加载桌面。 您可以使用 Raspberry Pi Configuration 菜单(在桌面上的首选项菜单下或通过sudo raspi-config命令)配置系统设置。 使用此菜单,您可以更改 SD 卡或设置一般首选项:

更改默认用户密码

确保在登录后更改pi用户帐户的默认密码,因为默认密码是众所周知的。 如果您连接到公共网络,这一点尤为重要。 您可以使用passwd命令来执行此操作,如下面的屏幕截图所示:

为 Pi 用户设置新密码

这样可以更加放心,因为如果您以后连接到另一个网络,只有您才能访问您的文件并控制您的树莓派。

确保安全关闭

为了避免任何数据损坏,您必须确保通过发出shutdown命令正确关闭树莓派,如下所示:

sudo shutdown -h now  

或者,使用这个:

sudo halt  

在从树莓派断电之前,必须等待此命令完成(在 SD 卡访问指示灯停止闪烁后等待至少 10 秒)。

您还可以使用reboot命令重新启动系统,如下所示:

sudo reboot  

手动准备 SD 卡

使用 NOOBS 的替代方法是手动将操作系统映像写入 SD 卡。 尽管最初这是安装操作系统的唯一方法,但一些用户仍然更喜欢它。 它允许在将 SD 卡用于树莓派之前准备 SD 卡。 它还可以更容易地访问启动和配置文件,并且为用户留下更多的空间(与 NOOBS 不同,不包括RECOVERY分区)。

默认的 Raspbian 映像实际上由两个分区BOOTSYSTEM组成,可以放入 2GB 的 SD 卡(建议使用 4GB 或更多)。

您需要一台运行 Windows/Mac OS X/Linux 的计算机(尽管可以使用另一台树莓派来写入您的卡;请准备等待很长时间)。

下载您希望使用的操作系统的最新版本。 本书假定您正在使用www.raspberrypi.org/downloads上提供的最新版本的 Raspbian。

根据您计划用于写入 SD 卡的计算机类型执行以下步骤(您需要的.img文件有时会被压缩,因此在开始之前,您需要提取文件)。

以下步骤适用于 Windows:

  1. 确保您已经下载了 Raspbian 映像,并将其提取到一个方便的文件夹以获取.img文件。

  2. 获取www.sourceforge.net/projects/win32diskimager上提供的Win32DiskImager.exe文件。

  3. 从下载位置运行Win32DiskImager.exe

  4. 单击文件夹图标,导航到.img文件的位置,然后单击保存。

  5. 如果尚未这样做,请将 SD 卡插入卡读卡器并将其插入计算机。

  6. 从小下拉框中选择与您的 SD 卡对应的设备驱动器号。 仔细检查这是否是正确的设备(因为在写入映像时,程序将覆盖设备上的任何内容)。

在选择源映像文件之前,可能不会列出驱动器号。

  1. 最后,单击“写入”按钮,等待程序将映像写入 SD 卡,如下图所示:

手动将操作系统映像写入 SD 卡,使用 Disk Imager

  1. 完成后,您可以退出程序。 您的 SD 卡已准备就绪。

以下步骤适用于大多数常见的 Linux 发行版,如 Ubuntu 和 Debian:

  1. 使用您喜欢的网络浏览器下载 Raspbian 映像并将其保存在合适的位置。

  2. 从文件管理器中提取文件或在终端中找到文件夹并使用以下命令解压.img文件:

unzip filename.zip  
  1. 如果尚未这样做,请将 SD 卡插入卡读卡器并将其插入计算机。

  2. 使用df -h命令并识别 SD 卡的sdX标识符。 每个分区将显示为 sdX1,sdX2 等,其中 X 将是abcd等,用于设备 ID。

  3. 确保使用以下命令卸载 SD 卡上的所有分区

对于每个分区,使用umount /dev/sdXn命令,其中sdXn是要卸载的分区。

  1. 使用以下命令将映像文件写入 SD 卡:
sudo dd if=filename.img of=/dev/sdX bs=4M  
  1. 写入 SD 卡的过程需要一些时间,在完成时返回终端提示符。

  2. 使用以下命令卸载 SD 卡,然后从计算机中取出它:

umount /dev/sdX1  

以下步骤适用于大多数 OS X 版本:

  1. 使用您喜欢的网络浏览器下载 Raspbian 映像并将其保存在合适的位置。

  2. 从文件管理器中提取文件或在终端中找到文件夹并解压.img文件,使用以下命令:

unzip filename.zip  
  1. 如果尚未这样做,请将 SD 卡插入卡读卡器并将其插入计算机。

  2. 使用diskutil list命令并为 SD 卡标识disk#标识符。每个分区将显示为 disk#s1,disk#s2 等,其中#将是1234等,用于设备 ID。

如果列出了 rdisk#,则使用它可以更快地写入(这使用原始路径并跳过数据缓冲)。

  1. 确保使用unmountdisk /dev/diskX命令卸载 SD 卡,其中diskX是要卸载的设备。

  2. 使用以下命令将映像文件写入 SD 卡:

sudo dd if=filename.img of=/dev/diskX bs=1M  
  1. 该过程将花费一些时间来写入 SD 卡,并在完成时返回到终端提示符。

  2. 在从计算机中移除 SD 卡之前卸载 SD 卡,使用

以下命令:

unmountdisk /dev/diskX  

请参阅以下图表:

手动安装的 OS 映像的引导过程

扩展系统以适应您的 SD 卡

手动编写的映像将是固定大小的(通常是为了适应最小尺寸的 SD 卡)。要充分利用 SD 卡,您需要扩展系统分区以填满 SD 卡的其余部分。这可以通过 Raspberry Pi 配置工具实现。

选择“扩展文件系统”,如下截图所示:

Raspberry Pi 配置工具

访问 RECOVERY/BOOT 分区

Windows 和 macOS X 不支持ext4格式,因此在读取 SD 卡时,只有文件分配表FAT)分区可访问。此外,Windows 只支持 SD 卡上的第一个分区,因此如果您安装了 NOOBS,则只能看到RECOVERY分区。如果您手动写入了卡,您将能够访问BOOT分区。

data分区(如果您通过 NOOBS 安装了它)和root分区采用ext4格式,通常在非 Linux 系统上不可见。

如果您确实需要使用 Windows 从 SD 卡读取文件,一个免费软件Linux Reader(可在www.diskinternals.com/linux-reader获取)可以提供对 SD 卡上所有分区的只读访问。

从 Raspberry Pi 访问分区。要查看当前已挂载的分区,请使用df,如下截图所示:

df 命令的结果

要从 Raspbian 内部访问BOOT分区,请使用以下命令:

cd /boot/  

要访问RECOVERYdata分区,我们必须通过执行以下操作来挂载它

以下步骤:

  1. 通过列出所有分区(包括未挂载的分区)来确定分区的名称,系统将引用它。sudo fdisk -l命令列出分区,如下截图所示:

NOOBS 安装和数据分区

以下表格显示了分区的名称及其含义

分区名称 含义
mmcblk0p1 (VFAT) RECOVERY
mmcblk0p2 (扩展分区) 包含 (root, data, BOOT)
mmcblk0p5 (ext4) root
mmcblk0p6 (VFAT) BOOT
mmcblk0p7 (ext4) SETTINGS

如果您在同一张卡上安装了其他操作系统,则前面表中显示的分区标识符将不同。

  1. 创建一个文件夹,并将其设置为分区的挂载点;对于RECOVERY分区,请使用以下命令:
mkdir ~/recovery
sudo mount -t vfat /dev/mmcblk0p1 ~/recovery  

为了确保它们在每次系统启动时都被挂载,请执行以下步骤:

  1. /etc/rc.local中添加sudo挂载命令,然后是exit 0。如果您有不同的用户名,您需要将pi更改为匹配的用户名:
sudo nano /etc/rc.local
sudo mount -t vfat /dev/mmcblk0p1 /home/pi/recovery  
  1. Ctrl + XYEnter保存并退出。

添加到/etc/rc.local的命令将在登录到 Raspberry Pi 的任何用户上运行。如果您只希望该驱动器对当前用户进行挂载,则可以将命令添加到.bash_profile中。

如果必须在同一张卡上安装其他操作系统,则此处显示的分区标识符将不同。

使用工具备份 SD 卡以防故障

您可以使用Win32 Disk Imager通过将 SD 卡插入读卡器,启动程序并创建一个文件名来存储图像来制作 SD 卡的完整备份图像。只需点击读取按钮,将图像从 SD 卡读取并写入新的图像文件。

要备份系统,或者使用树莓派克隆到另一个 SD 卡,请使用 SD 卡复制器(可通过桌面菜单的附件| SD 卡复制器获得)。

将 SD 卡插入树莓派的 USB 端口的读卡器中,并选择新的存储设备,如下截图所示:

SD 卡复制程序

在继续之前,SD 卡复制器将确认您是否希望格式化和覆盖目标设备,并且如果有足够的空间,将克隆您的系统。

dd命令也可以用来备份卡,如下所示:

  • 对于 Linux,用您的设备 ID 替换sdX,使用以下命令:
sudo dd if=/dev/sdX of=image.img.gz bs=1M  
  • 对于 OS X,用以下命令替换diskX为您的设备 ID:
sudo dd if=/dev/diskX of=image.img.gz bs=1M
  • 您还可以使用gzip和 split 来压缩卡的内容并将其拆分成多个文件,如果需要的话,以便进行简单的存档,如下所示:
sudo dd if=/dev/sdX bs=1M | gzip -c | split -d -b 2000m - image.img.gz

  • 要恢复拆分的图像,请使用以下命令:
sudo cat image.img.gz* | gzip -dc | dd of=/dev/sdX bs=1M  

通过以太网端口将树莓派连接到互联网的网络和连接,使用 CAT6 以太网电缆

将树莓派连接到互联网的最简单方法是使用 Model B 上的内置 LAN 连接。如果您使用的是 Model A 树莓派,则可以使用 USB 到 LAN 适配器(有关如何配置此适配器的详细信息,请参阅还有更多...部分的通过 USB 无线网络适配器连接树莓派到互联网配方)。

准备工作

您将需要访问适当的有线网络,该网络将连接到互联网,并且标准网络电缆(带有RJ45类型连接器,用于连接到树莓派)。

操作步骤

许多网络使用动态主机配置协议DHCP)自动连接和配置,由路由器或交换机控制。如果是这种情况,只需将网络电缆插入路由器或网络交换机上的空闲网络端口(或者如果适用,墙壁网络插座)。

或者,如果没有 DHCP 服务器,您将不得不手动配置设置(有关详细信息,请参阅还有更多...部分)。

您可以通过以下步骤确认这一功能是否成功运行:

  1. 确保树莓派两侧的两个 LED 灯亮起(左侧橙色 LED 指示连接,右侧绿色 LED 显示闪烁的活动)。这将表明与路由器有物理连接,并且设备已经供电并正常工作。

  2. 使用ping命令测试与本地网络的连接。首先,找出网络上另一台计算机的 IP 地址(或者您的路由器的地址,通常为192.168.0.1192.168.1.254)。现在,在树莓派终端上,使用ping命令(使用-c 4参数仅发送四条消息;否则,按Ctrl + C停止)ping IP 地址,如下所示:

sudo ping 192.168.1.254 -c 4
  1. 测试连接到互联网(如果您通常通过代理服务器连接到互联网,这将失败)如下:
sudo ping www.raspberrypi.org -c 4

  1. 最后,您可以通过发现来测试与树莓派的连接

在树莓派上使用hostname -I命令查找 IP 地址。然后,您可以在网络上的另一台计算机上使用ping命令来确保可以访问(使用树莓派的 IP 地址代替www.raspberrypi.org)。Windows 版本的ping命令将执行五次 ping 并自动停止,并且不需要-c 4选项。

如果上述测试失败,您需要检查您的连接,然后确认您的网络的正确配置。

还有更多...

如果您经常在网络上使用树莓派,您就不想每次连接时都要查找 IP 地址。

在一些网络上,您可以使用树莓派的主机名而不是其 IP 地址(默认为raspberrypi)。为了帮助实现这一点,您可能需要一些额外的软件,比如Bonjour,以确保网络上的主机名被正确注册。如果您使用的是 macOS X,那么 Bonjour 已经在运行了。

在 Windows 上,您可以安装 iTunes(如果您没有安装),它也包括了该服务,或者您可以单独安装(通过support.apple.com/kb/DL999提供的 Apple Bonjour Installer)。然后您可以使用主机名raspberrypiraspberrypi.local来连接到树莓派。如果您需要更改主机名,那么您可以使用之前显示的树莓派配置工具来进行更改。

或者,您可能会发现手动设置 IP 地址为已知值并将其固定对您有所帮助。但是,请记住在连接到另一个网络时切换回使用 DHCP。

一些路由器还可以设置静态 IP DHCP 地址的选项,这样相同的地址就会始终分配给树莓派(如何设置取决于路由器本身)。

如果您打算使用后面描述的远程访问解决方案之一,那么了解树莓派的 IP 地址或使用主机名尤其有用,这样就避免了需要显示器。

使用树莓派上的内置 Wi-Fi 和蓝牙

许多家庭网络通过 Wi-Fi 提供无线网络;如果您有树莓派 3,那么您可以利用板载的 Broadcom Wi-Fi 来连接。树莓派 3 也支持蓝牙,因此您可以连接大多数标准蓝牙设备,并像在任何其他计算机上一样使用它们。

这种方法也适用于任何受支持的 USB Wi-Fi 和蓝牙设备;有关识别设备和安装固件(如果需要)的额外帮助,请参阅通过 USB Wi-Fi dongle 将树莓派连接到互联网的网络和连接配方。

准备好了

Raspbian 的最新版本包括有用的实用程序,通过图形界面快速轻松地配置您的 Wi-Fi 和蓝牙。

注意:如果您需要通过命令行配置 Wi-Fi,请参阅通过 USB Wi-Fi dongle 将树莓派连接到互联网的网络和连接配方以获取详细信息。Wi-Fi 和蓝牙配置应用程序

您可以使用内置的蓝牙连接无线键盘、鼠标,甚至无线扬声器。这对于一些需要额外电缆和线缆的项目非常有帮助,比如机器人项目,或者当树莓派安装在难以到达的位置时(作为服务器或安全摄像头)。

如何做...

以下是各种方法。

连接到您的 Wi-Fi 网络

要配置您的 Wi-Fi 连接,请单击网络符号以列出本地可用的 Wi-Fi 网络:

区域内可用接入点的 Wi-Fi 列表

选择所需的网络(例如,Demo),如果需要,输入您的密码(也称为预共享密钥):

为接入点提供密码

过一会儿,您应该会看到您已连接到网络,图标将变成 Wi-Fi 符号。如果遇到问题,请确保您有正确的密码/密钥:

成功连接到接入点

就是这样;就是这么简单!

您现在可以通过使用 Web 浏览器导航到网站或在终端中使用以下命令来测试连接并确保其正常工作:

sudo ping www.raspberrypi.com

连接到蓝牙设备

首先,我们需要通过单击蓝牙图标并选择使可发现将蓝牙设备设置为可发现模式。您还需要使要连接的设备处于可发现和配对准备状态;这可能因设备而异(例如按配对按钮):

设置蓝牙为可发现状态

接下来,选择添加设备...并选择目标设备和配对

选择并配对所需的设备

然后配对过程将开始;例如,BTKB-71DB 键盘将需要输入配对码467572到键盘上以完成配对。其他设备可能使用默认配对码,通常设置为 0000、1111、1234 或类似的:

按照说明使用所需的配对码将设备配对

一旦过程完成,设备将被列出,并且每次设备出现并引导时都会自动连接。

手动配置您的网络

如果您的网络不包括 DHCP 服务器或者已禁用(通常,这些都内置在大多数现代 ADSL/电缆调制解调器或路由器中),则可能需要手动配置您的网络设置。

准备工作

在开始之前,您需要确定网络的网络设置。

您需要从路由器的设置或连接到网络的另一台计算机中找到以下信息:

  • IPv4 地址:此地址需要选择与网络上其他计算机相似(通常,前三个数字应匹配,即,如果netmask255.255.255.0,则应为192.168.1.X),但不应该已被其他计算机使用。但是,避免使用x.x.x.255作为最后一个地址,因为这是保留的广播地址。

  • 子网掩码:此数字确定计算机将响应的地址范围(对于家庭网络,通常为255.255.255.0,允许最多 254 个地址)。这有时也被称为netmask

  • 默认网关地址:此地址通常是您的路由器的 IP 地址,通过它,计算机连接到互联网。

  • DNS 服务器域名服务DNS)服务器通过查找名称将名称转换为 IP 地址。通常,它们将已配置在您的路由器上,在这种情况下,您可以使用您的路由器的地址。或者,您的互联网服务提供商ISP)可能会提供一些地址,或者您可以使用 Google 的公共 DNS 服务器的地址8.8.8.88.8.4.4。在某些系统中,这些也称为名称服务器

对于 Windows,您可以通过连接到互联网并运行以下命令来获取此信息:

ipconfig /all  

找到活动连接(通常称为本地连接 1或类似的,如果您使用有线连接,或者如果您使用 Wi-Fi,则称为无线网络连接),并找到所需的信息,如下所示:

ipconfig/all 命令显示有关网络设置的有用信息

对于 Linux 和 macOS X,您可以使用以下命令获取所需的信息(请注意,这是ifconfig而不是ipconfig):

ifconfig  

DNS 服务器称为名称服务器,并且通常列在resolv.conf文件中。您可以使用以下方式使用less命令查看其内容(完成查看后按 Q 退出):

less /etc/resolv.conf  

如何做到...

要设置网络接口设置,请使用编辑/etc/network/interfaces

以下代码:

sudo nano /etc/network/interfaces  

现在执行以下步骤:

  1. 我们可以添加我们特定网络的详细信息,我们要为其分配的 IP地址号,网络的netmask地址和gateway地址,如下所示:
iface eth0 inet static
 address 192.168.1.10
 netmask 255.255.255.0
 gateway 192.168.1.254

  1. 按下Ctrl + XYEnter保存并退出。

  2. 要为 DNS 设置名称服务器,请使用以下代码编辑/etc/resolv.conf

sudo nano /etc/resolv.conf

  1. 按照以下方式添加 DNS 服务器的地址:
nameserver 8.8.8.8
nameserver 8.8.4.4  
  1. 按下Ctrl + XYEnter保存并退出。

还有更多...

您可以通过编辑cmdline.txtBOOT分区中配置网络设置,并使用ip将设置添加到启动命令行。

ip选项采用以下形式:

ip=client-ip:nfsserver-ip:gw-ip:netmask:hostname:device:autoconf  
  • client-ip选项是您要分配给树莓派的 IP 地址

  • gw-ip选项将手动设置网关服务器地址

  • netmask选项将直接设置网络的netmask

  • hostname选项将允许您更改默认的raspberrypi主机名

  • device选项允许您指定默认的网络设备(如果存在多个网络设备)

  • autoconf选项允许自动配置打开或关闭

直接连接到笔记本电脑或计算机

可以使用单个网络电缆直接连接树莓派 LAN 端口到笔记本电脑或计算机。这将在计算机之间创建一个本地网络链接,允许您进行连接到正常网络时可以做的所有事情,而无需使用集线器或路由器,包括连接到互联网,如果使用Internet Connection Sharing (ICS),如下所示:

只需使用一个网络电缆,一个标准镜像的 SD 卡和电源即可使用树莓派。

ICS 允许树莓派通过另一台计算机连接到互联网。但是,需要对计算机进行一些额外的配置,以便它们在链接上进行通信,因为树莓派不会自动分配自己的 IP 地址。

我们将使用 ICS 来共享来自另一个网络链接的连接,例如笔记本电脑上的内置 Wi-Fi。或者,如果不需要互联网或计算机只有一个网络适配器,我们可以使用直接网络链接(请参阅There's more...部分下的Direct network link部分)。

尽管这个设置对大多数计算机都适用,但有些设置比其他设置更困难。有关更多信息,请参见www.pihardware.com/guides/direct-network-connection

准备工作

您将需要带电源和标准网络电缆的树莓派。

树莓派 Model B LAN 芯片包括Auto-MDIXAutomatic Medium-Dependent Interface Crossover)。无需使用特殊的交叉电缆(一种特殊的网络电缆,布线使传输线连接到直接网络链接的接收线),芯片将根据需要自动决定和更改设置。

如果这是您第一次尝试,可能还需要键盘和显示器来进行额外的测试。

为了确保您可以将网络设置恢复到其原始值,您应该检查它是否具有固定的 IP 地址或网络是否自动配置。

要检查 Windows 10 上的网络设置,请执行以下步骤:

  1. 从开始菜单打开设置,然后选择网络和 Internet,然后以太网,然后从相关设置列表中点击更改适配器选项。

要检查 Windows 7 和 Vista 上的网络设置,请执行以下步骤:

  1. 从控制面板打开网络和共享中心,然后在左侧点击更改适配器设置。

  2. 在 Windows XP 上检查网络设置,从控制面板打开网络连接。

  3. 找到与您的有线网络适配器相关的项目(默认情况下,通常称为以太网或本地连接,如下图所示):

查找有线网络连接

  1. 右键单击其图标,然后单击属性。将出现对话框,如此屏幕截图所示:

选择 TCP/IP 属性并检查设置

  1. 选择名为 Internet Protocol(TCP/IP)或 Internet Protocol Version 4(TCP/IPv4)的项目(如果有两个版本(另一个是版本 6),然后单击属性按钮。

  2. 您可以通过使用自动设置或特定 IP 地址来确认您的网络设置(如果是这样,请记下此地址和其余细节,因为您可能希望在以后的某个时间点恢复设置)。

要检查 Linux 上的网络设置,请执行以下步骤:

  1. 打开网络设置对话框,然后选择配置接口。请参考以下屏幕截图:

Linux 网络设置对话框

  1. 如果有任何手动设置,请确保记下它们,以便以后可以恢复它们。

要检查 macOS X 上的网络设置,请执行以下步骤:

  1. 打开系统偏好设置,然后单击网络。然后您可以确认 IP 地址是否自动分配(使用 DHCP)。

  2. 确保如果有任何手动设置,您记下它们,以便以后可以恢复它们。请参考以下屏幕截图:

OS X 网络设置对话框

如果您只需要访问或控制树莓派而无需互联网连接,请参考直接网络链接部分中的更多信息部分。

如何做...

首先,我们需要在我们的网络设备上启用 ICS。在这种情况下,我们将通过以太网连接将可用于无线网络连接的互联网共享到树莓派。

对于 Windows,执行以下步骤:

  1. 返回到网络适配器列表,右键单击链接

到互联网(在本例中,WiFi 或无线网络连接设备),然后单击属性:

查找有线网络连接

  1. 在窗口顶部,选择第二个选项卡(在 Windows XP 中称为高级;在 Windows 7 和 Windows 10 中称为共享),如下屏幕截图所示:

选择 TCP/IP 属性并记下分配的 IP 地址

  1. 在 Internet Connection Sharing 部分,选中允许其他网络用户通过此计算机的 Internet 连接连接(如果有,请使用下拉框选择家庭网络连接:选项为以太网或本地连接)。单击确定并确认以前是否为本地连接设置了固定 IP 地址。

对于 macOS X,执行以下步骤启用 ICS:

  1. 单击系统偏好设置,然后单击共享。

  2. 单击 Internet 共享,然后选择要共享互联网的连接(在本例中,将是 Wi-Fi AirPort)。然后选择我们将连接树莓派的连接(在本例中,是以太网)。

对于 Linux 启用 ICS,执行以下步骤:

  1. 从系统菜单中,单击首选项,然后单击网络连接。选择要共享的连接(在本例中为无线),然后单击编辑或配置。在 IPv4 设置选项卡中,将方法选项更改为共享到其他计算机。

网络适配器的 IP 地址将是用于树莓派的网关 IP地址,并将分配一个在相同范围内的 IP 地址(它们将匹配,除了最后一个数字)。例如,如果计算机的有线连接现在为192.168.137.1,则树莓派的网关 IP 将为192.168.137.1,其自己的 IP 地址可能设置为192.168.137.10

幸运的是,由于操作系统的更新,Raspbian 现在将自动为自己分配一个合适的 IP 地址以加入网络,并适当设置网关。但是,除非我们将屏幕连接到树莓派或扫描我们的网络上的设备,否则我们不知道树莓派给自己分配了什么 IP 地址。

幸运的是(如在网络和通过 LAN 连接将树莓派连接到互联网食谱中的还有更多...部分中提到的),苹果的Bonjour软件将自动确保网络上的主机名正确注册。如前所述,如果您使用的是 Mac OS X,则已经运行了 Bonjour。在 Windows 上,您可以安装 iTunes,或者您可以单独安装它(可从support.apple.com/kb/DL999获取)。默认情况下,可以使用主机名raspberrypi

现在我们准备测试新连接,如下所示:

  1. 将网络电缆连接到树莓派和计算机的网络端口,然后启动树莓派,确保您已重新插入 SD 卡(如果之前已将其拔出)。要重新启动树莓派,如果您在那里编辑了文件,请使用sudo reboot来重新启动它。

  2. 等待一两分钟,让树莓派完全启动。现在我们可以测试连接了。

  3. 从连接的笔记本电脑或计算机上,通过 ping 树莓派的主机名来测试连接,如下命令所示(在 Linux 或 OS X 上,添加-c 4以限制为四条消息,或按 Ctrl + C 退出):

ping raspberrypi  

希望您会发现您已经建立了一个工作连接,并从连接的计算机接收到了回复

树莓派。

如果您连接了键盘和屏幕到树莓派,您可以执行

以下步骤:

  1. 您可以通过以下方式在树莓派终端上对计算机进行返回 ping(例如,192.168.137.1):
sudo ping 192.168.137.1 -c 4  
  1. 您可以通过使用ping连接到一个知名网站来测试与互联网的连接,假设您不是通过代理服务器访问互联网:
sudo ping www.raspberrypi.org -c 4  

如果一切顺利,您将可以通过计算机完全访问互联网,从而可以浏览网页以及更新和安装新软件。

如果连接失败,请执行以下步骤:

  1. 重复这个过程,确保前三组数字与树莓派和网络适配器的 IP 地址匹配。

  2. 您还可以通过以下命令检查树莓派启动时是否设置了正确的 IP 地址:

hostname -I  
  1. 检查防火墙设置,确保防火墙不会阻止内部网络连接。

它是如何工作的...

当我们在主要计算机上启用 ICS 时,操作系统将自动为计算机分配一个新的 IP 地址。连接并启动后,树莓派将自动设置为兼容的 IP 地址,并将主要计算机的 IP 地址用作 Internet 网关。

通过使用 Apple Bonjour,我们能够使用raspberrypi主机名从连接的计算机连接到树莓派。

最后,我们检查计算机是否可以通过直接网络链路与树莓派进行通信,反之亦然,并且通过互联网进行通信。

还有更多...

如果您不需要在树莓派上使用互联网,或者您的计算机只有一个网络适配器,您仍然可以通过直接网络链路将计算机连接在一起。请参考以下图表:

只使用网络电缆、标准镜像 SD 卡和电源连接和使用树莓派

直接网络链路

要使两台计算机之间的网络链接正常工作,它们需要使用相同的地址范围。可允许的地址范围由子网掩码确定(例如,255.255.0.0255.255.255.0表示所有 IP 地址应该相同,除了最后两个,或者只是 IP 地址中的最后一个数字;否则,它们将被过滤)。

要在不启用 ICS 的情况下使用直接链接,请检查您正在使用的适配器的 IP 设置

要连接到的 IP 地址,并确定它是自动分配还是固定的

特定的 IP 地址。

直接连接到另一台计算机的大多数 PC 将在169.254.X.X范围内分配 IP 地址(子网掩码为255.255.0.0)。但是,我们必须确保网络适配器设置为自动获取 IP 地址。

为了让 Raspberry Pi 能够通过直接链接进行通信,它需要在相同的地址范围169.254.X.X内具有 IP 地址。如前所述,Raspberry Pi 将自动为自己分配一个合适的 IP 地址并连接到网络。

因此,假设我们有 Apple Bonjour(前面提到过),我们只需要知道分配给 Raspberry Pi 的主机名(raspberrypi)。

另请参阅

如果您没有键盘或屏幕连接到 Raspberry Pi,您可以使用此网络链接远程访问 Raspberry Pi,就像在普通网络上一样(只需使用您为连接设置的新 IP 地址)。参考通过 VNC 远程连接到 Raspberry Pi通过 SSH(和 X11 转发)远程连接到 Raspberry Pi

我的网站pihw.wordpress.com/guides/direct-network-connection上提供了大量额外信息,包括额外的故障排除提示和连接到 Raspberry Pi 的其他几种方式,而无需专用屏幕和键盘。

通过 USB Wi-Fi dongle 进行网络连接和连接 Raspberry Pi 到互联网

通过在 Raspberry Pi 的 USB 端口添加USB Wi-Fi dongle,即使没有内置 Wi-Fi 的型号也可以连接并使用 Wi-Fi 网络。

准备工作

您需要获取一个合适的 USB Wi-Fi dongle,并且在某些情况下,您可能需要一个有源的 USB 集线器(这将取决于您拥有的 Raspberry Pi 的硬件版本和您的电源供应的质量)。USB Wi-Fi dongles 的一般适用性将取决于内部使用的芯片组以及可用的 Linux 支持水平。您可能会发现一些 USB Wi-Fi dongles 可以在不安装额外驱动程序的情况下工作(在这种情况下,您可以跳转到为无线网络配置它)。

支持的 Wi-Fi 适配器列表可在elinux.org/RPi_USB_Wi-Fi_Adapters找到。

您需要确保您的 Wi-Fi 适配器也与您打算连接的网络兼容;例如,它支持相同类型的信号802.11bgn和加密WEPWPAWPA2(尽管大多数网络都是向后兼容的)。

您还需要了解您网络的以下详细信息:

  • 服务集标识符(SSID):这是您的 Wi-Fi 网络的名称,如果您使用以下命令,应该是可见的:
sudo iwlist scan | grep SSID  
  • 加密类型和密钥:此值将为 None、WEP、WPA 或 WPA2,密钥将是您通常在连接手机或笔记本电脑到无线网络时输入的代码(有时它会被打印在路由器上)。

您将需要一个工作的互联网连接(即有线以太网)来下载所需的驱动程序。否则,您可以找到所需的固件文件(它们将是.deb文件)并将它们复制到 Raspberry Pi(即通过 USB 闪存驱动器;如果您在桌面模式下运行,驱动器应该会自动挂载)。将文件复制到适当的位置并安装它,使用以下命令:

sudo apt-get install firmware_file.deb  

如何做...

此任务有两个阶段:首先,我们识别并安装 Wi-Fi 适配器的固件,然后我们需要为无线网络配置它。

我们将尝试识别您的 Wi-Fi 适配器的芯片组(处理连接的部分);这可能与设备的实际制造商不匹配。

可以使用此命令找到支持的固件的近似列表:

sudo apt-cache search wireless firmware  

这将产生类似以下输出的结果(忽略任何没有firmware在软件包标题中的结果):

atmel-firmware - Firmware for Atmel at76c50x wireless networking chips.
firmware-atheros - Binary firmware for Atheros wireless cards
firmware-brcm80211 - Binary firmware for Broadcom 802.11 wireless cards
firmware-ipw2x00 - Binary firmware for Intel Pro Wireless 2100, 2200 and 2915
firmware-iwlwifi - Binary firmware for Intel PRO/Wireless 3945 and 802.11n cards
firmware-libertas - Binary firmware for Marvell Libertas 8xxx wireless cards
firmware-ralink - Binary firmware for Ralink wireless cards
firmware-realtek - Binary firmware for Realtek wired and wireless network adapters
libertas-firmware - Firmware for Marvell's libertas wireless chip series (dummy package)
zd1211-firmware - Firmware images for the zd1211rw wireless driver  

要找出无线适配器的芯片组,将 Wi-Fi 适配器插入树莓派,然后从终端运行以下命令:

dmesg | grep 'Product:|Manufacturer:'

这个命令将两个命令合并成一个。首先,dmesg显示内核的消息缓冲区(这是自动开机以来发生的系统事件的内部记录,比如检测到的 USB 设备)。您可以尝试单独使用该命令来观察完整的输出。

|(管道)将输出发送到grep命令;grep 'Product:|Manufacturer'检查它,并且只返回包含ProductManufacturer的行(因此我们应该得到列为ProductManufacturer的任何项目的摘要)。如果您找不到任何内容,或者想要查看所有 USB 设备,请尝试grep 'usb'命令。

这应该返回类似于以下输出——在这种情况下,我有一个ZyXEL设备,它有一个ZyDAS芯片组(快速的谷歌搜索显示zd1211-firmware适用于ZyDAS设备):

[    1.893367] usb usb1: Product: DWC OTG Controller
[    1.900217] usb usb1: Manufacturer: Linux 3.6.11+ dwc_otg_hcd
[    3.348259] usb 1-1.2: Product: ZyXEL G-202
[    3.355062] usb 1-1.2: Manufacturer: ZyDAS  

一旦您确定了您的设备和正确的固件,您可以像安装其他通过apt-get可用的软件包一样安装它(其中zd1211-firmware可以替换为您需要的固件)。如下所示:

sudo apt-get install zd1211-firmware  

拔出并重新插入 USB Wi-Fi dongle,以便它被检测到并加载驱动程序。我们现在可以使用ifconfig测试新适配器是否正确安装。输出如下所示:

wlan0     IEEE 802.11bg  ESSID:off/any
 Mode:Managed  Access Point: Not-Associated   Tx-Power=20 dBm
 Retry  long limit:7   RTS thr:off   Fragment thr:off
 Power Management:off  

该命令将显示系统上存在的网络适配器。对于 Wi-Fi,通常是wlan0wlan1,如果您安装了多个,则会有更多。如果没有,请仔细检查所选的固件,或者尝试替代方案,或者在网站上查看故障排除提示。

一旦我们安装了 Wi-Fi 适配器的固件,我们就需要为我们希望连接的网络进行配置。我们可以使用 GUI,就像前面的示例中所示,或者我们可以通过终端手动配置,就像以下步骤中所示:

  1. 我们需要将无线适配器添加到网络接口列表中,该列表设置在/etc/network/interfaces中,如下所示:
sudo nano -c /etc/network/interfaces   

使用以前的wlan#值替换wlan0,如果需要,添加以下命令:

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

更改后,按Ctrl + XYEnter保存并退出。

  1. 我们现在将我们网络的 Wi-Fi 网络设置存储在wpa_supplicant.conf文件中(如果您的网络不使用wpa加密,不用担心;这只是文件的默认名称):
sudo nano -c /etc/wpa_supplicant/wpa_supplicant.conf  

它应该包括以下内容:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev 
update_config=1 
country=GB 

网络设置可以写入此文件,如下所示(即,如果 SSID 设置为theSSID):

    • 如果不使用加密,请使用此代码:
network={ 
  ssid="theSSID" 
  key_mgmt=NONE 
} 
    • 使用WEP加密(即,如果WEP密钥设置为theWEPkey),使用以下代码:
network={ 
  ssid="theSSID" 
  key_mgmt=NONE 
  wep_key0="theWEPkey" 
} 
    • 对于WPAWPA2加密(即,如果WPA密钥设置为theWPAkey),使用以下代码:
network={ 
  ssid="theSSID" 
  key_mgmt=WPA-PSK 
  psk="theWPAkey"     
} 
  1. 您可以使用以下命令启用适配器(如果需要,请再次替换wlan0):
sudo ifup wlan0

使用以下命令列出无线网络连接:

iwconfig

您应该看到您的无线网络连接,并列出您的 SSID,如下所示:

wlan0     IEEE 802.11bg  ESSID:"theSSID"
 Mode:Managed  Frequency:2.442 GHz  Access Point: 
       00:24:BB:FF:FF:FF
 Bit Rate=48 Mb/s   Tx-Power=20 dBm
 Retry  long limit:7   RTS thr:off   Fragment thr:off
 Power Management:off
 Link Quality=32/100  Signal level=32/100
 Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
 Tx excessive retries:0  Invalid misc:15   Missed beacon:0  

如果不是,请调整您的设置,并使用sudo ifdown wlan0关闭网络接口,然后使用sudo ifup wlan0打开它。这将确认您已成功连接到您的 Wi-Fi 网络。

  1. 最后,我们需要检查我们是否可以访问互联网。在这里,我们假设网络已自动配置为 DHCP,并且不使用代理服务器。如果不是,请参考通过代理服务器连接到互联网的示例。

拔掉有线网络电缆(如果仍然连接),然后查看是否可以 ping 通树莓派网站,如下所示:

**sudo ping** www.raspberrypi.org  

如果您想快速知道树莓派当前使用的 IP 地址,可以使用hostname -I,或者要找出哪个适配器连接到哪个 IP 地址,可以使用ifconfig

还有更多...

Raspberry Pi 的 A 型版本没有内置的网络端口,因此为了获得网络连接,必须添加 USB 网络适配器(可以是 Wi-Fi dongle,如前一节所述,也可以是 LAN-to-USB 适配器,如下一节所述)。

使用 USB 有线网络适配器

就像 USB Wi-Fi 一样,适配器的支持取决于所使用的芯片组和可用的驱动程序。除非设备配备了 Linux 驱动程序,否则您可能需要在互联网上搜索以获取适用的 Debian Linux 驱动程序。

如果找到合适的.deb文件,可以使用以下命令进行安装:

sudo apt-get install firmware_file.deb  

还可以使用ifconfig进行检查,因为一些设备将自动受支持,显示为eth1(或者在 A 型上为eth0),并且可以立即使用。

通过代理服务器连接到互联网

一些网络,例如工作场所或学校内的网络,通常要求您通过代理服务器连接到互联网。

准备工作

您需要代理服务器的地址,包括用户名和密码(如果需要)。

您应该确认树莓派已连接到网络,并且可以访问代理服务器。

使用ping命令进行检查,如下所示:

ping proxy.address.com -c 4  

如果失败(没有响应),您需要确保继续之前网络设置正确。

如何操作...

  1. 使用nano创建一个新文件,如下所示(如果文件中已经有一些内容,可以在末尾添加代码):
sudo nano -c ~/.bash_profile
  1. 要允许通过代理服务器进行基本的网页浏览,例如Midori,您可以使用以下脚本:
function proxyenable { 
# Define proxy settings 
PROXY_ADDR="proxy.address.com:port" 
# Login name (leave blank if not required): 
LOGIN_USER="login_name" 
# Login Password (leave blank to prompt): 
LOGIN_PWD= 
#If login specified - check for password 
if [[ -z $LOGIN_USER ]]; then 
  #No login for proxy 
  PROXY_FULL=$PROXY_ADDR 
else 
  #Login needed for proxy Prompt for password -s option hides input 
  if [[ -z $LOGIN_PWD ]]; then 
    read -s -p "Provide proxy password (then Enter):" LOGIN_PWD 
    echo 
  fi 
  PROXY_FULL=$LOGIN_USER:$LOGIN_PWD@$PROXY_ADDR 
fi 
#Web Proxy Enable: http_proxy or HTTP_PROXY environment variables 
export http_proxy="http://$PROXY_FULL/" 
export HTTP_PROXY=$http_proxy 
export https_proxy="https://$PROXY_FULL/" 
export HTTPS_PROXY=$https_proxy 
export ftp_proxy="ftp://$PROXY_FULL/" 
export FTP_PROXY=$ftp_proxy 
#Set proxy for apt-get 
sudo cat <<EOF | sudo tee /etc/apt/apt.conf.d/80proxy > /dev/null 
Acquire::http::proxy "http://$PROXY_FULL/"; 
Acquire::ftp::proxy "ftp://$PROXY_FULL/"; 
Acquire::https::proxy "https://$PROXY_FULL/"; 
EOF 
#Remove info no longer needed from environment 
unset LOGIN_USER LOGIN_PWD PROXY_ADDR PROXY_FULL 
echo Proxy Enabled 
} 

function proxydisable { 
#Disable proxy values, apt-get and git settings 
unset http_proxy HTTP_PROXY https_proxy HTTPS_PROXY 
unset ftp_proxy FTP_PROXY 
sudo rm /etc/apt/apt.conf.d/80proxy 
echo Proxy Disabled 
} 
  1. 完成后,按Ctrl + XYEnter保存并退出。

脚本被添加到用户自己的.bash_profile文件中,在特定用户登录时运行。这将确保代理设置被分别保存给每个用户。如果您希望所有用户使用相同的设置,可以将代码添加到/etc/rc.local中(此文件必须在末尾有exit 0)。

工作原理...

许多使用互联网的程序在连接之前会检查http_proxyHTTP_PROXY环境变量。如果存在,它们将使用代理设置进行连接。一些程序也可能使用HTTPSFTP协议,因此我们也可以在这里为它们设置代理设置。

如果代理服务器需要用户名,则会提示输入密码。通常不建议在脚本中存储密码,除非您确信没有其他人能够访问您的设备(无论是物理上还是通过互联网)。

最后一部分允许使用sudo命令执行的任何程序在扮演超级用户时使用代理环境变量(大多数程序首先尝试使用普通权限访问网络,即使作为超级用户运行,所以并不总是需要)。

还有更多...

我们还需要允许某些程序使用代理设置,这些程序在访问网络时使用超级用户权限(这取决于程序;大多数不需要这样做)。我们需要通过以下步骤将命令添加到存储在/etc/sudoers.d/中的文件中:

  1. 使用以下命令打开一个新的sudoer文件:
sudo visudo -f /etc/sudoers.d/proxy  
  1. 在文件中输入以下文本(一行):
Defaults env_keep += "http_proxy HTTP_PROXY https_proxy HTTPS_PROXY ftp_proxy FTP_PROXY"  
  1. 完成后,按Ctrl + XYEnter保存并退出;不要更改proxy.tmp文件名(这对于visudo是正常的;完成后它会将其更改为 proxy)。

  2. 如果提示“现在怎么办?”,则命令中存在错误。按X退出而不保存并重新输入命令。

  3. 重新启动后(使用sudo reboot),您将能够使用以下命令分别启用和禁用代理:

proxyenable
proxydisable  

在这里使用visudo很重要,因为它确保了为sudoers目录正确创建文件的权限(只能由root用户读取)。

通过 VNC 远程连接到树莓派网络

通常,最好远程连接和控制树莓派跨网络,例如,使用笔记本电脑或台式电脑作为屏幕和键盘,或者当树莓派连接到其他地方时,也许甚至连接到一些需要靠近的硬件。

VNC 只是远程连接到树莓派的一种方式。它将创建一个新的桌面会话,可以远程控制和访问。这里的 VNC 会话与树莓派显示上可能活动的会话是分开的。

准备工作

确保您的树莓派已经启动并连接到互联网。我们将使用互联网连接来使用apt-get安装程序。这是一个允许我们直接从官方存储库中查找和安装应用程序的程序。

如何做...

  1. 首先,我们需要使用以下命令在树莓派上安装 TightVNC 服务器。建议先运行update命令以获取要安装的软件包的最新版本,如下所示:
sudo apt-get update
sudo apt-get install tightvncserver  
  1. 接受提示进行安装,并等待直到完成。要启动会话,请使用以下命令:
vncserver :1  
  1. 第一次运行时,它将要求您输入一个密码(不超过八个字符)以访问桌面(您在从计算机连接时将使用此密码)。

以下消息应该确认已启动新的桌面会话:

New 'X' desktop is raspberrypi:1  

如果您还不知道树莓派的 IP 地址,请使用hostname -I并记下它。

接下来,我们需要运行 VNC 客户端。VNC Viewer是一个合适的程序,可以在www.realvnc.com/上找到,并且应该可以在 Windows、Linux 和 OS X 上运行。

运行 VNC Viewer 时,将提示您输入服务器地址和加密类型。使用您的树莓派的 IP 地址与:1。也就是说,对于 IP 地址192.168.1.69,使用192.168.1.69:1地址。

您可以将加密类型保留为关闭或自动。

根据您的网络,您可以使用主机名;默认值为raspberrypi,即raspberrypi:1

可能会有一个关于以前未连接到计算机或没有加密的警告。如果您正在使用公共网络或在互联网上进行连接(以阻止其他人能够拦截您的数据),您应该启用加密。

还有更多...

您可以添加选项到命令行以指定显示的分辨率和颜色深度。分辨率和颜色深度越高(可以调整为每像素使用 8 位到 32 位以提供低或高颜色细节),通过网络链接传输的数据就越多。如果发现刷新速率有点慢,请尝试按照以下方式减少这些数字:

vncserver :1 -geometry 1280x780 -depth 24  

要允许 VNC 服务器在打开时自动启动,您可以将vncserver命令添加到.bash_profile(这在每次树莓派启动时执行)。

使用nano编辑器如下(-c选项允许显示行号):

sudo nano -c ~/.bash_profile  

将以下行添加到文件的末尾:

vncserver :1  

下次启动时,您应该能够使用 VNC 从远程连接到树莓派

另一台计算机。

通过 SSH(和 X11 转发)远程连接到树莓派

安全外壳SSH)通常是进行远程连接的首选方法,因为它只允许终端连接,并且通常需要更少的资源。

SSH 的一个额外功能是能够将X11数据传输到运行在您的计算机上的X Windows服务器。这允许您启动通常在树莓派桌面上运行的程序,并且它们将出现在本地计算机上的自己的窗口中,如下所示:

在本地显示上的 X11 转发

X11 转发可用于在 Windows 计算机上显示在树莓派上运行的应用程序。

准备工作

如果您正在运行最新版本的 Raspbian,则 SSH 和 X11 转发将默认启用(否则,请仔细检查它是如何工作...部分中解释的设置)。

如何做...

Linux 和 OS X 都内置支持 X11 转发,但如果你使用 Windows,你需要在计算机上安装和运行 X Windows 服务器。

Xming网站(sourceforge.net/projects/xming/)下载并运行xming

安装xming,按照安装步骤进行安装,包括安装PuTTY(如果您还没有)。您也可以从www.putty.org/单独下载 PuTTY。

接下来,我们需要确保我们连接时使用的 SSH 程序启用了 X11。

对于 Windows,我们将使用 PuTTY 连接到树莓派。

在 PuTTY 配置对话框中,导航到连接 | SSH | X11,并选中启用 X11 转发的复选框。如果将 X 显示位置选项留空,它将假定默认的Server 0:0如下(您可以通过将鼠标移到运行时系统托盘中的 Xming 图标上来确认服务器号):

在 PuTTY 配置中启用 X11 转发

在会话设置中输入树莓派的 IP 地址(您还可以在这里使用树莓派的主机名;默认主机名是raspberrypi)。

使用适当的名称保存设置,RaspberryPi,然后单击打开以连接到您的树莓派。

您可能会看到一个警告消息弹出,指出您以前没有连接到计算机(这样可以在继续之前检查是否一切正常):

使用 PuTTY 打开到树莓派的 SSH 连接

对于 OS X 或 Linux,单击终端以打开到树莓派的连接。

要使用默认的pi用户名连接,IP 地址为192.168.1.69,使用以下命令;-X选项启用 X11 转发:

ssh -X pi@192.168.1.69  

一切顺利的话,您应该会收到一个输入密码的提示(请记住pi用户的默认值是raspberry)。

确保 Xming 正在运行,方法是从计算机的开始菜单启动 Xming 程序。然后,在终端窗口中,输入通常在树莓派桌面内运行的程序,如leafpadscratch。等一会儿,程序应该会出现在您的计算机桌面上(如果出现错误,您可能忘记启动 Xming,所以请运行它并重试)。

它是如何工作的...

X Windows 和 X11 是提供树莓派(以及许多其他基于 Linux 的计算机)显示和控制图形窗口作为桌面一部分的方法。

要使 X11 转发在网络连接上工作,我们需要在树莓派上同时启用 SSH 和 X11 转发。执行以下步骤:

  1. 要打开(或关闭)SSH,您可以访问树莓派配置

在桌面的首选项菜单下的 SSH 中,单击接口选项卡,如下截图所示(大多数发行版通常默认启用 SSH,以帮助允许远程连接而无需显示器进行配置):

raspi-config 工具中的高级设置菜单

  1. 确保在树莓派上启用了 X11 转发(大多数发行版现在默认已启用此功能)。

  2. 使用以下命令使用nano

sudo nano /etc/ssh/sshd_config  
  1. /etc/ssh/sshd_config文件中查找控制 X11 转发的行,并确保它说yes(之前没有#符号),如下所示:
X11Forwarding yes  
  1. 如果需要,按Ctrl + XYEnter保存并重新启动(如果需要更改)如下:
sudo reboot  

还有更多...

SSH 和 X11 转发是远程控制树莓派的便捷方式;我们将在以下部分探讨如何有效使用它的一些额外提示。

通过 X11 转发运行多个程序

如果您想运行X 程序,但仍然可以在同一终端控制台上运行其他内容,可以使用&将命令在后台运行,如下所示:

leafpad &  

只需记住,您运行的程序越多,一切就会变得越慢。您可以通过输入fg切换到后台程序,并使用bg检查后台任务。

通过 X11 转发作为桌面运行

您甚至可以通过 X11 运行完整的桌面会话,尽管它并不特别用户友好,而且 VNC 会产生更好的结果。要实现这一点,您必须使用lxsession而不是startx(以您通常从终端启动桌面的方式)。

另一种选择是使用lxpanel,它提供了程序菜单栏,您可以从菜单中启动和运行程序,就像在桌面上一样。

通过 X11 转发运行 Pygame 和 Tkinter

在运行PygameTkinter脚本时,您可能会遇到以下错误(或类似错误):

_tkinter.TclError: couldn't connect to display "localhost:10.0"  

在这种情况下,使用以下命令来修复错误:

sudo cp ~/.Xauthority ~root/ 

使用 SMB 共享树莓派的主文件夹

当您将树莓派连接到网络时,您可以通过设置文件共享来访问主文件夹;这样可以更轻松地传输文件,并提供了一种快速简便的备份数据的方法。服务器消息块SMB)是一种与 Windows 文件共享、OS X 和 Linux 兼容的协议。

准备工作

确保您的树莓派已接通电源并连接到互联网。

您还需要另一台在同一本地网络上的计算机来测试新的共享。

如何做...

首先,我们需要安装samba,这是一款处理与 Windows 共享方法兼容的文件夹共享的软件:

  1. 确保您使用以下命令来获取可用软件包的最新列表:
sudo apt-get update
sudo apt-get install samba  

安装将需要大约 20MB 的空间,并需要几分钟的时间。

  1. 安装完成后,我们可以按照以下方式复制配置文件,以便在需要时恢复默认设置:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
sudo nano /etc/samba/smb.conf  

向下滚动并找到名为Authentication的部分;将# security = user行更改为security = user

如文件中所述,此设置确保您必须输入用户名和密码才能访问树莓派的文件(这对于共享网络非常重要)。

找到名为Share Definitions[homes]的部分,并将read only = yes行更改为read only = no

这将允许我们查看并向共享的主文件夹写入文件。完成后,按Ctrl + XYEnter保存并退出。

如果您已将默认用户从pi更改为其他内容,请在以下说明中进行替换。

  1. 现在,我们可以添加pi(默认用户)来使用samba
sudo pdbedit -a -u pi
  1. 现在,输入密码(您可以使用与登录相同的密码或选择不同的密码,但避免使用默认的树莓密码,这对某人来说将非常容易猜到)。重新启动samba以使用新的配置文件,如下所示:
sudo /etc/init.d/samba restart
[ ok ] Stopping Samba daemons: nmbd smbd.
[ ok ] Starting Samba daemons: nmbd smbd.  
  1. 要进行测试,您需要知道树莓派的hostname(默认hostnameraspberrypi)或其 IP 地址。您可以使用以下命令找到这两者。
hostname
  1. 对于 IP 地址,添加-I
hostname -I  

在网络上的另一台计算机上,在资源管理器路径中输入\raspberrypipi地址。

根据您的网络,计算机应该能够在网络上找到树莓派,并提示输入用户名和密码。如果它无法使用hostname找到共享,您可以直接使用 IP 地址,其中192.168.1.69应更改为匹配 IP 地址\192.168.1.69pi

保持树莓派最新

树莓派使用的 Linux 镜像经常更新,以包括对系统的增强、修复和改进,以及对新硬件的支持或对最新板的更改。您安装的许多软件包也可以进行更新。

如果您打算在另一个树莓派板上使用相同的系统镜像(特别是较新的板),这一点尤为重要,因为旧镜像将缺乏对任何布线更改或替代 RAM 芯片的支持。新固件应该可以在较旧的树莓派板上工作,但是旧固件可能与最新的硬件不兼容。

幸运的是,每次有新版本发布时,您无需重新刷写 SD 卡,因为可以进行更新。

准备就绪

您需要连接到互联网才能更新系统。始终建议首先备份您的镜像(至少复制您的重要文件)。

您可以使用uname -a命令检查当前固件的版本,如下所示:

Linux raspberrypi 4.4.9-v7+ #884 SMP Fri May 6 17:28:59 BST 2016 armv7l GNU/Linux  

可以使用/opt/vc/bin/vcgencmd version命令来检查 GPU 固件,如下所示:

 May  6 2016 13:53:23
Copyright (c) 2012 Broadcom
version 0cc642d53eab041e67c8c373d989fef5847448f8 (clean) (release)

如果您在较新的板上使用较旧的固件(2012 年 11 月之前),这一点很重要,因为最初的 B 型板只有 254MB RAM。升级可以使固件利用额外的内存(如果可用)。

free -h命令将详细说明主处理器可用的 RAM(总 RAM 在 GPU 和 ARM 核心之间分配),并将给出以下输出:

                 total       used       free     shared    buffers     cached
    Mem:          925M       224M       701M       7.1M        14M       123M
    -/+ buffers/cache:        86M       839M
    Swap:          99M         0B        99M

然后可以在重新启动后重新检查前面的输出,以确认它们已经更新(尽管它们可能已经是最新的)。

如何做...

  1. 在运行任何升级或安装任何软件包之前,值得确保您拥有存储库中最新的软件包列表。update命令获取可用软件和版本的最新列表:
sudo apt-get update  
  1. 如果您只想获取当前软件包的升级,upgrade将使它们全部保持最新状态:
sudo apt-get upgrade
  1. 为确保您运行的是最新版本的 Raspbian,可以运行dist-upgrade(请注意:这可能需要一小时或更长时间,具体取决于需要升级的数量)。这将执行upgrade将执行的所有更新,但还将删除多余的软件包并进行清理:
sudo apt-get dist-upgrade  

这两种方法都将升级软件,包括在启动和启动时使用的固件(bootcode.binstart.elf)。

  1. 要更新固件,可以使用以下命令:
sudo rpi-update  

还有更多...

您经常会发现您想要对设置进行干净的安装,但是这意味着您将不得不从头开始安装所有内容。为了避免这种情况,我开发了 Pi-Kitchen 项目(github.com/PiHw/Pi-Kitchen),基于Kevin Hill的基础工作。这旨在提供一个灵活的平台,用于创建可以自动部署到 SD 卡的定制设置:

Pi Kitchen 允许在启动之前配置树莓派

Pi-Kitchen 允许配置各种口味,可以从 NOOBS 菜单中选择。每种口味都包括一系列食谱,每个食谱都提供最终操作系统的特定功能或特性。食谱可以从为 Wi-Fi 设备设置自定义驱动程序,到在您的网络上映射共享驱动器,再到提供一个功能齐全的网络服务器,所有这些都组合在一起,以满足您的要求。

该项目处于测试阶段,作为概念验证开发,但是一旦您配置好一切,将完全工作的设置直接部署到 SD 卡上将非常有用。最终,该项目可以与 Kevin Hill 的 NOOBS 的高级版本PINN Is Not NOOBSPINN)结合使用,旨在为高级用户提供额外功能,例如允许操作系统和配置存储在您的网络上或外部 USB 存储器上。

第二章:划分文本数据和构建文本分类器

本章介绍了以下主题:

  • 构建文本分类器

  • 使用标记化预处理数据

  • 词干化文本数据

  • 使用分块划分文本

  • 构建词袋模型

  • 文本分类器的应用

介绍

本章介绍了构建文本分类器的方法。这包括从数据库中提取重要特征、训练、测试和验证文本分类器。最初,使用常用词训练文本分类器。后来,训练好的文本分类器用于预测。构建文本分类器包括使用标记化预处理数据、词干化文本数据、使用分块划分文本和构建词袋模型。

构建文本分类器

分类器单元通常被认为是将数据库分成各种类别的。朴素贝叶斯分类器方案被广泛认为是根据训练模型将文本分隔的文献。本章的这一部分最初考虑了一个带有关键词的文本数据库;特征提取从文本中提取关键短语并训练分类器系统。然后,实施词频-逆文档频率tf-idf)转换以指定单词的重要性。最后,使用分类器系统预测并打印输出。

如何做...

  1. 在新的 Python 文件中包含以下行以添加数据集:
from sklearn.datasets import fetch_20newsgroups 
category_mapping = {'misc.forsale': 'Sellings', 'rec.motorcycles': 'Motorbikes', 
        'rec.sport.baseball': 'Baseball', 'sci.crypt': 'Cryptography', 
        'sci.space': 'OuterSpace'} 

training_content = fetch_20newsgroups(subset='train', 
categories=category_mapping.keys(), shuffle=True, random_state=7) 
  1. 执行特征提取以从文本中提取主要单词:
from sklearn.feature_extraction.text import CountVectorizer 

vectorizing = CountVectorizer() 
train_counts = vectorizing.fit_transform(training_content.data) 
print "nDimensions of training data:", train_counts.shape 
  1. 训练分类器:
from sklearn.naive_bayes import MultinomialNB 
from sklearn.feature_extraction.text import TfidfTransformer 

input_content = [ 
    "The curveballs of right handed pitchers tend to curve to the left", 
    "Caesar cipher is an ancient form of encryption", 
    "This two-wheeler is really good on slippery roads" 
] 

tfidf_transformer = TfidfTransformer() 
train_tfidf = tfidf_transformer.fit_transform(train_counts) 
  1. 实现多项式朴素贝叶斯分类器:
classifier = MultinomialNB().fit(train_tfidf, training_content.target) 
input_counts = vectorizing.transform(input_content) 
input_tfidf = tfidf_transformer.transform(input_counts) 
  1. 预测输出类别:
categories_prediction = classifier.predict(input_tfidf) 
  1. 打印输出:
for sentence, category in zip(input_content, categories_prediction): 
    print 'nInput:', sentence, 'nPredicted category:',  
            category_mapping[training_content.target_names[category]] 

以下屏幕截图提供了根据数据库输入预测对象的示例:

它是如何工作的...

本章的前一部分提供了有关实施分类器部分和一些样本结果的见解。分类器部分是基于训练好的朴素贝叶斯中的先前文本与测试序列中的关键测试之间的比较工作的。

另请参阅

请参阅以下文章:

使用标记化预处理数据

数据的预处理涉及将现有文本转换为学习算法的可接受信息。

标记化是将文本分成一组有意义的片段的过程。这些片段被称为标记。

如何做...

  1. 介绍句子标记化:
from nltk.tokenize import sent_tokenize
  1. 形成一个新的文本标记器:
tokenize_list_sent = sent_tokenize(text)
print "nSentence tokenizer:" 
print tokenize_list_sent 
  1. 形成一个新的单词标记器:
from nltk.tokenize import word_tokenize 
print "nWord tokenizer:" 
print word_tokenize(text) 
  1. 引入一个新的 WordPunct 标记器:
from nltk.tokenize import WordPunctTokenizer 
word_punct_tokenizer = WordPunctTokenizer() 
print "nWord punct tokenizer:" 
print word_punct_tokenizer.tokenize(text) 

标记器得到的结果如下所示。它将一个句子分成单词组:

词干化文本数据

词干处理过程涉及为标记器的单词创建适当的缩写单词。

如何做...

  1. 使用新的 Python 文件初始化词干处理过程:
from nltk.stem.porter import PorterStemmer 
from nltk.stem.lancaster import LancasterStemmer 
from nltk.stem.snowball import SnowballStemmer 
  1. 让我们描述一些要考虑的词,如下所示:
words = ['ability', 'baby', 'college', 'playing', 'is', 'dream', 'election', 'beaches', 'image', 'group', 'happy'] 
  1. 确定要使用的一组词干处理器
stemmers = ['PORTER', 'LANCASTER', 'SNOWBALL'] 
  1. 为所选的“词干处理器”初始化必要的任务:
stem_porter = PorterStemmer() 
stem_lancaster = LancasterStemmer() 
stem_snowball = SnowballStemmer('english') 
  1. 格式化表格以打印结果:
formatted_row = '{:>16}' * (len(stemmers) + 1) 
print 'n', formatted_row.format('WORD', *stemmers), 'n' 
  1. 反复检查单词列表,并使用选择的“词干处理器”对它们进行排列:
for word in words:
  stem_words = [stem_porter.stem(word), 
  stem_lancaster.stem(word), 
  stem_snowball.stem(word)] 
  print formatted_row.format(word, *stem_words) 

词干处理过程得到的结果如下截图所示:

使用分块分割文本

分块过程可用于将大文本分成小的、有意义的单词。

如何做…

  1. 使用 Python 开发并导入以下包:
import numpy as np 
from nltk.corpus import brown 
  1. 描述将文本分成块的函数:
# Split a text into chunks 
def splitter(content, num_of_words): 
   words = content.split(' ') 
   result = [] 
  1. 初始化以下编程行以获取分配的变量:
   current_count = 0 
   current_words = []
  1. 开始使用单词进行迭代:
   for word in words: 
     current_words.append(word) 
     current_count += 1 
  1. 获取必要数量的单词后,重新组织变量:
     if current_count == num_of_words: 
       result.append(' '.join(current_words)) 
       current_words = [] 
       current_count = 0 
  1. 将块附加到输出变量:
       result.append(' '.join(current_words)) 
       return result 
  1. 导入“布朗语料库”的数据,并考虑前 10000 个单词:
if __name__=='__main__': 
  # Read the data from the Brown corpus 
  content = ' '.join(brown.words()[:10000]) 
  1. 描述每个块中的字大小:
  # Number of words in each chunk 
  num_of_words = 1600 
  1. 初始化一对重要的变量:
  chunks = [] 
  counter = 0 
  1. 通过调用“分割器”函数打印结果:
  num_text_chunks = splitter(content, num_of_words) 
  print "Number of text chunks =", len(num_text_chunks) 
  1. 分块后得到的结果如下截图所示:

构建词袋模型

在处理包含大单词的文本文档时,我们需要将它们转换为几种类型的算术表示。我们需要将它们制定为适合机器学习算法的形式。这些算法需要算术信息,以便它们可以检查数据并提供重要的细节。词袋程序帮助我们实现这一点。词袋创建一个文本模型,使用文档中的所有单词来发现词汇。随后,它通过构建文本中所有单词的直方图来为每个文本创建模型。

如何做…

  1. 通过导入以下文件初始化一个新的 Python 文件:
import numpy as np 
from nltk.corpus import brown 
from chunking import splitter 
  1. 定义main函数并从“布朗语料库”中读取输入数据:
if __name__=='__main__': 
        content = ' '.join(brown.words()[:10000]) 
  1. 将文本内容分成块:
    num_of_words = 2000 
    num_chunks = [] 
    count = 0 
    texts_chunk = splitter(content, num_of_words) 
  1. 基于这些“文本”块构建词汇表:
    for text in texts_chunk: 
      num_chunk = {'index': count, 'text': text} 
      num_chunks.append(num_chunk) 
      count += 1
  1. 提取文档词矩阵,有效地计算文档中每个单词的出现次数:
  from sklearn.feature_extraction.text      
  import CountVectorizer
  1. 提取文档术语“矩阵”:
from sklearn.feature_extraction.text import CountVectorizer 
vectorizer = CountVectorizer(min_df=5, max_df=.95) 
matrix = vectorizer.fit_transform([num_chunk['text'] for num_chunk in num_chunks]) 
  1. 提取词汇并打印它:
vocabulary = np.array(vectorizer.get_feature_names()) 
print "nVocabulary:" 
print vocabulary 
  1. 打印文档术语“矩阵”:
print "nDocument term matrix:" 
chunks_name = ['Chunk-0', 'Chunk-1', 'Chunk-2', 'Chunk-3', 'Chunk-4'] 
formatted_row = '{:>12}' * (len(chunks_name) + 1) 
print 'n', formatted_row.format('Word', *chunks_name), 'n' 
  1. 迭代单词,并打印每个单词在不同块中的重现:
for word, item in zip(vocabulary, matrix.T): 
# 'item' is a 'csr_matrix' data structure 
 result = [str(x) for x in item.data] 
 print formatted_row.format(word, *result)
  1. 执行词袋模型后获得的结果如下所示:

为了理解它在给定句子上的工作原理,请参考以下内容:

文本分类器的应用

文本分类器用于分析客户情绪,在产品评论中,当在互联网上搜索查询时,在社交标签中,预测研究文章的新颖性等等。

posted @ 2024-04-16 15:45  绝不原创的飞龙  阅读(1)  评论(0编辑  收藏  举报