欢迎光临散文网 会员登陆 & 注册

用esp32基于micropython做一个红外警戒器

2022-08-25 16:56 作者:洋洋柚Y  | 我要投稿

事情是这样的,我们往往在愉快的玩耍的时候难以察觉到身后的危险。

有的时候,晚上玩的正嗨,突然,家长就进来了;或者,愉快聊天的时候,宿管老师直接来个突如其来的打击。

对此,作为科技区的一员,我们有必要好好的帮同学们解决问题。

首先,我们考虑到用摄像头(esp32cam),但用这种方式实在不划算(资金不足),所以,我们还是用低调而不失风采的红外传感器——HC-SR501人体红外传感器

HC-SR501人体红外传感器

(延时)最左边的一定要扭到最小,另外一个是灵敏度(大家看着调),反应模式(跳帽)调到单次探测。

目前市面上有很多种esp32开发板,但是烧录固件也只要注意板子带了多少内存flash(以及是否有外挂的RAM)

不太一样的esp32开发板

按照网上的流程《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) 

======================================================================

将这些代码复制到探测器,记得保存

至于服务器这边,就简单很多了。

做服务器的ESP32开发板

可以看到,在板子中间,正好有一个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芯片供电,再打开探测器供电(注意顺序),然后找个隐蔽而且是查岗人员必经的地方,安装好探测器。之后再测试一下(自己走过去看会不会发警告),然后,大家就可以......(懂得都懂)

给大家看看效果:

没有热的物体(人)靠近

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

有热点物体(人)靠近

到这里就要结束了,感谢大家的观看,希望能有所帮助。

最后,祝大家玩的开心,上班摸鱼不被抓,下课休息不累趴。



用esp32基于micropython做一个红外警戒器的评论 (共 条)

分享到微博请遵守国家法律