鸿蒙设备开发之从 0 到 1 联网上云 - 概述篇

简介: 本文主要讲解以下四个部分:物联网开发概述、鸿蒙设备开发、鸿蒙设备如何联网上云、由浅入深。通过本课程学习相信大家对物联网相关概念和协议都有所了解,知道鸿蒙设备开发的一些知识和如何进行鸿蒙设备数据上云。

前言

本文主要讲解以下四个部分:

  • 物联网开发概述
  • 鸿蒙设备开发
  • 鸿蒙设备如何联网上云

一、物联网开发概述

1.物联网典型层级架构

物联网层级架构主要分为以下五个部分:

  • 端:信息收集和信号处理
  • 边:本地数据自治、低时延
  • 管:接入和传输网络
  • 云:多协议多网络设备连接,数据分析和处理
  • 行业应用:数据呈现及客户交互

网络异常,图片无法展示
|

2.物联网常见的通信协议

2.1 CoAP协议和MQTT协议

  • CoAP是受限制的应用协议(Constrained Application Protocol)的代名词,它运行于UDP协议之上而不是像HTTP那样运行于TCP之上。CoAP协议非常小巧,最小的数据包仅为4字节。
  • MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)它构建于TCP/IP协议上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型“轻量级”通讯协议,使用发布/订阅消息模式,提供了一对多的消息分发和应用之间的解耦。

网络异常,图片无法展示
|

2.2 ModBus协议

  • ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。
  • ModBus通信协议分为物理层、数据链路层、应用层。

网络异常,图片无法展示
|

2.3 OPC-UA协议

  • OPC-UA (OPC Unified Architecture,OPC统一架构)协议
  • 由于其跨平台(不受限于架构平台)、面向服务的架构、信息通信安全等强大能力,被广泛应用于工业设备间的通信。
  • 连通机制:
  • 仅在PLC间通讯,协议无法跨网段。
  • 交互机制:
  • Client/Server和Publisher/Subscriber模式,前者应用之间必须建立单独点对点连接,后者可免去直接连接实现点对多点传输,读写PLC内地址快无需新增硬件,可实现不同厂商设备间数据调用,现阶段Client/Server模式更为通用。
  • 话务机制:
  • 可配置周期订阅与非周期直接读写,周期订阅中可配置发布周期,保活间隔,订阅监控数,采用速率,生命周期与读写超时配置

3.物联网设备接入方式

3.1 有线通信技术

有线通信是一种通信方式,狭义上现代的有线通信是指有线电信,即利用金属导线、光纤等有形媒质传送信息的方式。光或电信号可以代表声音,文字,图像等。

3.2 短距无线通信技术

短距无线通信技术主要分为:Bluetooth、Wi-Fi、ZigBee、Z-Wave。

网络异常,图片无法展示
|

3.3 蜂窝移动网络

蜂窝移动网络主要分为:2G、3G、4G、5G。

网络异常,图片无法展示
|

3.4 LPWA通信技术

LPWA通信技术主要分为:SigFox、LoRa、NB-IoT、eMTC。

网络异常,图片无法展示
|

二、鸿蒙设备开发

1.环境搭建

1.1 环境配置

1、硬件准备

  • Linux编译服务器:Ubuntu16.04及以上64位系统版本,Shell使用bash
  • Windows工作台:Windows XP/Windows7/Windows10
  • 开发板

2、Windows开发工具要求

3、Liunx构建工具要求

1.2 源码获取准备

1)从镜像站点下载压缩文件

https://repo.huaweicloud.com/harmonyos/os/1.0/code-1.0.tar.gz

网络异常,图片无法展示
|

2)从HPM网站组件式获取

HPM网站:https://hpm.harmonyos.com/#/cn/home软环境要求:Linux服务器安装12.13.0+的Nodejs

网络异常,图片无法展示
|

3)用包管理器命令行获取

hpm init -t default
hpm install @bearpi/bearpi_hm_nano

4)从代码仓库获取

需要先注册gitee账号,并配置邮箱源码链接:https://gitee.com/bearpi/bearpi-hm_nano

网络异常,图片无法展示
|

目录介绍如下:

网络异常,图片无法展示
|

2.内核开发

内核开发主要分为六部分:任务管理、软件定时器、信号量、事件管理、互斥锁、消息队列。

2.1 内核管理

  • 从系统的角度看,任务是竞争系统资源的最小运行单元。
  • 抢占式调度机制+时间片轮转调度方式,有32个优先级(0-31)。
  • 任务状态:就绪态、运行态、阻塞态、退出态,及状态迁移。
  • 任务管理:创建任务、删除某个任 务、任务挂起、任务恢复。

2.2 软件定时器

  • 基于系统Tick时钟中断且由软件来模拟的定时器。
  • 定时精度与系统Tick时钟的周期有关。
  • 使用系统一个队列&任务资源,触发遵循队列规则, 先进先出。
  • 软件定时器管理:创建/启动/停止/删除定时器。

2.3 信号量

  • 在多任务系统中,各任务之间需要同步或互斥实现临界资源的保护可以通过信号量来实现。
  • 用作互斥时,信号量创建后记数是满的。
  • 用作同步时,信号量在创建后被置为空。
  • 信号量运作:初始化/创建/申请/释放/删除。

2.4 事件管理

  • 事件是一种实现任务间通信的机制可用于实现任务间的同步,但事件通信只能是事件类型的通信,无数据传输。
  • 多任务环境下,任务之间往往需要同步操作。事件可以提供一对多、多对多的同步操作。
  • 读事件/写事件/清除事件,写事件会触发任务调度。
  • 功能函数:创建事件标记对象、设置事件标记、等待事件标记触发、删除事件标记对象。

2.5 互斥锁

  • 互斥锁又称互斥型信号量,是一种特殊的二值性信号量,用于实现对共享资源的独占式处理。
  • 任意时刻互斥锁的状态只有两种开锁或闭锁。
  • 当有任务持有时,互斥锁处于闭锁状态,这个任务获得该互斥锁的所有权。
  • 当该任务释放时,该互斥锁被开锁任务失去该互斥锁的所有权。
  • 确保同一时刻只有一个任务正在访问非共享公共资源,保证了公共资源操作的完整性。
  • 功能函数:创建/获取/释放/删除互斥锁。

2.6 消息队列

  • 消息队列,是一种常用于任务间通信的数据结构,实现了接收来自任务或中断的不固定长度的消息。
  • 用户在处理业务时,消息队列提供了异步处理机制,起到缓冲消息作用。
  • 先进先出,支持异步读写;读/写队列都支持超时机制。
  • 功能函数:创建消息队列、发送消息、获取消息、删除消息队列。

3.驱动子系统

  • 操作GPIO
  • LED对应的GPIO引脚是GPIO2,通过控制GPIO2输出的的电平信号来实现LED灯的闪烁。高电平时点亮LED灯,低电平时熄灭LED灯。
  • GPIO中断
  • F1和F2按键对应的GPIO引脚是分别是GPIO11和GPIO12,通过检测GPIO的电平信号来判断按键的状态。实现按键控制LED灯亮灭。
  • PWM输出
  • 通过代码实现输出不同占空比的PWM来改变LED的亮度。

网络异常,图片无法展示
|

  • ADC采样
  • 根据输入参数从指定的ADC通道读取一段采样数据,编码实现读取ADC通道5的电压值。
  • 12C总线
  • NFC芯片的I2C对应的GPIO引脚是分别是GPIO0和GPIO1,所以需要编写软件使用GPIO0和GPIO1产生I2C信号去控制NFC芯片。
  • UART
  • UART1对应的GPIO引脚是分别是GPIO5和GPIO6,将使用GPIO5和GPIO6进行UART数据的收发。

网络异常,图片无法展示
|

4.无线联网

  • WIFI AP热点注册WIFI事件的回调函数设置指定的热点配置启动WIFI热点模式检查热点模式是否使能等待STA连接

wifi_hotspot.h接口简介:

  • WIFI STA联网注册WIFI事件的回调函数使能WIFI判断WIFI是否激活分配空间保存WIFl信息轮询查找WIFl列表

wifi_device.h接口简介:

5.网络通信

  • UDP客户端
  • 编码实现UDP客户端创建流程,使用Sockettool创建UDP服务端用于测试。
  • TCP服务端
  • 编码实现TCP服务端,使用Sockettool创建TCP客户端用于测试。
  • TCP客户端
  • 编码实现TCP客户端。
  • UDP服务端
  • 编码实现UDP服务端
  • MQTT客户端
  • 基于Paho MQTT,编码实现MQTT客户端。

网络异常,图片无法展示
|

三、鸿蒙设备如何联网上云

1.华为云IoT,构建开放的物联网平台,加速企业数字化转型

网络异常,图片无法展示
|

2.华为云IoT平台介绍

华为云物联网平台,即华为设备接入服务(loT Device Access) 提供海量设备连接上云、设备和云端双向消息通信、批量设备管理、远程控制和监控、OTA升级、设备联动规则等能力,并可将设备数据灵活流转到华为云其他服务,帮助物联网行业用户快速完成设备联网及行业应用集成。

网络异常,图片无法展示
|

3.鸿蒙开发板连接华为云IoT平台

案例演示如何在BearPi-HM Nano开发板上使用MQTT协议连接华为loT平台,需要将E53IA1智慧农业扩展板与BearPi-HM Nano开发板安装在一起。

网络异常,图片无法展示
|

4.通信扩展板案例集

网络异常,图片无法展示
|

总结

本文主要讲解以下四个部分:物联网开发概述、鸿蒙设备开发、鸿蒙设备如何联网上云、由浅入深。

通过本课程学习相信大家对物联网相关概念和协议都有所了解,知道鸿蒙设备开发的一些知识和如何进行鸿蒙设备数据上云。

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
23天前
|
存储 人工智能 JavaScript
Harmony OS开发-ArkTS语言速成二
本文介绍了ArkTS基础语法,包括三种基本数据类型(string、number、boolean)和变量的使用。重点讲解了let、const和var的区别,涵盖作用域、变量提升、重新赋值及初始化等方面。期待与你共同进步!
88 47
Harmony OS开发-ArkTS语言速成二
|
25天前
|
API 索引
鸿蒙开发:实现一个超简单的网格拖拽
实现拖拽,最重要的三个方法就是,打开编辑状态editMode,实现onItemDragStart和onItemDrop,设置拖拽移动动画和交换数据,如果想到开启补位动画,还需要实现supportAnimation方法。
76 13
鸿蒙开发:实现一个超简单的网格拖拽
|
24天前
|
索引 API
鸿蒙开发:自定义一个股票代码选择键盘
金融类的软件,特别是股票基金类的应用,在查找股票的时候,都会有一个区别于正常键盘的键盘,也就是股票代码键盘,和普通键盘的区别就是,除了常见的数字之外,也有一些常见的股票代码前缀按钮,方便在查找股票的时候,更加方便的进行检索。
鸿蒙开发:自定义一个股票代码选择键盘
|
24天前
|
API
鸿蒙开发:自定义一个英文键盘
实现方式呢,有很多种,目前采用了比较简单的一种,如果大家采用网格Grid组件实现方式,也是可以的,但是需要考虑每行的边距以及数据,还有最后两行的格子占位问题。
鸿蒙开发:自定义一个英文键盘
|
25天前
|
存储 JSON 数据库
鸿蒙元服务项目实战:备忘录内容编辑开发
富文本内容编辑我们直接使用RichEditor组件即可,最重要的就是参数,value: RichEditorOptions,通过它,我们可以用来设置样式,和获取最后的富文本内容,这一点是很重要的。
鸿蒙元服务项目实战:备忘录内容编辑开发
|
25天前
|
开发框架 JavaScript 前端开发
Harmony OS开发-ArkT语言速成一
本文介绍ArkTS语言,它是鸿蒙生态的应用开发语言,基于TypeScript,具有静态类型检查、声明式UI、组件化架构、响应式编程等特性,支持跨平台开发和高效性能优化。ArkTS通过强化静态检查和分析,提升代码健壮性和运行性能,适用于Web、移动端和桌面端应用开发。关注我,带你轻松掌握HarmonyOS开发。
55 5
Harmony OS开发-ArkT语言速成一
|
24天前
|
前端开发 API 数据库
鸿蒙开发:异步并发操作
在结合async/await进行使用的时候,有一点需要注意,await关键字必须结合async,这两个是搭配使用的,缺一不可,同步风格在使用的时候,如何获取到错误呢,毕竟没有catch方法,其实,我们可以自己创建try/catch来捕获异常。
鸿蒙开发:异步并发操作
|
25天前
|
API
鸿蒙开发:简单了解属性动画
无论是是使用animateTo还是animation,其实最终要改变的都是组件的可执行属性,最终的效果是一致的,animateTo是闭包内改变属性引起的界面变化,一般作用于出现消失转场,而animation则是组件通过属性接口绑定的属性变化引起的界面变化,一般使用场景为,animateTo适用对多个可动画属性配置相同动画参数的动画,需要嵌套使用动画的场景;animation适用于对多个可动画属性配置不同参数动画的场景。
|
24天前
|
API
鸿蒙开发:实现popup弹窗
目前提供了两种方式实现popup弹窗,主推系统实现的方式,几乎能满足我们常见的所有场景,当然了,文章毕竟有限,尽量还是以官网为主。
鸿蒙开发:实现popup弹窗
|
25天前
|
API
鸿蒙开发:了解显式动画animateTo
在实际的开发中,应该遵循规范,正确的使用属性动画animateTo,切莫在轮询中使用,否则就会造成本不属当前的动画进行执行,造成UI错误,还有一点需要注意,那就是直接使用animateTo可能导致实例不明确的问题,建议使用getUIContext获取UIContext实例,并使用animateTo调用绑定实例的animateTo。