今天小编给大家带来的是来自纽约的电子工程师Whitney Knitter的基于Raspberry Pi Zero的魔法报纸项目。
材料清单
硬件
- Raspberry Pi Zero 无线
- Adafruit eInk Breakout Friend
- 296x128 单色电子墨水/电子纸显示屏 - UC8151D 芯片组
- 适用于 Raspberry Pi HAT 的 Adafruit SMT GPIO 接头 - 2x20 短母头接头
- M20-8771246-ND 连接器 SMD 12芯 2.54MM
软件
- Raspberry Pi Raspbian
概述
在hackster品台上闲逛时看到了乔伊·卡斯蒂略 (Joey Castillo) 的 Open Book 项目。他的PCB丝印上有白色基板和黑色文字,用于描述电路板的功能,让我产生了一个想法:
由于最近在看《哈利·波特》,白色的底纸和黑色的文字立刻让我想起了报纸。然后我想到了eInk显示器如何旋转一系列图像,使它们看起来像是移动的,类似于霍格沃茨的魔法报纸。
因此,我去 Adafruit 的网站上购物,我去看看有哪些 eInk 显示屏选项,以及我需要哪些组件来驱动它以放在我自己的定制哈利波特报纸 PCB 上!
零件选择
因此,我最初计划将Raspberry Pi Zero作为我定制PCB中唯一的外部板。eInk Friend 开发板的原理图可在 Adafruit 的开发板教程页面上找到,因此我最初的计划是将电路复制 + 粘贴到我自己的原理图中,然后简单地重做布局部分(我个人认为这是一种奇怪的放松活动)。
然而,在我做这个项目的时候,SRAM芯片、稳压器和eInk显示器的连接器都有太长的交货时间,这个项目无法在这个万圣节前按时完成,所以我选择将eInk Friend板的接头焊接到我的定制PCB上。
这使得零件选择变得超级简单。我所需要的只是一个Pi Zero板、一个eInk Friend板、一个SMT接头和一个eInk显示器。我为 Pi 选择了 Adafruit 的短母 SMT GPIO 接头,并在 Digikey 上找到了单排 12 针 SMT 公接头。
我选择的 eInk 显示屏是我在 Adafruit 上找到的最大的柔性 eInk 显示屏:2.9 英寸柔性 296x128 单色 eInk 显示屏,采用UC8151D芯片组。
KiCad 中的原理图
KiCad 是迄今为止我最喜欢的 PCB 布局软件。首先,我把 Pi 和 eInk Friend 的标题之间的连接示意图放在一起。
我还在电路板上总共添加了 10 个安装孔:4 个用于 Pi Zero,2 个用于 eInk Friend,然后 4 个用于整个 PCB 本身,这样我就可以使用更长的支架来放置它,而无需将其放在背面的 Pi 和 Friend 板上。
我使用了库中的RaspberryPi2_3符号,因为引脚排列是与Pi Zero相同的GPIO。然后,我为其分配了 2.54mm SMT 封装。
eInk Friend 板的接头只是一个 1x12 公头,基底面为 2.54mm:
然后我使用了与Pi Zero相同的安装孔,即2.7mm M2.5垫安装孔。
KiCad 中的 PCB 布局
将原理图导出到PCB后,是时候进行有趣的部分了:布局。总体计划是将eInk Friend和Pi Zero板放在PCB的一侧,然后eInk在另一侧展示自己,周围是丝网印刷上的所有 “新闻纸 ”,就好像eInk是报纸的头条照片一样。这意味着所有组件的物理放置非常关键,特别是当 eInk 友的接头是确保 eInk 显示器本身的平面弯曲可以到达它时。
首先,我在 Edge Cuts 图层上绘制了电路板的周长,因为我将使用边缘的 X/Y 位置来作为其他所有内容放置的基础。
对于相对于针座的安装孔放置的测量,我在这里找到了Pi Zero安装孔的具体尺寸 ,可以在我的板上重新创建。
eInk Friend 开发板的安装孔有点棘手,因为 Adafruit 的开发板文件位于 Eagle 中,而不是 KiCad(可在此处的 Github 中找到)。我没有安装 Eagle,而是通读了 Github 中开发板文件的原始代码,通过关键字搜索“mount”来找到我需要的东西。
一旦安装孔位于我想要的位置,我将 RPi GPIO 和 1x12 Friend SMT 接头移动到相对于它们的适当位置。
起初,我只是打算将 eInk 显示屏放在报纸 PCB 的边缘附近,以便将其包裹起来。但我最终决定在 Edge Cuts 图层上添加一个插槽切口,以将 eInk 平面弯曲穿过,因为让 eInk 显示屏更居中地放在电路板上看起来更好。
我在 Word 文档中输入了文章的每个简介,然后将它们复制 + 粘贴到丝网印刷层的文本框中。这更容易,因为 KiCad 中没有拼写检查,而且我不想出现任何令人尴尬的错别字......
另外,由于我将 SMT 标题放在前层,所以我将所有新闻纸的丝网印刷放在背面丝网印刷层而不是正面。
最终的 3D 渲染没有让人失望:
我向 Osh Park 提交了我的订单,选择了他们的 After Dark 基材/面膜选项,因为现在是万圣节,并焦急地等待着他们的到来......
焊接电路板
一旦电路板到达,我对它们的结果感到兴奋:
我首先将公头引脚焊接到Raspberry Pi Zero W上。如果你想知道为什么我没有买一个已经焊接了接头的,Pi Zeros的预焊接接头版本都有在Pi板的顶部,但我希望它们在底部。
然后,我将SMT针座焊接到PCB上:
幸运的是,在我开始之前,我确实注意到了这里的操作顺序很重要。在将 eInk Friend 焊接到 PCB 之前,我需要将 1x12 SMT 针座焊接到 PCB 上,因为我无法接触到 eInk Friend 板下方 SMT 针座侧面的焊盘。
把所有东西都焊接好后,我用支架螺丝安装了Pi Zero。但是,对于eInk Friend来说,我没有任何足够短的支架(直到我将eInk Friend板焊接到公头上,我才注意到照片中的支架太高了)。
然后,我通过切口将 eInk 扁平柔性送入 PCB 并将其连接到 PCB 的正面:
最后,我只是用一条环形透明胶带将 eInk 显示屏固定在 PCB 的另一侧。
设置 Raspberry Pi Zero
我使用的是Raspberry Pi Zero W V1.1,我特别选择了无线型号,这样我就可以通过Wi-Fi使用安全复制命令从我的主计算机轻松上传eInk Python脚本的新图像。这样一来,除了微型 USB 电源之外,电路板就不需要其他物理连接。scp
我下载了最新版本的Raspberry Pi Imager工具,并为Raspberry Pi Zero W V1.1创建了一张新的SD卡。如果你使用的是V2.1,你不要选择Pi Zero W 1,这一点非常重要,因为Pi Zero W 64的2位操作系统在Pi Zero W V1.1上不起作用,你将永远被困在彩虹启动屏幕上。
出现提示时,我选择编辑操作系统的设置以设置主机名、用户名/密码,并使用我的 Wi-Fi 凭据配置无线 LAN:
对于Pi Zero W的第一次启动,我连接到显示器和键盘/鼠标,以进行初始更新和操作系统配置。
whitney@raspberrypi:~ $ sudo apt udpate
whitney@raspberrypi:~ $ sudo apt upgrade
whitney@raspberrypi:~ $ sudo raspi-config
在“接口选项”下,我启用了 SSH 和 VNC 以无线远程访问 Pi(奇怪的是,尽管我在对 SD 卡进行成像时在 Raspberry Pi Imager 工具中启用了它,但 SSH 直到我在这里启用它才起作用)。我还启用了 SPI 和 I2C,因为 eInk 显示器需要 SPI。
退出 Raspberry Pi 配置编辑器并重新启动后,我测试了主计算机的 SSH 连接,然后断开显示器和键盘/鼠标的连接(请务必将“whitney”替换为您在 Raspberry Pi Imager 工具中指定的任何用户)。
whitneyknitter@Whitneys-MBP ~ % ssh whitney@192.168.1.231
连接到 Pi 后,我安装了与 eInk 显示屏和 eInk Friend 板通信所需的所有 Adafruit Python 驱动程序:
whitney@raspberrypi:~ $ pip3 install Adafruit-PlatformDetect
whitney@raspberrypi:~ $ pip3 install Adafruit-Blinka
whitney@raspberrypi:~ $ pip3 install adafruit-circuitpython-epd
并克隆了他们的 Circuit Python eInk Paper 显示存储库,以将他们的示例脚本作为我的主 Python 脚本的起点,以旋转正在显示的图像:
whitney@raspberrypi:~ $ git clone https://github.com/adafruit/Adafruit_CircuitPython_EPD.git
克隆后,我还将字体文件下载到脚本的主位置(即示例目录),以允许 Pillow 库在显示器上绘制的任何图像中创建文本。
whitney@raspberrypi:~ $ cd ./Adafruit_CircuitPython_EPD/examples/
whitney@raspberrypi:~/Adafruit_CircuitPython_EPD/examples $ wget https://github.com/adafruit/Adafruit_CircuitPython_framebuf/raw/main/examples/font5x8.bin
用于驱动 eInk 显示的 Python 脚本
最终,我从 示例目录中获取了脚本,并在 显示器上绘制图像的两个实例周围放置了一个循环。因此,一旦运行此脚本,它将在 eInk 显示屏上显示两个图像之间循环,直到收到 ctrl+C 键盘中断。我发现UC8151D的底层驱动程序已经内置了时间延迟,因此没有必要将它们放在我的顶级 Python 脚本中。
epd_pillow_image.pywhile True
我决定让它在 ChatGPT 标志和伏地魔的图像之间切换,因为我编造了一点关于 ChatGPT 偷偷伪装成他的小简介(请告诉我我不是唯一一个认为这很有趣的人哈哈)。
此外,由于从技术上讲,当向后弯曲到PCB的另一侧时,显示器是倒置的,因此我不得不将图像旋转为倒置。这样一来,它们就以正确的方向出现,背面有丝网印刷新闻纸。这些图像只是从谷歌图像搜索中截取的屏幕截图,并给出了.png扩展名。
由于我必须在我的主计算机上创建图像,因此我决定在我的主计算机上修改 脚本(重命名为 )也会更容易,然后使用以下命令将它们传输到 Pi:
epd_pillow_image.pyepd_pillow_hp_newspaper.pyscp
whitneyknitter@Whitneys-MBP ~ % scp -O ./epd_pillow_hp_newspaper.py ./lordV.png ./chatGPT_logo.png whitney@192.168.1.231:/home/whitney/Adafruit_CircuitPython_EPD/examples
最终产品
最后,是时候看看这一切的实际情况了。所以我跑了剧本,屏住了呼吸!!
whitney@raspberrypi:~/Adafruit_CircuitPython_EPD/examples $ python3 ./epd_pillow_hp_newspaper.py
老实说,结果比我想象的要酷。EPD 驱动程序内置的 eInk 刷新时间有点慢,但还是太酷了!我也很高兴我真的构建了一些有效的东西!