用树莓派驱动的青蛙泡泡机

吹泡泡机可能大家小时候都玩过,加满肥皂液,接上电源以后,它就会自动吹出泡泡。

现在有了树莓派,可以把它改成互联网控制的自动泡泡机了。

改造之前,泡泡机由手动开关控制,该开关可打开或关闭青蛙体内的电机。如果你想看到电机驱动青蛙吹出泡泡,则需要自己轻触此开关。

几个国外的创客制作了这款自动泡泡机,该机器由树莓派供电和控制,并且可以通过互联网启动。

他们选择了青蛙形的泡泡机,但你可以根据自己的喜好重新调整。改造使用两节AA电池运行的模型会更容易。

在解剖了“塑料两栖朋友”之后,他们通过继电器模块将其电机连接到Raspberry Pi。他们分享了相关的技术细节,可将继电器模块连接到Raspberry Pi的GPIO引脚。

相关技术介绍:

https://tutorials-raspberrypi.com/raspberry-pi-control-relay-switch-via-gpio

现在,我们可以用代码打开和关闭青蛙体内的马达。

通过在:

https://remo.tv/join/rffrwxr

这个地址登录,命令Raspberry Pi打开泡泡机的开关。

为了让互联网泡泡迷们看到一键劳动的成果,我们设置了Raspberry Pi摄像头模块,并将其构建的装置连接到机器人流媒体平台remo.tv。

别忘了加肥皂水。

用料清单:

泡泡机(最好是用两节AA电池运行的那种)
树莓派
5V继电器模块
Raspberry Pi摄像头模块
Remo.tv帐户
跳线

剩下的问题是:最好的泡沫肥皂配方是什么?

来自:​Raspberrypi.org

编译:王文文

如何为树莓派设置SSH的双因素认证

如今,启用双因素身份验证(2FA)来增强帐户的安全性变得越来越普遍。

但是你可能会好奇怎么在Raspberry Pi上启用2FA。当你通过Secure Shell(SSH)远程访问树莓派时,系统将要求你先输入动态验证码。

通过SSH访问Raspberry Pi

很多人在家中将Raspberry Pi用作文件或媒体服务器。随着Raspberry Pi 4的发布,这种情况已经相当普遍,它配备了USB 3.0和千兆以太网。

如果你打算将Raspberry Pi塞到电视后面或其他地方,这意味着你需要在没有监视器,键盘或鼠标的情况下启用S​​ecure Shell(SSH)进行远程访问。

但是,出门在外也想访问文件的需求很常见,所以从Internet访问Raspberry Pi是一件有风险的事。

如果你要对Internet开放你的树莓派服务器,那肯定要增加一些安全性,比如使用基于时间的一次性密码(TOTP)或启用双因素身份验证(2FA )。

什么是双因素身份验证?

双因素身份验证是额外的保护层。是除了密码之外,还需要另一条信息才能登录。

如果说第一个因素是“你知道的东西”,那第二个因素将基于“你拥有的东西”(例如智能手机),就像生物特征信息一样。

我们将继续设置,并将智能手机用作保护Raspberry Pi的第二个因素。

更新操作系统

你应该做的第一件事是确保你的Raspberry Pi OS保持最新。如果你正在运行不够新的操作系统,则可以在命令行操作:

$ sudo apt-get update
$ sudo apt-get full-upgrade

启用安全的Shell​

Raspbian操作系统在启动时禁用了SSH服务器,如果我们希望通过SSH访问Raspberry Pi,则需要启用它。

启用S​​SH最简单的方法是先进Raspbian桌面,找到菜单,然后选择“首选项”,Raspberry Pi配置。接下来,选择“Interfaces”选项卡,然后单击按钮启用SSH,再点“确定”。

你还可以在命令行启用它:

$ sudo systemctl enable ssh 
$ sudo systemctl start ssh

另外,你可以用raspi-config启用S​​SH ,如果你是首次安装操作系统,也可以在写SD卡时启用S​​SH 。

启用挑战响应

接下来,我们需要告诉SSH守护程序启用“挑战响应”密码。继续打开SSH配置文件:

$ sudo nano /etc/ssh/sshd_config

通过将ChallengeResponseAuthentication从默认的no更改为yes来启用挑战响应。

重启SSH服务

$ sudo systemctl restart ssh

在你的笔记本电脑上打开一个终端,确保你仍然可以SSH到你的树莓派——尽管你还没有被提示输入2FA代码。在这个阶段检查是否一切正常是明智的。

安装双因素身份验证App

你需要做的第一件事是将应用程序下载到手机,该应用程序将生成TOTP。Google身份验证器是最常用的一种。它可用于AndroidiOSBlackberry,甚至在GitHub上也有该应用程序的开源版本。

App Store中的Google Authenticator

因此,请继续在你的手机上安装Google Authenticator或另一个2FA应用程序,例如Authy。然后,在Raspberry Pi上安装Google Authenticator PAM模块。

$ sudo apt install libpam-google-authenticator

现在我们在手机和Raspberry Pi上都安装了2FA,已经准备好进行配置。

配置两因素身份验证

现在,你应该在Raspberry Pi上运行Google Authenticator而不使用sudo来生成QR码:

$ google-authenticator

之后,你可能需要调整“终端”窗口的大小,以便正确显示QR码。不幸的是,它比标准的80个字符略宽。

google-authenticator生成的QR码

此刻先不要下一步! 在执行其他任何操作之前,你应该复制紧急代码并将其放在安全的地方。

这些代码使你可以在丢失手机的情况下访问Raspberry Pi,并关闭2FA。没有它们话,如果你丢失或破坏了用于身份验证的设备,则将无法通过SSH访问Raspberry Pi。

接下来,在我们继续使用Raspberry Pi上的Google Authenticator之前,请在手机上打开Goog​​le Authenticator应用,点击右上角的加号(+),然后点击“扫描二维码”。

手机将询问你是否允许该应用访问你的相机;选择“是”,相机镜头将打开,将二维码放置在屏幕上的绿色框中。

使用Google Authenticator应用程序扫描QR码

手机应用程序识别出QR码后,就会添加你的新帐户,并会自动开始生成TOTP代码。

Google Authenticator应用中的TOTP

你的手机将每三十秒生成一次新的TOTP密码。但是,直到我们完成你在Raspberry Pi上所做的工作,此验证码才有用。

切换到终端窗口,并在询问Google Authenticator是否更新你的.google_authenticator文件时回答“Y” 。

然后回答“Y”以禁止多次使用相同的身份验证令牌,“N”以增加时间偏移窗口,“Y”以限制速率,以防止暴力攻击。

接下来,我们要做的就是启用2FA。

启用双因素身份验证

我们将使用Linux可插拔身份验证模块(PAM),它为应用程序和服务提供动态身份验证支持,以便在Raspberry Pi的SSH上添加2FA。

现在我们需要配置PAM以添加2FA:

$ sudo nano /etc/pam.d/sshd

将必需的auth pam_google_authenticator.so添加到文件顶部。你可以在显示@include common-auth的行上方或下方执行此操作。

编辑/etc/pam.d/sshd

由于我希望在输入密码后提示输入验证码,因此我在@include行之后添加了这一行。如果要在输入密码之前提示输入验证码,则应将其添加到@include行之前。

现在重新启动SSH守护程序:

$ sudo systemctl restart ssh

接下来,在笔记本电脑上打开一个终端窗口,然后尝试用SSH访问Raspberry Pi。

收尾

如果一切都按计划进行,那么当你通过SSH访问Raspberry Pi时,输入密码后应该提示你输入TOTP。

用SSH访问我的Raspberry Pi

继续打开手机上的Google身份验证器,然后在出现提示时输入六位验证码。登录Raspberry Pi。

无论是SSH还是SCP,设备的安全性都大大提高了。

现在,你已经在手机上装好Google Authenticator应用程序,可以为重要的服务和网站(例如Google,Twitter,Amazon等)启用2FA了,因为大多数网站都已支持双因素验证。

作者:Alasdair Allan

来自:Raspberrypi.org

把网站架在树莓派云上

虽然说树莓派的主战场在物联网和教育,但还是会有人把它用在其他领域。

比如,部署网站。

早在2016年底,Mythic Beasts公司就推出了Raspberry Pi云服务,允许大家租用Raspberry Pi 3作为服务器。

Raspberry Pi 4上市以后,他们的云服务也相应的大幅升级。

毕竟Pi 4的性能是Pi 3的两倍以上,仅内存就四倍(4GB版本的树莓派)。

在获悉Raspberry Pi 4研发完成后,Mythic Beasts公司的皮特·斯蒂文斯(Pete Stevens)跟树莓派创始人埃本·厄普顿(Eben Upton)拿啤酒打赌了。

说他们可以用Raspberry Pi 4搭建服务器,来作为Raspberry Pi 4发布的Web平台。

由于树莓派新版本发布的受欢迎程度,发布日当天的访客不是百万为单位,而是以千万为单位。

因此,服务的稳定至关重要。

2019年6月20日星期四,埃本把18台4GB内存的Raspberry Pi 4交给皮特团队,以替换Raspberry Pi官方博客的所有Web服务器(x86)。

  • 14×动态Web服务器(PHP / Apache)
  • 2个静态Web服务器(Apache,静态文件)
  • 2个Memcache(在内存中加速Web服务)

他们在6月21日周五构建时,立即遇到了一个“鸡和蛋”的问题。

树莓派官网的Web服务器是通过Puppet构建的,当时基于Debian Jessie。

Raspberry Pi 4(服务器)上的系统是Debian Buster尚未发行的版本,当时Puppet不支持该版本。

然后皮特团队与Raspberry Pi基金会的Greg Annandale一起,创建了可以在Raspberry Pi 4上运行的Puppet,将配置从Debian Jessie升级到Buster(这个版本有新的Apache/ PHP),并进行了测试。

关于机箱和布线

早在搭建Raspberry Pi 3云的时候,皮特团队就做了对应的机箱。

然后他们采用了相同的方法,用POE扩展板供电的方式,为每台Raspberry Pi 4提供电源和网络。这大大降低了布线和设置的复杂性。

6月21日周五晚上21点,也就是皮特团队开工的24小时后,他们将快速打造的Raspberry Pi 4集群移至Sovereign House,这里是Mythic Beasts数据中心所在地,也是欧洲网络最好的区域之一。

在几个小时的时间里,皮特团队逐步将整个生产环境从现有的虚拟服务器转移到Raspberry Pi 4云,直到树莓派官方博客的每个页面都由Raspberry Pi 4集群提供服务。

因为加了PoE HAT,所以机箱内不能整齐摆放

真正的考验,发布日。

Raspberry Pi 4发布当天,树莓派集群扛住了数千万用户的访问。

皮特团队在树莓派集群和网站的前端设置了Cloudflare,它为静态资源提供加速,并保护网站免遭拒绝服务攻击。

不幸的是,他们在发布过程中宕机了两个小时,原因是威瑞森(Verizon)的客户运行了一个配置错误的网络优化器。所以树莓派4集群有一个漫长的午休时间……

详细信息可访问:

https://www.cloudflarestatus.com/incidents/46z55mdhg0t5

随后,皮特团队让树莓派官网在Raspberry Pi 4集群上跑了一个多月,然后才换回之前的虚拟服务器。

他们证明了树莓派4可以是一个很棒的网站部署平台。

编者按:不知道啤酒有没有赢到。

将Raspberry Pi 4云服务商业化

皮特团队已经为一些客户提供Raspberry Pi 3的云服务(例如PiWheels,它为Raspberry Pi构建Python软件包),而且能够按需启动Raspberry Pi 3对客户极为有用。

由于SD卡并不是很可靠。每次出现故障时,人工干预不仅耗时间,还意味着皮特团队必须物理接触树莓派云中的每一块板子。

所以皮特团队选择了Netboot加网络存储的方式,不但可以远程开机,还可以远程re-image树莓派。避开了一些坑。

他们在2019年11月采用了Beta版固件,并构建了一个Raspberry Pi 4网络启动设置的示例。

然后把它集成到管理程序,构建与Raspberry Pi 4兼容的操作系统镜像。并增强了账单和计费的功能,以应对多种模型和按小时计费。

然后,他们又不得不对文件服务器和网络进行了升级。

因为树莓派4B是“真”千兆网卡,需要提供比Raspberry Pi 3更强的支持。

当然,皮特团队也做了向后兼容,以免影响现在Raspberry Pi 3云的用户。

2020年6月17日,皮特团队上线了 Raspberry Pi 4的云,正式向客户提供服务。

Mythic Beast自己公布的和AWS类似业务对比:

估计再过一段时间,他们的云该提供8GB内存的硬件版本和64位Raspberry Pi操作系统了。

目前市面上流行的ARM云服务器,主要有华为鲲鹏和AWS Graviton。

线索:Raspberrypi.org

编译:王文文

能快速打造IoT设备的Ubuntu Appliance来了

最近Ubuntu官方公布了一个名为Appliance的服务,可以把你的PC或树莓派变成一个安全稳定的专用设备。

按照官方的说法,这是一种软件定义的IoT设备,系统层是Ubuntu Core,你不但可以在上面跑应用,还可以通过Ubuntu给你的设备构建安全防护并保持最新状态。

网址:http://ubuntu.com/appliance

该产品的使命是让你能够快速打造自己的高安全,自更新,单用途设备。

目前Ubuntu Appliance的官方页面已经有几个知名项目的镜像推介,大家可以尝个鲜什么的。

官方推介的五个项目:

  • Plex Media Server除了流媒体服务功能以外,还可以帮你存储分类影音文件,分析影片的信息从而从IMDB等数据库补全影片介绍等信息,进行索引以方便搜索。
  • Mosquitto是一个轻量级的开源MQTT消息代理,可在低功耗单板计算机到大型工业级服务器在内的所有设备上使用。
  • OpenHAB全称Open Home Automation Bus,开放式家庭自动化总线,该项目旨在为家庭自动化构建提供一个通用的集成平台。实现最灵活的智能家居控制,几乎可以连接到市面上所有的家庭自动化硬件。
  • AdGuard Home可以阻止烦人的横幅广告,弹出式窗口和视频广告,从而使网上冲浪更快,更安全,更舒适。
  • NextCloud是一个本地内容协作平台,允许用户在家中或办公室托管自己的私有云。

使用方法很简单:找到对应的硬件架构,选择对应的镜像,下载刷入即可。

如果大家有什么意见或建议,可以通过官方讨论组向他们递交。也欢迎大家加入“IoT前哨站”QQ群讨论:IoT前哨站1群:15992627;IoT前哨站2群:17163000。

小技巧:树莓派花式截屏

当你在树莓派上做了一个很棒的项目,自然会想和其他人分享。但是咋个显摆呐?

一图胜过万语,不管你是写教程还是分享项目进展,图片肯定能让其他人更容易理解你在做什么。

我经常看到有些兄弟拿起手机对着屏幕拍视频,拍照片。

但如果屏幕刷新率不够,拍出来常会有一黑一白的横向条纹,颇煞风景。

这次我就和大家分享一下如何在树莓派上花式截屏。

一、内置Scrot命令

步骤-01 使用Scrot

截图最简单的方法是使用 Scrot 这个是系统自带的,所以你不需要安装任何东西。点击键盘上的PrtSc(打印屏幕)键,听到“咔嚓”一声整个屏幕就截图下来了,截图文件可以在“文件管理器”里面找到,直接双击以日期开头的.png文件就可以打开咯。

步骤-02 延时截屏

在终端中使用键入Scrot 然后回车,Scrot就把整个屏幕截图下来了(包括终端窗口)。如果要捕获没有终端窗口的屏幕可以设置延时(然后关闭终端窗口)。

输入scrot -d 4然后回车,Scrot将在截屏之前延迟4秒。

一般来说4秒有足够的时间关闭终端了,如果关的窗口或者结束其他的进程比较多,请添加较长的时间。

二、安装一个名为GNOME Screenshot的截图软件

步骤-01 安装GNOME截屏软件

在树莓派联网状态下,打开终端输入:

sudo apt update && sudo apt upgrade

sudo apt install gnome-screenshot

选择 Y 继续,直至安装完成。

步骤-02 GNOME截屏

Gnome-screenshot提供了一个用于截图的界面和一些额外功能。可以在“功能表>附件>屏幕截图”中找到它。点击截图,操作界面消失,听到“咔嚓”截屏成功!

与Scrot不一样的是,Screenshot提供截屏预览,且会出现重命名以及询问保存路径的对话框。

步骤-03 区域截图

可以选择“Select area to grab”然后单击“Take Screenshot”,GNOME屏幕截图界面将消失。

是否选择区域截图

现在点击并拖动你想要截取区域的选框(在这个例子中是桌面上的四个图标),GNOME Screenshot将只截取鼠标画框的那一部分屏幕。

步骤-04 窗口截屏

还一个更有效的方法是抓取单个窗口。可以添加5毛特例如放置阴影和边框使其突出等等。

选择“Grab the current window”单选按钮,然后从“Apply effect”窗口中选择“Drop shadow”。确保要捕获的窗口高亮显示,然后单击“Take screenshot”保存具有阴影效果的窗口图像。

来几个系统自带的游戏截图得瑟一下,分别是三种5毛特效。

小白兔过马路-阴影
坦克大战-复古
黑白棋-边框突出

怎么样,还有点意思吧?

来自:IoT前哨站

作者:智慧房车锂途小窝

树莓派官方刷系统工具Raspberry Pi Imager发布

之前给SD卡刷系统的时候, 或多或少会用到Win32 Disk Imager或 Etcher 之类的第三方工具。

而树莓派官方近期出了一个Raspberry Pi Imager ,以后大家刷系统基本不用别的工具了,用它可以轻松搞定。

安装前可以先选择自己想要的系统,比如Raspbian完整版还是Lite版,或者你自己下载好的版本。这部分结合了NOOBS的功能。

而且这个工具还细心的给你分好了硬件版本,以免你刷错系统。

关于它的主要工作机制:

Raspberry Pi Imager会先从官网下载JSON文件,获得所有当前下载选项,以确保你始终安装最新的系统。

用户选择好系统和SD卡的盘符/目录后,该程序将下载相关镜像,直接写入SD卡。与之前流行的方法相比,节约了很多操作。

最后要说的是,Raspberry Pi Imager 完全开源,最初是作为对PiBakery工具的修改编写的,后来由Floris Bos(NOOBS工具和PiServer工具的原始编写者)进行了修改和完善。

Windows版:

https://downloads.raspberrypi.org/imager/imager.exe

苹果版:

https://downloads.raspberrypi.org/imager/imager.dmg

Ubuntu版:

https://downloads.raspberrypi.org/imager/imager_amd64.deb

Enjoy it.

作者:王文文

树莓派加Steam Link 助你大屏玩游戏

很多玩家都会装Steam,以此在PC上畅玩各种炫酷的游戏。

但高性能PC一般都份量不轻,不便于随意搬动。那要想在其他房间或其他终端上玩Steam上的游戏,又不想搬来搬去或者另购新PC,那该怎么办呢?

还好这个世界上有一种叫做Steam Link的东西, 让我们在手机/平板/树莓派上也可以畅玩画质逆天的 PC 游戏大作

在早些时候,Steam Link还是个硬件盒子。

后来 Valve 公司力推软件版本,Steam Link 开始在各个终端百花齐放。

手机和平板上怎么用咱们就不多说了,应用商店里App一装就完事了。那树莓派上怎么用呢?

别担心,也很简单。

假如说以前大家还得自己编译代码的话,现在的树莓派系统装Steam Link简直So easy。

两行命令:

sudo apt update
sudo apt install steamlink

使用前,一定要记着你PC上要先运行Steam。

然后给树莓派接上游戏手柄,设置并输入PIN码连接到PC。

比如我家客厅有个大屏电视,而PC在书房,我就可以用连着大屏的树莓派来玩游戏了。

除了Steam上买的,你还可以通过它运行PC上的其他游戏。总之,这款应用基本能把你的PC当流媒体服务器用。

希望在这个不便外出的特殊时刻,游戏和树莓派能给你带去一丝安慰。

作者:王文文

树莓派上设置OctoPrint实现3D云打印

如果你已经拥有3D打印机,那么你应该在3D打印的社区中听说过OctoPrint了。它会使你的3D打印工作变得更容易,更方便。

本指南将逐步指导你完成设置过程,并在此过程中提供一些有用的提示。

OctoPrint是一款开源软件,可以向具备USB接口的3D打印机添加Wi-Fi功能。

简单的说,你可以通过Web浏览器将本地文件拖放到打印机上,开始或停止打印。通过实时视频监视打印机,控制电机,控制温度等等。

当然,强大的功能也是会带来风险的。3D打印机超负荷工作的温度足以引起火灾,因此请确保自己有做好安全的设置,不要让它在未经监督的情况下运行。

OctoPrint需求清单:

•Raspberry Pi 3(或更高版本)
• MicroSD卡
•Raspberry Pi电源适配器
•USB线缆(连接器类型取决于你的打印机)
•Webcam / Raspberry Pi摄像头模块(可选)
•3D打印的摄像头安装架(可选)

在开始之前需要强调一下,不建议在该项目中使用低于Raspberry Pi 3的版本。在Pi Zero或更旧的Raspberry Pi上尝试这个软件,可能会遇到意外的打印失败。

下载OctoPrint

地址:https://octoprint.org/download/

截至到本文发布时,最新的版本应该0.17.0。

OctoPrint差不多算是Raspbian的一个分支,所以具体刷系统和Raspbian一样即可,这里不再累述。

设置Wi-Fi网络

刷完系统后,进到SD卡的boot目录,编辑octopi-wpa-supplicant.txt文件。

network={
    ssid="<your network name>"
    psk="<your password>"
}

改好之后,把SD卡插入树莓派,启动。

登陆Octopi

在你的浏览器中访问octopi.local,如果一切顺利。你应该能看到Web界面了。

如果没有看到OctoPrint启动画面?不要害怕,你不是第一个。常见的问题包括:仔细检查octopi-wpa-supplicant.txt文件中是否正确输入了Wi-Fi详细信息,将Raspberry Pi接上显示器并观察会发生什么情况。

https://community.octoprint.org/t/wifi-setup-and-troubleshooting/184 这个页面有详细的故障排除建议。

开始用OctoPrint打印

现在,我们可以根据向导为打印机设置OctoPrint。大部分步骤都简单明了——设置密码,注册。发送匿名使用情况、统计信息等等。

我们建议启用连接检查和插件黑名单,以帮助保持状态稳定。如果计划使用OctoPrint作为切片器和监视工具,可以用此步骤导入Cura配置文件。但是,我们建议跳过此步骤,因为在你自己电脑上切片更快。

最后,我们需要输入打印机详细信息。上面这个图我们是以Creality Ender-3的一些规格为例设置的。如果找不到打印机的确切信息,则可以通过快速网络搜索此部分所需的内容。

带摄像头的OctoPrint更好

现在,你已经设好了OctoPrint,可以开始打印。通过USB数据线将Raspberry Pi和3D打印机连起来。在浏览器中打开OctoPrint,然后单击“ Connect 按钮让已启用Wi-Fi的打印机开始工作。成功连接后,你可以设置“hot end”和“bed temperature”,然后观察实时读数的更新。

在“ Control”选项卡中,我们可以看到视频流(如果有使用摄像头的话)和电机控制,以及定位轴的命令。

有一个G-code文件查看器,可以查看当前加载模型的横截面,还有一个终端可以向打印机发送自定义的G-code命令。最后一个标签是用于设置延时的,有插件可以帮助完成这个过程。

毫无疑问,对打印图像进行视频监控的最简单方法是使用官方的Raspberry Pi摄像头模块。在Thingiverse上有很棒的Raspberry Pi摄像头模块支架,可让你在打印模型时获得最佳视角。还有一些很棒的以OctoPrint为主题的Raspberry Pi保护套可以容纳你新的打印机大脑。

虽然它没有得到OctoPrint的官方支持,但如果你手边有USB网络摄像头,或者只是想要一些高质量的视频流,你可以使用它。OctoPrint wiki有一个众包列表,其中列出了已知可以工作的网络摄像头,还有一个链接,提供了网络摄像头正常工作所需的额外步骤。 地址:http://hsmag.cc/aREXbo

综上所述, 设置完成后的操作,基本就三步:

  1. 用切片软件导出Gcode文件,
  2. 在OctoPrint的Web界面按Upload上传G-code,
  3. 点击Print开始打印。

你会看到文件/打印细节出现,包括打印对象需要多长时间……在开始之前,请查看右侧的G-code Viewer选项卡。你不仅可以滚动浏览对象的各个层,还可以使用底部的滑块来查看3D打印机用来“绘制”每一层的精确图案。现在点击“打印”,看你的打印机是怎么工作的。

OctoPrint拥有社区创建的大量插件,比如我最喜欢的Octolapse,能制造出梦幻般的延时摄影效果。该插件会改变打印对象的G-code,以便每一层打印结束, 挤出机就从打印物上移开,让摄像头毫无阻碍地拍摄模型。结果看起来像是魔法般凭空生长出来的物体。

相关视频效果:https://v.qq.com/x/page/z3050xutjrm.html

插件地址:https://plugins.octoprint.org/

来自:HackSpace & RaspberryPi.org

作者:  Alex Bate

译者:王文文

20块钱做张可运行Linux的名片

对于一个工程师来说,如何在一张名片上宣告自己的实力?在上面制造一台完整的计算机说不定是个好主意。

  最近,美国一名嵌入式系统工程师 George Hilliard 的名片引发了众人的关注。他以自己的名片为「主板」,在小小的空间里打印了计算机系统所需的所有元器件,使其可以成为了一台可以运行 Linux 的电脑。上面还有一个简化版的 Python 解释器。

  这一颇具极客风的创意引来了社交网络上人们的广泛推崇,他的文章在 HackerNews 上出现还不到一天,点赞量就超过了 2000。

  制作这样一张名片,除了需要有足够的理论知识以外,所需的零件可以在淘宝上买到(是的,这位美国小哥就是这么做的),一张名片的成本大约 20 元人民币

  让我们看看他是如何做到的。

  作为一名嵌入式系统工程师,George Hilliard 一直在追寻完美的设计,其中之一就是最简洁的 Linux 系统计算机。他一直在海量处理器型号中寻找最优解,最终发现了新的大陆。他对自己说:「这些处理器便宜得就像白送。」很快产生了用它们来制作可以运行 Linux 的名片的想法。

  此前,不少极客先驱曾经在名片上发挥了自己的创意,其中包括 U 盘名片、带闪光灯的名片,甚至带无线电首发功能的名片。不过还从来没有可以运行 Linux 系统的名片。所以 George 自己动手做了一个:  

成品看起来是这个样子的,它是一台完整的 ARM 架构计算机,运行由 Buildroot 构建的定制 Linux 固件。

所以如何让它跑起来呢?名片的左下角是一个 USB 接口,如果你把它插入一台计算机,它将在 6 秒钟启动,显示为 USB 闪存,以及虚拟串行端口,你可以使用卡片的 shell 登陆。闪存驱动器里有一个 README 文件、个人简历的副本以及一些照片。而 shell 上有很多游戏,比如 Unix 上经典的 fortune and rogue、2048 以及一个小型的 MicroPython 解释器。

  所有这些都是在一个容量仅有 8MB 的闪存卡上实现的。Bootloader 的大小为 256KB,内核为 1.6MB,整个根文件系统用掉了 2.4MB。所以装一个系统绰绰有余。它还包含了一个可写入的主目录,以备有人想在上面存入什么东西。

  最后,一张名片的成本被控制在人民币 20 元左右,对于一台电脑来说,这显得足够便宜。

  一、名片设计是件「技术活」

  George Hilliard 自己设计并制作了整张名片,这虽然是作者的本职工作,但要找到足够便宜的元件还是非常麻烦的。

  处理器的选择是最重要的部分,它会控制成本并确定整个项目是可行的。在一系列调研后,George 选择了 F1C100s,它是 Allwinner 出品的一块贼便宜的芯片,它在成本优化上下足了功夫。这块芯片集成了 RAM 与 CPU,在功能上至少已经满足要求了。

  没想到的是,George 小哥哥竟然是在淘宝上买的 F1C100s,其它元器件都是在 LCSC 上买的。

  George 使用 JLC 制作了 PCB 板子,大概只需要 56 块钱就能做 10 份。George 表示他对 JCL 制作的板材印象深刻,它们虽然不像 OSHPark 制作的那么好,但是质量也还不错,重点是价格实惠。第一次做出来的电路板是哑光的黑色,它带有一点指纹的磁感。

  在第一次制作电路板时还遇到了一点麻烦:首先,USB 端口不够长,因此很难与更多的 USB 接口连接;其次,flash footprint 是错误的,George 通过手动把针脚压到元件后面。  

  在我们验证了各个部分后,再制作一次板材就能得到文章上面的实力。因为线路板尺寸很小,George 决定立即使用一个便宜的回流焊回流所有的部件。因为他能使用激光切割机,所以可以用激光切割压模机压制的焊锡模板。模板的效果非常好,芯片的 0.2 毫米针脚需要特别注意才能保持光洁:激光功率与焦距是非常重要的。

  其它空白的 PCB 板是非常好的夹具,用来固定板材以处理针脚,固定可以通过透明胶完成。George使用焊锡手动焊接元器件,他确保板材和元器件的处理都是无铅、无害的,因此用来作为名片也是没什么问题的。

上面这张图展示的处理结果有点偏离,但焊锡其实还是挺容易使用的,而且组装起来也非常容易。每一个元器件大概需要 10 秒钟装配,所以作者尽量减少元器件的数量。

  二、这样的名片多少钱?

  前面 George 已经尽可能降低成本了,他认为现在已经足够便宜,即使将名片发给别人也不会心疼。当然,也只有重要的结识对象才会收到这样的名片,毕竟所有元件都要你一个个装配。下面所有的成本都没有考虑装配时间,动手能力强的读者们可以考虑自己做一个。

当然,作者也表明还有很多成本并不能量化,例如运费和试错等等。但 20 块 RMB 已经非常低了,尤其是对于一块能运行 Linux 系统的板子。这其实也体现了企业制作端设备的成本,元器件成本要比我们想象中的低很多。

  三、名片的性能怎么样

  嗯,它在 6 秒内就启动了一个超级简化的 Linux 系统。因为格式和成本等因素,该名片是没有 I/O、联网模块,以及其它占资源比较大的程序。不过不管怎么样,George 还是将一些有趣的应用拷进了固件镜像文件。

  USB

  我们能通过 USB 做很多有意思的事,但作者特意令名片保持非常精简的状态,我们可以在电脑上做一些尝试。Linux 可以让我们像设备一样使用一些小工具,作者将该芯片之前的一些开发工作也传到了名片内,所以能有 USB 小工具框架的完整功能。George 决定模拟一个预生成的闪存驱动器,并通过虚拟串行端口提供 shell 服务。

  Shell

  在登录为 root 用户后,我们可以运行所有模拟串行控制台:

  • rogue:经典的 Unix 游戏《地牢爬虫》;
  • 2048:控制台版的 2048 游戏;
  • fortune:各种名人名言,为了给其它应用节约空间,其并不包含完整的数据库;
  • micropython:一个非常轻量的 Python 解释器。

  模拟闪存驱动

  在编译的过程中,构建工具可以生成一个很小的 FAT32 镜像,并将其加到 UBI 分区中。正如之前描述的,Linux 小工具子系统会将其作为一个储存设备提供给 PC。如果你希望看看闪存驱动到底发生了什么,那么最简单的就是看看源代码,它里面有作者的一些简历与介绍。

  闪驱源码地址:https://github.com/thirtythreeforty/businesscard-linux/tree/master/package/businesscard-flashdrive/files

  制作这种名片需要哪些资源?

  在制作电路板名片的过程中,George 使用了 F1C100s 芯片,并在上面运行主流的 Linux 5.2 版本。此外,他还提供了一些有关 F1C100s 芯片的文档,供读者借鉴。

  源代码

  George 已经在 GitHub 上开源了 Buildroot tree,读者可以自行查看。Buildroot tree 包含生成 NOR flash 镜像的代码,然后通过处理器的 USB 下载模式进行安装。此外,Buildroot tree 还包含游戏和其他好用的软件包,比如为 Buildroot 添加 fortune 软件。

  如果你想在项目中使用 F1C100s 芯片,则是一个很好的开始(如有问题,请随时联系)。

  Buildroot tree 项目地址:https://github.com/thirtythreeforty/businesscard-linux

  此外,George 重定了 Icenowy 发布的 F1C100s 开发工作,其可以运行 Linux 4.9 版本。George 的名片在接近主流的 5.2 版本上运行,其中对补丁进行了修补和调试。

  对于 F1C100s 芯片,George 相信自己拥有目前最好的 U-Boot 配置编译端口,这些再次基于 Icenowy 的部分工作。

  U-Boo 项目地址:https://github.com/thirtythreeforty/u-boot/tree/f1c100s-v2019.04

  F1C100s 文档

  George 找到了以下一些关于 F1C100s 的文档:

  • Allwinner F1C100s Datasheet (提供插脚引线和一般信息):https://www.thirtythreeforty.net/media/F1C100s_Datasheet_V1.0.pdf;
  • Allwinner F1C600 Reference Manual(提供 F1C600 的寄存器定义,它是 F1C100s 重贴商标后的改进版,支持 Linux):https://www.thirtythreeforty.net/media/Allwinner_F1C600_User_Manual_V1.0.pdf;
  • schematic for Sipeed’s Lichee Nano(这是 George 使其软件顺利运行所使用的开发板):http://dl.sipeed.com/LICHEE/Nano/。

  最后,如下图所示,George 上传了制作电路板名片的原理图。

电路板名片原理图。

有网友评论道:「对我来说令人难以置信的是,这样一块成本 1.42 美元(约合人民币 10 元)的芯片几乎包含了带动 Linux 的所有必要硬件:500MHz 的 CPU、32MB SDRAM、2D GPU、SD/MMC 支持以及 USB 控制器。他们都封装在一块 10mm×10mm 的微小芯片里。这让我不由得想入坑嵌入式开发。」

  项目感悟

  George 表示自己从这个名片项目中学到了很多,这是他首次使用回流焊来回流元器件的项目。此外,对于一些缺少文档的元器件,George 还必须学习找到必需的资源。

  在项目开展过程中,George 借鉴了其有关嵌入式 Linux 和设计 PCB 的经验。项目并非完全没有瑕疵,但体现了他的能力。此外,George 表示他正致力于如何从零开始为电路板名片等小型、廉价的 Linux 系统构建硬件和软件。

创客妹子教你用crontab实现开机启动

如果你想在系统启动时自动执行你的程序,在Linux有很多种方法。

但是随着的Linux版本越来越多,管理机制不断升级 —— “同一套方法,多款Linux兼容”的事情不再像以前那么简单。

这次我们来看看创客妹子 Estefannie 的视频教学,她给我们带来的是,如何通过crontab来实现程序开机就启动(该操作适合Linux新人,熟手可以不用看了)。

不止是树莓派官方推荐的Raspbian,业界主流的Linux版本都支持这样操作。

视频地址:https://v.qq.com/x/page/n3038n0zudk.html

这里为视频内容做个小结,作者用的是跑着Raspbian的树莓派。

在Shell界面执行以下命令:

sudo crontab -e

然后再输入:

@reboot python /home/pi/Desktop/led.py &

我们之前的文章其实出现过这样的用法,但没细讲过。

这条命令添加成功后,系统开机就会执行。如果你前面python脚本是要点亮一个LED小灯,我们又在树莓派上配好了环境。那系统每次重启成功后,你都可以看到小灯点亮了。

一般情况下,crontab的语法是前面要加时间和日期的,但用 @reboot 替代它们也是允许的:表示在重启后执行任务。

如果不加“&”符号,代表着前台运行。如果加上“&”符号,则表示后台运行。

素材:Raspberrypi.org

编译:王文文,热爱物联网,喜欢捣鼓开源软硬件和各种有意思的应用。前51CTO安全频道主编,RedHat认证工程师,华为HCIP-IoT认证工程师。