警告: 需要具备基本的电路常识,220V 乱接线,存在触电风险!!
需要准备:
软件端:公众号一个,可以是个人的订阅号。易语言和sunny服务端模块套件。 我已经用这个做好了公众号套件(见尾部源码)
硬件端:ESP32开发板一个(刷micropython固件),18650电池组,继电器一个 大概成本50元。
实现总体效果:
效果演示视频:https://www.douyin.com/video/7071819287652027684
公众号后端:
原理概述,
esp32 WIFI联网,访问你的公众号套件程序,这里是把公众号和服务端做到一起了。 本机电脑使用花生壳内网穿透。 当然你也可以直接内网访问。
硬件端作为下位机,只负责连接服务端,和收命令,开关继电器,至于什么时候开,什么时候关,完全由服务端决定。
软件端,也就是公众号服务端,负责接收命令,识别并返回json。传输开关参数0和1,开关的时间,这个案例里是抽水的时间参数,你可以根据自己的项目自己改。
最后献上源码,源码写的比较乱,但语法应该是没什么问题,看的不舒服轻喷。
部分代码,需要提出来说明下,一个是服务端的链接这里是我的花生壳生成的,还有个是WIFI的账号密码,一共要改的就这三个东西,非常简单。
#####客户端的代码片段开始
#连接WiFi
def connectWifi(ssid,passwd):
global wlan
wlan = network.WLAN(network.STA_IF)
wlan.active(True) #激活网络
wlan.disconnect() #断开WiFi连接
wlan.scan()
time.sleep(1)
wlan.connect(ssid, passwd) #连接WiFi
a=0
while(wlan.ifconfig()[0] == '0.0.0.0'): #等待连接
time.sleep(1)
a=a+1
print( str(a)+"次ip:"+wlan.ifconfig()[0])
if a>300:
connectWifi(SSID,PASSWORD)
return True
def choushui_api():
state=0
t=0
try:
dic=json.loads(urequests.get("//xxxxxx").text) #这里要改成你自己的花生壳链接
state=int(dic["choushui"])
t=int(dic["choushui_time"])
except:
print("网络异常,正在检查")
state=-1
if wlan.ifconfig()[0] == '0.0.0.0': #等待连接
print("连接异常,正在尝试连接WIFI")
connectWifi(SSID,PASSWORD)
gc.collect()
return state,t
def choushui(t):
msg=""
for a in range(4):
#告知服务器已经开始抽水
dic=json.loads(urequests.get("//huang582716403.vicp.cc/api?state=1&time="+str(t)).text)
msg=dic["msg"]
if(msg=="ok"):
break
time.sleep(a)
Relay.value(1) # 打开继电器
b=int(t/10)
for a in range(b):
time.sleep(10)
state,t=choushui_api()
if(state==0):
break
Relay.value(0)# 关闭抽水
for a in range(6*60*6):
time.sleep(10)
dic=json.loads(urequests.get("//huang582716403.vicp.cc/api?state=0&time="+str(t)).text)
msg=dic["msg"]
if(msg=="ok"):
break
return True
# 初始化工作
def makerobo_setup():
global Relay
global SSID,PASSWORD
global wlan
wlan = None #wlan
SSID = "ap_server" #修改为你的WiFi名称
PASSWORD = "hr582716403" #修改为你WiFi密码
Relay = machine.Pin(16,machine.Pin.OUT) # 设置Pin模式为输出模式
Relay.value(0) # 关闭继电器
connectWifi(SSID,PASSWORD)
#####客户端的代码片段结束