实验环境:PT8.2
实验目标:通过实验了解基于PT8.2搭建门禁系统的方法
实验说明:有效卡接近读卡,则门开,离开门关和锁上;无效卡,则门状态不变。
实验拓扑:
![](https://img-blog.csdnimg.cn/img_convert/e16c1b42dd82997385d167ace025723a.png)
实验过程:
设备准备
(1)设备IP地址配置
Laptop0 | IoT0 | IoT1 | |
IP地址 | 192.168.25.2 | 192.168.25.3 | 192.168.25.4 |
子网掩码 | 255.255.255.0 | 255.255.255.0 | 255.255.255.0 |
(2)设备注册
![](https://img-blog.csdnimg.cn/img_convert/d5c3770b847d9ca142c4d5e0dd6d49ae.png)
图 IoT1读卡器设备注册
(3)卡的设置
有效卡设置
![](https://img-blog.csdnimg.cn/img_convert/1c5e9069ee9fa638891515d731695054.png)
图 有效卡的ID设置
![](https://img-blog.csdnimg.cn/img_convert/fcdbda50524cd095afcf0f9d319e14a5.png)
图 有效卡程序中的卡号设置
无效卡的设置
![](https://img-blog.csdnimg.cn/img_convert/8b5cb2f8ec4b989166cd9393c12fe9fd.png)
图 无效卡的卡号设置
![](https://img-blog.csdnimg.cn/img_convert/b1035b126cb9d09eed32fdaf49c72bc0.png)
程序设计
(1)门的程序设计
main.py
from time import *
from physical import *
from gpio import *
from environment import Environment
from ioeclient import IoEClient
doorState = 0 # 0 is closed, 1 is opened
lockState = 0 # 0 is unlocked, 1 is locked
def on_event_detect_0 () :
processData(customRead(0), False)
def on_input_receive(input) :
processData(input, True)
def setup ():
IoEClient.setup({
"type": "Door",
"states": [{
"name": "Open",
"type": "options",
"options":{
1:"open",
0:"close"
},
"controllable": True
},
{
"name": "Lock",
"type": "options",
"options": {
0: "Unlock",
1: "Lock"
},
"controllable": True
}]
})
IoEClient.onInputReceive(on_input_receive)
add_event_detect(0, on_event_detect_0)
setDoorState(doorState)
setLockState(lockState)
def mouseEvent (pressed, x, y, firstPress):
if firstPress:
if isPointInRectangle(x, y, 10,40,5,10) :
if lockState == 0 :
setLockState(1)
else:
setLockState(0)
else:
if doorState == 0 :
openDoor()
else:
closeDoor()
def processData (data, bIsRemote):
if len(data) < 1 :
return
data = data.split(",")
doorStateData = int(data[0])
lockStateData = int(data[1])
print(doorStateData)
if lockStateData > -1 :
setLockState(lockStateData)
print("bIsRemote")
print(bIsRemote)
if doorStateData==0:
closeDoor()
else:
openDoor()
def sendReport ():
report = str(doorState)+","+str(lockState) # comma seperated states
customWrite(0, report)
IoEClient.reportStates(report)
setDeviceProperty(getName(), "door state", doorState)
setDeviceProperty(getName(), "lock state", lockState)
def closeDoor ():
setDoorState(0)
def openDoor ():
if lockState == 0 :
setDoorState(1)
else:
print "can't open locked door"
def setDoorState (state):
global doorState
if state == 0:
digitalWrite(1, LOW)
setComponentOpacity("led", 1) # show the led
else:
digitalWrite(1, HIGH)
setComponentOpacity("led", 0) # hide the led
doorState = state
sendReport()
def setLockState (state):
global lockState
if state == 0 :
digitalWrite(2, LOW)
else:
digitalWrite(2, HIGH)
lockState = state
sendReport()
if __name__ == "__main__":
setup()
while True:
sleep(0)
(2)程序联动控制
![](https://img-blog.csdnimg.cn/img_convert/1d8f5285da93598fc90f92de47e343b6.png)
图 设备注册后的状态
![](https://img-blog.csdnimg.cn/img_convert/95d4fc2728d332c66acbb1d349b2f684.png)
图 设备联动控制
设备测试
![](https://img-blog.csdnimg.cn/img_convert/8af3f356fa2dbad5b84a7980b3b76686.png)
图 有效卡接近读卡器则门开
![](https://img-blog.csdnimg.cn/img_convert/2d2dec89640397a4cdf5679884cbe19a.png)
图 无效卡接近读卡器则门状态不变
到此基于PT8.2基于PT8.2的门禁系统搭建实验完成,动手感受一下吧。
不足之处敬请批评指正:qhedu@139.com或者私信。
2023年2月17日