将基于Raspberry Pi 4的微型PC与显示处理器模式的显示屏组合在一起



今天,我将向您展示如何组装Raspberry Pi 4的机壳,它将Raspberry Pi 4变成一台真正的微型计算机。



该机壳部分进行了3D打印,部分由透明的丙烯酸制成,因此您可以看到我们微型PC的“内幕”。为了冷却处理器,我使用了冰塔冷却器,但没有将风扇连接到散热器,而是将风扇连接到了箱壁。



我还在机箱的前部内置了一个OLED显示屏,该显示屏可显示Raspberry的IP地址和数据,例如CPU性能和温度,存储和内存使用情况。



这是装配,外壳和显示器的视频:





创建自己的Raspberry Pi 4 mini台式计算机需要什么







  • Raspberry Pi 4(任何型号都可以)
  • Micro SD卡;
  • Raspberry Pi电源;
  • 冷却器冰塔;
  • I2C OLED显示屏;
  • 带状电缆;
  • 母公连接器;
  • 安装螺丝;
  • 亚克力2mm;
  • 3D打印机(PLA)的黑色塑料。


您还需要3D打印机来打印外壳的塑料部分。我正在使用Creality Ender 3 Pro,我认为它兼具可负担性和质量。



组装不需要任何激光雕刻机,尽管这样可以更轻松地制造身体部位。始终可以使用现有工具简单地手工切割它们,也可以使用激光切割服务。我使用了K40台式激光雕刻机。



让我们组装Raspberry Pi 4保护壳



我们在3D打印机上打印车身



我首先在Tinkercad中创建了未来拳击的3D模型





下载模型


考虑到Raspberry Pi在盒子中的预期放置位置,开发了一个案例模型。根据计划,USB和以太网端口位于正面,而电源,HDMI和音频端口位于背面。



OLED显示器位于机箱正面,端口上方。在顶部,我们将用两个小夹子固定它,在底部-用一个带螺丝的塑料夹子将其固定。我以前在创建基于Arduino的反应计时器时使用了此方法





我将在“冰塔”随附的黄铜架子上安装“树莓”。我刚刚添加了一些M2.5孔。



我不经常将我的SD卡从Raspberry中拔出,因此我没有添加切口以使其更易于移除。如果您打算这样做,只需在机箱背面添加一个圆形切口即可。如果没有此切口,则更换SD卡会有些困难,因为您需要先从包装箱中取出单板计算机。





我3D打印了由黑色塑料制成的微型计算机机箱,层高为0.2毫米,覆盖率为15%。同时,在打印时,我还考虑了前面板上显示器和端口的切口。这可以在3D建模程序中轻松完成。您还需要打印一个小的塑料展示夹。





嵌入Raspberry Pi和散热器



现在外壳的主体已经准备好,让我们将Raspberry Pi安装到其中。首先,将黄铜柱拧入底座的孔中。





请注意,我已经更改了Ice Tower随附的螺钉和支脚的方向,以使它们直接拧入壳体的底部,不需要通孔。如果您阅读《冰塔》手册,您会发现支架和螺丝相反。





我们需要从冷却器中卸下风扇,以便将其连接到透明的侧面板。我们将风扇放在此处,以确保从外壳的外部吸入冷空气,然后通过对侧的通风孔将其排出。





根据说明将支撑架安装到冰塔散热器的底部。确保您做的一切正确。





将覆盆子放到适当的位置,然后使用拧入外壳底部的第二组黄铜支柱固定所有部件。





将散热器垫粘到处理器上,然后除去顶部保护膜。将冰塔散热器放在处理器的加热垫上,并用黄铜支架中的四颗螺钉将其固定。



安装OLED显示屏



现在我们需要安装OLED显示器。如果您的显示针没有焊接,请将其焊接到显示器背面。





将显示屏的顶部边缘滑入塑料夹下方,然后将其轻轻推入到位。





使用3D打印的剪辑,并用小螺丝将其固定。可能需要使用挠性轴或90度角的螺丝起子来拧紧螺钉。





现在我们需要将导线引至OLED显示器。您将需要与通用输入/输出接口(GPIO)引脚建立4个连接-两个用于电源,两个用于通信。我用杜邦连接器的针脚和带状电缆制作了一条短跳线。您也可以使用多个面包板销或跳线将显示器连接到Malinka。





组装好电缆后,请按以下方式将电缆的一侧连接到显示器的背面,另一侧连接到GPIO引脚:



  • VCC→Pin1 3.3V电源;
  • GND→引脚14接地;
  • SCL→引脚3 SCL;
  • SDA→引脚2 SDA。




我注意到这些OLED显示器有两种版本,将触点放置在其中的顺序略有不同。因此,只需确保将电源连接到正确的引脚即可。



我们做丙烯酸墙



通常,我们已经完成了案例的内部部分。现在,让我们制作一些丙烯酸墙来完成它。





我重新打开了Tinkercad(免费的3D建模软件-ed。),并大致确定了Ice Tower散热器的位置,以便风扇安装孔在侧板上的正确位置。然后,我导出了箱壁的图像以在Inkscape中打开并绘制激光雕刻版面。



我们制造了两块丙烯酸墙:一扇带有进气风扇,另一扇带有排气口。





您可以删除零件的轮廓,因为我们只需要切割墙的轮廓和其中的孔。通常,该模型需要包括一个风扇孔和四个螺丝孔。添加孔以将丙烯酸墙固定到先前印刷的盒子上也很重要。





然后,我复制了将安装风扇的墙壁的形状,并绘制了一系列六边形来代替孔。逻辑很简单:六边形用于排气。





下载丙烯酸墙

模型下载3D打印外壳的一部分模型


如果您没有激光机来进行如此精确而复杂的切割,只需在同一位置钻出圆孔(直径约8毫米)即可。





我们切!对于侧板,我使用了2mm透明丙烯酸。





您可以使用任何所需的丙烯酸-半透明的有色或不透明的。最可用的有机玻璃厚3毫米。通常,厚度并不重要,边缘只是稍厚。





要将风扇安装到侧面板上,请将几个M3螺母按入相应的插槽中。最简单的方法是将螺母放在平坦的表面上,在螺母上定位所需的孔以固定风扇,然后按直到其卡入到位。螺母将紧紧固定,因此在拧紧螺钉时无需使用扳手将其固定。



如果要使用风扇螺钉,我会立即告诉您,螺钉太短而无法穿过丙烯酸,风扇和螺母。这也不是安装风扇的最佳方法。





用四颗M3 x 8mm六角头螺钉将侧玻璃固定到3D打印盒上。





这将是棘手的,因为在打印盒的孔内没有螺纹。





现在将风扇连接到5V电源,并安装第二个丙烯酸面板(带排气孔)。红线连接到Pin4(5V),黑线连接到Pin6(接地)。





这样就完成了组装。我们的Raspberry Pi 4 mini桌面已经准备就绪。现在我们需要显示器才能工作。



编程OLED显示屏



为了使显示正常工作,您需要运行Python脚本。为此,您需要运行“树莓”。



Raspberry Pi使用I2C协议与显示器进行通信,因此请确保将其纳入您的设置。还要检查您是否安装了python-smbus和i2c-tools库。它们应该是默认设置,但是在这里最好重写并仍然检查。



以下脚本基于OLED显示模块的Python Adafruit库中的脚本之一,并由Shahizat Nurgaliev进行了一些修改,以将CPU温度添加到显示的数据中并更改显示格式。



# Copyright (c) 2017 Adafruit Industries
# Author: Tony DiCola & James DeVito
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
import time

import Adafruit_GPIO.SPI as SPI
import Adafruit_SSD1306

from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

import subprocess

# Raspberry Pi pin configuration:
RST = None     # on the PiOLED this pin isnt used
# Note the following are only used with SPI:
DC = 23
SPI_PORT = 0
SPI_DEVICE = 0

# Beaglebone Black pin configuration:
# RST = 'P9_12'
# Note the following are only used with SPI:
# DC = 'P9_15'
# SPI_PORT = 1
# SPI_DEVICE = 0

# 128x32 display with hardware I2C:
disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST)

# 128x64 display with hardware I2C:
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)

# Note you can change the I2C address by passing an i2c_address parameter like:
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST, i2c_address=0x3C)

# Alternatively you can specify an explicit I2C bus number, for example
# with the 128x32 display you would use:
# disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, i2c_bus=2)

# 128x32 display with hardware SPI:
# disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, dc=DC, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=8000000))

# 128x64 display with hardware SPI:
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST, dc=DC, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=8000000))

# Alternatively you can specify a software SPI implementation by providing
# digital GPIO pin numbers for all the required display pins.  For example
# on a Raspberry Pi with the 128x32 display you might use:
# disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, dc=DC, sclk=18, din=25, cs=22)

# Initialize library.
disp.begin()

# Clear display.
disp.clear()
disp.display()

# Create blank image for drawing.
# Make sure to create image with mode '1' for 1-bit color.
width = disp.width
height = disp.height
image = Image.new('1', (width, height))

# Get drawing object to draw on image.
draw = ImageDraw.Draw(image)

# Draw a black filled box to clear the image.
draw.rectangle((0,0,width,height), outline=0, fill=0)

# Draw some shapes.
# First define some constants to allow easy resizing of shapes.
padding = -2
top = padding
bottom = height-padding
# Move left to right keeping track of the current x position for drawing shapes.
x = 0


# Load default font.
font = ImageFont.load_default()

# Alternatively load a TTF font.  Make sure the .ttf font file is in the same directory as the python script!
# Some other nice fonts to try: http://www.dafont.com/bitmap.php
# font = ImageFont.truetype('Minecraftia.ttf', 8)

while True:

    # Draw a black filled box to clear the image.
    draw.rectangle((0,0,width,height), outline=0, fill=0)

    # Shell scripts for system monitoring from here : https://unix.stackexchange.com/questions/119126/command-to-display-memory-usage-disk-usage-and-cpu-load
    cmd = "hostname -I |cut -f 2 -d ' '"
    IP = subprocess.check_output(cmd, shell = True )
    cmd = "top -bn1 | grep load | awk '{printf \"CPU Load: %.2f\", $(NF-2)}'"
    CPU = subprocess.check_output(cmd, shell = True )
    cmd = "free -m | awk 'NR==2{printf \"Mem: %s/%sMB %.2f%%\", $3,$2,$3*100/$2 }'"
    MemUsage = subprocess.check_output(cmd, shell = True )
    cmd = "df -h | awk '$NF==\"/\"{printf \"Disk: %d/%dGB %s\", $3,$2,$5}'"
    Disk = subprocess.check_output(cmd, shell = True )
    cmd = "vcgencmd measure_temp |cut -f 2 -d '='"
    temp = subprocess.check_output(cmd, shell = True )

    # Write two lines of text.

    draw.text((x, top), "IP: " + str(IP,'utf-8'), font=font, fill=255)
    draw.text((x, top+8), str(CPU,'utf-8') + " " + str(temp,'utf-8') , font=font, fill=255)
    draw.text((x, top+16), str(MemUsage,'utf-8'), font=font, fill=255)
    draw.text((x, top+25), str(Disk,'utf-8'), font=font, fill=255)

    # Display image.
    disp.image(image)
    disp.display()
    time.sleep(.1)


OLED显示器的下载脚本


您需要按照以下步骤从Github下载原始的Adafruit库以完成设置。



打开一个新的终端窗口,然后转到库目录:



cd Adafruit_Python_SSD1306


安装适用于Python 3的库:



sudo python3 setup.py install


然后,您可以在Adafruit目录中运行上面的stats.py文件或示例stats.py文件-在这种情况下,您只会得到稍微不同的显示布局。



转到包含stats.py脚本的目录:



cd examples


执行脚本:



python3 stats.py


我建议先测试脚本,以确保将显示器设置为自动启动之前,显示器可以正常工作。



要将脚本配置为自动运行,您需要找到脚本目录,然后打开crontab并添加一行以运行它:



@reboot python3 /home/pi/stats.py &


显然,您将需要更改/ home / pi /目录的名称,以突出显示保存所需脚本的目录。



不要忘了在末尾添加&,这将告诉Malinka继续运行并在后台运行脚本。





重新启动Raspberry Pi,以自动运行脚本。之后,启动小型PC时,应该在OLED显示屏上看到指示的统计信息。














All Articles