这次使用树莓派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 1050
1T固态U盘 1 存储系统,可用TF卡代替 1 950
卧式冰塔 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
2443.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将无法正常工作。

  1. 将树莓派和UPS PLUS使用铜柱固定起来。撞针为压下状态。

  2. 按住UPS Pro开关键,将电池插入电池舱。

  3. 插入电池后等待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(电池信息)
    1. Voltage of Batteries:电池电压
    2. Battery Current (discharge/Charging) Rate:电池电流(放电/充电)率
  • 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.ttfstats.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模块下方的铜柱需要改成双通铜柱。

脚本注意事项

  1. 如果出现执行python3 XXXX报错时看看是不是缺少相关的库,安装即可。

  2. 系统启动时oled屏不显示信息,只有在运行stats.py时oled才会刷新信息和跳动,则使用

    systemctl status stats
    

    查看stats自启动服务状态,如果是**(code=exited, status=203/EXEC)**,则需要在stats.service中进行修改:

    ExecStart=/usr/bin/python3 /opt/stats/stats.py
    
  3. 运行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

3D打印树莓派4B外壳—内置UPS和统计显示信息相关推荐

  1. php打印函数console,PHP内置Web Server探究(2)自定义PHP控制台输出console函数

    PHP内置Web Server探究(二)自定义PHP控制台输出console函数 我们在开发APP的服务器端,当和APP进行联调时通常需要实时跟踪URL请求和参数的接收情况. 但PHP并没有像Pyth ...

  2. Windows打印体系结构之Windows内置打印驱动程序

    时间是一种很残酷的东西,它只会冲淡能够冲淡的,但也会洗尽铅华帮你留下该留下的. 1.3.4.Windows内置打印驱动程序 现在的Windows下的打印机驱动程序通常分为V4打印机驱动程序(V4 Pr ...

  3. 解决win10内置自带应用显示语言为英文(包括商店,邮件等)

    刚刚买了美版电脑,win10系统.按照网上汉化教程,成功汉化,也就是区域,语言,输入法等能设置成中文的全部设置完成.突然发现自带的应用全部为英文.然后一直上网搜资料尝试.最后总结了以下方法,供大家参考 ...

  4. Cesium(4):使用cesium内置的图钉样式显示geojson点

    1.版本 cesium 1.92.0 2.cesium内置的图定样式 3.方法一 Cesium.PinBuilder:一个实用类,用于生成作为画布元素的自定义贴图接点.它有四个函数: fromColo ...

  5. 发现一款3D 打印的pcDuino外壳

    2019独角兽企业重金招聘Python工程师标准>>> http://www.thingiverse.com/thing:97538 外壳 转载于:https://my.oschin ...

  6. stc89c52开发板遥控器解码 红外线发射 内置 eeprom 存储 串口显示编码

    单片机,大概三年前,就买了一本 <爱上单片机> 最后就学会,用面包板了,编程书上基本没讲. 看原理图,看时序图,看数据手册, 都没讲. 而且书上自带的代码写的很烂. 1,缩近控制不好 2, ...

  7. Mac 下texstudio内置pdf浏览器不显示中文

    机器: MacOS Monterey Texstudio版本:2.12.16 问题:加载ctex宏包后,内建pdf阅读器不显示中文,外部pdf浏览器可以正常显示中文. 解决方式主要参考:知乎 记录一下 ...

  8. vscode内置浏览器 开发vue 显示网址

    最近使用VS Code开发vue项目,需要经常在编辑器和浏览器之间来回切换查看页面效果,感觉特别繁琐!今天就来分享下如何在VS Code中实时预览HTML页面或VUE/React/Angular等页面 ...

  9. 最小人工智能硬件资源JetsonNano VS 树莓派4B

    近年来,人工智能领域发展火热,而在硬件资源开发上也是百花齐放,百花争鸣,2019年NVIDIA公司在NVIDIA GPU大会上发布了JetsonNano套件,在紧凑.易用的平台上提供现代AI最强大的性 ...

  10. 【Unity】3.1 利用内置的3D对象创建三维模型

    分类:Unity.C#.VS2015 创建日期:2016-04-02 一.基本概念 Unity已经内置了一些基本的3D对象,利用这些内置的3D对象就可以直接构建出各种3D模型(当然,复杂的三维模型还需 ...

最新文章

  1. Maven(八)Eclipse创建Web项目(复杂方式)
  2. 戴尔-EMC联邦:存储业务该如何处理?
  3. SAP S/4HANA销售订单的类型建模细节
  4. windows系统-函数的条件分支实现用汇编语言解释
  5. 个人项目耗时对比记录表
  6. linux将文件下载到本地windows,XSHELL下直接下载文件到本地(Windows)
  7. 快来了解下Snappy Ubuntu是什么
  8. nsa php版本,mnsa网络
  9. MATLAB+simulink仿真学习
  10. 【毕业设计】深度学习指纹识别算法研究与实现 - python opencv
  11. 步进电机c语言驱动原理,连接PC的步进电机简单驱动电路
  12. 绝妙一招 教你如何拍出烟雾缥缈的作品
  13. RedHat7.6 Linux系统图形界面安装教程
  14. 2017-2018-2 20179209《网络攻防》第八周作业
  15. Excel中RATE函数的Java实现欢迎加入我的星球
  16. Ping IPv6在线测试检测 testipv6 加速镜像
  17. 仿照vue实现双向数据绑定兼容IE6
  18. 如何输出一个国际象棋棋盘
  19. g++/gcc compile_options
  20. ESP8266作为arduino D1 wifi模块应用时引脚序号说明(与UNO对比异同)2.5.0版本开发板库

热门文章

  1. es6标准入门(第三版)_阮一峰 pdf
  2. 内存不能为read进不去桌面_纯小白向:AMD平台内存超频教程,附金士顿FuryDDR4 3200超频实战...
  3. 房屋户型图识别方法AI自适应墙体识别
  4. C# 提取PDF中的表格
  5. orbslam2+azure kinect DK稠密重建
  6. 项目管理第六章项目进度管理
  7. 精心整理的10套最美Web前端新年特效--提前祝大家新年快乐
  8. LTE无线接入网的架构
  9. QT学习笔记(一)——QT基础
  10. 基于UDP协议的Java聊天室