用esp32基于micropython做一個紅外警戒器
事情是這樣的,我們往往在愉快的玩耍的時候難以察覺到身后的危險。
有的時候,晚上玩的正嗨,突然,家長就進來了;或者,愉快聊天的時候,宿管老師直接來個突如其來的打擊。
對此,作為科技區(qū)的一員,我們有必要好好的幫同學(xué)們解決問題。
首先,我們考慮到用攝像頭(esp32cam),但用這種方式實在不劃算(資金不足),所以,我們還是用低調(diào)而不失風(fēng)采的紅外傳感器——HC-SR501人體紅外傳感器

(延時)最左邊的一定要扭到最小,另外一個是靈敏度(大家看著調(diào)),反應(yīng)模式(跳帽)調(diào)到單次探測。
目前市面上有很多種esp32開發(fā)板,但是燒錄固件也只要注意板子帶了多少內(nèi)存flash(以及是否有外掛的RAM)

按照網(wǎng)上的流程《esp32燒錄micropython》之后,我們開始今天的重點。
我們要找一塊板子作為探測器,另一塊作為服務(wù)器。
將紅外傳感器和探測器連接。

開發(fā)板==探測器
GND? ==?GND
GPIO12==?OUT
GPIO14== VCC(這里推薦直接接到開發(fā)板的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接到開發(fā)板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名字(晚點和服務(wù)器板子要一樣)
? ? password = "88888888"# 輸入password(晚點和服務(wù)器板子要一樣)
? ? 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)?
======================================================================
將這些代碼復(fù)制到探測器,記得保存。
至于服務(wù)器這邊,就簡單很多了。

可以看到,在板子中間,正好有一個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()
======================================================================
然后,先打開服務(wù)器esp32芯片供電,再打開探測器供電(注意順序),然后找個隱蔽而且是查崗人員必經(jīng)的地方,安裝好探測器。之后再測試一下(自己走過去看會不會發(fā)警告),然后,大家就可以......(懂得都懂)。
給大家看看效果:

注意:如果探測器出現(xiàn)頻繁的錯誤警報,就先把探測器放那里不要動他,過幾分鐘等他掃描完環(huán)境之后,基本上就會正常工作。

到這里就要結(jié)束了,感謝大家的觀看,希望能有所幫助。
最后,祝大家玩的開心,上班摸魚不被抓,下課休息不累趴。