#物联网征文#【FFH】基于 OpenHarmony 的水流量监测系统(一) 原创 精华
一、前言
学习了一段时间的OpenHarmony开发体系后,和小伙伴们一同完成了一个简单的小项目,基于 OpenHarmony 的实时水流量监测管理系统。
二、准备
1、BearPi-HM Micro开发板
2、配置好开发环境
开发环境搭建
3、熟悉官方提供如何编写一个点亮LED灯程序的步骤
编写一个点亮LED灯程序
三、实战
1、系统组成及功能说明
1.1整体介绍
物联网的典型架构:
端:传感器模块上,使用的水表传感器不同于常见的速度/容积式水表, 选用的是霍尔传感器作为水流量的测量依据。
管:小熊派板载 wifi 模组使用 UDP 协议发数据上云端。
云:云端使用华为云服务器接收小熊派 UDP 协议上发的数据,同时建立TCP服务器(即利用 socket 库开发的一个 http 服务器)开放 http get 接口给小程序。
用:微信小程序端。用户通过小程序轻松了解到自家用水情况。
1.2 各模块介绍
1.2.1端
在BearPi-HM Micro开发板上外接一个水流量传感器获取水流信息。
霍尔水流量传感器由塑料阀体、水流转子组件和霍尔传感器组成。它装在进水 端,用于检测进水流量,当水通过水流转子组件时,磁性转子转动并且转速随 着流量变化而变化,霍尔传感器输出相应脉冲信号,反馈给控制器,由控制器 判断水流量的大小,进行调控。
所以只要知道连接传感器引脚上的电平值变化,我们就能知道水流量了。
查找OpenHarmony设备开发文档,了解如何使用GPIO开发
OpenHarmony设备开发文档-平台驱动使用GPIO
● 设置 GPIO 管脚方向 在进行 GPIO 管脚读写前,需要先通过如下函数设置 GPIO 管脚方向: int32_t GpioSetDir(uint16_t gpio, uint16_t dir);
● 通过 GpioRead()函数读取一个 GPIO 管脚电平: int32_t GpioRead(uint16_t gpio, uint16_t *val);
在点亮LED灯demo的基础上,我们是不是就可以直接在LED业务代码下略加修改就可以读取到管脚上的电平值呢?添加包含GPIO的头文件,就可以直接使用头文件中的函数,这样就可以跳过驱动程序的编写了
想法异想天开,编译会报错。 细读官网文档的小字提示:
那么就转战到驱动代码处device\st\drivers\led\led.c编写
在此之前要了解OpenHarmony的驱动程序框架HDF(Hardware Driver Foundation),内核态驱动和用户态应用如何互相传递消息。
官方文档:驱动消息机制管理
详情解读,可参考这位开发者的文章:【FFH】HDF驱动开发之编写驱动代码
简单概括就是主要靠Dispatch函数
1)用户态获取服务接口并发送消息到驱动
2)驱动接收用户态消息
3)驱动给用户态发消息
用户程序是无法直接访问驱动的,当只有驱动程序向用户态暴露server后,用户程序才能通过Dispatch的方式发送指令到驱动程序,并可以将用户态的数据携带到驱动程序,也可以从驱动程序读出数据,如下图所示为用户态程序与驱动自己数据交互的过程。
就此用户态界面可以获得GPIO的电平变化次数:
根据实际测量得500ml水会引起GPIO电平变化的次数为320次,所以累计水流量可以用公式
Flow=(T/320)✖500 (ml)表示。
四、后记
剩下的部分正在整理,敬请期待……
【本文正在参加物联网有奖征文活动】,活动链接:https://ost.51cto.com/posts/14758;
像水坝排水也可以用这种方式计算吗?
楼主的第二篇链接:https://ost.51cto.com/posts/15850
打通南北的大佬