用esp32基于micropython做一个红外警戒器
事情是这样的,我们往往在愉快的玩耍的时候难以察觉到身后的危险。
有的时候,晚上玩的正嗨,突然,家长就进来了;或者,愉快聊天的时候,宿管老师直接来个突如其来的打击。
对此,作为科技区的一员,我们有必要好好的帮同学们解决问题。
首先,我们考虑到用摄像头(esp32cam),但用这种方式实在不划算(资金不足),所以,我们还是用低调而不失风采的红外传感器——HC-SR501人体红外传感器

(延时)最左边的一定要扭到最小,另外一个是灵敏度(大家看着调),反应模式(跳帽)调到单次探测。
目前市面上有很多种esp32开发板,但是烧录固件也只要注意板子带了多少内存flash(以及是否有外挂的RAM)

按照网上的流程《esp32烧录micropython》之后,我们开始今天的重点。
我们要找一块板子作为探测器,另一块作为服务器。
将红外传感器和探测器连接。

开发板==探测器
GND == GND
GPIO12== OUT
GPIO14== VCC(这里推荐直接接到开发板的VCC,此处偷懒,用GPIO14作为VCC)
然后写入代码:
======================================================================
main.py:
from machine import Pin
from wifi import do_connect
import time
import socket
import _thread
do_connect()
pwr = Pin(14,Pin.OUT)#如果红外传感器VCC接到开发板VCC上面,这就可以不用了。
pwr.on()
led = Pin(22,Pin.OUT)#板子上面指示灯的口子,如果想不亮,可以随便找一个没有被使用的口子
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
serip = '192.168.4.1'
serport = 8818
def sentp(pin):
while(True):
time.sleep(0.1)
putind = Pin(pin,Pin.IN)
msg = putind.value()
if(msg==1):
led.on()
break
for i in range(10):
try:
led.on()
client.connect((serip,serport))
led.off()
def wiconet():
while(True):
client.send(b'1')
time.sleep(1)
#msg = client.recv(1024)
#print(msg)
_thread.start_new_thread(wiconet,())
while(True):
sentp(12)
client.send(b'2')
time.sleep(1)
led.off()
time.sleep(2)
#client.close()
except:
print('fail')
led.off()
time.sleep(0.05)
led.on()
time.sleep(0.03)
led.off()
======================================================================
wifi.py:
def do_connect():
import time
import network
essid = "esper2"# 输入wifi名字(晚点和服务器板子要一样)
password = "88888888"# 输入password(晚点和服务器板子要一样)
wifi = network.WLAN(network.STA_IF)
if not wifi.isconnected():
wifi.active(True)
wifi.connect(essid,password)
import utime
for i in range(2000):
print('第{}次尝试连接WIFI热点'.format(i))
if wifi.isconnected():
break
utime.sleep_ms(100)
======================================================================
将这些代码复制到探测器,记得保存。
至于服务器这边,就简单很多了。

可以看到,在板子中间,正好有一个D2(GPIO2)的led接在上面。
我们用这个指示灯作为警告灯。
上代码:
======================================================================
main.py:
import socket
import time
from machine import Pin
import re
def hotlink():
try:
import network
hot = network.WLAN(network.AP_IF)
hot.active(True)
hot.config(essid='esper2')#与上面同步的WIFI名字
hot.config(authmode=3, password='88888888')#与上面同步的WiFi密码
except:
print('hotlink has fall')
while(True):
try:
hotlink()
break
except:
time.sleep(1)
try:
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ip = '192.168.4.1'
port = 8818
server.bind((ip,port))
server.listen(3)
for i in range(100):
tcp,user = server.accept()
#for i in range(100):
#tcp.send('OK')
#time.sleep(0.1)
while(True):
msg = int(tcp.recv(1024))
if(msg==2):
for c in range(10):
Pin(2,Pin.OUT).off()#这里是指示灯D2
time.sleep(0.05)
Pin(2,Pin.OUT).on()#这里也是指示灯D2
time.sleep(0.05)
Pin(2,Pin.OUT).off()#这里还是指示灯D2
pass
#tcp.close()
except:
for e in range(5):
Pin(2,Pin.OUT).off()
time.sleep(0.1)
Pin(2,Pin.OUT).on()
time.sleep(0.1)
Pin(2,Pin.OUT).off()
======================================================================
然后,先打开服务器esp32芯片供电,再打开探测器供电(注意顺序),然后找个隐蔽而且是查岗人员必经的地方,安装好探测器。之后再测试一下(自己走过去看会不会发警告),然后,大家就可以......(懂得都懂)。
给大家看看效果:

注意:如果探测器出现频繁的错误警报,就先把探测器放那里不要动他,过几分钟等他扫描完环境之后,基本上就会正常工作。

到这里就要结束了,感谢大家的观看,希望能有所帮助。
最后,祝大家玩的开心,上班摸鱼不被抓,下课休息不累趴。