边缘网关树莓派最佳实践| 学习笔记

简介: 快速学习边缘网关树莓派最佳实践

开发者学堂课程【云上能力本地化之边缘计算边缘网关树莓派最佳实践】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/559/detail/7674


边缘网关树莓派最佳实践


内容介绍:

一、 网关

二、 子设备

三、 边缘实例部署

四、 代码

五、 配置

 

树莓派边缘实例包含三部分,其实任何一个边缘实例它最基础的也应该是包括这三部分。


一,网关

网关承担的作用就是设备记录,函数计算、规则计算,还有抑制服务一些核心功能。

然后驱动承担着接入设备的作用。他把设备上报的一些数据,比如说是属性和事件,把他上报的这些属性和事件转换成符合物模型要求的一个格式,然后再上报给云端,还有就是把云端下发给子设备的数据转化成一定的协议格式要求,然后发给设备

再一个就是消息路由,消息路由就是消息转发把消息在各个模块之间进行路由转发,让各个模块对这些数据进行处理,可以由设备到设备,也可以由设备到函数计算。我们这边的话由设备到 IoT hub 就是让这些数据能够在云端看到

我们这边网关用的树莓派,再次 gpio4 和 gpio17,还有 gpio6


二,子设备

这边设备我们有三个设备,就是LED灯,还有是声音传感器,还有是温湿度传感器。

1LED灯

我们使用的是ky-016这个型号,我们这边写了一个驱动包,pi_led.zip这边他用到的引脚,一个是接地的引脚,然后是gpio6给他控制这个灯的量和面我们这个模块它还有RGB三种颜色的灯,我们只需要控制它绿色灯就好。

2声音传感器

同样的我们有驱动CPU包,pi_sound.zip,这边也是它有三个引脚。gplo17作为树莓派声音的一个输入。下面这个是温湿度传感器,它也是三个引脚,一个接5伏直流电源,一个是接地在一个是gplo4来作为把温度和湿度的一些数据,输入给gplo4,我们需要配置消息路由,设备到iot-hub

3,子设备概览

这边是一个子设备的概览,包括这里说明了它是设备有哪些属性,你这引脚怎么接?

LED 模块这边信号是 ky-016,引脚我们这些 gpio6,然后它这边有一个属性是status,属性,数据类型是 enum,零表示 close,一表示 open。还有声音传感器的 sound-01。然后声音传感器只有 sound 事件。它有一个参数是 alarm。

那 alarm 的数据类型是 enum,0是 sound01是 sound1,我们这边到时候代码里面,如果说传感器检测到有声音。他就是间隔的上报这么一个事件,就是这一次上报0下一次上报1。

然后下面这个是温湿度传感器,DT11,然后Pi(GPIO4)这边温湿度传感器有两个属性,一个是湿度的标识符 humidity。然后是它的类型是 float,另一个标识符是温度 temperature,数据类型也是 float,他们的不仅都是0.01,还有数据类型的话是 float。


三,边缘实例部署

在这个云端怎么去去创建这么一个边缘实例,然后把边缘实例部署,首先我们创建先把这几个驱动给创建好,新的驱动,语言类型是 Python,驱动名称创建pi_led_driver,把这个上传,我这边已经创建了已经有重复的驱动了。

创建一遍新增驱动,然后自己要说明一下,这个驱动设备包它的一个要求是打包的时候,不能说再给他套一个目录,而是直接几个文件直接给打包,不然的话再套一个目录的话,这个驱动会运行不起来,然后在创建 sound 的驱动。

接下来是温湿度传感器,一样具体的思路。

创建的时候好之后再来创建产品,先建一个网关就好,Igetaway然后再创建一个 LED 灯的产品,进入网关,创建声音传感器

最后是温湿度传感器产品名称等,我们把这个动态注册也打开,不然的话会注册不上,上不了线,产品创建好了之后,我们创建设备然后再创建一个 LED 灯的设备,接着创建一个网关设备,设备创建好之后,我们创建边缘实例,那么形成一个边缘实例。网关这里需要一个网关。

点进去,在这里添加子设备,声音的是 LED 灯,然后我们还要配置一下设备的驱动。

LED 驱动自定义不用填声音传感器的驱动,温湿度传感器的驱动分配好子设备之后再最后一个是设置消息路由设备,全部产品,消息主题过滤选全部。

消息目标选 IoT hub,服务级别选一,这样的话保证消息能够到达云端,创建好实例之后,我们就下一步先启动这个边缘网关,在其中边缘网关之前的话有一些准备的动作 官网有一帮助文档,指导文档的话在官网这个地方,产品里面联网边缘计算,物联网边缘计算点进去,然后是产品文档,虽然有个最佳实践,树莓派最佳实践,配置网关设备,他这写了一些树莓派,其中我们编制网关的一些准备操作,我这边的话都已经配好了,所以我们直接跳到下面一步用这个脚本去启动我们的边缘网关。

这个是我们镜像的版本号是v1.6,我后面跟着是网关的三元组,网关的三元组怎么找?

就是设备详情里。我们的边缘网关都可以起来了。然后我们先进入 docker但是我们可以看到我们边缘实例这边,这个网关已经在线了,在线之后我们这个设备他还没有在线,因为我们没有部署,所以的话我们这边还要先网关上线之后我们再点部署,让这些设备把云端的配置下发到边缘端,然后设备上线,能够这消息能够上云,可以看部署详情,部署的过程大概要30秒刷新一下,看设备都已经在线了。

 

四,代码

驱动的代码它是怎么实现的

rpi_led_device_init()

app_callback=Demo_device()

RPiLed=rpi_led_login(app_callback)

rpi_led_main_loop(RPiLed)

def  handler(eventcontext):

return'led'

先看 LED灯,这边先给他初始化 LED灯设备,

怎么做先获取一下我们用户配置的一个最佳客户。

如果这个用户没有配置的话,我们就使用默认的初始化,如果说有设置的话,只有用户配置的 gpio初始化,它使用的是第六个引脚,然后再我们要创建一个设备的对象设备的对象是怎么实现的?

设备的类是继承了lethingaccesssdk我们可以在我们就网看到这个模块里面它包含了两个类,一个是适应callback的一个类,还有一个是thingaccessclient。

三个函数,一个是服务调用,一个是获取属性,还有一个是设置属性。我们这边用到的是you just add online.还有一个是report properties再一个是reportEvent回过来看我们 LED,它类设备的一个实验,然后他是继承,然后我们要把这几个call这几个回调给它实现。

因为这个LED灯的话它没有服务,所以我们不需要给他定义,然后他没有需要给他获取属性和设置属性这两个接口给他实现。

获取属性它的 input_ value它是一个列表,我们可以看到Call back 的定义,它的一个列表,那我们返回的是一个code和一个援助或者是节省对象。在这里status属性在它的一个输入里面,我们返回我们一个code0,表示成功了。

status后面是它的值援助范围。 set properties 它的输入是一个原组,然后属性在 input的范围里面,我们获取到它的一个值,并且把它写入设备设备对象创建好之后,我们还要创建我们一个设备接入客户端,并且把这个设备注册和上线。

他这个设备是怎么注册,并且上注册上线了,先指出他我们从有没有环境变量里面取出驱动的一个配置。对驱动的配置,我们回到网关。

 

五,配置

这个配置是云端下发的,所以我们看到可以从这个当中可以看到这个是led就是配置文件,我们用工具给大家解析一下,看得清楚一点。

这就是我们要获取到的是取出来之后我们再找 deviceList在配置里面,并且这个长度是大于0的,deviceList 列表它的长度大于0的,

我们指出这个设备能取出第一个设备就好。因为我们驱动我们自己连接一个设备,所以他就连接一个设备。

然后我们取出来其实就是是一个元素。包含 product 和 defense name 的一个元素。

然后用设备入 SDK 里面的 ThingAccessclient,然后去创建这么一个对象,创建好之后再让它这个识别接入客户端的函数注册并且上线,再然后是一个循环,这个循环的作用就是我们检测它属性变更状态,如果变更了,属性变更了,我们就上报一次属性

这是 bak status,不等于当前的 switch_led。Switch LED我就给他创造一个字典创建好之后,创建好然后上报属性。

上报属性是在设备接入客户端里面是有的,定义的。它的参数是一个字典类型的。然后下面这个是 handler 是固定的,我们每个驱动包里面都要包含什么?都是要包含这么一个函数定义。因为我们当前这个驱动的话是以 fce 的形式来实现的。

然后驱动框架它会调用到 handler这个 handler 它只要返回一个自助,就这个算的话是代表这个 FC 驱动模块的一个名称,只要各个模块名称保持唯一性的话,就是先初始化一下声音设备,这个声音设备给它传入一个上报事件的函数,也是一样获取用户定义的 GPA 库。这里返回的是 now。

如果说你这边要改端口的话,直接这里写端口号就好。就写 Gpio 口的话就好。然后我们使用默认值,用默认初始化,我们使用的时机,平常时期先清理一下,就是防止 gpio 被占用。

然后这个是把上报事件的函数关掉注册进去检测到有事件的时候他会要发回调。

看一下这个回调是怎么实现的。

创建一个支点了,最开始的时候是只要 num 取不等于0,num 的值是一,然后这个取如果说等于0的话 alarm 等于0。

然后视为客户它的一个函数这个函数去上报。再下来,这个是创建一个回调设备,设备回调,就是设备对象。这个跟前面 LED 灯是一样的,只不过是他这边的话没有属性也没有服务,所以的话都不需要去从定义,然后是要创建一个设备接入客户端的一个对象,并且把这个设备上线注册,LED 那边是一样的,只不过是它里面参数名称可能要要改一下。

然后就是一个循环。这是我们这里睡眠一秒钟,然后下面就这个 handler 要定义了叫做 sound_sensor

最后面是温湿度传感器也是先初始化一下,先获取用户定义 ppl。那么我们使用默认值默认用的是4,然后再是创建设备对象,温湿度传感器它有属性,没有服务,所以服务不需要

然后它这边有一个属性,它的属性它是只读的,我们只需要实现这个 get,不需要去从定义这个 setgetproperties 的话是这样在如果说这个 humanity 在说 input value 里面会有,并且 temperature 也在这里面,我们就是先获取一下它的温度和湿度值,然后返回一个的 code0。

这是一个支点,给他返回这个支点,然后下面创建设备接入客户端,注册上线也是一样,跟前面都是一样的,然后再下面也是一个循环,我们循环实现5秒钟间隔上报,因此温湿度值获取它的属性,获取它的温湿度值,然后构造数据,把它构造成一个字典类型,然后上报

在下面也是一个 hundler.,这里是 temp_hum_sensor。

这个设备它现在一个运行状态,可以点查看运行状态这里,那么这个功能定义忘提交了,他的状态是 status,属性名称叫 status。然后参数值0。读写属性。然后再是这个声音传感器功能定义。

他这边是事件sound是温湿度传感器,默认定义,这应该是自定义的功能,一个是温度。Temperature,取值是-150到150,补上0.01。单位是摄氏度。再加一个湿度。取值范围为0~100,步长是0.01,单位是百分比,只读。

看一下它实例,里面这设备的一个运行状态。可能要重启一下网关才看到这个声音,看看有没有。事件这边已经有很多事件了,它是0和1交替上报的。

然后再看一下温湿度传感器,这边已经有数据上报上来,我们在看在回到LED灯上可以这么操作,先给他设置,我们在云端可以给他设置在线调试这里。

方法是设置,设置为1,直接整数这样的话他应该会有一个状态的返回了这边它变成一了,可以把实时刷新打开。当然这里不会变的,我们程序里面写的没有主动去变更这个状态。

相关文章
|
2月前
|
人工智能 Cloud Native 安全
从云原生到 AI 原生,网关的发展趋势和最佳实践
本文整理自阿里云智能集团资深技术专家,云原生产品线中间件负责人谢吉宝(唐三)在云栖大会的精彩分享。讲师深入浅出的分享了软件架构演进过程中,网关所扮演的各类角色,AI 应用的流量新特征对软件架构和网关所提出的新诉求,以及基于阿里自身实践所带来的开源贡献和商业能力。
261 11
|
3月前
|
Cloud Native 关系型数据库 Serverless
基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践
本文带大家了解一下如何使用阿里云Serverless计算产品函数计算构建生产级别的LLM Chat应用。该最佳实践会指导大家基于开源WebChat组件LobeChat和阿里云函数计算(FC)构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。
693 28
|
7月前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
307 0
|
7月前
|
负载均衡 Cloud Native 安全
云原生最佳实践系列 6:MSE 云原生网关使用 JWT 进行认证鉴权
本文档介绍了如何在 MSE(Microservices Engine)云原生网关中集成JWT进行全局认证鉴权。
1039 23
|
7月前
|
弹性计算 监控 安全
通过NAT网关和云防火墙防护私网出站流量安全的最佳实践
针对云上企业出站流量安全攻击,企业可以通过采用“NAT网关+NAT边界防火墙”方案实现出向流量有效监控保护,有效降低恶意软件攻陷风险、内部人员风险、数据泄露风险、供应链风险、出站流量合规风险等
148 3
|
10月前
|
运维 Kubernetes 应用服务中间件
Higress × OpenKruiseGame 游戏网关最佳实践
本文将演示 Higress 如何无缝对接 OKG 游戏服,并为其带来的优秀特性。
134538 12
|
7月前
|
Java 网络架构 微服务
SpringCloud GateWay网关-学习笔记
SpringCloud GateWay网关-学习笔记
102 0
|
Kubernetes 安全 Serverless
为什么 Higress 是 Knative 入口网关的最佳实践
Knative Serving 是一款基于 K8s 的 Serverless 开源平台,用于构建和管理现代化、可拓展、流量驱动、无服务器的应用程序。本文重点关注 Knative 网络层能力的实现。
465 24
为什么 Higress 是 Knative 入口网关的最佳实践
|
运维 Kubernetes Cloud Native
|
运维 Kubernetes Cloud Native
洛神云网络集中式网关ACMG最佳实践
洛神云网络集中式网关ACMG最佳实践
399 1
洛神云网络集中式网关ACMG最佳实践