用树莓派做一个木制 LED 游戏显示器 的教程
itomcoil 2025-07-08 19:22 17 浏览
转自
:https://make.quwj.com/project/209/instructions
材料清单
树莓派 Zero W × 1WS2812B LED(30 LED/m) × 200带有 MAX7219 的 SPI LED 点阵显示器 × 4电线 × 若干蓝牙游戏手柄 × 1电源5V 5A × 1激光切割的 MDF 板 × 若干木质贴面或扩散板 × 若干电容 × 1电阻 × 1螺丝 × 若干
制作外框
点阵屏的框架由 MDF 木材制成,厚度为 3mm,并通过激光切割机切割。
大多数零件只是通过嵌入固定,只有某些零件(如外框)应使用木胶将其粘合在一起。在涂任何胶水之前,请确保之前的步骤是正确的。此外,还必须粘贴木质贴面,但这是确保一切正常之后的最后一步。
在背板的右侧(下部),有一个切割的部分,用于将电子元件固定到点阵屏上,并且当胶合单板时仍然可以接通这些元件。
激光切割文件请在项目文件库中下载。
https://make.quwj.com/project/209
安装 LED
LED 灯条是标准的 30 LED/m WS2812 灯条。
激光切割段具有较小的切割区域,以适合 10cm 的 LED 宽度。该 LED 灯带的背面带有双面胶带,因此可以在精确定位后直接将它们直接粘贴到 MDF 上。在使用胶带之前,请检查每条灯带的正确方向( DIN-DOUT 方向)。
接线方式为锯齿形,因此在最后,点阵屏只有一个输入引脚,电缆长度应尽可能短。为了正确分配电源并减少点阵屏顶部的布线,每个 LED 灯条都连接到点阵屏底部的 5V 和 GND。可以使用单线或原型 PCB 来分配 5V 和 GND 线。
组装
只需按照分步安装图片进行操作即可。背板具有交叉结构,以固定长侧壁和一些短侧壁。如果在安装部件时遇到问题,请使用砂纸打磨处理。
焊接
有多种方法可以将不同灯带的电源线焊接在一起。可以使用单根电线或某种铜制共轨来焊接不同的电线。在这种情况下,使用原型 PCB 块将电源轨引导到灯带。WS2812B 灯带已经有单独的电源电缆,可以使用它们将电源轨连接到第一个灯带输入(图片的左侧)。
安装 SPI 显示
为了显示游戏成绩和文字,使用了基于 LED 驱动器 MAX7219 的 LED 点阵屏显示器。它通过 SPI(串行外围接口)连接到树莓派。四个 8x8 显示器组合成一个 32x8 像素点矩阵显示器。可以在网上购买这种 8x8 像素显示器,也可以购买 32x8 像素组合显示器。
同样,有不同的颜色选择;在这种情况下,使用红色显示。因为 SPI 就像移位寄存器一样工作,所以通过将第一个矩阵的数据连接到第二个矩阵的数据输入,依次将这些显示器串联在一起,依此类推,从显示器的右侧开始。
如果此显示直接放置在饰面板层的后面,则只能从外部读取。如果没有,则只有红色模糊可见。因此,必须将其安装在背板切口段的顶部,背板表面与点阵屏表面之间的距离为 30mm。我使用了一些剩余的木制件和螺钉来适应底板和 PCB 之间缺少的19毫米,也可以使用任何外部类型的垫片。
显示屏的接线将在下面的步骤中进行讲解。
安装树莓派
在此安装中,使用了树莓派 Zero。也可以使用任何其他树莓派型号,但是较新的型号具有集成的 WiFi 和蓝牙,可以轻松连接到无线游戏手柄并简化编程。可以使用至少两个螺钉和小的垫片将树莓派固定到背板上,以固定树莓派。
对于树莓派 Zero W,使用以下引脚:
PIN 2:5VPIN 6:GNDGPIO18-> LED灯条GPIO11:SPI CLK -> MAX7219 matrix CLKGPIO10:SPI MOSI -> MAX7219 matrix DINGPIO8:SPI CS -> MAX7219 matrix CS
接线和电源
根据接线方案进行接线。电源为 5V 直流电源。
为了方便点阵屏的开/关切换,在电源插头和点阵屏电路之间增加了一个开关。但是,由于树莓派不喜欢硬关闭,因此软件中有一个关闭选项,可以在切换点阵屏之前通过 Gamepad 安全关闭树莓派。
LED灯条DIN引脚通过电阻连接到Pi,还添加了一个大电容(4700uF)来缓冲电源。有关更多详细信息,请查看Adafruit"Uberguidefor Neopixels。
每个 LED 消耗的最大电流为 60mA,因此最大电流为 200x60mA = 12A 是可以的。通过降低亮度并且不使用所有全白 LED,这虽然是一个理论值,但取决于达到最大电流的代码。因此,选择足够大的电源非常重要。对于大多数应用,具有 5V/5A(25W)的电源就足够了。
要将背板与树莓派和矩阵显示器固定在一起,可以使用一些小木块将它们的边缘固定,也可以使用螺钉将背板固定到位。
配置树莓派
1、下载最新的 Raspian Lite 版镜像并安装,参考教程
:https://shumeipai.nxez.com/2013/09/07/how-to-install-and-activate-raspberry-pi.html
2、配置网络,参考教程:
https://shumeipai.nxez.com/2017/09/13/raspberry-pi-network-configuration-before-boot.html
3、在 boot 分区下添加一个名为 ssh(没有任何扩展名)的空文件以启动以启用 ssh 访问。
4、将 SD 卡插入树莓派并启动它。
5、运行下面的命令安装软件和依赖。
sudo apt-get install python3-pip
sudo pip3 install --upgrade setuptool
6、安装 Neopixel 驱动程序,ws281x lib,pygame 和 libsdl
sudo pip3 install rpi_ws281x adafruit-circuitpython-neopixels
sudo pip3 install pygame
sudo apt-get install libsdl1.2-dev
sudo pip3 install --upgrade luma.led_matrix
7、通过调用 raps-config 启用 SPI,导航至 5 接口选项 /P4 SPI/Enable
sudo raspi-config
8、添加蓝牙游戏手柄
sudo bluetoothctl
[bluetooth]# agent on
[bluetooth]# pairable on
[bluetooth]# scan on
[bluetooth]# pair aa:bb:cc:dd:ee:ff
[bluetooth]# trust aa:bb:cc:dd:ee:ff
[bluetooth]# connect aa:bb:cc:dd:ee:ff
[bluetooth]# quit
其中 aa:bb:cc:dd:ee:ff 是蓝牙游戏手柄的 MAC 地址。使用“scan on”命令后,会显示该地址。确保蓝牙控制器已准备好配对,请检查控制器手册以了解如何进行配对。
9、现在,可以通过以下方式连接到树莓派,默认密码是 raspberry(Windows 用户可以使用 Putty):
ssh pi@192.168.x.y
Python 代码,测试和模拟器
可以在 Github 上找到代码。games_pi_only.py 和所有 bmp 文件都是必需的。
git clone https://github.com/makeTVee/ledmatrix/tree/master/python/pi_only
该代码具有一个选项,可以使用 pygame 在树莓派之外的模拟模式下运行,以模拟点阵屏。这对开发新功能非常有帮助,而无需直接访问点阵屏硬件。而且调试也容易得多。必须设置PI常数才能激活仿真模式(第 15 行):
PI=False
在此模拟模式下,还可以使用键盘代替蓝牙游戏手柄。按钮 1、2、3、4 分别映射到游戏手柄的 A,B,X,Y,方向箭头键,“s”表示开始,“x”表示选择。可以使用标准编辑器以及控制台,也可以使用某些集成的 IDE(例如 Micosoft Visual Studio Code 或 Jetbrain PyCharm)在 PC 上进行开发。如果使用矩阵和树莓派,则必须定义:
PI=True
要将代码复制到树莓派,可以用 scp 命令。打开控制台窗口,切换到包含 Github 文件的文件夹并运行:
scp games_pi_only pi@192.168.x.y:/home/pi
scp *.bmp pi@192.168.x.y:/home/pi
然后通过 ssh 连接到树莓派(Windows用户可以使用Putty):
ssh pi@192.168.x.y
成功登录后,通过以下命令来启动 python 代码:
sudo python3 games_pi_only.py
如果代码正确运行,则可通过以下命令启用自动启动:
sudo nano /etc/rc.local
并在出口 0 之前添加以下行:
/usr/bin/nice -n -20 python3 /home/pi/games_pi_only.py &
测试和贴面
在将胶合板粘贴在正面顶部之前,应先测试点阵屏以确保所有 LED 都能正常工作。
木质贴面是一种特殊的枫木贴面纸,称为 Microwood,单面覆盖有纸,厚度为 0.1mm。可以使用标准的无水纸胶将纸面直接粘合在 MDF 板上。
完工!
现在可以开心的玩耍啦!
相关推荐
- mysql中缓存开启和失效场景cache_mysql缓存机制有几种
-
--1.当前数据库是否支持缓存数据SHOWVARIABLESLIKE'have_query_cache';--2.当前数据库缓存数据库开关是否开启OFF/0未开启YES/...
- MySQL常见错误及解决方法_mysql错误大全
-
MySQL是最常用的关系型数据库之一,在使用过程中也会遇到很多报错,本文列举了一些常见的错误及解决方法。1.Can'tconnecttoMySQLserver原因:MySQL服务未启...
- 牛哇!MySQL中的日志“binlog”的三种格式这么好玩
-
MySQL中的日志比较重要的有binlog(归档日志)、redolog(重做日志)以及undolog,那么跟我们本文相关的主要是binlog,另外两个日志松哥将来有空了再和大家详细介绍。1...
- 让我们在音乐中藏点儿东西吧_让我们在音乐的世界里
-
1不仅仅是音轨前阵子,新的Doom游戏中的一段音轨被人发现里面有隐藏的五角星图片以及“666”的字样,这不禁让我有了想尝试一下的想法。其实很早之前就知道可以通过多种方式将图片转换成声音,但是自己从...
- 《Python实现PPT转图片:高效批处理的技术路径》
-
Python处理PPT转图片的核心方案集中于两类库:基于COM接口的win32com.client,适用于Windows环境,通过调用PowerPoint程序API实现幻灯片逐页导出,支持指定分辨率...
- 实测o3/o4-mini:3分钟解决欧拉问题,OpenAI最强模型名副其实
-
号称“OpenAI迄今为止最强模型”,o3/o4-mini真实能力究竟如何?就在发布后的几小时内,网友们的第一波实测已新鲜出炉。最强推理模型o3,即使遇上首位全职提示词工程师RileyGoodsid...
- 如何用Python快速切割图片?_python把图片切割成固定大小的子图
-
安装一个叫做PIL的Python图像处理库,它可以让我们读取、裁剪和保存图片。准备一张要分割的图片,并把它放在一个文件夹里。比如这里有一张很长的漫画图片,命名为2023-07-29_100430.pn...
- bmp转jpg脚本_bmp转化为jpg批量
-
我们在使用示波器时,经常会需要将波形通过U盘导出,一般这种导出的波形的都是bmp格式的,很多时候bmp格式的图片不方便使用,需要转换为jpg或png格式的。波形保存到U盘后,可以...
- python模块安装问题汇总及解决办法
-
问题:pipinstallplaysound出错解决办法:pipinstallplaysound==1.2.2问题:pipinstall某个模块失败解决办法:可以去用这个模块的whl文...
- Python处理图像_python怎么图像处理
-
入门知识颜色。如果你有使用颜料画画的经历,那么一定知道混合红、黄、蓝三种颜料可以得到其他的颜色,事实上这三种颜色就是美术中的三原色,它们是不能再分解的基本颜色。在计算机中,我们可以将红、绿、蓝三种色光...
- python如何给图片添加文字水印?_python如何给图片添加文字水印
-
方法:方法简单粗暴,打开图片然后在合适的位置绘制文字,最后保存。python可以使用PIL库来操作图片,不过据说PIL不支持python3,使用pillow作为替代。安装pillow:pipins...
- 游戏外挂,用Python输过谁?_python写游戏辅助脚本教程
-
玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢?我打开了4399小游戏网,点开了一个不知名的游戏,唔,做寿司的,有材料在一边,客人过来后说出他们的要求,你按照菜单...
- 如何使用python裁剪图片?_python图片截取
-
如何使用python裁剪图片如上图所示,这是一张包含了各类象棋棋子的图片。我们需要将其中每一个棋子都裁剪出来,此时可以利用python的PIL库实现。一、安装PIL库如果此前没有安装过PIL库,...
- Python图像处理神器!Pillow库从入门到精通,这教程太全了
-
Pillow是Python中一个强大的图像处理库,是PIL(PythonImagingLibrary)的分支和升级版本。本教程将介绍Pillow的基本用法和常见操作。##安装Pillow```p...
- Python自动化办公应用学习笔记37—文件读写方法1
-
一、文件读写方法1.读取内容:read(size):读取指定大小的数据,如果不指定size,则读取整个文件。data=file.read(100)#读取前100字节readline():读取一...
- 一周热门
- 最近发表
- 标签列表
-
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)
- shutil.copy() (33)