基于PT8.2灯的远程控制

该实验介绍了如何使用PT8.2平台通过IoT0、SBC0和MCU0设备进行灯的远程控制。设备通过以太网口连接,配置相应IP地址后,IoT0负责灯的状态管理,SBC0接收输入并报告灯的状态,MCU0则根据电位计读数控制灯的亮度。实验涵盖了设备连接、程序设计和联动控制,展示了完整的远程控制流程。
摘要由CSDN通过智能技术生成

实验环境:PT8.2

实验目标:通过实验了解基于PT8.2灯的远程控制实验

实验拓扑:

实验过程:

  1. 设备准备

(1)设备以太网口增加

依照实验目标,IoT0和SBC0增加以太网口

(2)设备连接

依照实验拓扑连接设备

(3)IP地址配置

Server0

IoT0

SBC0

IP地址

192.168.25.1

192.168.25.2

192.168.25.3

子网掩码

255.255.255.0

255.255.255.0

255.255.255.0

(3)IoT服务开启及账号注册

  1. 程序设计

(1)IoT0灯的程序保持不变运行即可

main.py
from gpio import *
from time import *
from physical import *
from ioeclient import *
from environment import *


ENVIRONMENT_IMPACT_DIM = 10
VOLUME_AT_RATE = 100000

state = 0;  # 0 off, 1 low, 2 high
lastTimeInSeconds = 0

def main():
    setup()
    while True:
        loop()

        
def setup():

    IoEClient.setup({
        "type": "Light",
        "states": [
        {
            "name": "Status",
            "type": "options",
            "options": {
                "0": "Off",
                "1": "Dim",
                "2": "On"
            },
            "controllable": True
        }
        ]
    })

    IoEClient.onInputReceive(onInputReceiveDone)
    global state
    add_event_detect(0, detect)
    state = restoreProperty("state", 0)
    setState(state)

def detect():
    processData(customRead(0), False)
    
def onInputReceiveDone(analogInput):
    processData(analogInput, True)
        
def restoreProperty(propertyName, defaultValue):
    value = getDeviceProperty(getName(), propertyName)
    if  not (value is "" or value is None):
        if  type(defaultValue) is int :
            value = int(value)

        setDeviceProperty(getName(), propertyName, value)
        return value
    return defaultValue


def mouseEvent(pressed, x, y, firstPress):
    global state
    if firstPress:
        setState(state+1)

def loop():
    updateEnvironment()
    sleep(1)


def processData(data, bIsRemote):
    if  len(data) <= 0 :
        return
    setState(int(data))


def setState(newState):
    global state
    if newState >= 3 :
        newState = 0
    state = newState

    analogWrite(A1, state)
    customWrite(0, state)
    IoEClient.reportStates(state)
    setDeviceProperty(getName(), "state", state)

def updateEnvironment():
    global VOLUME_AT_RATE
    global ENVIRONMENT_IMPACT_DIM
    volumeRatio = float(VOLUME_AT_RATE) / Environment.getVolume()
    if  state is 0 :
        Environment.setContribution("Visible Light", 0,0, True)
    elif  state is 1:
        Environment.setContribution("Visible Light", ENVIRONMENT_IMPACT_DIM*volumeRatio, ENVIRONMENT_IMPACT_DIM*volumeRatio, False)
    elif  state is 2 :
        Environment.setContribution("Visible Light", ENVIRONMENT_IMPACT_DIM*2*volumeRatio, ENVIRONMENT_IMPACT_DIM*2*volumeRatio, False)

if __name__ == "__main__":
    main()

(2)SBC0的程序设计

main.py
from gpio import *
from time import *
from ioeclient import *

def setup():
    pinMode(0,INPUT)
    pinMode(1,INPUT)    
    pinMode(2,INPUT)
    IoEClient.setup({
        "type":"Light Controller",
        "states":[
            {
                "name":"Set Light",
                "type":"options",
                "options":{
                    "0":"Off",
                    "1":"Dim",
                    "2":"Bright"
                    },
                "controllable":False
            }
        ]
    });

def main():
    setup()
    while True:
        i0=digitalRead(0)
        i1=digitalRead(1)
        i2=digitalRead(2)
        if(i0==HIGH):
            IoEClient.reportStates('0')
        elif(i1==HIGH):
            IoEClient.reportStates('1')
        else:
            IoEClient.reportStates('2')
        delay(500)

if __name__ == "__main__":
    main()

(3)MCU0的程序设计

main.py
from gpio import *
from time import *

def main():
    pinMode(A0,IN)
    pinMode(0,LOW)
    pinMode(1,LOW)
    pinMode(2,LOW)
    while True:
        ainput=analogRead(A0);
        digitalWrite(0,LOW)
        digitalWrite(1,LOW)
        digitalWrite(2,LOW)
        if ainput<300:
            digitalWrite(0,HIGH)
        elif ainput<800:
            digitalWrite(1,HIGH)
        else:
            digitalWrite(2,HIGH)
        print(ainput)
        delay(200)
        
if __name__=="__main__":
    main()

(4)联动控制

图 设备注册后的状态

图 SBC与灯的联动控制配置

  1. 设备运行

(1)电位计为OFF状态时

(2)电位计为DIM状态时

(3)电位计为ON状态时

到此基于PT8.2灯远程控制的实验完成,动手感受一下吧。

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

2023年2月17日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值