这篇文章来源于DevicePlus.com英语网站的翻译稿。
目录
1 简介
1.1 适用的网络附属存储
1.2 启动并运行自己的NAS
1.2.1 磁盘设置
1.2.2 NAS服务
1.2.3 磁盘和网络性能
2 附加收获:Raspberry Pi “HURRiCANE!”冷却系统
2.1 BOM
2.2 项目完成!
1 简介
多年来,许多计算机爱好者都会向为设计供大众使用的Pi而辛劳工作的工程师们哭诉:“USB3有了吗?USB3快点出来吧,拜托了!”。Raspberry Pi 3 B+几乎是完美的微型计算机,但是仍然不适用于网络附属存储(NAS),或者快速USB,甚至USB。由于以太网连接受限而出现的键盘输入滞后现象就是不良反应之一。
如果您的祖母打电话给您,问如何将她的老照片以“现代潮流的方式”进行数字化,您会怎么做呢?她只是想能够在新型iPad上流畅地浏览这些照片,因为她的手指已经没有那么大的力气去翻阅笨重的相册来重温那些饱含着珍贵回忆的柯达照片了。现在,她要开始迎接使用科技产品的新生活。
但是,本文并不是专门针对数字化照片而写的。我们这里将要介绍的是有关存储的内容:简单、快速的网络存储。
1.1 适用的网络附属存储
首先,任何能够在网络上存储数据并为用户提供服务的功能都可以称为网络附属存储(NAS)。但是,该功能的实现是以一种用户友好的、流畅且不会对用户造成困扰的方式进行的。
例如,我的Android盒子里有KODI。它的速度不太快,并且microSD里装满了旧的数据。但是,在我安装了KODI插件从而连接到本地网络上的Samba服务器之后,观看电影和播放音乐就都十分流畅了。它在容纳千兆位音频资源的同时,仅用了几分钟的时间就完成了我的旧路由器(包含未知固件)的设置,以处理从插入的USB2硬盘中获取的数据。这就是NAS,但它是比较差的NAS。我们可以做得更好一些。
优质的NAS具有稳定、可快速传输数据、延迟少的特点,且具有冗余性(例如RAIDI),在系统运行时可以支持磁盘的热交换,并且提供了用于访问所存储数据的少量协议。如FTP,SMB/CIFS,NFS和AFP等现在常用的协议。多年来,我一直在寻找一种性能优于USB2和100Mbit/s,且具有足够的CPU能源和RAM来承载所有服务内容的低耗能系统。我对具有出色的SATA 端口的Cubieboard 2十分有兴趣,但是Armbian对我来说实在太陌生了。
当所有希望都变成绝望的时候,Raspberry Pi 4发布了,它具有四核1.5GHz CPU,1/2/4GB DDR4 RAM,真正的千兆以太网和USB 3.0。您再也不会因为以太网端口被USB2总线阻塞而被迫使用Wi-Fi了。它具有双microHDMI端口,不过对性能来说无功无过。
我现在需要一台小型的台式微型计算机, 来验证其是否能够在处理一些较大的网络传输负载的同时还可以可靠地运行。
我用这种方式对Raspberry Pi 4进行了测试,并且测试成功了。当然,会产生发热的问题。在卸载后,该微型计算机会通过自发热来进行调节。加载时,它的系统温度将会迅速达到176华氏度,这时候计算机并没有死机或者坏掉,也没有冒出什么奇特的烟雾,它只是变成了一个无法使用的纸压——以600MHz的频率运行。但是,有一个方法可以解决这个问题,就如您将会在第2部分看到的那样,使用一种破解版GPIO控制的功率小于或等于45瓦的散热风扇。
尽管有过热问题,这款Pi还是非常适合于家庭/工作组NAS,并且2.5″的USB3硬盘足够了。如果您希望能够获得最佳性能,建议您在磁盘托架中安装一个12V 3.5″的驱动器,而不是只用一根线缆的2.5″驱动器。我的2.5″USB驱动器使用一根线缆,最大功率为4.48W,所以如果您选择了不带外部电源的2.5″驱动器,那么肯定需要为您的Pi提供15W的电源。
1.2 启动并运行自己的NAS
让我们来构建一个Raspberry Pi 4 NAS吧!
请注意,如果您使用的是较早的Pi型号,仍然可以按照本文中的说明进行操作,不过Pi 2是最低要求。在Pi 3上,您应该通过Wi-Fi接口传输文件,因为这样更快!
首先要做的是对Pi进行设置。按照此处的说明进行操作,您将会很快实现Pi的启动和运行。我们假设您已经准备好外部硬盘驱动装置了。这里需要注意的一点是,如果是在Slashdot上,相信马上就会引发一场关于“btrfs”(或者那些完美主义者所坚持的写法“Btrfs”)优点的讨论。我使用过它,也使用过ZFS。除非您想要拍快照,不然无论是btrfs还是ZFS都是无关紧要的,对于家庭/工作组NAS也是如此。这是一个磁盘的单独设置,您绝对应该使用ext4,这很酷。
对您的系统进行更新。将以下指令复制并粘贴到您的Pi终端。
DEBIAN_FRONTEND="noninteractive"
DEBIAN_PRIORITY="critical"
DEBCONF_NOWARNINGS="yes"
export DEBIAN_FRONTEND DEBIAN_PRIORITY DEBCONF_NOWARNINGS
apt update || e c h o "[!] Failed to update index lists!"
dpkg --configure -a || e c h o "[!] Failed to fix interrupted upgrades!"
apt --fix-broken --fix-missing install || e c h o "[!] Failed to fix conflicts!"
apt -y --allow-downgrades --fix-broken --fix-missing dist-upgrade
然后重新启动,运行以下指令,这将会安装ProFTPd,Samba,一个密码生成器,SMB/CIFS的客户端以及用于实现简单GPIO控制的WiringPi。
sudo apt-get -y install proftpd samba pwgen smbclient wiringpi
1.2.1 磁盘设置
如果您不是一个极简主义者,那么您很可能使用的是Pi上的图形用户界面。如果是这样,请按照以下说明设置磁盘。注意:请牢记您打算设置的磁盘,而不是对连接的microSD卡或者任何您不打算修改的磁盘进行设置。
如果您选择仅安装Raspbian Lite(没有图形用户界面),则可以使用“cfdisk”对磁盘进行设置。确保没有其他USB驱动器连接到您的Pi后,我们就可以将其称为“sda”了。将USB驱动器插入您的Pi,打开一个终端窗口,然后发送指令:“sudo cfdisk /dev/sda”。
选择 “dos”。
如果已经有了一个分区,选择“Delete(删除)”。然后,选择“New(新建)”。或者可以直接选择“New(新建)”。其类型将会是“Linux”,如下图所示。使用驱动器上的所有可用空间。
使用箭头键将高亮区移动到“Write(写入)”的地方,并在出现提示对话框时点击“yes(是)”。然后,将高亮区移动到“Quit(退出)”的地方,按回车键。
回到提示对话框,让我们稍事休息,思考一下。在一个没有承载任何系统文件的文件系统上,我们是否要为“root”用户保留磁盘空间的5%,甚至10%?毕竟这不是“/var”或者“/”。
不需要。我们希望所有的可用空间都被用于奶奶的照片数字化工作以及媒体/工作组的数据。mkfs.ext4的“-m”用于设置为“root”用户保留的空间。“-L”用于设置磁盘名称,您可以将其设置为任意名称。如果有疑问,可以使用“FOO”进行查询。现在,发出指令:
sudo mkfs.ext4 -L FOO -m 0 /dev/sda1
稍后,您的日志文件系统就在“/dev/sda1”上准备好了。
您可以将其挂载在任意位置,但是我们还是为NAS创建一个用户吧。我们称他为“nas”。我们将他的私人目录设置为在任何地方都可写且可粘滞。可粘滞即像“/tmp”那样可以暂存文件。复制并粘贴以下指令到您的终端。
sudo useradd -b /home -m -p $( pwgen --secure 32 1 ) \
-c "NAS account" nas
sudo chmod 1777 /home/nas
sudo mount -o rw,noatime,nodev,nosuid,noexec \ /dev/sda1 /home/nas
sudo chown nas:nas /home/nas
sudo chmod 1777 /home/nas
为了确保我们每次都在“/home/nas”处挂载此磁盘,请使用磁盘标识符。“/dev/sda1”设备可能会被更改。“sda”可能会变成下一次启动时的USB拇指驱动硬盘。但是,磁盘标识符不会被更改。那我们就来实现它吧!
sudo fdisk -l /dev/sda
将输出类似以下的内容:
Disk /dev/sda: 223.6 GiB, 240057409536 bytes, 468862128 sectors
Disk model: Crucial_CT240M50
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x0acb1143
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 468862127 468860080 223.6G 83 Linux
我们想要命令行以“磁盘标识符”作为开头。删除“0x0acb1143”中开头的“0x”,并在后面加上“-01”,这样您就能够得到与“/dev/sda1”意义相同、并且具有唯一性的磁盘标识符了。现在我们把所需要的字符串“0acb1143-01”添加到fstab:
PARTUUID=0acb1143-01 /home/nas ext4 defaults,noatime,nodev,nosuid,noexec,noauto 0 0
最后一个挂载参数是“noauto”,含义为在系统启动时Pi不会自动将该分区挂载到指定挂载点中。这在您忘记插入磁盘的时候会很有用。在您准备部署NAS的时候可以忽略“noauto”。“noauto”的唯一缺点是您必须以“pi”的身份登录并运行以下指令:
sudo mount /home/nas
…… 每次重启之后。
现在使用以下指令挂载磁盘:
sudo mount /home/nas
一切都进展的很顺利!好吧,也不完全是。
1.2.2 NAS服务
您需要启用一些服务功能。幸运的是,我们安装了ProFTPd,Samba,并且在第一次启动的时候就已经安装了OpenSSH。
首先,将此文件解压到“pi”主目录中。您将会进行大量的文件传输,所以最好现在安装FileZilla 。将rpi4_nas+hurricane.zip复制到您Pi上的“/home/pi”中,然后将以下内容复制并粘贴到Pi的终端:
unzip rpi4_nas+hurricane.zip
sudo cp -vp /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.bak
sudo cp -v proftpd.conf /etc/proftpd
sudo chown root:root /etc/proftpd/proftpd.conf
sudo chmod 0644 /etc/proftpd/proftpd.conf
sudo cp -vp /etc/samba/smb.conf /etc/samba/smb.conf.bak
sudo cp -v smb.conf /etc/samba/smb.conf
sudo chown root:root /etc/samba/smb.conf
sudo chmod 0644 /etc/samba/smb.conf
sudo service proftpd restart
sudo systemctl enable proftpd
echo "ProFTPd (FTP) has been started and enabled on boot!"
sudo service smbd restart
sudo systemctl enable smbd
echo "Samba (SMB/CIFS) has been started and enabled on boot!"
sudo service ssh start
sudo systemctl enable ssh
echo "Secure Shell (SSH) has been started and enabled on boot!"
echo "Enter SMB/CIFS password to be used for user 'nas'"
sudo smbpasswd nas
echo "Enter SMB/CIFS password to be used for user 'pi'"
echo "(This does not need to match your 'pi' login password!)"
sudo smbpasswd pi
当您的Pi完成了指令的接收后(并且您已经输入了一些密码),您就可以通过FTP、SMB/CIFS以及SSH访问您的NAS了。FTP和SSH都可以让您使用“nas”用户的密码登录到您的NAS中。您可以根据需要使用“sudo passwd nas”指令对密码进行更改。“smbclient”已经安装好了,那么我们来看一下您的系统为网络提供了哪些功能:
smbclient -N -L //localhost
输出内容
Anonymous login successful
Sharename Type Comment
--------- ---- -------
homes Disk User Home Directories
IPC$ IPC Service (Samba 4.9.5-Debian)
Reconnecting with SMB1 for workgroup listing.
Anonymous login successful
Server Comment
--------- -------
Workgroup Master
--------- -------
WORKGROUP
用我的“nas”用户名(密码为“foo bar baz”)进行登录,并将磁盘挂载到“/home/nas”中。
pi@uNAS 0 ~ $ smbclient --encrypt //localhost/homes --user=nas%'foo bar baz'
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Wed Jul 31 10:54:46 2019
.. D 0 Wed Jul 31 08:15:21 2019
nas D 0 Tue Jul 30 20:48:48 2019
lost+found D 0 Sun Oct 7 15:10:07 2018
disk_speed_test.log N 215 Wed Jul 31 09:16:49 2019
disk_speed_test.sh N 795 Wed Jul 31 07:10:49 2019
479639216 blocks of size 1024. 455131416 blocks available
smb: \> exit
“smbclient”的程序可能不太简单易懂,但是我们只需要关注两个指令就可以了。这两个指令是相同的,不过第一个是说明性的,第二个会连接到“nas”用户的主文件夹。
smbclient --encrypt //IP_ADDRESS/SERVICE --user=USERNAME%PASSWORD
smbclient --encrypt //127.0.0.1/homes --user=nas%'foo bar baz'
1.2.3 磁盘和网络性能
USB3.0的传输速度最高可以达到5Gbit/s (625MByte/s),但是几乎没有旋转(如磁力)驱动器的传输速度可以超过800Mbit/s (100MByte/s)。那要怎么办呢?
在这种情况下,使用2.5″驱动器,并且使用少于5W的功率是个不错的选择。我在网络上和本地Pi上的速度测试结果几乎都约为640Mbit/s。您可以通过包含“disk_speed_test.sh”的脚本自己进行测试,或者直接用以下指令进行测试:
sudo ./disk_speed_test.sh
[!] Unmounting /dev/sda1 (if mounted) ...
vm.drop_caches = 0
[!] Testing write speed (cached) ...
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 12.1259 s, 88.5 MB/s
vm.drop_caches = 3
[!] Testing write speed (uncached) ...
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 12.6074 s, 85.2 MB/s
removed '/mnt/nulls.dd'
vm.drop_caches = 0
[!] Testing cached/buffered read speeds (three times) ...
/dev/sda:
Timing cached reads: 1648 MB in 2.00 seconds = 824.24 MB/sec
Timing buffered disk reads: 244 MB in 3.02 seconds = 80.78 MB/sec
/dev/sda:
Timing cached reads: 1658 MB in 2.00 seconds = 829.26 MB/sec
Timing buffered disk reads: 242 MB in 3.01 seconds = 80.46 MB/sec
/dev/sda:
Timing cached reads: 1656 MB in 2.00 seconds = 827.66 MB/sec
Timing buffered disk reads: 242 MB in 3.00 seconds = 80.65 MB/sec
USB2的理论最高传输速度为480Mbit/s (~60Mbyte/s),但实际上却从来没有达到过这个速度,所以从这一点来说是一个很大的进步。基于这种数据传输速率,您可以在一分钟以内传输约5.1GB的数据量,一小时内传输超过300GB的数据量。如果测试性能不佳,使用指令“sudo hdparm -B 255 /dev/sda”,然后再次进行测试。如果没有成功,用“lsusb”指令检查一下您的USB3设备是否真的是一个USB3设备。查找bcdUSB。我的磁盘报告显示的是“bcdUSB 3.0”。您的结果呢?
pi@uNAS 0 ~ $ lsusb
# ...
Bus 002 Device 003: ID 1058:0748 Western Digital Technologies, Inc. My Passport (WDBKXH, WDBY8L)
# ...
# Only look at specific device, use USB VID:PID
pi@uNAS 0 ~ $ lsusb -d 1058:0748
Bus 002 Device 003: ID 1058:0748 Western Digital Technologies, Inc. My Passport (WDBKXH, WDBY8L)
# More verbose, please
pi@uNAS 0 ~ $ lsusb -d 1058:0748 -v | egrep 'bcdUSB|MaxPower'
bcdUSB 3.00
MaxPower 896mA
报告的内容很全面,而且我的驱动器确实是USB3。同时,它显示使用了最大功率4.48W。太好了!
对于网络,请使用CAT6线缆,如果您的路由器和Pi之间有交换机,请确保是千兆交换机。我费了较大的功夫才找到了适用于许多TCP数据包的最佳设置,事实证明Raspbian在这方面已经做的很好了。如果您发现有什么问题,请在您的Pi终端尝试以下操作:
sudo sysctl -w net.ipv4.tcp_window_scaling=1
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.wmem_max=16777216
sudo sysctl -w net.ipv4.tcp_rmem='4096 87380 16777216'
sudo sysctl -w net.ipv4.tcp_wmem='4096 16384 16777216'
如果有帮助的话,请按照以下方式来保存您的更改,使其不会在重启后失效:
sudo cat>>/etc/sysctl.conf<<-"EOF"
net.ipv4.tcp_window_scaling = 1
net.core.rmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 16384 16777216
EOF
sysctl -p
2 附加收获:Raspberry Pi “HURRiCANE!”冷却系统
大量的能耗会产生大量的热量。Raspberry Pi 4无法避免温度高达176度的过热问题,而这种过热问题会导致CPU的频率低至600MHz。您大可以将四个Raspberry Pi的集群设备放置到您的桌面上,但是如果没有冷却装置,您就只能浏览文本形式的网页,以及用vi来阅读电子书了。
有两种方法可以解决这个问题。第一个方法是使用像ICE Tower CPU散热器这样的仅对CPU进行散热的装置。第二个方法是在每个负载下发热的芯片上都安装一个小尺寸的长款散热片,然后将足够的气流推入并穿过这些芯片。但是在本项目中,我仅使用了一个3W的风扇,就将系统温度降低到了约104度。CPU风扇需要能在12伏电压下运行。让我们一起来实现它吧!
2.1 BOM:
2.2 ‘HURRiCANE!’ Raspberry Pi 控制脚本
首先,将以下脚本程序复制到您的Pi主文件下。复制后,在您的Pi终端输入“cat >>hurricane.sh<<-“EOF”。然后,粘贴脚本,按回车键,输入EOF,再按回车键。
[begin hurricane.sh]
#! /usr/bin/env bash
# Depends on the 'wiringpi' package.
set -u -o pipefail
trap 'printf "\n[!] Cleaning up pin modes and bailing out!\n" ; \
/usr/bin/gpio export 18 low ; \
/usr/bin/gpio export 23 low ; exit ' INT TERM
_fan_pin=18 # BCM18, BOARD12
_led_pin=23 # BCM23, BOARD16
# Don't let it run for too long
_temp_upper=55 # Start at
_temp_lower=45 # Stop at
_is_cooling_active=0
_interval=5
_gpio=$( which gpio || NO )
if [ $_gpio = NO ] ; then
echo "ERROR: Is wiringpi installed? Do 'sudo apt-get -y install wiringpi'."
exit 1
fi
function printBanner {
cat < ${_temp_f}F"
return $_temp_f
}
# Fahrenheit to celsius: C = ( F - 32 ) * 5/9
function fahrenheit2celsius {
local _temp_c=$( echo $1 | awk \
'{ printf( "%.1d\n", ( $1 - 32 ) * 5/9 ) }' )
#echo "${1}F => ${_temp_c}C"
return "$_temp_c"
}
function hurricane {
if [ $# -eq 0 ] ; then echo no args? ; return 1 ; fi
if [ $1 -eq 1 ] ; then
echo "HURRiCANE cooling system: ACTIVE"
$_gpio export $_fan_pin high
$_gpio export $_led_pin high
_is_cooling_active=1
elif [ $1 -eq 0 ] ; then
echo "HURRiCANE cooling system: INACTIVE"
$_gpio export $_fan_pin low
$_gpio export $_led_pin low
_is_cooling_active=0
fi
}
printBanner
while true ; do
_temp=$( vcgencmd measure_temp | awk -F= '{print $2} ' | awk -F. \
'{print $1}' )
_temp_f=$( celsius2fahrenheit $_temp )
if [[ $_temp -ge $_temp_upper && _is_cooling_active -eq 0 ]]
then
hurricane 1
elif [[ $_temp -le $_temp_lower && _is_cooling_active -eq 1 ]]
then
hurricane 0
fi
celsius2fahrenheit $_temp
printf "System temperature: ${_temp}C / %iF\n" $?
sleep $_interval
done
[end hurricane.sh]
需要注意的是变量“_temp_upper”和“_temp_lower”之间的间隔很短。第一个设定的是您希望能够触发冷却系统启动的温度值,第二个设定的是风扇停止运作的最低温度值。这样既可以降低噪音,也可以延长风扇的使用寿命。
剩下的就是制作电路板了。不用担心这会很复杂,其实非常简单。
2.3 项目完成!
看这张Fritzing示意图!展示的是已经应用到NASA太空实验室以外的微型计算机上的最棒的通风系统!什么?通风系统?因为外太空太冷了,冷却系统其实就相当于一个气阀室,而且全面通风对于太空站来说是完全不可能的。
好吧,我们先来看一下两种不同的冷却方式:
功能强大,但是闲置的时候温度为55C/131F。
很多电子设备会因为热应力导致损坏,尤其是没有移动部件的电子设备。热应力来自于物体尺寸的膨胀和收缩,而这种尺寸变化肉眼是无法识别的。几年更换一次风扇要比无形中损失一个Pi好得多。Robinsons可承担不了失去机器人朋友带来的损失。
所幸的是,“HURRiCANE!”可以解决所有问题!我们想要的是在CPU和Wi-Fi/蓝牙芯片上,在主板的左上方,以及在CPU左边的芯片上能够有一些不错的长款散热器。铜的导热性很好,但是铝能够更容易地将其释放到“HURRiCANE!”的气流中。
竖高型的结构可以增加散热的表面积,这意味着我们可以避免Raspberry Pi 4发生迟滞。
以上组件列表中的散热器均带有导热胶带。我们之所以需要三个,是因为Raspberry Pi左上角的三个大的芯片高度不均匀。
CPU 和Wi-Fi/蓝牙芯片上有RF屏蔽罩,这使得在上面放置一个大尺寸散热器变得非常困难。在接入三个散热器之前,请务必先用蘸有异丙醇的棉签将其擦拭干净。
我为我的Raspberry Pi 4购买了性能最好的小型“动态冷却系统”产品中的一种。但是它没有达到冷却的效果,反而吸收了很多热量。IRLZ24N MOSFET消除了所有不合理的功率问题,在2V电压下顺利导通(所以3.1V电压会更好),并且以防MOSFET出现故障,我们使用BAT86肖特基势垒二极管来保护我们的输出引脚BCM18/BOARD12和BCM23/BOARD16。注意,BCM18/BOARD12引脚是PWM引脚,您可以根据需要将电压降低到3.1V以下。
将12V电压连接到风扇的正极端子,并将风扇的负极端子连接到MOSFET的漏极后,我们可以将负载放置到相应位置。然后,我们将MOSFET的源极接地,将BCM18/BOARD12与一个正向偏置到栅极的BAT86二极管串联,最后连接一个330欧姆的电阻以将最大电流限制在10mA。
请注意,从栅极到GND有一个4K7下拉电阻,如果没有这个电阻,当栅极的供电没有达到3.1V时会产生振荡,这样的话就无法可靠地(或者快速地)关闭MOSFET。所以一定记得加上下拉电阻。
然后,制作小尺寸电路板。
使用三个2P 2.54mm螺丝端子可以让您Raspberry Pi的信号线连接变得更加容易,您需要为其做上永久性的标记。我标记的是“Fan S+”,“12V”,“GND”和“LED S+”,而在风扇上,我只标记了“+”和“-”。
保护您Pi输出引脚的两个二极管很重要。如果您的二极管偏置错误,就必须把它们拆解下来并进行翻转。您需要将阴极面向Pi引脚,阳极面向MOSFET和LED的阳极。在上面的图示中,阳极用黑色小环进行了标记。肖特基二极管仅产生大约0.2V的压降,所以我们可以放心地将它们与Pi配合使用, 并且可以保证MOSFET启动时产生合理的导通电阻。在3W的负载下,我们的IRLZ24N温度甚至不会升高到室温以上。如果您使用大功率CPU风扇,比如10-12W,那可能需要连接一个1W的小散热器,尺寸不要太大。
组装并焊接好电路板后,将其连接到您的Raspberry Pi 4,该冷却系统可以持续工作很多很多年。使用WiringPi库可以使其比上文中的脚本简单很多,我们只用将引脚上的电压值在3.3V和0V之间进行翻转就可以了。需要注意的是,使用12伏的风扇只是因为它们功率大并且数量多。您也可以根据自己的需要选择5伏的风扇。
祝您玩得愉快!