【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法

PacketTracer中全部智能设备连接MCU使用方法

教程1.PacketTracer中MCU芯片编程入门教程
教程2.全部智能设备连接MCU使用方法
教程3.读卡器与红外探测器连接MCU使用方法
教程4.常用传感器使用方法
教程5.几种按钮与开关的使用方法
教程6.执行器使用方法
教程7.上云教程
教程8.多设备上云教程
教程9.Arduino+OneNET TCP透传上云教程(发+收)

在本文中,我们将介绍packetTracer内全部智能家居设备的使用方法。

我们首先放置报警器siren、风扇、车库、加湿器、咖啡机、鼓风机、洒水器、窗户、按钮如下图并进行连接。连接到MCU的接口已标注在设备名称后。【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第1张图片
大家请注意,按钮、鼓风机和窗户连接到了A接口即模拟接口,所以我们使用时传参数应传A0,A1,A2而非0,1,2

代码如下:

from gpio import *
from time import *

while True:
	a1=analogRead(A0);
	if(a1!=0):
		customWrite(0,1)#开报警器 
		customWrite(1,1)#开车库
		customWrite(2,1)#开洒水器
		customWrite(3,1)#开风扇
		customWrite(4,1)#开加湿器
		customWrite(5,1)#开咖啡机
		customWrite(A1,1)#开鼓风机
		customWrite(A2,1)#开窗户
	else:#关以上设备
		customWrite(0,0)
		customWrite(1,0)
		customWrite(2,0)
		customWrite(3,0)
		customWrite(4,0)
		customWrite(5,0)
		customWrite(A1,0)
		customWrite(A2,0)
	sleep(1)

【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第2张图片
由于接口限制,我们每次只能展示这些设备。我们可以看到,这些智能设备连接到MCU芯片时,全部都可以使用custom方法进行写入操作,并且A口和D口都可以正常使用。
演示如下:当按下按钮,全部设备成功打开,松开按钮则关闭。
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第3张图片
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第4张图片
其中需要注意,鼓风机与电风扇具有0,1,2三种状态分别为关,低速,高速。
在这里插入图片描述
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第5张图片

那么接下来我们换一批智能设备进行尝试。
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第6张图片
可以看到,我们添加了一个排水孔,一个摄像头,还有三个门。为什么要添加三个门呢?我么首先看代码。

from gpio import *
from time import *

while True:
	a1=analogRead(A0);
	if(a1!=0):
		customWrite(0,1)#开排水孔
		customWrite(1,1)#开摄像头
		customWrite(2,[0,1])#门锁上锁
		customWrite(3,[0,0])#门解锁
		customWrite(4,[1,0])#尝试开门,解锁

	else:
		customWrite(0,0)
		customWrite(1,0)
		customWrite(2,[0,0])
		customWrite(3,[0,0])
		customWrite(4,[0,0])

	sleep(1)

【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第7张图片
我们按下按钮进行尝试
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第8张图片
我们可以看到,按下按钮时排水孔和摄像头都打开,而门则有三种状态。D2门钥匙孔红色表示上锁,3号门钥匙孔绿色表示没有上锁,4号门已被推开表示未上锁且打开。我们看代码可以发现,向门写入了数组[0,1]、[0,0]与[1,0],其中,数组第一个数字为0的话表示不打开门,为1的话表示尝试打开门。第二个数字表示是否上锁,为1的话表示上锁,为0的话表示解锁。 所以第一个门写入了[0,1]表示关门上锁,第二个门写入了[0,0]表示关门不上锁,第三个为[1,0]表示开门不上锁。如果我们写入[1,1]则为开门上锁,由于上锁了,所以无法开门,表现为第一个门同样的效果。按住ALT点击门与点击门孔分别表示手动开关门与上锁解锁。

至此我们已学完了智能设备中的执行器如何连接MCU进行使用,我们得出以下结论:全部智能家居设备都可以使用customWrite方法进行写入数据。

接下来我们尝试使用传感器。
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第9张图片
以上几个传感器,如上面三个,是搭配服务器使用的,下面四个可以直接显示示数,但最好也是搭配服务器使用,不然我们就需要对设备代码进行比较大的改动。由于我们的物联网基础模块中有如烟雾传感器、温湿度传感器等传感器,可以替代这些智能探测器的功能,所以我们再此不再讲解,大家如果有需要,可以查看以下文章:
①服务器配置方法
②智能设备无线连接方法
③服务器环境管理器使用方法

但是有两个智能设备是无可替代的,即读卡器和红外检测器
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第10张图片
读卡器可以读取卡片的ID并发送给服务器,红外检测器可以检测物体遮挡并发送给服务器,这两个设备十分好用,但连接MCU使用却存在一些问题,所以需要进行底层代码的修改,我会把修改好的优化过的代码直接给大家,大家不需要担心。
1.我们先把卡的属性修改为1001之外的数字比如2001(1001有些版本检测为0)
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第11张图片
2.单击读卡器→右下角高级→I/O配置→修改数字插槽为1
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第12张图片
3.点击编程,双击python代码
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第13张图片
4.点击main.py
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第14张图片

5.修改代码如下:

from options import Options
from time import *
from physical import *
from gpio import *
from ioeclient import IoEClient


DELAY_TIME = 1000        # var DELAY_TIME
current_time = 0        # var current_time

X_READ_DISTANCE = 50        # var X_READ_DISTANCE
Y_READ_DISTANCE = 50        # var Y_READ_DISTANCE
cardID = 0        # var cardID
lastCardID = 0        # var lastCardID
state = 2 # waiting        # var state


def setup ():

    # Registration Server Setup
    
    IoEClient.setup({
        "type": "RFID Reader",
        "states": [{
                "name": "Card ID",
                "type": "number",
                "unit": '',
                "controllable": False
            },
            {
                "name": "Status",
                "type": "options",
                "options": {
                    "0": "Valid",
                    "1": "Invalid",
                    "2": "Waiting"
                },
                "controllable": True
        }]
    })
    
    IoEClient.onInputReceive( lambda rinput: processData(rinput, True) )



def loop ():
    global cardID, lastCardID, state
    devices = devicesAt(getCenterX(), getCenterY(), X_READ_DISTANCE, Y_READ_DISTANCE)        # var devices
    found = False        # var found
    for i in xrange(0, len(devices)) :
        if devices[i] is getName():
            continue

        cardID = getDeviceProperty(devices[i], 'CardID')
        found = True
        
        digitalWrite(0,cardID)#如果发现卡片了则输出卡片ID
        
        
        break


    if not found:
        cardID = lastCardID = 0
        
        digitalWrite(0,0)#如果没有发现卡片则输出0
        
        
        setState(2)
    else:
        if lastCardID != cardID:
            lastCardID = cardID
            sendReport()


    delay(DELAY_TIME)



def setState (newState):
    global  state
    if state != newState:
        state = newState
        analogWrite(A1, state)
        sendReport()




def sendReport ():
    report  = str( int(cardID)) + "," + str(state)        # var report
    IoEClient.reportStates(report)



def processData (data, bIsRemote):
    if len(data) <= 0:
        return
    data = data.split(",")
    setState(int(data[1]))



if __name__ == "__main__":
    setup()
    while True:
        loop()
        idle()


改变主要在于中文注释的两行代码
第一行中文注释代码为向新建的数字接口D0输出卡片信息
第二行中文注释代码为未检测到卡片时输出0
如果不添加第一行,MCU将一直读到0
如果不添加第二行,移开卡片后MCU仍将一直输出之前读到的卡片ID而非0

6.一定记得点击Run,包括之后关闭重开pkt文件可能出现MCU读不到ID的情况,可能就是读卡器代码被软件系统默认停止运行了,需要我们重新手动运行一次。
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第15张图片
7.进行以下连线
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第16张图片
8.MCU内编写以下代码

from gpio import *
from time import *

while True:
	id=digitalRead(0)
	print(id)

	sleep(1)

【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第17张图片
代码很简单,就是循环读取读卡器数据并输出,我们尝试运行。
9.没有卡片时读到0 有卡片时读到卡片ID
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第18张图片
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第19张图片
则我们已成功掌握读卡器的使用方法。
为了方便大家搜索,我会把读卡器使用方法单独发布一篇文章,大家在此学会的就不需要再去查看另一篇文章了。

接下来我们用类似的方法对红外探测器进行一些修改。
1.单击探测器→高级→I/O配置→修改数字插槽为2 请注意与读卡器不同,此处修改为2
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第20张图片
2.我们如图进行连线,请注意,检测器端口为D1接口而非D0接口,因为检测器底层代码向D1接口输出数据而非D0,而接到MCU的那一端可以接任意接口(本实验接D0)。【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第21张图片
3.运行红外检测器python程序同上(无需修改)
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第22张图片
4.MCU内编写以下代码并运行

from gpio import *
from time import *

while True:
	thing=digitalRead(0)
	print(thing)

	sleep(1)

【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第23张图片
5.按住ALT将鼠标放在红线上则装置会变红,挪开鼠标则变暗
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第24张图片
6.当遮挡时MCU控制台输出1023,否则输出0
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第25张图片
【PT+Arduino+OneNET基础教程2】PacketTracer中全部智能设备连接MCU使用方法_第26张图片

全部智能设备的讲解到此结束,下一篇文章我们将进行物联网基础模块的讲解。

在此整理常用设备的方法与需传参数如下

执行器(智能设备)名称 控制方法
台灯 customWrite 1暗 2亮 0
加湿器 customWrite 1 0
咖啡机 custom Write 1 0
电风扇 customWrite 1低速 2高速 0
车库门 customWrite 1 0
siren报警器 customWrite 1 0
鼓风机 customWrite 1 0
草坪洒水器 customWrite 1 0
窗户 customWrite 1 0
排水孔 customWrite 1 0
customWrite [1,0]数组 [0,1]
摄像头 customWrite 1 0
LCD显示器 customWrite “xx” 字符串 ""空字符串
制冷器 digitalWrite 1023或HIGH 0或LOW
制热器 digitalWrite 1023或HIGH 0或LOW
洒水器 digitalWrite 1023或HIGH 0或LOW
舵机 analogWrite 1到1023(亮度) 0
LED analogWrite 1到1023(速度) 0

门的使用较为特殊,数组第一个数字为0的话表示不打开门,为1的话表示尝试打开门。第二个数字表示是否上锁,为1的话表示上锁,为0的话表示解锁。

传感器名称 读取方法
光照传感器 digitalRead
温度传感器 digitalRead
湿度传感器 digitalRead
运动传感器 digitalRead
烟雾传感器 digitalRead
金属传感器 digitalRead
水传感器 digitalRead
水探测器 digitalRead
风探测器 digitalRead
读卡器 digitalRead
红外线探测器 digitalRead
光照传感器 analogRead

烟雾传感器、读卡器、红外线装置需要进行一些修改,大家可以详细参考以下文章

烟雾传感器

读卡器与红外线装置

你可能感兴趣的:(物联网,mcu,思科,iot)