基于PT8.2的门禁系统搭建实验

实验环境:PT8.2

实验目标:通过实验了解基于PT8.2搭建门禁系统的方法

实验说明:有效卡接近读卡,则门开,离开门关和锁上;无效卡,则门状态不变。

实验拓扑:

实验过程:

  1. 设备准备

(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)设备注册

图 IoT1读卡器设备注册

(3)卡的设置

有效卡设置

图 有效卡的ID设置

图 有效卡程序中的卡号设置

无效卡的设置

图 无效卡的卡号设置

  1. 程序设计

(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)程序联动控制

图 设备注册后的状态

图 设备联动控制

  1. 设备测试

图 有效卡接近读卡器则门开

图 无效卡接近读卡器则门状态不变

到此基于PT8.2基于PT8.2的门禁系统搭建实验完成,动手感受一下吧。

不足之处敬请批评指正:qhedu@139.com或者私信。

2023年2月17日

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值