这次使用树莓派4B搭建一个服务器,并且从网上找到了一个喜欢的外壳。
这是MICHAEL KLEMENTS在2021年构建一个内置UPS和OLED统计数据显示的迷你Raspberry Pi服务器项目,通过内置的UPS,确保Pi在发生电源中断时保持运行。
项目文档地址:https://www.the-diy-life.com/mini-raspberry-pi-server-with-built-in-ups/。
此次使用的外壳来自T站的一个项目,不同于MICHAEL KLEMENTS文档中的外壳,与MICHAEL KLEMENTS不同的是,风扇的位置调到了顶部,底部改为了亚克力板。
外壳地址:https://www.thingiverse.com/thing:5027738
外壳视频地址:https://www.bilibili.com/video/BV1ub4y117i1
成品展示
运行
树莓派4B3D打印外壳+ups显示ip等信息
B站视频地址:https://www.bilibili.com/video/BV1AT4y1D7DA
正面
侧面
后面
顶部
底部
材料清单
一开始是从网上找的清单,但是其中有很多没用的材料,导致浪费了不少钱和时间,以下是我踩坑组装时用到的材料,准备动手的小伙伴还需要额外准备工具,因为外壳太小,所以拧螺丝也很费力,手很难伸进去拧动。
建议更新UPS固件完成后再组装。
材料 | 使用数量 | 说明 | 购买数量 | 价格(元) |
树莓派4B 8G | 1 | 树莓派开发板 | 1 | 850 |
1T固态U盘 | 1 | 存储系统,可用TF卡代替 | 1 | 900 |
卧式冰塔 | 1 | 为树莓派提供散热,UPS Plus模块需要在树莓派的下方 | 1 | 119 |
官方电源 | 1 | 树莓派电源,可省略,连接UPS Plus之后,树莓派通过UPS Plus供电 | 1 | 53.90 |
树莓派UPS Plus | 1 | 通过撞针为树莓派供电 | 1 | 168 |
0.96 寸蓝色oled屏(新版本) | 1 | 显示系统和UPS Plus基本信息 | 1 | 10.8 |
18650锂电池 | 2 | 存储电量 | 2 | 6.5 |
3D打印外壳 | 1 | 打印文件链接:https://pan.baidu.com/s/1u2MkoeruZ6zd4Q0x_OG-Vw 提取码:5odz |
1 | 22 |
3D打印UPS开关按钮 | 1 | 打印文件链接:https://pan.baidu.com/s/11sQ8vt5WbT6K5GXTe3HOpw 提取码:e98w |
1 | 20 |
亚克力板切割两边和底部 | 1 | 切割文件链接:https://pan.baidu.com/s/1CU8HF65876pP3vRlw-WixA 提取码:obl1 |
1 | 15 |
TF4硅脂 | 1 | CPU散热 | 1 | 6.20 |
40P杜邦线母对母10cm | 4 | 连接oled和树莓派GPIO引脚 | 1 | 1.35 |
M2 螺母 | 8 | 固定oled屏和顶部风扇 | 100 | 1.20 |
M2.5 螺母 | 2 | 固定底板 | 100 | 1.20 |
M2 x 6 内六角螺丝 | 4 | 固定oled屏 | 50 | 4.50 |
M2 x 14 内六角螺丝 | 4 | 固定顶部风扇 | 100 | 6.96 |
M2.5 x 8 内六角螺丝 | 14 | 固定侧边亚克力板 *8,固定底部亚克力板 *4,固定M2.5x14+6单通铜柱 *2 | 50 | 3.20 |
M2.5 x 20 + 6 单通铜柱 | 2 | 底部固定UPS Plus *2,UPS Plus自带 | 0 | 0 |
M2.5 x 14 + 6 单通铜柱 | 2 | 固定UPS Plus *2 | 10 | 3.70 |
M2.5 x 7 + 6 单通铜柱 | 4 | 固定UPS Plus和树莓派,UPS Plus自带 | 0 | 0 |
2193.57 |
安装Ubuntu Server系统
参考另一篇文章:https://blog.csdn.net/qq_20185737/article/details/123167673
使用I2C
进入系统,运行以下命令,安装i2c-tools、python3-pip
sudo apt install -y i2c-tools python3-pip
使用pip安装smbus2
sudo pip3 install smbus2
通过OTA更新UPS固件
UPS Plus文档地址:https://wiki.52pi.com/index.php?title=EP-0136,右下角可以设置中文。
注:在升级过程中不要关闭电源或断开网络连接。如果升级失败,UPS PLUS将无法正常工作。
- 将树莓派和UPS PLUS使用铜柱固定起来。撞针为压下状态。
- 按住UPS Pro开关键,将电池插入电池舱。
- 插入电池后等待Raspberry Pi运行,在系统终端执行以下python脚本完成升级。
cd ~ git clone https://github.com/geeekpi/upsplus.git cd ~/upsplus python3 OTA_firmware_upgrade.py
注:第一次运行时,可能会提示设备没有注册。如果是合法的设备,只需等待几秒钟,再试一次。
- 升级后,UPS Plus将被关闭,请拔掉电源插头,从UPS Plus中取出电池。
- 将电池插回UPS Plus,然后连接电源并按下电源开关,将其打开。
系统运行正常即可将树莓派和UPS Plus关机,拆开树莓派和UPS Plus进行组装。
设置自动关机保护
在系统的终端运行
curl -Lso- https://git.io/JLygb | bash
当遇到低电量时,它将自动关闭并关闭UPS,当交流电来临时,它将重新启动。
检测电池状态
切换到upsplus目录下
cd /usr/mydata/upsplus
注:这是我自己移动之后的目录,upsplus是在更新UPS固件时从github上clone的。
运行命令执行upsplus.py文件
python3 upsplus.py
查看输出信息
- Current information of the detected Raspberry Pi(树莓派信息)
- Batteries information(电池信息)
- Currently not charging/Currently charging via Type C Port:当前未充电/使用Type C充电
在 OLED 显示屏上显示 UPS 统计数据
脚本信息:https://github.com/suitbaby/raspi-ups-stats
进入系统,打开终端,运行命令下载Adafruit的Python库用于OLED显示器
cd ~ git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git cd Adafruit_Python_SSD1306.git sudo python3 setup.py install
下载raspi-ups-stats
cd ~ git clone https://github.com/suitbaby/raspi-ups-stats.git
下载字体文件:https://www.dafont.com/pixel-operator.font,将PixelOperator.ttf上传到raspi-ups-stats目录
进入raspi-ups-stats
目录运行stats.py
,oled屏就会显示信息了。
python3 stats.py
设置开机自动启动
创建目录/opt/stats/
mkdir /opt/stats/
将raspi-ups-stats
目录下的PixelOperator.ttf
,stats.py
文件复制到/opt/stats/
目录
切换到raspi-ups-stats
目录,运行以下命令,将脚本文件复制到/etc/systemd/system/
目录下
sudo cp stats.service /etc/systemd/system/
运行命令重新加载
sudo systemctl daemon-reload sudo systemctl enable --now stats
最后重新启动即可
reboot
安装注意事项
- UPS Plus模块必须在树莓派4B的下方
- 安装顺序:UPS Plus,树莓派,oled屏幕,风扇,冰塔。
- 使用杜邦线连接风扇、冰塔时,需要注意GPIO的位置
- 如屏幕引脚对着我,杜邦线的顺序从左→右为黑白灰棕,插入树莓派的位置为:
第2排从右→左:第一个:灰;第二个:黑;第三个:白;第五个:棕。
- 冰塔的支架是螺丝从下往上拧还是从上往下拧。
- 从下往上这种情况相当麻烦,需要先将树莓派和UPS Plus模块之间的后两个螺丝拧到冰塔上。
- 从上往下这种使用M2X8或者M2X10的往下拧就行,不过单通铜柱需要方向向下,所以UPS Plus模块下方的铜柱需要改成双通铜柱。
脚本注意事项
- 如果出现执行python3 XXXX报错时看看是不是缺少相关的库,安装即可。
- 系统启动时oled屏不显示信息,只有在运行stats.py时oled才会刷新信息和跳动,则使用
systemctl status stats
- 查看
stats
自启动服务状态,如果是**(code=exited, status=203/EXEC)**,则需要在stats.service
中进行修改:
ExecStart=/usr/bin/python3 /opt/stats/stats.py
- 运行
python3 stats.py
时输出/bin/sh: 1: vcgencmd: not found
可忽略,安装vcgencmd
解决。
报错解决
报错 ModuleNotFoundError: No module named 'ina219’
执行以下命令安装pi-ina219
sudo pip install pi-ina219
报错:ModuleNotFoundError: No module named 'PIL’
执行以下命令安装:
pip install Image
报错:ModuleNotFoundError: No module named 'RPi’
执行以下命令安装:
pip install RPi.GPIO