实验环境:PT8.2
实验目标:通过实验了解基于PT8.2灯的远程控制实验
实验拓扑:
实验过程:
设备准备
(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)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)电位计为OFF状态时
(2)电位计为DIM状态时
(3)电位计为ON状态时
到此基于PT8.2灯远程控制的实验完成,动手感受一下吧。
不足之处敬请批评指正:qhedu@139.com或者私信。
2023年2月17日