树莓派日(3月14日)来了又去,留下了美好的回忆和许多树莓派项目等着我们去尝试。在任何振奋人心、充满乐趣的假期过后,重返工作岗位可能会很艰难,PiDay也不例外。回首三月,怀念当年的欢乐。但请不要害怕,亲爱的圆周率日庆祝者,我们开始了下一个圆周率日的漫长倒计时!好吧,让我们认真一点。我制作了圆周率日倒数计时器,你也可以!不久前,我买了一个树莓派零W,用它来解决我WiFi信号不好的问题。我也对使用ePaper作为它的显示器很感兴趣。虽然不知道有什么用,但是!看起来真的很好玩!我买了一个2.13"WaveShare显示器,非常适合安装在RaspberryPi上。安装很简单:只需将显示器连接到RaspberryPi的GPIO。我在这个项目中使用RaspberryPi操作系统,尽管其他操作系统肯定会也可以工作。但是下面的raspi-config命令在树莓派系统上很容易使用。设置树莓派和电子纸显示器设置树莓派和电子纸显示器一起工作需要您启用RaspberryPi软件中的SerialPeripheralInterface(SPI),安装BCM2835C库(访问BroadcomBCM2835芯片的GPIO功能),安装PythonGPIO库控制电子纸显示。最后,你会需要安装WaveShare库以使用Python控制2.13英寸显示器。以下是完成此操作的步骤。启用SPI在树莓派上启用SPI的最简单方法是使用raspi-config命令。SPI总线允许串行与设备的数据通信e-本例中,电子报显示:$sudoraspi-config从弹出菜单中选择“InterfacingOptions->SPI->Yes”启用SPI接口,然后启动。安装BCM2835库如上所述,BCM2835库是用于RaspberryPi中BroadcomBCM2385芯片的软件,允许访问GPIO引脚以控制设备。在撰写本文时,适用于RaspberryPi的最新BroadcomBCM2385库版本为v1.68。安装这个库需要下载软件包,然后使用make安装:#下载BCM2853库并解压$curl-sSLhttp://www.airspayce.com/mikem/bcm2835/bcm2835-1.68.tar.g>-o-|tar-xzf-#进入解压文件夹$pushdbcm2835-1.68/#配置、检查和安装BCM2853库$sudo./configure$sudomakecheck$sudomakeinstall#返回上级目录$popd安装需要Python库你需要安装Python库RPi.GPIO,用Python控制电子纸显示,需要使用python3-pil包来画图。显然,PIL包已经死了,但Pillow可以作为替代品。我还没有为这个项目测试Pillow,但它可以工作:#InstallrequiredPythonlibraries$sudoapt-getupdate$sudoapt-getinstallpython3-pippython3-pil$sudopip3installRPi.GPIO注意:这些是Python3说明.您可以在WaveShare网站上找到Python2的说明。下载WaveShare示例和Python库Waveshare维护一个Python和CGit存储库,用于使用其电子纸显示和一些显示如何使用它们的示例。对于这个倒计时时钟,您需要克隆此存储库并将其用于2.13"显示器:#克隆WaveShare电子纸git存储库$gitclonehttps://github.com/waveshare/e-Paper.gi>如果您使用不同的显示器或其他公司的产品,需要使用适配软件。WaveShare提供了很多指导:WaveShare电子纸设置指南WaveShare电子纸库安装指南获取有趣的字体(可选)您可以随心所欲地使用显示器,何乐而不为呢?找一个很酷的字体!有大量开放字体许可字体可供选择。我真的很喜欢Bangers字体。如果您观看YouTube,就会看到这种字体,它非常受欢迎。你可以下载到本地共享字体目录文件,所有应用程序都可以使用它,包括这个项目:/fonts$curl-sSLhttps://github.com/google/fonts/raw/master/ofl/bangers/Bangers-Regular.ttf-ofonts/Bangers-Regular.ttf创建圆周率日倒数计时器现在你已经安装好了好的软件,可以使用带有炫酷字体的电子纸显示。您可以创建一个有趣的项目:倒计时到下一个圆周率日!如果需要,您可以直接从项目的GitHub存储库下载Python文件countdown.py并跳至文章末尾。为了满足大家的好奇心,我就一步一步来讲解。导入一些库#!/usr/bin/python3#-*-coding:utf-8-*-importloggingimportosimportsysimporttimefromdatetimeimportdatetimefrompathlibimportPathfromPILimportImage,ImageDraw,ImageFontlogging.basicConfig(level=logging.INFO)basedir=Path(__file__).parentwaveshare_base=basedir.joinpath('e-Paper','RaspberryPi_JetsonNano','python')libdir=waveshare_base.joinpath('lib')开始导入一些标准使用在图书馆之后的脚本中。它还需要您从PIL添加Image、ImageDraw和ImageFont,您将使用它们来绘制一些简单的图形。最后,为包含用于2.13"显示器的WavesharePython库的本地lib目录设置一些变量,稍后您可以使用这些变量从本地目录加载库。FontSizeHelper接下来是创建一个helper函数用于调整您选择的Bangers-Regular.ttf字体的大小。此函数采用整数变量作为大小参数并返回用于显示的图形字体对象:defset_font_size(font_size):logging.info("Loadingfont...")returnImageFont.truetype(f"{basedir.joinpath('Bangers-Regular.ttf').resolve()}",font_size)倒计时逻辑后面跟着一个计算这个项目的函数:距离下一个圆周率还有多长时间。如果是一月份,那么计算剩余天数就简单了。但是你需要考虑今年的圆周率日是否已经过去(很遗憾)。如果是,那么计算在你再次庆祝之前还有多少天:defcountdown(now):piday=datetime(now.year,3,14)#addayearifpiday
