网站关键字排名提升工具,四网一体网站建设方案,聚名网是干什么的,软装设计专业本文通过一个简单实例#xff0c;主要介绍了如何使用树莓派快速接入阿里云iot platform#xff0c;并实现了一个简易的监控人员出入并拍照上送钉钉群的场景 场景
在公司大门入口处布点树莓派和红外感应#xff0c;实现出入口人员出入时#xff0c;自动拍照并上送钉钉群机器… 本文通过一个简单实例主要介绍了如何使用树莓派快速接入阿里云iot platform并实现了一个简易的监控人员出入并拍照上送钉钉群的场景 场景
在公司大门入口处布点树莓派和红外感应实现出入口人员出入时自动拍照并上送钉钉群机器人 准备
物料准备
树莓派HC-SR501 人体红外感应器树莓派摄像头母对母杜邦线三根
阿里云环境准备
物联网平台对象存储OSS函数计算日志服务可选
操作步骤
1 云端开发
1.1 物联网平台
登录阿里云控制台进入物联网平台控制面板
1.1.1 新建产品
进入设备管理创建产品选择基础版或高级版都可以本实例使用基础版就可以满足基本要求。 系统会自动创建3个Topic,我们需要使用 /ProductName/${deviceName}/update作为设备告警消息的上送的Topic。 1.1.2 设备管理
在产品中新增设备并获得设备的3元组在2.3节的设备代码的编写时需要使用此3元组。设备三元组是设备的唯一标示
1.1.3 新建规则引擎
设置规则引擎的意义在于可以将设备上送的消息数据通过配置转发规则将处理后的数据转发到阿里云其他服务例如RDS、TBS和函数计算等等。我们需要注意的是从设备端到规则引擎处理后的JSON数据格式的变化下图中是基础版的演变过程 我们在设备端消息上送定义的JSON的格式是
{photo: xxxxxxx.jpg
}
新创建一个规则数据格式选择JSON。编写处理数据的SQL
SELECT deviceName() deviceName, photo FROM /a1O4b4XcICc//update
配置完成后我们可以模拟调试一下检查规则是否正确 接着配置数据转发把数据转发到FC函数计算中。分别选择在1.3步骤中创建好的服务和函数。 1.2 对象存储
由于设备端拍摄的照片需要在钉钉中展示因此把照片存储在OSS上是一个解决方案。
1.2.1 新建bucket
新建一个bucket用于存储设备上送的照片。读写权限选择公共读 然后在bucket中创建photo目录。
1.3 函数计算
经过物联网平台规则引擎转发过来的JSON数据我们通过建立函数把它转发到钉钉机器人接口上实现钉钉群中的消息通知
1.3.1 新建服务
新创建服务如果需要记录和回溯函数执行的日志则需要开通日志服务配置日志仓库。
1.3.2 新建函数
使用空白模版新建函数不需要触发器运行环境选择python2.7
1.3.3 函数代码
# -*- coding: utf-8 -*-import logging
import json
import requests# 钉钉消息发送实现
def post(data):webhook_urlhttps://oapi.dingtalk.com/robot/send?access_token${Token} #钉钉群机器人的webhook的URLheaders {Content-Type: application/json; charsetutf-8}post_data json.dumps(data)try:response requests.post(webhook_url, headersheaders, datapost_data)logging.info(Send success)except requests.exceptions.HTTPError as exc:logging.error(Send Error,HTTP error: %d, reason: %s % (exc.response.status_code, exc.response.reason))raiseexcept requests.exceptions.ConnectionError:logging.error(Send Error,HTTP connection error!)raiseelse:result response.json()logging.info(Send Error:%s % result)if result[errcode]:error_data {msgtype: text, text: {content: Send Error, reason:%s % result[errmsg]}, at: {isAtAll: True}}logging.error(Send Error:%s % error_data)requests.post(webhook_url, headersheaders, datajson.dumps(error_data))return result# 发送钉钉markdown消息
def post_markdown(title,text):data {msgtype: markdown,markdown: {title: title,text: text},at: {atMobiles: [],isAtAll: False}}post(data)# 函数计算入口
def handler(event, context):logger logging.getLogger()evt json.loads(event)#OSS endpoint urlpost_markdown(告警, % evt.get(photo,))logger.info(photo name is %s, evt.get(photo,))return OK
2 设备端开发
HC-SR501模块感应到有人移动时会输出高电平则触发摄像头拍照并将照片文件存储到OSS同时发送消息到IOT平台的/ProductName/${deviceName}/update消息队列中
2.1 硬件安装
连接好摄像头将HC-SR501 人体红外感应器的vcc引脚接5v也就是pin4I/O引脚接pin18GND引脚接地pin6
2.2 环境准备
我们在树莓派上使用python2.7作为开发语言。
1. pip install aliyun-python-sdk-iot-client
2. pip install oss2
3. mkdir py-demo (项目程序文件夹)
4. cd py-demo
5. mkdir photo (本地照片临时目录)
6. vim monitor.py
2.3 代码开发
monitor.py 内容如下
# -*- coding: utf-8 -*-import json
import uuid
import logging
from time import sleep
from picamera import PiCamera
import RPi.GPIO as GPIO
import oss2
import aliyunsdkiotclient.AliyunIotMqttClient as iot# 参数定义
options {productKey: ${productKey}, # 设备标识三元组deviceName: ${deviceName}, # 设备标识三元组deviceSecret: ${deviceSecret}, # 设备标识三元组port: 1883, # iot mqtt porthost: iot-as-mqtt.cn-shanghai.aliyuncs.com, # iot mqtt endpointendpoint: http://oss-cn-hangzhou.aliyuncs.com, # oss endpointak: ${ak},sk: ${sk},bucket: ${bucket}, # oss bucketir_pin: 24 # 人体红外感应器设置读取针脚标号
}topic / options[productKey] / options[deviceName] /user/test# 拍照存oss并发送通知
def takephoto2oss(client):#拍照photo_filename str(uuid.uuid1()) .jpgprint(take photo : photo_filename)camera.capture(photo/ photo_filename)#存OSSprint(save photo to oss : photo_filename)bucket.put_object_from_file(photo/ photo_filename, photo/ photo_filename)#消息上送payload_json {photo: photo_filename}print(send data to iot server: str(payload_json))client.publish(topic, payload str(payload_json))def on_connect(client, userdata, flags_dict, rc):print(Connected with result code str(rc))def on_disconnect(client, userdata, flags_dict, rc):print(Disconnected.)if __name__ __main__:# GPIO 初始化GPIO.setmode(GPIO.BCM)GPIO.setwarnings(False)GPIO.setup(options[ir_pin], GPIO.IN)# 摄像头 初始化camera PiCamera()camera.resolution (640, 480)camera.vflip Truecamera.hflip True# OSS 初始化auth oss2.Auth(options[ak], options[sk])bucket oss2.Bucket(auth, options[endpoint], options[bucket])# IOT Mqtt 初始化client iot.getAliyunIotMqttClient(options[productKey], options[deviceName], options[deviceSecret], secure_mode 3)client.on_connect on_connectclient.connect(hostoptions[productKey] . options[host], portoptions[port], keepalive 60)while True:# 当高电平信号输入时报警if GPIO.input(options[ir_pin]) True:print Someone is coming!takephoto2oss(client)else:continuesleep(3)
3 测试运行
3.1 设备端运行
在py-demo文件夹下运行
python monitor.py
3.2 云端查看上送消息
进入设备界面观察设备状态 在设备的Topic列表中也可以看到发布的消息个数高级版的产品还提供了消息日志而本例中的产品是基础版并无此功能。
3.3 钉钉群机器人结果
当有人出入门口的时候钉钉群就可以收到机器人的消息推送
3.4 后续完善
如果大家有兴趣还可以进一步结合阿里云的人脸识别服务再配合继电器实现人员考勤和出入门禁的功能
总结
通过阿里云物联网平台结合阿里云提供的其他产品和服务使用者可以快速地构建一套基于云边端一体的IOT产品开发者只需关注业务层面的开发而不用再花太多的精力在底层和通讯上大大减少了开发周期实现了产品的快速研发和迭代节约了开发成本。 原文链接 本文为云栖社区原创内容未经允许不得转载。