人们使用树莓派做各种各样的事情。有哪些用途让你特别好奇的吗？最近，我在一个电话会议上听到有人说开源社区是好奇心和解决问题的文化的结合。好奇心是我们解决问题的基础。在解决各种规模的问题时，我们使用了大量的开源工具，其中包括在功能极为方便的树莓派上运行的 Linux。我们每个人都有各种不同的生活经历，所以我向我们的作者社区询问了他们所遇到的最奇特的树莓派用途。我有一种预感，这些令人惊奇的构建将会为其他人激发灵感。使用树莓派进行实验对我来说，树莓派是在家庭网络中增加额外开发资源的绝佳工具。如果我想要创建一个新的网站或者尝试一个新的软件工具，我不必让我的桌面 Linux 机器因为一堆我可能只在实验时使用一次的软件包而变得笨重。相反，我会将它设置在我的树莓派上。如果我认为我将要做一些冒险的事情，我会使用备份的启动环境。我有两张 microSD 卡，这样我就可以在树莓派上插一张卡，同时设置第二张卡进行任何我想要的实验。额外的 microSD 卡成本并不高，但在我想要在第二个镜像上进行实验的时候，它能节省大量时间。只需关机，换下 microSD 卡，重新启动，立即就可以在专用的测试系统上工作。当我不进行实验时，我的树莓派充当打印服务器，将我的非 WiFi 打印机连接到家庭网络上。它还是一个方便的 SSH 文件服务器，让我可以快速备份重要文件。— Jim Hall树莓派的流行我见过的树莓派最令人惊讶的事情是它使小型单板计算机的概念变得流行和通俗化，并使其真正实用于大众。在树莓派出现之前，我们有类似的小型单板计算机，但它们往往是小众的、昂贵的，并且从软件角度来看让人拒之千里。树莓派价格便宜，便宜到任何人都可以轻松为一个项目获得一台（不考虑目前难以获得的情况）。一旦它变得便宜，人们就会克服软件挑战，使其足够好以解决许多基本的计算任务，甚至可以将完整的真正的计算机用于特定任务，而不仅仅是微控制器。我们拥有大量好的、相对廉价的小型单板计算机，这促进了各种调试、玩耍和 实验。人们愿意尝试新的想法，甚至推动了更多业余爱好者的硬件开发来支持这些想法。老实说，这是我从树莓派看到的最令人惊奇和激进的事情：它根本性地改变了人们对计算的认知，尤其是树莓派擅长的领域，并不仅仅催生了自己的生态系统，现在还催生了无数其他多样化的生态系统。— John ‘Warthog9' Hawley蜜蜂的树莓派在 2018 年，我和我的弟弟曾经养过几个蜂箱，并使用树莓派和各种传感器来监测蜂箱的温度和湿度。我们还计划在夏天实施蜂箱秤，以观察蜜蜂的产蜜情况，并在冬天测量重量，以查看蜜蜂是否有足够的食物。不过我们最终没有实施这个计划。我们的小型监测解决方案基于树莓派 2B，运行 Raspbian Stretch（基于 Debian 9），并连接了一个温湿度传感器（DHT11）。在蜂箱内我们有三到四个这样的传感器，用于测量蜂箱入口孔、盖子下方和最低框架的温度。我们直接将传感器连接到树莓派，并使用 Python\_DHT 传感器库读取数据。我们还建立了 InfluxDB、Telegraf，并最终设置了 Grafana 来可视化数据。如果你想了解更多关于我们的设置的信息，我们在 Linux Magazine 上发表了一篇关于我们小型监测解决方案的文章。— Heike Jurzik树莓派的复古计算我希望用树莓派创建一个模拟如何使用“开关和指示灯”将机器语言编程到旧式计算机的项目。使用树莓派的 GPIO 引脚，这看起来相当简单。例如，他们的在线手册上展示了如何使用 GPIO 开关控制 LED 的开关，或者使用按钮进行输入。我认为只需一些 LED 和开关，再加上在树莓派上运行的小程序，就可以模拟旧式计算机。不过，我缺乏空闲时间来从事这样的项目，这就是为什么我编写了 Toy CPU 来模拟它。— Jim Hall使用树莓派打造玩具当我女儿四岁的时候，她要求圣诞节时给她买一个“巨齿鲨音乐盒”。她能在脑海中完美地想像出来。它会是粉红色的、闪闪发光的，上面有她的名字。当她打开盒子时，会播放这部热门电影的主题曲。她可以将巨齿鲨和其他宝贝都放在盒子里。在网上和商店里到处搜索后，我发现没有一个能与她的想象相媲美。于是我和丈夫决定，在我们自己的玩具店（也就是他的家庭办公室）自己动手制作一个。而这一切的核心当然是树莓派。他使用光传感器和 Python 脚本，让音乐在恰当的时刻播放。我们将科技设备谨慎地放置在音乐盒的底部，并根据她的审美进行装饰。那一年，开源技术让圣诞魔法成为了可能！— Lauren Pritchett（题图：MJ/aa8f1412-0f1d-4780-99db-22d6522010b7）via: https://opensource.com/article/23/3/most-curious-uses-raspberry-pi作者：AmyJune Hineline 选题：lkxed 译者：ChatGPT 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
学习如何使用 Lua 编程语言为物联网（IoT）设备编程，并与树莓派上的通用输入/输出（GPIO）引脚互动。Lua 是一种有时会被误解的语言。它与 Python 等其他语言不同，但它是一种通用的扩展语言，广泛用于游戏引擎、框架等。总的来说，我发现 Lua 对开发人员来说是一个有价值的工具，可以让他们以一些强大的方式增强和扩展他们的项目。你可以按照 Seth Kenlon 的文章《Lua 值得学习吗？》的介绍下载并运行常用的 Lua，该文章中还包括了简单的 Lua 代码示例。但是，要充分利用 Lua，最好将它与采用该语言的框架一起使用。在本教程中，我演示了如何使用名为 Mako Server 的框架，该框架旨在使 Lua 程序员能够轻松地编写 IoT 和 Web 应用代码。我还向你展示了如何使用 API 扩展此框架以使用树莓派的 GPIO 引脚。要求在学习本教程之前，你需要一个可以登录的正在运行的树莓派。虽然我将在本教程中编译 C 代码，但你不需要任何 C 代码经验。但是，你需要一些使用 POSIX 终端的经验。安装首先，在树莓派上打开一个终端窗口并安装以下工具，以使用 Git 下载代码和编译 C 代码：$ sudo apt install git unzip gcc make 接下来，通过运行以下命令编译开源 Mako Server 代码和 lua-periphery 库（树莓派的 GPIO 库）：$ wget -O Mako-Server-Build.sh \ https://raw.githubusercontent.com/RealTimeLogic/BAS/main/RaspberryPiBuild.sh 查看脚本以了解它的作用，并在你觉得没问题后运行它：$ sh ./Mako-Server-Build.sh 编译过程可能需要一些时间，尤其是在较旧的树莓派上。编译完成后，脚本会要求你将 Mako Server 和 lua-periphery 模块安装到 /usr/local/bin/。我建议安装它以简化软件的使用。别担心，如果你不再需要它，你可以卸载它：$ cd /usr/local/bin/ $ sudo rm mako mako.zip periphery.so 要测试安装，请在终端中输入 mako。这将启动 Mako 服务器，并在你的终端中看到一些输出。你可以按 CTRL+C 停止服务器。IoT 和 Lua现在 Mako 服务器已在你的树莓派上设置好，你可以开始对 IoT 和 Web 应用进行编程，并使用 Lua 操作树莓派的 GPIO 引脚。Mako Server 框架为 Lua 开发人员提供了一个强大而简单的 API 来创建物联网应用，而 lua-periphery 模块让 Lua 开发人员可以与树莓派的 GPIO 引脚和其他外围设备进行交互。首先创建一个应用目录和一个 .preload 脚本，其中插入用于测试 GPIO 的 Lua 代码。.preload 脚本是一个 Mako 服务器扩展，在应用启动时作为 Lua 脚本加载和运行。$ mkdir gpiotst $ nano gpiotst/.preload 将以下内容复制到 Nano 编辑器 中并保存文件：-- Load periphery.so and access the LED interface local LED = require('periphery').LED local function doled() local led = LED("led0") -- Open LED led0 trace"Turn LED on" led:write(true) -- Turn on LED (set max brightness) ba.sleep(3000) -- 3 seconds trace"Turn LED off" led:write(false) -- Turn off LED (set zero brightness) led:close() end ba.thread.run(doled) -- Defer execution -- to after Mako has started 上面的 Lua 代码使用你编译并包含在 Mako 服务器中的 Lua-periphery 库控制树莓派 LED。该脚本定义了一个名为 doled 的函数来控制 LED。该脚本首先使用 Lua require 函数加载 periphery 库（共享库 periphery.so）。返回的数据是一个包含所有 GPIO API 函数的 Lua 表。但是，你只需要 LED API，你可以通过在调用 require 后附加 .LED 来直接访问它。接下来，代码定义了一个名为 doled 的函数，它执行以下操作：通过调用 periphery 库中的 LED 函数，并将字符串 led0 传给它，打开树莓派主 LED，识别为 led0。将消息 Turn LED on 打印到跟踪（控制台）。通过调用 LED 对象上的 write 方法并将布尔值 true 传递给它来激活 LED，该值设置 LED 的最大亮度。通过调用 ba.sleep(3000) 等待 3 秒。将消息 Turn LED off 打印到跟踪。通过调用 LED 对象上的 write 方法并将布尔值 false 传递给它来停用 LED，这会将 LED 的亮度设置为零。通过调用 LED 对象上的 close 函数关闭 LED。在 .preload 脚本的末尾，doled 函数作为参数传递给 ba.thread.run 函数。这允许将 doled 函数的执行推迟到 Mako 服务器启动之后。要启动 gpiotst 应用，请按如下方式运行 Mako 服务器：$ mako -l::gpiotst 控制台中打印以下文本：Opening LED: opening 'brightness': Permission denied. 访问 GPIO 需要 root 访问权限，因此按 CTRL+C 停止服务器并重新启动 Mako 服务器，如下所示：$ sudo mako -l::gpiotst 现在树莓派 LED 亮起 3 秒。成功！Lua 解锁 IoT在本入门教程中，你学习了如何编译 Mako 服务器，包括 GPIO Lua 模块，以及如何编写用于打开和关闭树莓派 LED 的基本 Lua 脚本。在以后的文章中，我将在本文的基础上进一步介绍 IoT 功能。同时，你可以通过阅读它的 文档 来更深入地研究 Lua-periphery GPIO 库，以了解有关功能以及如何将其与不同外设一起使用的更多信息。要充分利用本教程，请考虑关注 交互式 Mako Server Lua 教程 以更好地了解 Lua、Web 和 IoT。编码愉快！（题图：MJ/4514210d-5697-4cd3-8c44-450bbe56be64）via: https://opensource.com/article/23/3/control-your-raspberry-pi-lua作者：Alan Smithee 选题：lkxed 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
用 CrowPi 树莓派套件了解关于计算机的一切
CrowPi 是一个超棒的树莓派项目系统，安装在一个笔记本电脑般的外壳里。我喜欢历史，也喜欢计算机，因此相比于计算机如何变成个人配件，我更喜欢听它在成为日常家用电器前的故事。我经常听到的一个故事 是很久以前（反正在计算机时代算久远了）的计算机是多么的简单。事实上，它们简单到对于一个好奇的用户来说，弄清楚如何编程并不是十分困难。再看看现代计算机，它具有面向对象的编程语言、复杂的 GUI 框架、网络 API、容器等，但愈发令人担忧的是，计算工具正变得越来越难懂，对于那些没有接受过专门培训的人来说基本上无法使用。从树莓派在 2012 年发布之日起，它就一直被定位为一个教育平台。一些第三方供应商通过附加组件和培训套件支持树莓派，以帮助所有年龄段的学习者探索编程、物理计算和开源。然而，直到最近，很大程度上还是要由用户来弄清楚市场上的所有部件如何组合在一起，直到我最近买了 CrowPi。CrowPi2 介绍乌鸦是非常聪明的鸟。它们能识别并记住面孔，模仿听到的声音，解决复杂的谜题，甚至使用工具来完成任务。CrowPi 使用乌鸦作为其徽标和名字是恰当的，因为这个设备充满了探索、实验、教育的机会，最重要的是，充满了乐趣。其设计很巧妙：它看起来像笔记本电脑，但远不止于此。当你从机壳中取出蓝牙键盘时，它会显示一个隐藏的电子设备工坊，配有 LCD 屏幕、16 个按钮、刻度盘、RFID 传感器、接近传感器、线路板、扬声器、GPIO 连接、LED 阵列等等。而且这一切都是可编程的。顾名思义，该装置本身完全由树莓派提供支持，它牢固地固定在机壳底部。默认情况下，你应该用电源适配器为设备充电，包装附带一个壁式插头，你可以将其插入机壳，而不是直接为树莓派供电。你还可以使用插入外部微型 USB 端口的电池电源。机壳内甚至还有一个抽屉，方便你存放电池。这样做的时候，有一根 USB 线从电池抽屉中弹出，并插入机壳电源端口，因此你不会产生这是一台“普通”笔记本电脑的错觉。然而，这样一台设备能够有如此美观的设计已经很理想了！首次启动系统CrowPi2 提供一张安装了 Raspbian 系统，贴有 “System” 标签的 microSD 卡，不过它同时还提供了装载 RetroPie 的第二张 microSD 卡。作为一个负责任的成年人（咳咳），我自然是先启动了 RetroPie。RetroPie 总是很有趣，CrowPi2 附带两个超任风格的游戏控制器，确保你能获得最佳的复古游戏体验。令人赞叹不已的是，启动实际的 Raspbian 系统的过程同样有趣，甚至可以说更有趣。它的登录管理器是一个自定义项目中心，有一些快速链接，如编程示例项目、Python 和 Arduino IDE、Scratch、Python 示例游戏、Minecraft 等。你也可以选择退出项目中心，只使用桌面。对于习惯使用树莓派或 Linux 的人来说，CrowPi 桌面很熟悉，不过它也足够简单，所以很容易上手。左上角有应用程序菜单，桌面上有快捷图标，右上角有网络选择和音量控制的系统托盘等等。CrowPi 上有很多东西可供选择，所以你可能很难决定从哪里开始。对我来说，主要分为四大类：编程、物理电子学、Linux 和游戏。盒子里有一本使用说明，所以你会知道你需要怎样进行连接（例如，键盘是电池供电的，所以它有时确实需要充电，它和鼠标总是需要一个 USB 适配器）。虽然说明书很快就能读完，但这一例子也充分体现了 CrowPi 团队是如何认真对待说明书的。编程如果你想学习如何编码，在 CrowPi 上有很多成功的途径。你可以从中选择你觉得最满意的路径。1、ScratchScratch 是一个简单的可视化编码应用程序，可让你像拼 乐高积木 一样将代码块组合在一起，制作出游戏和互动故事。这是开启编程之旅最简单的方法，我曾见过年仅 8 岁的孩子会花数小时来研究自己设计的游戏的最佳算法。当然，它不仅适合孩子们！成年人也可以从中获得很多乐趣。不知道从哪里开始？包装盒中有一本 99 页的小册子（打印在纸张上），其中包含 Scratch 课程和项目供你尝试。2、Java 和 MinecraftMinecraft 不是开源的（虽然有 几个开源项目 复刻了它），但它有足够的可用资源，因此也经常被用来教授编程。Minecraft 是用 Java 编写的，CrowPi 同时装载有 Minecraft Pi Edition 和 BlueJ Java IDE ，如此可使学习 Java 变得比以往更容易、更有趣。3、Python 和 PyGameCrowPi 上有几个非常有趣的游戏，它们是用 Python 和 PyGame 游戏引擎 编写的。你可以玩这些游戏，然后查看其源代码以了解游戏的运行方式。CrowPi 中包含 Geany、Thonny 和 Mu 编辑器，因此你可以使用 Python 立即开始编程。与 Scratch 一样，包装盒中有一本包含有课程的小册子，因此你可以学习 Python 基础知识。电子器件隐藏在键盘下的物理电子工坊本质上是一系列 Pi Hat（附着在上的硬件）。为了让你可以认识所有的组件，CrowPi 绘制了一张中英双语的折页图进行详细的说明。除此之外还有很多示例项目可以帮助你入门。 以下是一张小清单：你好：当你与 CrowPi 说话时，LCD 屏幕上打印输出“你好”。入侵警报：使用接近传感器发出警报。远程控制器：让你能够使用远程控制（是的，这个也包含在盒子里）来触发 CrowPi 上的事件。RGB 俄罗斯方块：让你可以在 LED 显示屏上玩俄罗斯方块游戏。语音识别：演示自然语言处理。超声波音乐：利用距离传感器和扬声器创建简易版的 特雷门琴 Theramin （LCTT 译注：世上唯一不需要身体接触的电子乐器）。这些项目仅仅是入门级别而已，因为你还可以在现有的基础上搭建更多东西。当然，还有更多内容值得探索。包装盒里还有网络跳线、电阻、LED 和各种组件，这样你闲暇时也可以了解树莓派的 GPIO （通用输入输出端口）功能的所有信息。不过我也发现了一个问题：示例项目的位置有点难找。找到演示项目很容易（它们就在 CrowPi 中心上），但源代码的位置并不是很容易被找到。我后来发现大多数示例项目都在 /usr/share/code 中，你可以通过文件管理器或终端进行访问。Linux树莓派上运行的是 Linux 系统。如果你一直想更深入了解 Linux，那么 CrowPi 同样会是一个很好的平台。你可以探索 Linux 桌面、终端以及几乎所有 Linux 或开源应用程序。如果你多年来一直在阅读有关开源的文章，并准备深入研究开源操作系统，那么 CrowPi 会是你想要的平台（当然还有很多其他平台也可以）。游戏包装盒中包含的 RetroPie SD 卡意味着你可以重新启动切换为复古游戏机，并任意玩各种老式街机游戏。它跟 Steam Deck 并不完全相同，但也是一个有趣且令人振奋的小游戏平台。因为它配备的不是一个而是两个游戏控制器，所以它非常适合多人合作的沙发游戏。最重要的是，你不仅可以在 CrowPi 上玩游戏，还可以制作自己的游戏。配备螺丝刀自我坐下开始使用 CrowPi2 以来已经大约两周，但我还没有通关所有项目。有很多个晚上，我不得不强迫自己停下摆弄它，因为即使我厌倦了一个项目，我也会不可避免地发现还有其他东西可以探索。总而言之，我在盒子里找到了一个特别的组件，这个组件让我马上知道 CrowPi 和我就是天造地设：它是一把不起眼的小螺丝刀。盒子上没有撕开就不保修的标签。CrowPi 希望你去修补、拆解、探索和学习。它不是笔记本电脑，甚至也不仅仅是个树莓派；而是一个便携的、低功耗的、多样化的、开源的学习者工具包。via: https://opensource.com/article/21/9/raspberry-pi-crowpi2作者：Seth Kenlon 选题：lujun9972 译者：XiaotingHuang22 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
用树莓派取代食品售货机上的投币箱是一个天才之举。作为在公共图书馆工作的教育工作者，我一直在关注 树莓派 的有趣用途。在我看来，得克萨斯州达拉斯市的 问答售货机 Trivia Vending Machine 项目是这些神奇设备最具创意和最有趣的用途之一。使用树莓派取代食品售货机上的投币箱是 Greg Needel 和他的团队的一个天才之作。这个想法的潜在用途是深远的。请观看下面这个 YouTube 短视频，了解问答自动售货机的运行情况。最初的问答售货机专注于科学问题，但你可以制作一个问答售货机来回答任何问题：历史、公民、文学等等。如果你鼓励学生写自己的问题，并回答对方的问题，那将是最有吸引力的用途。请考虑这样：自动售货机可以不发放食物，而是发放当地企业的优惠券。我谋生的方式之一是教吉他课，我很乐意捐出一节吉他课作为问答售货机的优惠券。然而，学生必须积累适当数量的积分才能获得我的一堂吉他课。把你的想象力再延伸一点。是否有可能让学生解决逻辑谜题，以便从自动售货机获得食物（或优惠券）？是的，这并不难创造。也许是数独谜题、Wordle、KenKen、Sokoban 或任何其他谜题。学生可以用触摸屏玩这些谜题。国际象棋怎么样？当然，学生可以通过解决象棋谜题来获得食物（或优惠券）。你是否注意到视频中原来的问答售货机又大又重？ 设计一个更小的，可能是滚动手推车大小的三分之一，这可以在学校、图书馆、博物馆和创客嘉年华之间更容易运输。问答售货机的内部由步进电机组成。你可以在网上购买二手的。在网络上搜索“二手自动售货机电机”会出现 Vending World 和 VendMedic 网站。如果你是创客空间的成员，请向其他成员介绍问答售货机。这是一个开放的发明，没有专利，所以任何人都可以制造它。（谢谢你，Greg Needel）我想为这样的设备编写代码并不太难。如果有人可以创建此类代码的 GitHub 仓库，以及可能附带的一些解释性截屏，那就太好了。虽然问答售货机没有在红牛创意大赛中获奖，但这项发明还是值得获奖的。应该有人找到 Greg Needel 并给他一个合适的奖品。该奖项应该是什么样子的？可能是 2.5 万或 5 万美金的样子。我为 Greg Needel 和他的创意团队欢呼三声。他们把树莓派带到了这种计算机的发明者所希望的方向：修理工的快乐。大胆、美丽、开放。你还能要求更多吗？最后一件事。问答售货机是几年前使用早期的树莓派型号制作的。当前的树莓派速度更快，响应更快。因此，你在上述视频中注意到的任何交互延迟在今天的树莓派上已不复存在。哦，我非常想要一块糖果。我砸吧砸吧嘴。提醒我，我需要赚取多少积分才能获得士力架？不惜一切代价，我会不惜一切代价。via: https://opensource.com/article/23/3/raspberry-pi-trivia-vending-machine作者：Phil Shapiro 选题：lkxed 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
用树莓派串流网络摄像头的实时视频，并将视频重新串流到社交网络。出于各种原因，人们需要流式传输网络摄像头的实时视频。树莓派平台很适合此类应用。对于实时流媒体服务器等连续应用，它只需要很少的电力。可以与 Raspicam 相机模块、USB 摄像头或其他网络视频信号进行通信。该系统是一个 RTMP、HLS 和 SRT 服务器。这篇文章展示了如何将树莓派设置为流媒体服务器以使用 HLS 流媒体。你需要一个视频源才能把它作为流媒体服务器使用。即使没有树莓派，你也可以完成这里描述的步骤。此外，还有针对 Windows、Linux 和 macOS 的进一步安装说明。设置该应用程序是 datarhei Restreamer，是 datarhei Core 的图形用户界面。datarhei Core 在底层运行著名的媒体框架 FFmpeg。开始使用 datarhei Restreamer 的最简单方法是安装官方的 Docker 容器。通过 Docker Hub 的程序下载和安装是通过 docker pull 命令自动进行的。安装后，Restreamer 立即启动。如果你没有树莓派，可以使用 datarhei Restreamer GitHub 页面上的其他 Docker 容器之一（例如，支持 AMD64 或 GPU Cuda）。datarhei Restreamer 和 datarhei Core 都是 Apache 许可证 2.0 下的开源软件。以下是在支持 GPU 的树莓派 3 及以上机型上的安装命令：docker run -d --restart=always --name restreamer \ -v /opt/restreamer/config:/core/config -v /opt/restreamer/data:/core/data \ --privileged \ -p 8080:8080 -p 8181:8181 \ -p 1935:1935 -p 1936:1936 \ -p 6000:6000/udp \ datarhei/restreamer:rpi-latest 无论你使用哪条命令，你只需要 --privileged 选项来访问本地设备，如 USB 摄像头。安装后，将 Raspberry Pi 连接到本地网络。然后在浏览器中进入 http://device-ip:8181/ui 打开基于 Web 的 GUI。你应该看到以下屏幕：分配好密码，系统就可以进行首次登录了。向导正在开始配置第一个视频源。提示：上述 Docker 命令将带有登录名和密码的配置数据永久保存在 /opt/restreamer/config 文件夹中。实施该应用程序由三个逻辑部分组成：视频输入、系统仪表板和视频输出。视频输入和输出相互独立运行。视频输入该向导将帮助你从头开始创建一个视频源。这可以是一个 USB 视频源、树莓派摄像头，或者是一个网络源，如 IP 摄像头或来自网络的 m3u8 文件。HLS、RTMP 和实时 SRT 协议都可以使用。该向导可以帮助正确配置视频分辨率和声音。在最后一步，你可以分配不同 知识共享 Creative Commons 许可证。值得看一下视频信号的设置。你会发现几个选项，例如为垂直视频平台转码或旋转视频。仪表板成功创建视频信号后，你将进入仪表板。它是所有其他设置的中心起点。要看到程序的全部功能，你可以在系统偏好中切换到专家模式。仪表板包含以下内容：视频信号设置。RTMP、SRT、HLS 服务器和快照的活动内容 URL。用于重新流式传输的所有活动发布服务。启动向导来创建额外的视频源。系统菜单。实时视频信号统计。实时系统监控。视频输出有不同的方法来播放视频信号。这个 发布网站 是 Restreamer 最简单、即时可用且内部托管的登录页面。播放页面也可以传输到 Chromecast 和 AirPlay。调整背景图片和在播放器中添加标识等基本设置可以直接在 Restreamer 中进行。那些懂 HTML 的人可以为自己定制页面。高级用户可以注入代码，以使用网站的外部模块，如聊天。视频播放器下的统计模块显示活跃的观众和所有视图。“ 分享 Share ” 按钮支持直播流的分发。网站的 HTTPS 证书通过 Let's Encrypt 激活，无需太多努力。通过简单的 HTTPS 端口转发到树莓派的 LAN IP，网站就可以公开访问。发布服务是重新传输内容的一个好方法。对于流行的网站，如 YouTube、Twitch 或 PeerTube，有许多现成的模块。同样，对于其他流媒体软件、流行的 CDN 也是如此。对视频协议的完全控制允许流式传输到所有支持 RTMP、HLS 和 SRT 的目标地址。一个带有视频播放器的 HTML 片段代码在网页上工作。使用树莓派播放流媒体节省电力这篇文章展示了如何将树莓派变成一个流媒体服务器。树莓派平台允许你以省电的方式与各种视频信号互动。预先的设置使配置服务器变得很容易，高级用户可以对系统进行一些调整。你可以用它来做回放，在网站上托管实时流式传输，或使用 OBS 集成到系统环境中。使用不同的视频源和传输协议作为项目的基础，提供了极大的灵活性，使这个系统具有高度的可定制性。此外，带有 FFmpeg 的 datarhei Core 使软件开发者很容易扩展所有的应用进程。该程序将树莓派变成一个专门的流媒体服务器。你可以独立地直播到网站或多路直播到不同的视频网络，而无需额外的视频提供商。可以使用登录名 “admin” 和密码 “demo” 在项目网站上安装之前测试功能齐全的 演示。via: https://opensource.com/article/23/3/raspberry-pi-streaming-server作者：Sven Erbeck 选题：lkxed 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
用树莓派集群进行并行和分布式计算
这个使用树莓派集群的学术实验向远程教育学生介绍了并行和分布式计算（PDC）的概念。自从树莓派推出以来，创造者们已经在这个简陋的袖珍芯片系统上开展了无数的计算机科学教育项目。其中包括许多探索低成本树莓派集群的项目，以介绍 并行和分布式计算 Parallel and Distributed Computing （PDC）概念。英国 开放大学 Open University （OU）为不同年龄、经历和背景的学生提供远程教育，这就提出了一些在更传统的大学中没有面临的问题。开放大学使用树莓派集群向远程教育学生介绍 PDC 概念的实验始于 2019 年，并在一篇 学术论文 中进行了介绍，但值得更广泛地了解。该项目使用基于 OctaPi 教程 的树莓派集群，该指令由 GCHQ 在知识共享许可协议下发布。八个树莓派使用一个路由器和一个交换机连接在一个私人网络中。其中一个树莓派充当主控，而其他的是服务器，将结果反馈给主控设备。用 Python 编写的程序运行在主控树莓派，而 dispy 包将活动分发在集群的各个处理核心上。OctaPi 教程他们为该集群开发了三个程序，你可以从 Git 仓库 下载它们。其中两个程序是基于文本的，并与搜索问题有关：旅行推销员和密码散列。作为完整的搜索问题，这些是教授 PDC 概念的理想选择。第三个程序是图形化的。图像组合器将三幅图像作为输入，其中有不重叠的障碍物。它通过对三幅图像的 RGBA 值进行逐个像素的比较并选择中位数来构建一个没有任何障碍物的图像。使用集群开放大学是一个远程学习机构，所以学生通过网页界面访问集群。对集群的远程访问使用大学的 OpenSTEM 实验室的基础设施。10 个集群（8 个用树莓派 4 构建，2 个用树莓派 3B+ 建造）被安装在机架上，用网络摄像头对准每个集群。学生们选择要运行的程序，使用的核心数量，以及所选程序的参数。作为输出，他们可以看到该程序在单个树莓派上运行的时间与使用所选核数的集群的时间相比。学生还可以看到程序的输出，如密码散列结果、最小和最大的旅行推销员路线，或未遮挡的图像。网络摄像头显示了集群的实时流。主控树莓派有一个 LED 显示屏，显示程序运行时的状态。网络摄像头让学生清楚地知道，他们是在用真正的专用硬件做实验，而不是得到模拟的或预先录制的结果。每个程序都有两个与之相关的活动，描述了程序设计和 PDC 操作的不同方面。其中一个主要的学习点是，PDC 计算可以提供显著的性能优势，但代价是划分和分发问题以及反过来重新组合结果所花费的时间和资源。第二个学习点是，效率受程序设计的影响很大。学生喜欢目前，树莓派集群的使用是可选的。不过根据目前的研究结果，学生们很喜欢它，并因能远程接触到物理硬件而受到激励。一位学生说：“能够使用真正的集群，而不是让它虚拟化，这真的很有趣”。另一名学生补充说：“能够真正看到集群的工作，看到多核工作的真实效果，这真的很令人兴奋。能够亲自尝试，而不仅仅是阅读有关理论，这真是太好了！”学生们正在使用集群开展旨在教授 PDC 原理的学习活动，而不是编写和运行他们自己的程序。开发低成本的树莓派集群供远程大学学生使用的经验表明，远程实践活动对教授 PDC 概念和吸引学生有好处。当我向该项目背后的团队成员之一 Daniel Gooch 询问时，他说：“对我来说，我们的不同之处在于，我们采用了一套现有的树莓派教程，并致力于整合更多外围材料，以确保它能够应对我们操作的距离和规模。”via: https://opensource.com/article/23/3/parallel-distributed-computing-raspberry-pi-clusters作者：Peter Cheer 选题：lkxed 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
利用树莓派和乒乓球制作一个假日彩灯
这个树莓派教程用于制作一个可编程的 LED 灯光显示器，非常适合各种技能水平的人。我喜欢圣诞装饰品和灯饰，因此很长一段时间以来我一直想做一个可编程的 LED 项目。最近，我制作了一个由 LED 灯、乒乓球和树莓派 Zero 组成的灯阵列。这个项目相对简单并且具有教学价值，因此我认为它非常值得分享。整个彩灯由我设计，但其中一些灵感也来自 YouTube。你可以在我的 Git 存储库 中找到源代码和制作说明。购物清单树莓派 Zero树莓派保护壳5V 2A 的电源线展架255 个乒乓球热熔胶枪和若干热熔胶棒烙铁焊锡丝22 AWG 0.35mm 实芯线10 米 WS2812(B) LED 灯带（每米 30 像素）万用表钢丝钳剥线钳设计树莓派的灯光效果这个设计是根据我展框的大小决定的。我在全球速卖通买到了每米 30 像素的灯带，它可以轻松地切成 0.5 米的长度，每条有 15 个 LED 灯。乒乓球的直径是 40 毫米，所以我测量并隔开 40 毫米划了线，LED 灯条放在每隔 40 毫米的中间部分，这就产生了 17 条线。因此我的灯光阵列是 15×17。你可以根据实际情况来调整尺寸。为了给灯带和树莓派供电，我在电路板底部设置了数据线和电源线。我的 LED 灯不需要很多电，所以我使用树莓派 Zero 的 5V 输出 GPIO 为它们供电。当我以 50% 的亮度运行时，这个亮度已经足以在白天和晚上透过我的窗户看到。布线我从电路板的底部以之字形开始布线，这使得焊接非常容易，因为每行的末尾不必返回到每行的开头。我的线路大致像这样（为清楚起见，这里进行了简化，实际上它一共有 17 行）：<---------------\ | /---------------/ | \---------------< # 这里连接树莓派 使用树莓派制作显示屏当设计和布线的工作完成后就可以开始制作显示屏了。我在展板上测量并绘制了线路。我的灯带背面有胶带，所以我只需要取下背衬并将其贴在展板上。我检查了每个灯带的位置和数据线的方向，以确保灯带可以按照树莓派的指令正确串联起来。连接好所有灯带后，我剪下三段长度相同的电线，并将每个灯带末端的电源线、数据线和接地线连接到其上方。在线路连接完成后，我检查了每条灯带之间的电源线和地线之间的连接，以确保其连通性。我还检查了是否存在错误的桥接，所以我验证了电源线和地线之间的连接。我还进行了一些测试以确保所有灯都正常点亮（链路测试参阅 测试代码）。完成上述工作后，我开始在乒乓球上剪洞，用剪刀刺入乒乓球的底部，然后剪一个小洞让 LED 灯穿进去。手工不太行，每个球都不太一样，但效果真的很好。我使用的每米 30 个像素的 LED 灯，所以每个 LED 之间有大约 30 毫米的空隙。一个乒乓球是 40 毫米宽，但我不打算开始单独焊接每一个 LED！我想，这是很重要的。首先，我并不擅长焊接（正如我的照片所显示的），而且无论如何，我想“好吧，它们是乒乓球。我可以把它们压在一起！”我是这样做的：在 LED 灯上滴上热熔胶，然后在 LED 上放了一个乒乓球并按住大约五秒钟，就粘好了一个乒乓球。粘贴下一个乒乓球时我只需要挤着上一个乒乓球，就能让所有乒乓球都变得整齐了。我对它的外观很满意。它还有一个很好的好处，就是掩盖了我糟糕的焊接工作；)我继续为余下的乒乓球进行焊接。尽管这个过程中有几个乒乓球被压碎了，但最终还是顺利完成了制作。测试代码测试代码需要确保所有部件都能正常工作，为此我使用了这个 Adafruit 指南，它以红、绿和蓝点亮每个 LED，然后依次进行循环。我在测试时使用它来确保我连接无误并且焊接正常。在此之后，我在电子表格中设计了一个网格，将每个像素映射到一个网格位置。由于我的像素编号呈之字形排列，因此很难跟踪每个 LED（例如 A1 为 256，B1 为 226）。重新映射网格位置能使得我在构建图像时更容易。在所有准备工作完成之后，我就可以在纸上和电子表格中设计图像，然后编码。于是我开始添加一些动画（使用循环并将像素变为一种颜色，然后变为另一种颜色）。最终的结果还算顺利。能玩一年的树莓派彩灯我不确定这是否已经完全完成了。自从把它摆放到橱窗里，几乎每个晚上我都会添加一些新的图像和动画。我已经在考虑除夕夜的时候要做成什么样了。它不会像圣诞装饰品一起在圣诞节后被放进储藏室。我只需要在上面显示其它图案，就能使它成为一个能玩一年的彩灯！我的一个朋友推荐了像素版马里奥，这听起来是个好主意！我的代码仍然需要完善。例如，我做了一些滚动文本，但当我为文本的每个位置重新绘制时却花了很多时间。我想我可以用循环做一些事情，或者图像库可以帮助更轻松地滚动字母，并使添加文本更容易，而不是在每一步打开和关闭每个像素。这里有一张照片记录了我制作的全过程：LED 乒乓墙。可以在此处观看它的运行视频：XMas 灯光展示。这个彩灯最终的效果我非常满意。以后我也会尝试更多利用 LED 彩灯完成的项目。我也鼓励大家亲自动手制作一个这样的彩灯，它会比你想象中更简单。via: https://opensource.com/article/22/11/raspberry-pi-holiday-light-display作者：Brian McCafferty 选题：lkxed 译者：Return7g 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
使用树莓派和电子纸显示屏开始倒计时你的下一个假期。 圆周率日 Pi Day （3 月 14 日） 来了又走，留下美好的回忆以及 许多树莓派项目 等待我们去尝试。在任何令人精神振奋、充满欢乐的假期后回到工作中都很难，圆周率日也不例外。当我们回望三月的时候，渴望那些天的快乐。但是不用害怕，亲爱的圆周率日庆祝者们，我们开始下一个节日的漫长倒计时！好了，严肃点。我做了一个圆周率日倒计时器，你也可以！不久前，我购买了一个 树莓派 Zero W，并且用它来 解决 WiFi 信号较差的原因 。我也对使用 电子纸 ePaper 来作为它的显示屏十分感兴趣。虽然我不知道该用它来干什么，但是！它看起来真的很有趣！我买了一个十分适合放在树莓派的顶部的 2.13 英寸的 WaveShare 显示器 。安装很简单：只需要将显示器接到树莓派的 GPIO 上即可。我使用 树莓派操作系统 来实现该项目，虽然其他的操作系统肯定也能完成。但是下面的 raspi-config 命令在树莓派系统上很容易使用。设置树莓派和电子纸显示屏设置树莓派和电子纸显示屏一起工作，需要你在树莓派软件中启用串行外设接口（SPI），安装 BCM2835 C 库（来访问树莓派上的博通 BCM 2835 芯片的 GPIO 功能），安装 Python GPIO 库来控制电子纸显示屏。最后，你需要安装 WaveShare 的库来使用 Python 控制这个 2.13 英寸的显示屏。下面是完成这些的步骤。启用 SPI树莓派上启用 SPI 最简单的方式是使用 raspi-config 命令。SPI 总线允许与设备进行串行数据通信——在本例中，电子纸显示：$ sudo raspi-config 从弹出的菜单中, 选择 “ 接口选项 Interfacing Options -> SPI -> 是 Yes ” 来启用 SPI 接口，然后启动。安装 BCM2835 库如上所述，BCM2835 库是用于树莓派博通 BCM2385 芯片的软件，它允许访问 GPIO 引脚来控制设备。在我写这篇文章之时，用于树莓派的最新博通 BCM2385 库版本是 v1.68 。安装此库需要下载软件压缩包然后使用 make 来安装：# 下载 BCM2853 库并解压 $ curl -sSL http://www.airspayce.com/mikem/bcm2835/bcm2835-1.68.tar.g> -o - | tar -xzf - # 进入解压后的文件夹 $ pushd bcm2835-1.68/ # 配置、检查并安装 BCM2853 库 $ sudo ./configure $ sudo make check $ sudo make install # 返回上级目录 $ popd 安装需要的 Python 库你用 Python 控制电子纸显示屏需要安装 Python 库 RPi.GPIO，还需要使用 python3-pil 包来画图。显然，PIL 包已经不行了，但 Pillow 可以作为代替方案。我还没有为该项目测试过 Pillow ，但它可行：# 安装需要的 Python 库 $ sudo apt-get update $ sudo apt-get install python3-pip python3-pil $ sudo pip3 install RPi.GPIO 注意：这些是 Python3 的指令。你可以在 WaveShare 网站查到 Python2 的指令。下载 WaveShare 示例和 Python 库Waveshare 维护了一个 Python 和 C 的 Git 库，用于使用其电子纸显示屏和一些展示如何使用它们的示例。对这个倒计时时钟而言，你需要克隆这个库并使用用于 2.13 英寸显示屏的库：# 克隆这个 WaveShare e-Paper git 库 $ git clone https://github.com/waveshare/e-Paper.gi> 如果你用不同的显示器或者其他公司产品，需要使用适配软件。Waveshare 提供了很多指导：WaveShare 电子纸设置指导WaveShare 电子纸库安装指导获得有趣的字体（选做）你可以随心所欲的使用显示器，为什么不搞点花样？找一个炫酷的字体！这有大量 开放字体许可 的字体可供选择。我十分喜爱 Bangers 字体。如果你看过 YouTube 那你见过这种字体了，它十分流行。你可以下载到本地的共享字体目录文件中，并且所有的应用都可以使用，包括这个项目：# “Bangers” 字体是 Vernon Adams 使用 Google 字体开放许可授权的字体 $ mkdir -p ~/.local/share/fonts $ curl -sSL https://github.com/google/fonts/raw/master/ofl/bangers/Bangers-Regular.ttf -o fonts/Bangers-Regular.ttf 创建一个圆周率日倒计时器现在你已经安装好了软件，可以使用带有炫酷字体的电子纸显示屏了。你可以创建一个有趣的项目：倒计时到下一个圆周率日！如果你想，你可以从该项目的 GitHub 仓库 直接下载 countdown.py 这个 Python 文件并跳到文章结尾。为了满足大家的好奇心，我将逐步讲解。导入一些库#!/usr/bin/python3 # -*- coding:utf-8 -*- import logging import os import sys import time from datetime import datetime from pathlib import Path from PIL import Image,ImageDraw,ImageFont logging.basicConfig(level=logging.INFO) basedir = Path(__file__).parent waveshare_base = basedir.joinpath('e-Paper', 'RaspberryPi_JetsonNano', 'python') libdir = waveshare_base.joinpath('lib') 开始先导入一些标准库之后脚本中用。也需要你从 PIL 添加 Image、ImageDraw 和 ImageFont，你会用到这些来画一些简单的图形。最后，为本地 lib 目录设置一些变量，该目录包含了用于 2.13 英寸显示屏的 Waveshare Python 库，稍后你可以使用这些变量从本地目录加载库。字体大小辅助函数下一部分是为你选择的 Bangers-Regular.ttf 字体建立一个修改大小的辅助函数。该函数将整型变量作为大小参数，并返回一个图形字体对象来用于显示：def set_font_size(font_size): logging.info("Loading font...") return ImageFont.truetype(f"{basedir.joinpath('Bangers-Regular.ttf').resolve()}", font_size) 倒计时逻辑接下来是计算这个项目的一个函数：距下次圆周率日还有多久。如果是在一月，那么计算剩余天数将很简单。但是你需要考虑是否今年的圆周率日是否已经过去了（允悲）。如果是的话，那么计算在你可以再次庆祝之前还有多少天：def countdown(now): piday = datetime(now.year, 3, 14) # 如果错过了就增加一年 if piday < now: piday = datetime((now.year + 1), 3, 14) days = (piday - now).days logging.info(f"Days till piday: {days}") return day 主函数最后，到了主函数，需要初始化显示屏并向它写数据。这时，你应该写一个欢迎语然后再开始倒计时。但是首先，你需要加载 Waveshare 库：def main(): if os.path.exists(libdir): sys.path.append(f"{libdir}") from waveshare_epd import epd2in13_V2 else: logging.fatal(f"not found: {libdir}") sys.exit(1) 上面的代码片段检查以确保该库已下载到倒计时脚本旁边的目录中，然后加载epd2in13_V2 库。如果你使用不同的显示屏，则需要使用不同的库。如果你愿意，也可以自己编写。我发现阅读 Waveshare 随显示屏提供的 Python 代码很有趣，它比我想象的要简单得多。下一段代码创建一个 EPD（电子纸显示屏）对象以与显示器交互并初始化硬件： logging.info("Starting...") try: # 创建一个显示对象 epd = epd2in13_V2.EPD() # 初始化并清空显示 # ePaper 保持它的状态处分更新 logging.info("Initialize and clear...") epd.init(epd.FULL_UPDATE) epd.Clear(0xFF) 关于电子纸的一个有趣之处：它仅在将像素从白色变为黑色或从黑色变为白色时才耗电。这意味着当设备断电或应用程序因任何原因停止时，屏幕上的任何内容都会保留下来。从功耗的角度来看，这很好，但这也意味着你需要在启动时清除显示，否则你的脚本只会覆盖屏幕上已有的内容。 因此，epd.Clear(0xFF) 用于在脚本启动时清除显示。接下来，创建一个“画布”来绘制剩余的显示输出： # 创建一个图形对象 # 注意："epd.heigh" 是屏幕的长边 # 注意："epd.width" 是屏幕的短边 # 真是反直觉… logging.info(f"Creating canvas - height: {epd.height}, width: {epd.width}") image = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame draw = ImageDraw.Draw(image) 这与显示器的宽度和高度相匹配——但它有点反直觉，因为显示器的短边是宽度。我认为长边是宽度，所以这只是需要注意的一点。 请注意，epd.height 和 epd.width 由 Waveshare 库设置以对应于你使用的设备。欢迎语接下来，你将开始画一些画。这涉及在你之前创建的“画布”对象上设置数据。这还没有将它绘制到电子纸显示屏上——你现在只是在构建你想要的图像。由你为这个项目绘制带有一块馅饼的图像，来创建一个庆祝圆周率日的欢迎信息：很可爱，不是吗？ logging.info("Set text text...") bangers64 = set_font_size(64) draw.text((0, 30), 'PI DAY!', font = bangers64, fill = 0) logging.info("Set BMP...") bmp = Image.open(basedir.joinpath("img", "pie.bmp")) image.paste(bmp, (150,2)) 最后，真是是最后了，你可以展示你画的图画： logging.info("Display text and BMP") epd.display(epd.getbuffer(image)) 上面那段话更新了显示屏，以显示你所画的图像。接下来，准备另一幅图像展示你的倒计时：圆周率日倒计时首先，创建一个用来展示倒计时的图像对象。也需要设置数字的字体大小： logging.info("Pi Date countdown; press CTRL-C to exit") piday_image = Image.new('1', (epd.height, epd.width), 255) piday_draw = ImageDraw.Draw(piday_image) # 设置字体大小 bangers36 = set_font_size(36) bangers64 = set_font_size(64) 为了使它显示的时候更像一个倒计时，更新图像的一部分是更加有效的手段，仅更改已经改变的显示数据部分。下面的代码准备以这样方式运行： # 准备更新显示 epd.displayPartBaseImage(epd.getbuffer(piday_image)) epd.init(epd.PART_UPDATE) 最后，需要计时，开始一个无限循环来检查据下次圆周率日还有多久，并显示在电子纸上。如果到了圆周率日，你可以输出一些庆祝短语： while (True): days = countdown(datetime.now()) unit = get_days_unit(days) # 通过绘制一个填充有白色的矩形来清除屏幕的下半部分 piday_draw.rectangle((0, 50, 250, 122), fill = 255) # 绘制页眉 piday_draw.text((10,10), "Days till Pi-day:", font = bangers36, fill = 0) if days == 0: # 绘制庆祝语 piday_draw.text((0, 50), f"It's Pi Day!", font = bangers64, fill = 0) else: # 绘制距下一次 Pi Day 的时间 piday_draw.text((70, 50), f"{str(days)} {unit}", font = bangers64, fill = 0) # 渲染屏幕 epd.displayPartial(epd.getbuffer(piday_image)) time.sleep(5) 脚本最后做了一些错误处理，包括捕获键盘中断，这样你可以使用 Ctrl + C 来结束无限循环，以及一个根据计数来打印 day 或 days 的函数： except IOError as e: logging.info(e) except KeyboardInterrupt: logging.info("Exiting...") epd.init(epd.FULL_UPDATE) epd.Clear(0xFF) time.sleep(1) epd2in13_V2.epdconfig.module_exit() exit() def get_days_unit(count): if count == 1: return "day" return "days" if __name__ == "__main__": main() 现在你已经拥有一个倒计时并显示剩余天数的脚本！这是在我的树莓派上的显示（视频经过加速，我没有足够的磁盘空间来保存一整天的视频）：安装 systemd 服务（选做）如果你希望在系统打开时运行倒计时显示，并且无需登录并运行脚本，你可以将可选的 systemd 单元安装为 systemd 用户服务。将 GitHub 上的 piday.service 文件复制到 ${HOME}/.config/systemd/user，如果该目录不存在，请先创建该目录。然后你可以启用该服务并启动它：$ mkdir -p ~/.config/systemd/user $ cp piday.service ~/.config/systemd/user $ systemctl --user enable piday.service $ systemctl --user start piday.service # Enable lingering, to create a user session at boot # and allow services to run after logout $ loginctl enable-linger $USER 该脚本将输出到 systemd 日志，可以使用 journalctl 命令查看输出。它开始看起来像是圆周率日了！这就是你的作品！一个显示在电子纸显示屏上的树莓派 Zero W 圆周率日倒计时器！并在系统启动时使用 systemd 单元文件启动！现在距离我们可以再次相聚庆祝圆周率日还有好多天的奇妙设备———树莓派。通过我们的小项目，我们可以一目了然地看到确切的天数。但实际上，每个人都可以在每一天在心中庆祝圆周率日，因此请使用自己的树莓派创建一些有趣且具有教育意义的项目吧！via: https://opensource.com/article/21/3/raspberry-pi-countdown-clock作者：Chris Collins 选题：lujun9972 译者：Donkey 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
使用树莓派建立一个带有移动网络连接功能的路由器
在你的网络路由器上使用 OpenWRT 获得更多控制功能。树莓派是一种小型单板电脑，尽管只有信用卡大小，但是能做许多事情。实际上，这个小电脑几乎可以成为你想让它成为的任何东西，只要你打开想象力。树莓派爱好者已经做了许多不同的项目，从简单的程序到复杂的自动化项目和解决方案，如气象站，甚至智能家居设备。这篇文章将展示怎样使用 OpenWRT 项目将你的树莓派变成带有 LTE 移动网络连接功能的路由器。关于 OpenWRT 和 LTEOpenWRT 是一个利用 Linux 内核为嵌入式设备开发的开源项目，它已经存在超过 15 年了，拥有一个庞大而活跃的社区。有许多使用 OpenWRT 的方法，但是它的主要目的还是用在路由器上。它提供了包管理功能和一个完全可写的文件系统，并且因为它的的开源属性，你可以查看和修改代码，并贡献到开源生态。如果你想对你的路由器获得更多的控制，这就是你想要的系统。 长期演进技术 Long-term evolution （LTE）是一个基于 GSM/EGDE 和 UMTS/HSPA 技术的无线宽带通信标准。我使用的 LTE 调制解调器是一个 USB 设备，可以为树莓派电脑增加 3G 或 4G（LTE）蜂窝连接。安装前的准备对这个项目来说，你需要：一个带有电源线的树莓派一台运行 Linux 的电脑一张至少 16GB 的 SD 储存卡以太网线LTE 调制解调器（我使用的是 Teltonika TRM240）一张移动网络的 SIM 卡安装 OpenWRT首先，下载最新的 兼容树莓派的 OpenWRT 的发布版本。在 OpenWRT 官网，你可以看到 4 个镜像：两个 ext4 文件系统的和两个 squashfs 文件系统的。我使用 ext4 文件系统。你可以下载 factory 或者 sysupgrade 镜像，这两个都运行良好。下载了镜像后，你按照 以下的说明 需要解压并安装它到 SD 卡上。这将会花些时间安装固件，需要些耐心。一旦安装完成，在你的 SD 卡上将会有两个分区。一个是用来放 bootloader ，另一个是 OpenWRT 系统。启动系统要启动你的新系统，插入 SD 卡到树莓派，用以太网线把树莓派和你的路由器（或者交换机）相连，然后点亮。如果你有使用树莓派的经验，你可能习惯于通过终端使用 SSH 访问过它，或者通过显示器和键盘连接到树莓派。OpenWRT 工作有一点点不同。你与这个系统交互是通过网页浏览器，所以你必须能够通过网络来访问你的树莓派。缺省状态下，树莓派使用的 IP 地址是：192.168.1.1。用来配置树莓派的计算机必须和树莓派在同一个子网中。如果你的网络没有使用 192.168.1.x 地址，或者你不能确定，在 GNOME 打开 “ 设置 Settings ” ，导航到网络设置，选择 “ 手动 Manual ” ，然后键入以下的 IP 地址和子网掩码：IP 地址：192.168.1.15网络掩码：255.255.255.0在你的电脑上打开浏览器然后导航到 192.168.1.1 。这将打开一个验证网页，你可以登录到你的树莓派。首次登录不需要密码，所以直接点击 “ 登录 Login ” 按钮继续。设置网络连接树莓派只有一个以太网口，而普通路由器有两个：一个是 WAN（有线区域网络）口，另一个是 LAN （本地区域网络）。你有两个选择：使用你的以太网口接入互联网使用 WIFI 接入互联网使用以太网连接你决定使用以太网，导航到 “ 网络 Network → 接口 Interfaces ”。在这个设置页面，按下与 “LAN” 接口对应的蓝色 “ 编辑 Edit ” 按钮。应该会出现一个弹窗，在这个窗口中，你需要键入与你将要连接树莓派的路由器子网匹配的 IP 地址。如果需要的话，修改子网掩码，并输入树莓派将要连接的路由器的 IP 地址。保存设置，然后通过以太网将你的树莓派连接到路由器。你现在可以用这个新的 IP 地址访问树莓派。当你在把树莓派投入生产环境使用之前，确保为你的 OpenWRT 设置一个密码！使用 WiFi 连接如果你想通过 WiFi 将树莓派连接到互联网，导航到 “ 网络 Network → 无线 Wireless ” 。在 “ 无线 Wireless ” 菜单里，按下蓝色的 “ 扫描 Scan ” 按钮查找你的家庭网络。在弹出的窗口中，找到你的 WiFi 网络然后连接它。不要忘记 “ 保存并应用 Save and Apply ” 设置。在这 “ 网络 Network → 接口 Interfaces ” 部分，你应该看到了一个新的接口。当你在把树莓派投入生产环境使用之前，确保为你的 OpenWRT 设置一个密码！安装必要的软件包默认状态下，路由器并没有安装许多软件包。OpenWRT 提供了一个包管理器，带有一系列你需要安装的。导航到 “ 系统 System → 软件 Software ” 然后通过按下标有 “ 更新列表… Update lists... ” 的按钮来更新你的包管理器。你将会看到许多软件包；你需要安装以下这些：usb-modeswitchkmod-miikmod-usb-netkmod-usb-wdmkmod-usb-serialkmod-usb-serial-optionkmod-usb-serial-wwan（如果没有安装的话）另外，下载这个调制解调器管理软件包，然后在弹出的窗口中按下标有 “ 上传软件包… Upload Package... ” 的按钮来安装它。重启树莓派让安装包生效。设置移动网络接口所有这些软件包被安装完之后，你可以设置移动网络接口。在连接调制解调器到树莓派之前，请阅读 调制解调器的说明书，对其进行设置。然后连接你的移动调制解调器到树莓派，然后等待一会直到调制解调器启动。导航到 “ 网络 Network → 接口 Interfaces ”。在页面底部，按下 “ 添加一个新接口… Add new interface... ” 按钮。在弹出的窗口中，给你的接口起一个名字（比如 “mobile”），然后从下拉列表中选择 “ModemManager” 。按下一个标有 “ 创建接口 Create Interface ” 的按钮。你应该看到一个新的弹出窗口。这是设置接口的一个主窗口。在这个窗口中，选择你的调制解调器，然后键入像 接入点名称 Access Point Name （APN）或是 PIN 码之类的信息。注意： 如果在列表中没有调制解调器设备出现，尝试重启树莓派或者安装 kmod-usb-net-qmi-wwan 软件包 。当你已经配置完你的接口，按下 “ 保存 Save ” 然后 “ 保存并应用 Save and Apply ”。给系统一些生效的时间。如果一切正常，你应该看到像这样的一些东西。如果你想通过接口查看你的网络连接，你可以使用 SSH 连接到你的树莓派 shell。在终端里，键入：ssh root@192.168.1.1 缺省 IP 地址是 192.168.1.1：如果你修改了它，就用修改后的 IP 地址连接。当连接后，在终端里执行命令：ping -I ppp0 google.com 如果一切正常运行，那么你应该从 Google 的服务器接收到 ping 回包 。ppp0 是你创建的移动网络接口的默认接口名称。你可以通过使用 ifconfig 命令检查你的接口。它只显示活动的接口。设置防火墙要让移动网接口运行，你需要为移动网络接口和本地网络接口配置防火墙，以便引导流量到正确的接口。导航到 “ 网络 Network → 防火墙 Firewall ”。在页面的底部，你应该看到一个叫做 “ 区域 Zones ” 的部分。设置防火墙最简单的方法就是调整 “wan” 区域。在 “ 已覆盖的网络 Covered networks ” 选项里按下 “ 编辑 Edit ” 按钮，选择你的移动网络接口，然后 “ 保存并应用 Save and Apply ” 你的设置。如果你不想用 WiFi 连接你的树莓派，你可以从 “ 已覆盖的网络 Covered networks ” 里删除 “wwan” 接口，或者关闭 WiFi 连接。如果你想为每个接口设置一个独立区域，只需创建一个新区域然后分配必要的接口即可。举个例子，你可能想有一个覆盖移动网络接口的区域，并且通过它来转发 LAN 接口流量。按下 “ 添加 Name ” 按钮，然后给你的区域 “ 命名 Name ”， 检查 “伪装” 复选框，选中 “ 已覆盖的网络 Covered networks ” ，并选择哪些区域可以转发其流量。然后 “ 保存并应用 Save and Apply ” 这些修改。现在你有一个新的区域。设置一个接入点最后一步是为你的设备接入互联网设置一个网络接入点。要设置一个接入点，导航到 “ 网络 Network → 无线 Wireless ” 。你将会看到一个 WiFi 设备接口，一个名为 OpenWRT 的禁用的接入点，以及一个用于通过 WiFi 连接互联网的连接（如果你之前没有禁用或删除它）。在这个禁用的接口上，按下 “ 编辑 Edit ” 按钮，然后 “ 启用 Enable ” 该接口。如果你想，你可以通过编辑 “ESSID” 选项来修改接口名称。你也可以选择它要关联的网络。默认情况下，它会与 LAN 接口关联。要为这个接口添加密码，选择 “ 无线安全 Wireless Security ” 选项，选择 “WPA2-PSK” 加密方式然后在 “ 密钥 Key ” 选项字段键入接口的密码。然后 “ 保存并应用 Save and Apply ” 设置。如果设置正确的话，当用你的设备扫描可用接入点的话，你应该可以看到你分配了名称的新接入点。额外的软件包如果你愿意，你可以通过网页界面为你的路由器下载额外的软件包。只需到 “ 系统 System → 软件 Software ” 然后安装你想从列表或者互联网上下载的软件包并上传它。如果你在列表中没有看到任何软件包，请按下 “ 更新列表… Update lists... ” 按钮。你也可以添加其他拥有适合与 OpenWRT 一起使用的软件包的仓库。软件包和它们的网页界面是分开安装的。软件包名称是以 “luci-” 开始的是网也界面软件包。试试看这就是我的树莓派路由设置的过程。从树莓派建立一个路由器不是很困难。缺点是树莓派只有一个以太网接口。你可以用一个 USB-to-Ethernet 适配器来增加更多的网口。不要忘记在接口的网站上设置网口。OpenWRT 支持大量的移动调制解调器，你可以用管理调制解调器的通用工具 modemmanager 为它们设置移动网络接口。你有没有把你的树莓派当作路由器使用？请在评论中告诉我们情况。via: https://opensource.com/article/21/3/router-raspberry-pi作者：Lukas Janėnas 选题：lujun9972 译者：hwlife 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
在树莓派上创建一个最小化的服务器
不要急着丢弃那台旧树莓派，这个详细步骤的指南展示了我怎样用最小化设置来充分利用我珍贵的树莓派系统资源。最近，我的 树莓派 上的 microSD 储存卡不工作了。它已经作为服务器持续使用将近两年了，这为我提供了一个开始探索和修正问题的好机会。在初始化安装完成以后，它开始出现一些磁盘方面的问题，并且官方的树莓派操作系统发布了一个有重大意义的更新（并从 Raspbian 更名为 树莓派操作系统 Raspberr Pi OS ）。所以我买了一个新的储存卡并开始重装。尽管树莓派 3B 不是最新的硬件，但对于运行多样化服务的最小化的服务器还是足够的。我认为我之前的安装使用了完整的安装镜像，包括了图形用户界面和许多其他的软件包是没有必要的。这个详细步骤的指南展示了我怎样用最小化设置来充分利用我珍贵的树莓派系统资源。开始首先，要为树莓派创建一个新的系统驱动器。这需要两样东西：系统镜像文件和一张 microSD 储存卡。下载树莓派系统镜像文件虽然有好几种操作系统可供选择，但我坚持选择树莓派官方支持的系统。第一步是从 树莓派操作系统 官方网站上下载最新的系统镜像文件到计算机，然后后写入储存卡。他们提供了三个不同的镜像，我选择了精简版。它是最小化的操作系统，只包含基本系统必要的文件，所以它占用最少的磁盘空间和系统内存。（当我下载系统的时候，发布日期是 2020 年 8 月 20 日，但是它现在肯定已经更新了。我觉得不会有什么巨大不同，但是我建议读一下发行说明。）将树莓派系统镜像写到储存卡第二步是写下载的系统镜像到储存卡。我的卡之前用过，当我把它插入我的 Linux 桌面计算机之后，它自动加载了两个存在的分区。在我卸载这两个分区前，我不能写入镜像。要这样做，我必须得用下面的 lsblk 命令来确定它们的路径，经确定，该设备路径为 /dev/mmcblk0：# lsblk -p 我用 umount 命令卸载了这两个分区：# umount /dev/mmcblk0p2 # umount /dev/mmcblk0p1 一旦分区被卸载，就可以将镜像文件写入到储存卡了。尽管有许多图形化的写入工具，我还是习惯是用古老的 dd 命令：# dd bs=4M if=/home/alan/Downloads/raspios/2020-08-20-raspios-buster-armhf-lite.img of=/dev/mmcblk0 status=progress conv=fsync 启动树莓派你只需要一个显示器、键盘、电源适配器来使用树莓派。我还有一个以太网网线用于网络连接，相比无线网络，我更喜欢通过网线来连接一个专用的服务器。插入储存卡并打开树莓派的电源。一旦成功启动，用默认的缺省密码来进行登录：用户名 pi，密码raspberry。系统设置按照以下步骤尽可能最小化设置磁盘空间、内存使用等。我建议尽可能的花时间研究每个配置，使之尽量正确。通常有几种应用配置的方法，有些配置文件和选项可能会被丢弃，所以要查看产品文档确保你没有应用过时的配置。运行 raspi-config树莓派系统的主设置程序叫做 raspi-config。登录以后立即运行它：# raspi-config 它出现了一个扩展根文件系统的选项，可以利用储存卡上所有可利用的空间。选择这个选项之后，重启并重新登录。用 df 命令来验证储存卡的总容量是否被完全使用：# df -h 如果你需要设置其他选项，请再次运行 raspi-config。它们中的一些选项可以根据你的偏好和配置进行变化。仔细检查所有这些选项，确定没有任何遗漏。为了获得最佳性能，我建议做以下调整。（我跳过了一些我们没有做任何变化的选项。） 系统选项 System options ：在此你可以设置主机名，最好使用完全限定的域名（FQDN）。你也能在这里更改你的密码，这始终是强烈建议的。 接口选项 Interface options ：开启 SSH 服务。 性能选项 Performance options ：将 GPU 内存减少到最低值（16MB）。 本地化选项 Localization options ：选择你的时区、位置、键盘类型。 高级选项 Advanced options ：这个选项包括扩展根文件系统的选项。如果你在上面没扩展，一定要在这里做。这样你可以访问储存卡上的所有可用空间。 更新 Update ：进入更新选项会立即检查 raspi-config 工具是否有更新。如果更新可用，它将被下载并应用，raspi-config 将在几秒钟后重启。一旦你在 raspi-config 中完成这些配置，选择“ 完成 Finish ”退出该工具。手动配置我还建议几个其他更改，它们全都要求编辑某种配置文件来手动更改设置。设置静态 IP 地址一般来说，最好用静态 IP 地址设置服务器。通过 ip 命令来验证网络接口，并设置 IP 地址和你的缺省网关（路由器）和域名服务（DNS）地址：# ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether b8:27:eb:48:3f:46 brd ff:ff:ff:ff:ff:ff 你还需要知道你的缺省网关和一个及以上的 DNS 服务器地址。将这些信息添加到 /etc/dhcpcd.conf 配置文件中（我强烈建议更改之前对这个文件做一个备份）：# cd /etc # cp -a dhcpcd.conf dhcpcd.conf.original 按照以下来编辑文件：# vi dhcpcd.conf # static IP configuration: interface eth0 static ip_address=192.168.1.5/24 static routers=192.168.1.1 static domain_name_servers=192.168.1.3 192.168.1.4 关闭 IPv6 协议除非你有特别需要使用 IPv6，否则你可能倾向于禁用它。为此，你可以创建两个新文件，其中包括一个单行指令，指示 Linux 内核不要使用 IPv6。首先，创建 /etc/sysctl.d/disable-ipv6.conf 文件，其中包含一行指令：# cd /etc/sysctl.d # echo "net.ipv6.conf.all.disable_ipv6 = 1" > disable-ipv6.conf 然后创建 /etc/modprobe.d/blacklist-ipv6.conf 文件包含一行指令：# cd /etc/modprobe.d # echo "blacklist ipv6" > blacklist-ipv6.conf 关闭 Wi-Fi、蓝牙和音频我的服务器的具体用途并不需要蓝牙和音频，同时，它用以太网连接，并不使用无线（Wi-Fi）。除非你计划用它们，否则按照以下步骤来关闭它们。对 /boot/config.txt 这个文件做以下更改（再次强调，我建议为这个文件做个备份）：# cd /boot # cp -a config.txt config.txt.original 加入以下两个指令到文件底部来禁用蓝牙和 Wi-Fi：dtoverlay=disable-btdtoverlay=disable-wifi这些 echo 命令就可以完成：# cd /boot # echo "dtoverlay=disable-bt" >> config.txt # echo "dtoverlay=disable-wifi" >> config.txt 要关闭音频，更改 dtparam=audio 的参数为 off。你可以用一个简短的命令 sed 来完成：# sed -i '/dtparam=audio/c dtparam=audio=off' config.txt 最后一步是禁用 Wi-Fi 服务，用 systemctl mask 命令来操作：systemctl mask wpa_supplicant.service 如果你不需要其他服务的话，也可以禁用它们：禁用调制解调器服务：systemctl disable hciuart禁用 Avahi 守护进程：systemctl disable avahi-daemon.service最后一步检查你的内存使用量：# free -h 我震惊了：我的系统只用了 30MB 的内存。创建个人账户：建议为登录这台服务器的个人创建用户账户。你能分配他们到 sudo 组允许他们运行管理命令。举个例子，创建一个用户名为 George 的一个账户。# adduser george # usermod -a -G adm,sudo,users george 进行更新：这是一个重要的步骤。应用更新来获取树莓派操作系统的最新修复。# apt update # apt full-upgrade 重启：重启你的新服务器是一个好主意:# systemctl reboot` 安装 Cockpit：你可以在树莓派系统上安装著名的 Linux Web 控制台 Cockpit，它提供了一个基于 HTML 界面来远程管理和监控你的服务器。我最近写了一篇 Cockpit 入门 的文章。用这个命令来安装它# apt install cockpit 现在我的树莓派服务器已经准备好托管服务器了，我能用它来做 网页服务器、VPN 服务器、 Minetest 等游戏服务器，或者就像我做的基于 Pi-Hole 的广告屏蔽器 。保持旧硬件的活力不论你有什么硬件，仔细地精简并控制你的操作系统和软件包，可以使你的系统资源使用量保持在低水平，以便你获得最大收益。这还可以通过减少试图利用漏洞的潜在恶意行为者可用的服务和软件包数量，提高了安全性。因此，在你丢弃旧硬件之前，考虑一下能够继续使用的各种可能性。via: https://opensource.com/article/21/1/minimal-server-raspberry-pi作者：Alan Formy-Duval 选题：lujun9972 译者：hwlife 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出