综合案例2.0-智能刷卡门禁系统
最新案例教程点击下方链接跳转,优快云已停止更新
点
击
跳
转
简介
使用MFRC522 RFID传感器与舵机制作的刷卡门禁系统。使用阿里云平台场景联动功能,只识别设定的卡号,简单实现多卡识别。满足小区使用场景。
准备
本案例需要的硬件
| 器材 | 数量 |
|---|---|
| HaaS506开发板 | 1 |
| MFRC522 RFID传感器 | 1 |
| SG90舵机 | 1 |
| 喇叭 | 1 |
| SIM卡 | 1 |
| RFID卡片 | 若干 |
| 杜邦线 | 若干 |
硬件连接图

代码流程
1、连接阿里云平台
2、上报门禁状态
3、读RFID卡号,上传阿里云平台
4、云平台判断卡号,控制门禁
5,开门后等待时间,关闭门禁,上传门禁状态
功能实现
1、物联网平台开发
第一次使用物联网平台的读者,需要开通实例后使用物联网平台功能。也可以使用免费的公共实例进行开发,在阿里云物联网平台中,左上角选择‘华东2-上海’,点击‘公共实例’,即可开通。
1、平台产品创建可参考haas506 2.0开发教程-aliyunIoT
2、创建产品属性(添加物模型)
选择产品功能定义–编辑草稿

1、添加自定义功能
2、按照图2显示添加标识符与数据类型(标识符要与代码一致)
3、点击发布上线

- 点击确定

2、设备端开发
-
第一次使用开发板的读者可以按照haas5062.0开发教程-导学篇搭建开发环境。
-
搭建完后复制以下代码到Visual Studio Code,复制产品证书到代码相应位置。

-
舵机使用案例参考
-
2.2版本获取IMEI号接口有更新,需要更改以下内容(Ctrl+F 查找modem)
由
# 获取设备的IMEI 作为deviceName 进行动态注册
deviceName = modem.getDevImei()
...
改为
# 获取设备的IMEI 作为deviceName 进行动态注册
deviceName = modem.info.getDevImei()
...
注意:代码中mp3文件需要自行添加
main.py
# coding=utf-8
from driver import PWM
import network
import ujson
import utime as time
import modem
from aliyunIoT import Device
import kv
import mfrc522
import audio
#当iot设备连接到物联网平台的时候触发'connect' 事件
def on_connect(data):
global module_name,default_ver,productKey,deviceName,deviceSecret,on_trigger,on_download,on_verify,on_upgrade
print('***** connect lp succeed****')
data_handle = {
}
data_handle['device_handle'] = device.getDeviceHandle()
#当连接断开时,触发'disconnect'事件
def on_disconnect():
print('linkkit is disconnected')
#当iot云端下发属性设置时,触发'props'事件
def on_props(request):
global servo_data
params=request['params']
params=eval(params)
servo=params["open_door"]
servo_data={
}
if servo ==1:
param2 = {
'freq':50, 'duty': 12 }
pwm_lpg.setOption(param2)
print('open zhe door')
servo_data["open_door"]= 1
servo_data_str=ujson.dumps(servo_data)
data={
'params':servo_data_str
}
device.postProps(data)
aud.play('/data/pyamp/welcome.mp3')
time.sleep(3)
param2 = {
'freq':50, 'duty': 5 }
pwm_lpg.setOption(param2)
time.sleep(1)
servo_data["open_door"]= 0
servo_data_str=ujson.dumps(servo_data)
data={
'params':servo_data_str
}
device.postProps(data)
else:
pass
#当iot云端调用设备service时,触发'service'事件
def on_service(id,request):
print('clound req id is {} , req is {}'.format(id,request))
#当设备跟iot平台通信过程中遇到错误时,触发'error'事件
def on_error(err):
print('err msg is {} '.format(err))
#网络连接的回调函数
def on_4g_cb(args):
global g_connect_status
pdp = args[0]
netwk_sta = args[1]
if netwk_sta == 1:
g_connect_status = True
else:
g_connect_status = False
#网络连接
def connect_network():
global net,on_4g_cb,g_connect_status
#NetWorkClient该类是一个单例类,实现网络管理相关的功能,包括初始化,联网,状态信息等.
net = network.NetWorkClient()
g_register_network = False
if net._stagecode is not None and net._stagecode == 3 and net._subcode == 1:
g_register_network = True
else:
g_register_network = False
if g_register_network:
#注册网络连接的回调函数on(self,id,func); 1代表连接,func 回调函数 ;return 0 成功
net.on(1,on_4g_cb)
net.connect(None)
else:
print('网络注册失败')
while True:
if g_connect_status:
print('网络连接成功')
break
time.sleep_ms(20)
#动态注册回调函数
def on_dynreg_cb(data):
global deviceSecret,device_dyn_resigter_succed
deviceSecret

本文介绍如何使用HaaS506开发板配合MFRC522 RFID传感器,通过阿里云物联网平台实现门禁系统的智能控制。涉及硬件连接、代码流程、物联网平台配置及场景联动规则设定,适合小区门禁管理需求。
最低0.47元/天 解锁文章
5587

被折叠的 条评论
为什么被折叠?



