上一期聊了如何通过树莓派控制继电器开关水泵,一方面成本有点高, 二是通过有线连继电器可能不方便, 本次就是解决这两个问题,通过手机或电脑无线控制继电器开关水泵. 上 图是原理图, 下图是我的采购清单(超低成本).
上图中第一个是无线模块esp8266+相应的继电器. 无线模块用来连路由器及继电器.继电器在上篇说过,不再赘述. 上图中第二个是无 线模块烧写器. 也就是把无线模块连接烧写模块, 再把烧写模块连到电脑上烧写程序.
不要被上边的描述唬住,其实很简单,过程图如下:
采购元件参考第2张图,总价不超20元
esp8266-01sesp-01s继电器ch340C烧录器连接电脑把esp8266-01s插入 到ch340c,并把ch340c插入到电脑 ,如下
烧写程序敲黑板,这是本文的重点.
安装thonny下载地址:https://thonny.org/
根据自己的操作系统下载后, 直接安装就行.
下载并烧写固件下载地址: https://micropython.org/resources/firmware/esp8266-1m-20220618-v1.19.1.bin
这个固件你可以理解为esp8266-01的操作系统. 可以用thonny来安装
Port如果不知道,可以先把ch340c拔下来,看好列表里的项, 再插上, 看多出来的就是了. 最后点install or update MicroPython
firmware选刚才下载的固件的位置, 点install等待完成即可
烧写自己的控制代码在thonny中新建文件,保存到设备上即可.注意文件命名为main.py, 代码如下:
需要修改SSID为你的路由器名,及路由PWD改为你的路由器密码
import utime
import socket
from machine import Pin
from re import search
#开继电器 http://ip/relay?code=111&status=0
#关继电器 http://ip/relay?code=111&status=1
#关LED灯 http://ip/light?code=111&status=1
SSID="qingty9"
PWD="xxx;"
SECURE_CODE="t111w"
PORT=80
HEAD200='HTTP/1.1 200 OKrnServer: twEsp8266rn'
HEAD200+='Content-Type: text/html;charset=UTF-8rnConnection: closernrn'
#conntect to wifi
def doconnect():
import network
wlan=network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
wlan.connect(SSID,PWD)
start = utime.time()
while not wlan.isconnected():
utime.sleep(1)
if utime.time()-start>5:
print('connect time out !')
break
if wlan.isconnected():
print('network config:',wlan.ifconfig())
return wlan
#parse params to map
def parm_parse(qs):
parameters = {}
ampersandSplit = qs.split("&")
for element in ampersandSplit:
equalSplit = element.split("=")
parameters[equalSplit[0]] = equalSplit[1]
return parameters
wlan=doconnect()
webserver=socket.socket()
webserver.bind(('0.0.0.0',PORT))
webserver.listen(1)
relay=Pin(0,Pin.OUT)
led=Pin(2,Pin.OUT)
while True:
conn,addr = webserver.accept()
request=conn.recv(1024)
if len(request)>0:
request=request.decode()
result=search("(.*?) (.*?) HTTP/1.1",request)
url=result.group(2)
if url=='/favicon.ico':
pass
else:
print(url)
uri=url.split('?')[0]
param=parm_parse(url.split('?')[1])
if 'code' in param and param['code']==SECURE_CODE:
if uri=='/light':
if 'status' in param and param['status']=='0':
led.value(0) #或led.off()
else:
led.value(1)
conn.send(HEAD200+uri+'操作成功!')
elif uri=='/relay':
if 'status' in param and param['status']=='0':
relay.value(0)
else:
relay.value(1)
conn.send(HEAD200+uri+'操作成功!')
else:
conn.send(HEAD200+'未识别的指令!')
else:
conn.send(HEAD200+'安全码错误!')
else:
print('no request')
conn.close()
四.独立运行烧写好程序后,就可以脱离电脑,单独供电,放在它需要它的地方了.比如控制 水泵的开关. 把esp8266从ch340ch上拔下来,插到配套的继电器上,
具体接线,找一个不用的USB充电线剪开,为继电器和无线模块供电,一定要区分正负极,可参考<<如何区分手机充电线的正负极>> (或者用几节5号电池可以供电,方便随处移动)
接好通电后,可用手机或电脑访问局域网地址http://ip/relay?code=t111w&status=0 修改status为0或1来开关水泵了
那么问题来了,如果不在家如何控制它远程开关呢. 下期见!
-----------------end-----------------
欢迎各位补充指正! 如有疑问请留言!
原创不易,感谢各位 关注、点赞、评论、转发 !