本章将介绍以下内容:
要求:一台 Raspberry Pi,最好是 3A+(但 Pi3或4也可以)
无头系统是指在键盘、屏幕和鼠标访问设备不方便的时间或地点,可以通过网络从另一台计算机上操作的计算机。无头访问可用于服务器系统、制造机器人和小工具:
与屏幕、键盘和鼠标连接的 Raspberry Pi
上图展示了一个有头的系统,用户可以坐在设备前面。您需要在机器人上安装屏幕、键盘和鼠标,因此移动性较差。您可以根据需要安装/拆卸它们,但这样做也很不方便。有一些便携式系统可以与Raspberry Pis像这样对接,但当机器人移动时,您需要断开连接或与机器人一起移动。
我曾看到过带有微型板载屏幕、由无线键盘和鼠标控制的机器人。不过,在本书中,我们将机器人作为无头设备使用:
机器人上的Raspberry Pi采用无头配置
上图中的 Raspberry Pi作为无头设备安装在机器人上。这台Raspberry Pi没有屏幕和键盘的束缚;这些都由另一台计算机来处理。代码、指令和信息通过无线网络从笔记本电脑发送到 Raspberry Pi,再从 Raspberry Pi发送出去。许多代码示例都是自主运行的,计算机可以启动/停止这些示例。手机可以启动和停止自主行为,查看机器人的状态,或者直接驱动机器人,完全不需要连接笔记本电脑。这个 Raspberry Pi没有屏幕和键盘。
虽然您通常不需要屏幕和键盘,但还是值得准备一下,以防与 Raspberry Pi失去联系时,它拒绝通过网络做出响应。这时,您可以使用屏幕和键盘与它连接,查看发生了什么。
对于无头访问Raspberry Pi,我们将使用Secure Shell(SSH)。SSH提供了向Pi发送指令的命令行,以及向 Pi 传输文件的文件传输系统。
让Pi成为无头机器人可以让它自由行动。它无需携带屏幕和键盘,也无需为其供电,从而保持了机器人的轻便。由于显示器和键盘非常笨重,因此无头设计使机器人更小巧。它还能鼓励制造者思考机器人的自主行为,因为你不能总是向机器人输入命令。
现在你已经看到了无头系统的功能,让我们来修改SD卡,使 Raspberry Pi启动后即可作为无头设备使用。我们需要先设置 Wi-Fi:
并创建文件:
让我们逐行查看该文件:
第一行必须指定ISO/IEC alpha2国家代码。您可以在 https://datahub.io/core/country-list 找到适合您所在位置的国家代码。如果没有,Raspberry Pi OS 将禁用Wi-Fi适配器。
接下来的两行允许其他工具更新配置。
文件的最后四行定义了机器人和 Raspberry Pi 将连接的 Wi-Fi网络。请使用您自己的网络详细信息,而不要使用此处的占位符。预共享密钥(PSK)也称为 Wi-Fi 密码。这些信息应与您将笔记本电脑或手机连接到Wi-Fi网络时使用的信息相同。我建议在电脑上保留一份 wpa_supplicant.conf 文件副本,以便在其他 Raspberry Pi SD 卡上使用。
假设您的SSID和PSK正确无误,您的 Raspberry Pi现在已经在Wi-Fi网络上注册。不过,现在你需要找到它。Raspberry Pi使用动态地址(DHCP)。每次将它连接到网络时,它都可能获得不同的地址。访问Wi-Fi路由器的管理页面并记下IP地址在短期内有效。但每次更改地址时都这样做会令人沮丧,而且在某些情况下可能无法使用。
幸运的是,Raspberry Pi使用了一种名为mDNS(多播域名系统)的技术,因此附近的电脑都能找到它。客户端计算机会广播一条本地消息,询问是否有名称为 raspberrypi.local 的设备,Raspberry Pi会回复地址,以便找到它。这也被称为Zeroconf和Bonjour。因此,你需要做的第一件事就是确保你的电脑能做到这一点。
如果你使用的是 macOS,那么你的电脑已经在运行Bonjour软件,它已经具备mDNS功能。此外Ubuntu和Fedora桌面版本也早已兼容 mDNS。在其他 Linux 桌面上,你需要找到它们的Zeroconf或 Avahi说明。许多最新的 Linux桌面都默认启用了这一功能。
但如果你使用的是Windows,则需要使用Bonjour软件。下面我们就来看看如何设置。
如果你安装了最新版本的Skype或iTunes,你就会拥有这款软件。你可以使用本指南检查它是否已经存在并启用它:https://smallbusiness.chron.com/enable-bonjour-65245.html。
你可以在命令提示符中使用以下命令来检查它是否已经运行:
C:\Users\danny>ping raspberrypi.local如果你看到这个,说明你已经安装了 Bonjour:
64 bytes from 192.168.0.53 (192.168.0.53): icmp_seq=1 ttl=64 time=0.113 ms64 bytes from 192.168.0.53 (192.168.0.53): icmp_seq=2 ttl=64 time=0.079 ms如果你看到这个,你需要安装它:
Ping request could not find host raspberrypi.local. Please check the name and try again.为此,请浏览 Apple Bonjour For Windows 网站 https://support.apple.com/downloads/bonjour_for_windows 并下载,然后安装 Download Bonjour Print Services for Windows。运行该程序后,Windows 就能按名称查询 mDNS 设备了。
Raspberry Pi的绿灯应该已经停止闪烁,只能看到红色的电源指示灯。这表明Pi已完成启动并连接到网络。
如果一切顺利,电脑将显示已连接到 Pi:
$ ping raspberrypi.localPING raspberrypi.local (192.168.0.53) 56(84) bytes of data.64 bytes from 192.168.0.53 (192.168.0.53): icmp_seq=1 ttl=64 time=0.113 ms64 bytes from 192.168.0.53 (192.168.0.53): icmp_seq=2 ttl=64 time=0.079 ms64 bytes from 192.168.0.53 (192.168.0.53): icmp_seq=3 ttl=64 time=0.060 ms64 bytes from 192.168.0.53 (192.168.0.53): icmp_seq=4 ttl=64 time=0.047 ms如果 Raspberry Pi 似乎没有响应ping操作,你可以采取以下步骤尝试诊断和补救。尝试以下步骤:
我们现在已经验证了 Pi 与网络的连接,并一路排除了各种问题。我们可以通过
ping 找到它。现在我们知道它就在那里,让我们连接到它。
windows推荐:MobaXterm或git bash, Linux和MacOS可直接使用bash,Linux的PAC也挺不错。下面以跨平台但是不太好用的PuTTY为例:
如果您已经使用SSH客户端,请注意并非所有Windows命令行SSH客户端都支持mDNS。
PuTTY 是访问 SSH 的便捷工具,适用于 Windows、Linux 和 Mac。这些操作系统的安装信息可在 https://www.ssh.com/ssh/putty/上找到。
从上述链接安装好PuTTY后,让我们将它连接到 Raspberry Pi。继续
启动 PuTTY。你会看到如图的界面。在 "主机名(或 IP 地址)"框中输入 raspberrypi.local,然后点击 "打开 "登录到你的 Pi:
第一次执行此操作时,PuTTY 会显示安全警告,要求你添加 Pi 的密钥(如果你信任它)。单击 "是";只有当另一个具有相同主机名的设备(例如新的 Raspberry Pi)使用不同的密钥出现时,PuTTY 才会再次询问你。当你看到 "Login as"提示时,输入pi,按Enter,并使用密码raspberry。现在你将看到类似下图的内容,表明你已连接到 Pi:
我们可以使用raspi-config工具来完成许多这些任务,它是一个菜单系统,用于在 Raspberry Pi OS 上执行配置任务。
sudo raspi-config在raspi-config中选择Network Options(网络选项)-> Hostname(主机名):
在raspi-config顶部菜单中选择"更改用户密码":
使用Tab按钮转到"完成"项,然后按 Enter:
下一个屏幕会询问您是否要重启Pi。选择是并按回车键:
Raspberry Pi将开始重置,在重置过程中,PuTTY会话将被断开。等待几分钟,Pi上的绿色活动指示灯会闪烁一下,然后稳定下来。PuTTY会告诉你已经失去了与它的连接。此时 Pi已关闭。红灯将一直亮着,直到你拔掉电源:
等待绿灯活动停止;PuTTY会检测到它已断开连接。现在可以安全断开电源了。
在不预期的情况下拔掉Raspberry Pi的电源可能会导致文件丢失和 SD卡损坏。您可能会丢失工作并损坏 SD 卡。请务必使用正确的关机程序。
钉钉或微信号: pythontesting 微信公众号:pythontesting