使用树莓派Pico W的DIY无线伺服开关控制器
我遇到的最大问题之一是从床上爬起来关掉卧室的灯。当你惬意地躺在床上时,很难做到这一点。在这里,我想告诉大家如何用 Pico W 伺服开关控制器来解决这个问题。
几年前,我用 Arduino 和红外遥控器制作了一个无线解决方案。因为它很可靠,而且解决了我的问题,所以效果还不错。但也不是没有缺点。
首先,与Raspberry Pi Pico W相比,Arduino Uno非常庞大。
第二,它依赖于红外信号,这意味着当我想把灯关掉时,我需要知道我的红外遥控器在哪里。
而这正是Raspberry Pi Pico W的优势所在。你可以直接从你的手机上控制舵机。
为什么要费心做这个DIY项目?
它是丑陋的。它很乏味。
但它也涉及到为你的问题制定自己的解决方案的喜悦和乐趣。
现代问题需要现代的解决方案,而 你可以在这里看到人们如何用Raspberry Pi解决他们的问题。.
此外,您可能需要这样做,因为您不被允许修改家中的电气设置。
或者你不想花钱雇一个专业人员来做。
另一个原因是这个项目是如此的可扩展和可移植。你不必把它用在电灯开关上,你可以把它用在键盘上,例如用来停止屏幕保护程序。
视频
双向开关控制是可能的,但单向开关最容易。
如果有一件事你肯定能做到,世界上所有的开关,无论是欧洲的还是北美的,你总能用一个伺服机来关闭或打开它。
但如果你想双向控制开关,就会成为一个更大的工程挑战,因为伺服机可能会碍事。
例如,如果你需要能够手动打开或关闭开关,你可能会发现伺服臂挡住了路。你不能在不破坏电机的情况下把它强行拉开,因为伺服机的程序是要全力保持自己的位置。
广播网络或连接到网络?
Raspberry Pi Pico W可以连接到你的家庭网络,或者它可以广播自己的网络。
我两种方法都试过了,发现两种方法都有一些优点和缺点。
作为一个站点(即连接到一个网络上)
在最初的设计中,我让我的Pico W连接到我的家庭网络,它在其IP地址192.168.0.70上提供了一个带有按钮的HTML文件。
这样做的好处是,我很容易就能启动我的浏览器,按下关灯的按钮。
然而,缺点是网络上的任何人也能够这样做,除非你实施某种形式的认证。
另一个缺点是,如果你的家庭网络断电,Raspberry Pi Pico W不会重新连接到网络,除非你实现了重启Pico W或重新连接到网络的代码。
作为一个接入点
目前,我正在使用我的Pico W作为一个接入点,尽管我并不是说这是最好的方法。
它广播了一个网络,我必须单独连接到这个网络,以便我控制伺服机。这是一个不方便的缺点。
这样做的好处是,与站式方法不同,你在网络上有一个密码,所以只有你能连接到它。
最初,我有一个接入点,它提供了一个带有按钮的网页来触发伺服。我发现这太麻烦了,因为你需要1)连接到网络,2)进入Pico W的IP地址,3)按下按钮
我发现最好的解决办法是,一旦Pico W检测到有客户连接到接入点,就触发伺服装置。这样,你所要做的就是把任何设备连接到Pico W上,你的灯(或开关)就会关闭。
将Pico W连接到一个伺服机上
这是一个简单的项目,你应该能在初学者的套件中找到零件。如果没有,这里有一个零件清单。
我还使用了一个可选的面包板,用公-母跳线将伺服机与Pico W连接起来,但你也可以用公-母跳线将伺服机直接连接到Pico W的针座上。
你还需要双面胶把你的伺服机粘在灯光开关外壳上。
接线
一般来说,所有的伺服机都有一条红色、黑色/棕色和第三条线。
将一根红色跳线连接到来自伺服机的红线上。这就是你要通过VBUS发送5V的地方。
将一条黑线连接到黑/棕线上。你将把它连接到Pico W上的GND。
将另一条线连接到第三条线上。我的线是橙色的,所以我用了一条橙色的跳线。这是我连接到GPIO16的信号线。
准则
这段代码将允许你在客户端连接到Pico W的SoftAP接入点时触发伺服。
import network
import machine
from machine import PWM
from time import sleep
#Pin param = servo GPIO pin number
pwm = PWM(machine.Pin(16))
ssid = 'Lights-Out'
password = 'sleeptime'
ap = network.WLAN(network.AP_IF)
ap.config(essid=ssid, password=password)
ap.active(True)
while ap.active() == False:
pass
print('Connection successful')
print(ap.ifconfig())
def rotateServo ():
pwm.freq(50)
pwm.duty_ns(2000000)
sleep(0.5)
pwm.duty_ns(1500000)
#ap.status is a blank array until someone connects, then it will have one entry
#when ap.status = true, then it will trigger rotateServo()
# then it will shut itself off to kick the user off the network,
# allowing the device to reconnect to its usual network
while True:
try:
if ap.status('stations'):
print('client connected')
rotateServo()
sleep(5)
ap.active(False)
sleep(2)
ap.active(True)
except OSError as e:
print('Connection closed')
某些重要的代码行需要解释。
这段代码假设你把信号线连接到GPIO16。如果不是,把这一行中的 "16 "整数改为你所连接的GPIO引脚。
#Pin param = servo GPIO pin number
pwm = PWM(machine.Pin(<strong>16</strong>))
这就设置了SoftAP,宣布了SSID名称和密码。
import network
...
ssid = 'Lights-Out'
password = 'sleeptime'
ap = network.WLAN(network.AP_IF)
ap.config(essid=ssid, password=password)
ap.active(True)
Pico W上的伺服控制
这控制着伺服机。你可能需要修改这个。
对于我的伺服机,我可以使用500000(500K)到2000000(2mil)的值。这将提供伺服机的全部范围。
然而,我只需要小幅旋转。因此,我把舵机放到它的全速旋转,用 pwm.duty_ns(2000000) 然后让它返回到 pwm.duty_ns(1500000).
最好是在你的伺服机自由浮动时进行测试,这样你就可以看到它的旋转方向是否正确,然后你就可以对旋转度进行微调。
def rotateServo ():
pwm.freq(50)
pwm.duty_ns(2000000)
sleep(0.5)
pwm.duty_ns(1500000)
广播一个AP,连接时触发旋转Servo
这行代码反复运行。
while True:
try:
if ap.status('stations'):
print('client connected')
rotateServo()
sleep(10)
ap.active(False)
sleep(2)
ap.active(True)
如果 ap.status('stations') 检测到无线网络的连接,它将返回一个包含一个项目的数组。
因此,如果代码不是一个空数组,就会启动 旋转伺服 并在再次开机前关闭AP。
开启和关闭AP的想法是将连接的客户端踢出网络。这样它就可以通过互联网连接到其习惯的网络上。
只要确保在你的手机或电脑中关闭自动重新连接。
为什么我们需要在调用ap.active()之间设置sleep(x)?这是因为我了解到,如果我关闭和开启AP的速度太快,我的手机就不会放弃连接。
了解更多关于Raspberry Pi Pico W的信息
我们专门写了一篇关于Raspberry Pi Pico W的文章,将帮助你充分利用你的Pico W。 点击这里,了解你所不知道的事情。
非常有趣。
I betreibe gerade viel Recherche zum pico w.
我的想法太过简单了,我只是在一个与Pi Zero无关的项目上做了些工作。
因此,我对Pico完全没有兴趣。
我的目标:将Pico W作为键盘遥控器来使用。
这是很重要的。我从我的Smarthome上用手或脚本发送传真,Pico上的传真和PC上的传真都被删除了。
在hid库中,可以很好地模拟键盘。
因此,我可以在某个特定的时间自动关闭电脑。
Der Vorteil an der hid emulation:它几乎不需要在电脑上安装任何工具和软件。不管是哪种系统。因此,人们可以自己操纵Bios。
你是否有一个想法,希望能通过Pico W来实现这个目标。
哦,没有Wlan的时候,这很好。 https://www.heise.de/tests/Ausprobiert-Raspberry-Pico-mit-USB-HID-als-Tastatur-oder-Maus-benutzen-6011697.html
是否也可以通过wlan的方式使用pico w?
嗨,Udo,我不知道为什么人们不能用Pico W来实现这个目标。
我把它作为PiCockpit的注册表,作为Pico W的一个新的应用程序(PiCockpit也支持Pico W!)。
我们一直在努力,使Pico W也能支持PiControl--这样,人们就可以在Pico W上安装Python脚本,并在此基础上生成最佳的定义序列。
(Falls es per Python auch geht - ich habe den Heise Artikel gerade nicht angeschaut).
感谢你的提问和解答!你的问题是什么?
最大