深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
说明文档:https://gitee.com/hihope_iot/docs/blob/master/HiHope_DAYU200/docs/%E7%83%A7%E5%BD%95%E6%8C%87%E5%AF%BC%E6%96%87%E6%A1%A3.md#https://gitee.com/link?target=http%3A%2F%2Fci.openharmony.cn%2Fdailys%2Fdailybuilds
【1】烧写工具下载
https://gitee.com/hihope_iot/docs/tree/master/HiHope_DAYU200/%E7%83%A7%E5%86%99%E5%B7%A5%E5%85%B7%E5%8F%8A%E6%8C%87%E5%8D%97
下来下来之后打开HiHope_DAYU200
文件夹。
我这里在windows下进行烧写。
在DriverAssitant_v5.1.1.zip
目录下是USB驱动,解压后进行安装。如果已经安装旧版本的烧写工具, 需要先点击“驱动卸载” 按钮下载驱动, 然后再点击“驱动安装” 按钮安装驱动。
RKDevTool.exe
就是烧写工具。
【2】HiHope官方固件下载
地址:https://gitee.com/hihope_iot/images/tree/master/HiHope_DAYU200
下载下来解压,打开烧写工具选择路径。
确认开发板是否进入烧写模式
(1)如果界面显示"发现一个 LOADER 设备", 说明开发板进入 Loader 模式等待烧写固件。
(2)如果界面显示"发现一个 MASKROM 设备", 说明开发板进入 Maskrom 模式等待烧写固 件。
(3)如果界面显示"没有发现设备", 说明开发板没有进入烧写模式, 需要先让开发板进入烧写模式
进入烧写模式的步骤
(1)先按住 VOL-/RECOVERY 按键 和 RESET 按钮不松开, 烧录工具此时显示“没有发现设备”
(2)然后再 松开 RESER 键, 烧录工具显示“发现一个 LOADER 设备” , 说明此时已经进入烧写模式。
3.3 huaweicloud-iot-device-sdk-c 介绍
说明文档:https://gitee.com/openharmony-sig/iot_device_sdk_c/blob/master/README_CN.md#5
Huawei Cloud IOT Device SDK for C 是华为云推出的一套面向嵌入式设备的物联网开发套件,支持 C 语言开发。该套件提供了一系列 API,可以方便地实现设备与云端的连接、数据上报、远程控制等功能。
该套件主要包括以下组件:
- Huawei LiteOS:一个轻量级的操作系统,提供了内核级别的任务调度、内存管理、网络协议栈等功能。
- Huawei Cloud IOT Agent:一个设备端的物联网代理程序,负责与云端的物联网平台进行连接,实现设备注册、数据上报、远程控制等功能。
- Huawei Cloud IOT SDK for C:一个 C 语言的开发包,提供了一系列 API,可以方便地实现设备与云端的连接、数据上报、远程控制等功能。
使用 Huawei Cloud IOT Device SDK for C 可以大大简化物联网设备的开发流程,提高开发效率,同时也可以保证设备与云端之间的连接稳定性和安全性。该套件适用于各种类型的嵌入式设备,例如智能家居、智能家电、智能穿戴等。
Huawei Cloud IOT SDK for C SDK面向运算、存储能力较强的嵌入式终端设备,开发者通过调用SDK接口,便可实现设备与物联网平台的上下行通讯。SDK当前支持的功能有:
- 支持物模型:设备消息/属性/事件上报,设备命令/消息/属性/事件接收
- 支持子设备消息转发、子设备管理
- 支持OTA升级
- 支持密码认证和证书认证两种设备接入方式
- 支持自定义topic
- 支持设备影子查询
- 支持自定义日志收集能力
- 支持端侧规则引擎
- 支持SSH远程登录
- 支持对接边缘M2M
四、上云实验
4.1 物联网平台介绍
华为云物联网平台(IoT 设备接入云服务)提供海量设备的接入和管理能力,将物理设备联接到云,支撑设备数据采集上云和云端下发命令给设备进行远程控制,配合华为云其他产品,帮助我们快速构筑物联网解决方案。
使用物联网平台构建一个完整的物联网解决方案主要包括3部分:物联网平台、业务应用和设备。
物联网平台作为连接业务应用和设备的中间层,屏蔽了各种复杂的设备接口,实现设备的快速接入;同时提供强大的开放能力,支撑行业用户构建各种物联网解决方案。
设备可以通过固网、2G/3G/4G/5G、NB-IoT、Wifi等多种网络接入物联网平台,并使用LWM2M/CoAP、MQTT、HTTPS协议将业务数据上报到平台,平台也可以将控制命令下发给设备。
业务应用通过调用物联网平台提供的API,实现设备数据采集、命令下发、设备管理等业务场景。
4.2 开通物联网服务
地址:https://www.huaweicloud.com/product/iothub.html
点击总览
,查看接入信息。 我们当前设备准备采用MQTT协议接入华为云平台,这里可以看到MQTT协议的地址和端口号等信息。
总结:
端口号: MQTT (1883)| MQTTS (8883)
接入地址: a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com
根据域名地址得到IP地址信息:
Microsoft Windows [版本 10.0.19045.2965]
© Microsoft Corporation。保留所有权利。
MQTT协议接入端口号有两个,1883是非加密端口,8883是证书加密端口,单片机无法加载证书,所以使用1883端口比较合适。 接下来的ESP8266就采用1883端口连接华为云物联网平台。
4.3 创建产品
(1)创建产品
点击产品页,再点击左上角创建产品。
(2)填写产品信息
根据自己产品名字填写。
(3)产品创建成功
(4)添加自定义模型
产品创建完成之后,点击进入产品详情页面,翻到最下面可以看到模型定义。
这个模型就是定义自己设备接下来需要向服务器上传那些数据类型。根据自己的数据类型进行编写。
先点击自定义模型。
再创建一个服务ID。
接着点击新增属性。
4.4 添加设备
产品是属于上层的抽象模型,接下来在产品模型下添加实际的设备。添加的设备最终需要与真实的设备关联在一起,完成数据交互。
(1)注册设备
(2)根据自己的设备填写
(3)保存设备信息
创建完毕之后,点击保存并关闭,得到创建的设备密匙信息。该信息在后续生成MQTT三元组的时候需要使用。
(4)设备创建完成
可以点击设备进入到设备详情页面。
4.5 OpenHarmony环境构建
在文件Harmony源码路径/build/subsystem_config.json中添加构建脚本:
"iot-device-sdk-c" : {
"path": "third\_party/iot-device-sdk-c",
"name": "iot-device-sdk-c"
},
(1)添加子系统编译构建
在文件OpenHarmony源码路径/build/subsystem_config.json中添加如下构建脚本:
"iot-device-sdk-c" : {
"path": "third\_party/iot-device-sdk-c",
"name": "iot-device-sdk-c"
},
在产品配置文件中添加子系统,其子系统名称与文件中添加内容对应,就是iot-device-sdk-c:iot-device-sdk-c
。
配置文件位于`MY_OHOS_
(2)编译依赖的动态库
此sdk主要依赖于libboundscheck.so
,libpaho-mqtt3as.so
,libssh.so
,libnopoll.so
这些动态库,其间接依赖于libz.so
,libssl.so
,libcrypto.so
。
(3)编译第三方动态库
对于libboundscheck.so
,libpaho-mqtt3as.so
,libssh.so
,libnopoll.so
, 这些库对应的源码没有在OpenHarmony中集成,如果开发板中没有这些动态库,需要自行下载并编译。
执行以下命令拉取对应源码:
cd $MY\_OHOS\_DIR/third\_party/iot\_device\_sdk\_c
mkdir third\_party
cd third\_party
git clone https://gitee.com/Janisa/huawei\_secure\_c.git \\
&& git clone -b v1.3.12 --single-branch https://github.com/eclipse/paho.mqtt.c.git \\
&& git clone -b libssh-0.9.6 --single-branch https://git.libssh.org/projects/libssh.git \\
&& git clone -b 0.4.8 --single-branch https://github.com/ASPLes/nopoll.git \\
分别在OpenHarmony源码路径/third_party/iot_device_sdk_c/third_party/huawei_secure_c,OpenHarmony源码路径/third_party/iot_device_sdk_c/third_party/paho.mqtt.c, OpenHarmony源码路径/third_party/iot_device_sdk_c/third_party/libssh, OpenHarmony源码路径/third_party/iot_device_sdk_c/third_party/nopoll文件夹中放入或替换BUILD.gn文件,
内容如下:
\# 放入 $MY\_OHOS\_DIR/third\_party/iot\_device\_sdk\_c/third\_party/huawei\_secure\_c
#
# Copyright (c) \[2020\] Huawei Technologies Co.,Ltd.All rights reserved.
#
# OpenArkCompiler is licensed under the Mulan PSL v1.
# You can use this software according to the terms and conditions of the Mulan PSL v1.
# You may obtain a copy of Mulan PSL v1 at:
#
# http://license.coscl.org.cn/MulanPSL
#
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR
# FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v1 for more details.
#
import("//build/ohos.gni")
src\_libHWSecureC = \[
"src/vsprintf\_s.c",
"src/wmemmove\_s.c",
"src/strncat\_s.c",
"src/vsnprintf\_s.c",
"src/fwscanf\_s.c",
"src/scanf\_s.c",
"src/strcat\_s.c",
"src/sscanf\_s.c",
"src/secureprintoutput\_w.c",
"src/wmemcpy\_s.c",
"src/wcsncat\_s.c",
"src/secureprintoutput\_a.c",
"src/secureinput\_w.c",
"src/memcpy\_s.c",
"src/fscanf\_s.c",
"src/vswscanf\_s.c",
"src/secureinput\_a.c",
"src/sprintf\_s.c",
"src/memmove\_s.c",
"src/swscanf\_s.c",
"src/snprintf\_s.c",
"src/vscanf\_s.c",
"src/vswprintf\_s.c",
"src/wcscpy\_s.c",
"src/vfwscanf\_s.c",
"src/memset\_s.c",
"src/wscanf\_s.c",
"src/vwscanf\_s.c",
"src/strtok\_s.c",
"src/wcsncpy\_s.c",
"src/vfscanf\_s.c",
"src/vsscanf\_s.c",
"src/wcstok\_s.c",
"src/securecutil.c",
"src/gets\_s.c",
"src/swprintf\_s.c",
"src/strcpy\_s.c",
"src/wcscat\_s.c",
"src/strncpy\_s.c",
\]
include\_common = \[
"include",
"src",
\]
ohos\_static\_library("libHWSecureC") {
sources = src\_libHWSecureC
include\_dirs = include\_common
}
ohos\_shared\_library("libboundscheck") {
sources = src\_libHWSecureC
include\_dirs = include\_common
}
# 放入 $MY\_OHOS\_DIR/third\_party/iot\_device\_sdk\_c/third\_party/paho.mqtt.c
#
# Copyright (c) \[2020\] Huawei Technologies Co.,Ltd.All rights reserved.
#
# OpenArkCompiler is licensed under the Mulan PSL v1.
# You can use this software according to the terms and conditions of the Mulan PSL v1.
# You may obtain a copy of Mulan PSL v1 at:
#
# http://license.coscl.org.cn/MulanPSL
#
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR
# FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v1 for more details.
#
import("//build/ohos.gni")
MQTT\_SRC\_DIR = "src"
MQTT\_AS\_SOURCE\_FILES = \[
"${MQTT\_SRC\_DIR}/Base64.c",
"${MQTT\_SRC\_DIR}/Clients.c",
"${MQTT\_SRC\_DIR}/Heap.c",
"${MQTT\_SRC\_DIR}/LinkedList.c",
"${MQTT\_SRC\_DIR}/Log.c",
"${MQTT\_SRC\_DIR}/Messages.c",
"${MQTT\_SRC\_DIR}/MQTTAsync.c",
"${MQTT\_SRC\_DIR}/MQTTAsyncUtils.c",
"${MQTT\_SRC\_DIR}/MQTTPacket.c",
"${MQTT\_SRC\_DIR}/MQTTPacketOut.c",
"${MQTT\_SRC\_DIR}/MQTTPersistence.c",
"${MQTT\_SRC\_DIR}/MQTTPersistenceDefault.c",
"${MQTT\_SRC\_DIR}/MQTTProperties.c",
"${MQTT\_SRC\_DIR}/MQTTProtocolClient.c",
"${MQTT\_SRC\_DIR}/MQTTProtocolOut.c",
"${MQTT\_SRC\_DIR}/MQTTReasonCodes.c",
"${MQTT\_SRC\_DIR}/MQTTTime.c",
"${MQTT\_SRC\_DIR}/OsWrapper.c",
"${MQTT\_SRC\_DIR}/Proxy.c",
"${MQTT\_SRC\_DIR}/SHA1.c",
"${MQTT\_SRC\_DIR}/Socket.c",
"${MQTT\_SRC\_DIR}/SocketBuffer.c",
"${MQTT\_SRC\_DIR}/SSLSocket.c",
"${MQTT\_SRC\_DIR}/StackTrace.c",
"${MQTT\_SRC\_DIR}/Thread.c",
"${MQTT\_SRC\_DIR}/Tree.c",
"${MQTT\_SRC\_DIR}/utf-8.c",
"${MQTT\_SRC\_DIR}/WebSocket.c",
\]
ohos\_shared\_library("libpaho-mqtt3as") {
sources = MQTT\_AS\_SOURCE\_FILES
include\_dirs = \["./src", "./build"\]
deps=\[
"//third\_party/openssl:libcrypto\_static",
"//third\_party/openssl:ssl\_source"
\]
cflags = \["-w", "-fPIC", "-Os", "-fvisibility=hidden", "-DOPENSSL", "-D\_GNU\_SOURCE", "-DPAHO\_MQTT\_EXPORTS=1"\]
libs= \["pthread", "dl"\]
ldflags = \["-Wl,-init,MQTTAsync\_init"\]
}
# 放入 $MY\_OHOS\_DIR/third\_party/iot\_device\_sdk\_c/third\_party/libssh
#
# Copyright (c) \[2020\] Huawei Technologies Co.,Ltd.All rights reserved.
#
# OpenArkCompiler is licensed under the Mulan PSL v1.
# You can use this software according to the terms and conditions of the Mulan PSL v1.
# You may obtain a copy of Mulan PSL v1 at:
#
# http://license.coscl.org.cn/MulanPSL
#
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR
# FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v1 for more details.
#
import("//build/ohos.gni")
src\_libHWSecureC = \[
"src/agent.c",
"src/auth.c",
"src/base64.c",
"src/bignum.c",
"src/buffer.c",
"src/callbacks.c",
"src/channels.c",
"src/client.c",
"src/config.c",
"src/connect.c",
"src/connector.c",
"src/curve25519.c",
"src/dh.c",
"src/ecdh.c",
"src/error.c",
"src/getpass.c",
"src/init.c",
"src/kdf.c",
"src/kex.c",
"src/known\_hosts.c",
"src/knownhosts.c",
"src/legacy.c",
"src/log.c",
"src/match.c",
"src/messages.c",
"src/misc.c",
"src/options.c",
"src/packet.c",
"src/packet\_cb.c",
"src/packet\_crypt.c",
"src/pcap.c",
"src/pki.c",
"src/pki\_container\_openssh.c",
"src/poll.c",
"src/session.c",
"src/scp.c",
"src/socket.c",
"src/string.c",
"src/threads.c",
"src/wrapper.c",
"src/external/bcrypt\_pbkdf.c",
"src/external/blowfish.c",
"src/external/chacha.c",
"src/external/poly1305.c",
"src/chachapoly.c",
"src/config\_parser.c",
"src/token.c",
"src/pki\_ed25519\_common.c",
"src/threads/noop.c",
"src/threads/pthread.c",
"src/threads/libcrypto.c",
"src/pki\_crypto.c",
"src/ecdh\_crypto.c",
"src/libcrypto.c",
"src/dh\_crypto.c",
"src/pki\_ed25519.c",
"src/external/ed25519.c",
"src/external/fe25519.c",
"src/external/ge25519.c",
"src/external/sc25519.c",
"src/sftp.c",
"src/sftpserver.c",
"src/server.c",
"src/bind.c",
"src/bind\_config.c",
"src/dh-gex.c",
"src/external/curve25519\_ref.c",
\]
include\_common = \[
"./build",
"./include/",
"//third\_party/openssl/include",
"./include/libssh",
"./build/include",
"./build/src",
\]
ohos\_shared\_library("libssh") {
sources = src\_libHWSecureC
include\_dirs = include\_common
deps=\[
"//third\_party/openssl:libcrypto\_static",
"//third\_party/openssl:ssl\_source"
\]
cflags = \["-w", "-std=gnu99", "-fPIC", "-DLIBSSH\_EXPORTS", "-D\_GNU\_SOURCE"\]
}
# 放入 $MY\_OHOS\_DIR/third\_party/iot\_device\_sdk\_c/third\_party/nopoll
#
# Copyright (c) \[2020\] Huawei Technologies Co.,Ltd.All rights reserved.
#
# OpenArkCompiler is licensed under the Mulan PSL v1.
# You can use this software according to the terms and conditions of the Mulan PSL v1.
# You may obtain a copy of Mulan PSL v1 at:
#
# http://license.coscl.org.cn/MulanPSL
#
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR
# FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v1 for more details.
#
import("//build/ohos.gni")
src\_nopoll = \[
"src/nopoll.c",
"src/nopoll\_conn.c",
"src/nopoll\_conn\_opts.c",
"src/nopoll\_ctx.c",
"src/nopoll\_decl.c",
"src/nopoll\_io.c",
"src/nopoll\_listener.c",
"src/nopoll\_log.c",
"src/nopoll\_loop.c",
"src/nopoll\_msg.c",
"src/nopoll\_win32.c",
\]
include\_common = \[
"include",
"../../include/",
"src",
\]
ohos\_shared\_library("libnopoll") {
sources = src\_nopoll
include\_dirs = include\_common
deps=\[
"//third\_party/openssl:libcrypto\_static",
"//third\_party/openssl:ssl\_source"
\]
cflags = \["-w"\]
}
由于libssh需要cmake生成一些包含各种配置的头文件,所以此处先用cmake命令生成中间文件。
此处需要根据开发板支持的功能向cmake传入参数,以便开启或关闭对应特性,如示例中的
-DHAVED_GLOB=0
命令如下:
cd $MY\_OHOS\_DIR/third\_party/iot\_device\_sdk\_c/third\_party/libssh \\
&& mkdir -p build \\
&& cd build \\
&& cmake .. \\
-DCMAKE\_BUILD\_TYPE=Release -DWITH\_ZLIB=OFF \\
-DOPENSSL\_ROOT\_DIR=$MY\_OHOS\_DIR/third\_party/openssl \\
-DOPENSSL\_INCLUDE\_DIR=$MY\_OHOS\_DIR/third\_party/openssl/include \\
-DOPENSSL\_CRYPTO\_LIBRARY=$MY\_OHOS\_DIR/out/rk3568/packages/phone/system/lib/libcrypto.z.so \\
-DHAVE\_STRTOULL=1 -DUNIX=1 -DHAVE\_POLL=0 -DHAVE\_GLOB=0 \\
**深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**



**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.youkuaiyun.com/topics/618636735)**
SSL\_INCLUDE\_DIR=$MY\_OHOS\_DIR/third\_party/openssl/include \\
-DOPENSSL\_CRYPTO\_LIBRARY=$MY\_OHOS\_DIR/out/rk3568/packages/phone/system/lib/libcrypto.z.so \\
-DHAVE\_STRTOULL=1 -DUNIX=1 -DHAVE\_POLL=0 -DHAVE\_GLOB=0 \\
**深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

[外链图片转存中...(img-ISX2X4vl-1715818243499)]
[外链图片转存中...(img-h8vQCgGR-1715818243499)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.youkuaiyun.com/topics/618636735)**