前言:
项目结题前夕,我看着那个“家居控制”的功能列表,陷入了沉思。没做,根本没做。
于是,在一个月黑风高的夜晚,我决定挑战人类极限:用一把杜邦线、一个树莓派、以及一个还没注册的 Blinker 账号,手搓一套风扇远程控制系统。
一、 物理规律的“降维打击”
首先,AI 给了我一份文档。继电器这玩意儿,文档上说有三根线接 GPIO,三根线接风扇。
我看着那几个字母:NC(常闭)、COM(公共端)、NO(常开),心中毫无波澜,甚至想反手接个短路。
当时的逻辑: 只要我把继电器接上去,12V 的风扇就能转。
运行结果: 风扇静止得像我的职业生涯。
深度反思: 看了 B 站才发现,我以为继电器是“电压放大器”,实际上它只是个“卑微的开关”。它不能把树莓派的 5V 变 12V,它只是用树莓派的小手,去拨动 12V 电源的大闸。高中物理老师要是知道我把这忘了,估计得连夜重考教资。
二、 Linux 的“特权阶级”
电路通了,代码复制了,SCP 传上去了,我满怀信心输入 python fan_ctl.py。
结果系统反手甩给我一个:PermissionError: [Errno 13] permission denied。
它嫌弃我不是 root,因为它想占用 81 号端口。
在 Linux 的地盘,1024 以下的端口那是“特权阶级”住的,我一个普通用户,连敲门的资格都没有。
解决战术:
-
怂一点:把端口改到 8080。
-
猛一点:直接
sudo走起。 -
优雅一点:用 setcap 给 Python 解释器单独授权。
最终,我选择了最粗暴的 sudo,别问,问就是赶着结题。
三、 被消失的库:Blinker 消失之谜
代码跑起来了,结果又报错:No module named Blinker。
去 pip install blinker?天真!Pypi 上的那个 blinker 是给 Flask 信号用的。
真正的“点灯科技”库,得去官网或者 GitHub 下源码。
这里涉及到一个硬核知识点:python setup.py install。
这不只是简单的文件搬运,它是把源码丢进“八卦炉”里练一遍:
- 读取 setup.py:看看这包什么来头。
- Build 阶段:把代码编译成 Python 能认出的字节码(甚至 C 扩展)。
- 搬运到 site-packages:这是关键!只有进了这个目录,当你
import的时候,Python 解释器才会在sys.path里点点头:“嗯,这货我认识。”
四、 最后的背叛:Blinker 变心了
当我历经千辛万苦,把库装好,把电路连好,满心欢喜写下:
from Blinker import Blinker, BlinkerButton
报错再次降临。
原来,Blinker 的库升级了,老派的写法已经成了过去式。至于新版本里它们改名叫什么了?
呵,这就是我留给自己的深夜作业。
总结:
这一晚上,我不仅复习了高中物理、Linux 权限管理、Python 库安装原理,还深刻体会到了什么叫“项目结题前的求生欲”。
如果你发现你的风扇不转,别急着换风扇,先看看你是不是没给 Python 管理员权限,或者——你根本没插电源。
发布于:凌晨 3 点的树莓派控制台前