鸿蒙软件+硬件+华为云操纵手册
操纵手册——软件篇
一、准备工作
[*] Windows的Hyper-V功能开启
选择开始菜单,单击设置
https://i-blog.csdnimg.cn/direct/c6efc9333c674a22b1d1e172f1d01976.png
选择系统->激活,查看自己的Windows版本是家庭版还是别的
https://i-blog.csdnimg.cn/direct/d4468970dd0f4fcda111606314829715.png
Windows专业版开启Hyper-V功能
https://i-blog.csdnimg.cn/direct/13455b40f6114b63a84b4fac91a69c29.png
https://i-blog.csdnimg.cn/direct/cdb1006580144d5b95d05f2214bd6ab2.png
https://i-blog.csdnimg.cn/direct/5efd1b7d890244ca8e9255564c1165dc.png
https://i-blog.csdnimg.cn/direct/aaac3554e0c4426b84a9ccf74e1788e4.png
https://i-blog.csdnimg.cn/direct/568a228e8047480ba20904074e454afb.png
开启后,重启电脑,在搜索栏上搜索Hyper-V,看是否存在
https://i-blog.csdnimg.cn/direct/62752e873ea34aac8b0b9c19f9f0ad94.png
Windows家庭版开启Hyper-V功能
1.打开记事本,将下面的代码复制到内里,然后另存为XX.bat,名字可以自界说
@echo off
Pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V -All /LimitAccess /ALL
pause
https://i-blog.csdnimg.cn/direct/9f06bf54bd3448c0b0c9087567b9acde.png
2.运行后,会在当前目录创建hyper.txt文件(可以删除),重启后,搜索Hyper是否存在,假如没有,那就可以使用专业版的方法启动该功能(家庭版默认该功能被隐藏)
https://i-blog.csdnimg.cn/direct/4a3abb4011c64615a2e73e32b71d9b33.png
参考文章:
Windows家庭版没有Hyper-V功能的解决方案_windows没有hyper-v-CSDN博客
[*] 华为DevEco Studio安装手册
文档中心
注意:安装华为DevEco Studio时,肯定要先启用Hyper-V功能,否则无法使用模拟器或者预览器
[*] 硬件模拟测试软件
MQTTX
MQTTX:全功能 MQTT 客户端工具
二、华为云的使用
[*] 华为云IoTDA的搭建
1.登录华为云
https://i-blog.csdnimg.cn/direct/5bada7979dac4731b6e19bf418dd120d.png
2.选择符合的服务区域
https://i-blog.csdnimg.cn/direct/33dee3f72d0e4584bed838341856d14c.png
3.选择服务列表
https://i-blog.csdnimg.cn/direct/158eebc54e9f4ce38605bdee2687933f.png
4.搜索装备接入IoTDA服务
https://i-blog.csdnimg.cn/direct/1916c7f2b91c4192ab6da3329a9b11d9.png
5.购买实例
https://i-blog.csdnimg.cn/direct/5a3fe98b59bc4b5592cbc14bf9a98e92.png
6.按照图片所示进行自界说配置
https://i-blog.csdnimg.cn/direct/0d7fcce89a5e4ae18078c939b36c4d38.png
7.确定配置无误后,选择提交
https://i-blog.csdnimg.cn/direct/4dc41989146140fc8f4f718ee581d023.png
8.进入创建后的实例
https://i-blog.csdnimg.cn/direct/624e6663cfec489ab4a5612d5dec7022.png
9.创建立备之前,先记录一下后续操纵需要使用的信息
https://i-blog.csdnimg.cn/direct/f7667ce9c6c84580aa8b204204ca5bd2.png
10.MQTT接入所在是硬件或软件模拟上传数据的服务器所在,HTTPS接入所在是后续使用鸿蒙app进行云端数据获取或者命令下发的endpoint参数
https://i-blog.csdnimg.cn/direct/4467e7702dce4db1a97e58b036593575.png
11.选择产品
https://i-blog.csdnimg.cn/direct/2ac7cae7354948269134f6259f5af857.png
12.创建产品
https://i-blog.csdnimg.cn/direct/5301929843ca4c9c953e6e8149fc50c6.png
13.按照图片所示进行自界说配置
https://i-blog.csdnimg.cn/direct/2b03be2c19a740049bf4786be2d770c2.png
14.所属行业与所属子行业可以任意选择模板,后续是通过自己的自界说模子来添加实际的数据属性和命令
https://i-blog.csdnimg.cn/direct/b720952835bb47ba892a2c8479e7d9f7.png
15.选择详情进入产品详情页
https://i-blog.csdnimg.cn/direct/b8a5f3491c154e33aa1a21d9ae4ed43f.png
16.添加自界说模子
https://i-blog.csdnimg.cn/direct/c5c56b2ea15347ef80ab11b0782a8883.png
17.自界说服务ID名,该ID也是后续鸿蒙app所使用的serviceid
https://i-blog.csdnimg.cn/direct/0bc403bff9d34c948a16190ef9d0982e.png
18.根据自己的需求添加数据属性和命令
https://i-blog.csdnimg.cn/direct/486ba2ba468b4ecda61157f9e8784d84.png
19.LedStatus是字符串类型,访问方式可读;命令LedSwitch,下发参数为value(字符串类型),相应参数result(布尔型),不同的命令的下发参数和相应参数可以一样,因为它们是通过命令名称进行区分的。注意: 数据类型要与硬件或者软件模拟的数据类型保存同等,否则会出现问题
https://i-blog.csdnimg.cn/direct/0a52c8897e1948029480fa6bb0b15020.png
20.进入Topic管理
https://i-blog.csdnimg.cn/direct/57248a11236344c19d9bf787430869ed.png
21.记录一下装备ID就是后面所创建的云端装备
平台下发命令给装备:
$oc/devices/装备ID/sys/commands/response/request_id=
装备上报属性数据:
$oc/devices/装备ID/sys/properties/report
https://i-blog.csdnimg.cn/direct/14f37a8a65a640668d941ab465efaa74.png
22.选择装备->所有装备
https://i-blog.csdnimg.cn/direct/e5d7ebd20fb04175aeb080e5ba75f764.png
23.注册装备,添加云端装备
https://i-blog.csdnimg.cn/direct/1d32dca26cc14ad284474c6abee3c7fd.png
24.根据下面的图片进行自界说配置
https://i-blog.csdnimg.cn/direct/aea2b70f644f4b72b25064d2555949cc.png
25.保存并关闭后,浏览器会下载一个密钥文件,可以选择自己保存,也可以删除,因为装备详情页内里可以查看
https://i-blog.csdnimg.cn/direct/797d0135926a433185d614b7eed9bb30.png
https://i-blog.csdnimg.cn/direct/a1f4dcfddd224546a1e54c67b6f34d96.png
26.进入装备详情页
https://i-blog.csdnimg.cn/direct/a3911f1165c74f929b8830143464f47e.png
27.根据图片,记录一下所需内容
https://i-blog.csdnimg.cn/direct/a381577fc5ee417f9f7eb4cc46816066.png
[*] 件或软件模拟测试硬
1.根据图片,将之前记录的相干信息填入到MQTTX软件中,硬件类似
https://i-blog.csdnimg.cn/direct/de58403271074c58a2711e757d1b9b3e.png
2.毗连乐成后,云端装备会表现在线
https://i-blog.csdnimg.cn/direct/ffa894a741b84f0cae49cfcdaedc81b2.png
3.使用$oc/devices/装备ID/sys/properties/report,将数据按照指定格式进行数据的上报。
https://i-blog.csdnimg.cn/direct/5c943c418d1d42fdbe5eaa695b450bfd.png
参考文档:
装备属性上报_装备接入 IoTDA_华为云
4.上报乐成后,云端会得到硬件或软件模拟的值
https://i-blog.csdnimg.cn/direct/b0815e97d71943e3810d448ad63a380e.png
三、鸿蒙app的使用
1.先记录一下自己API根据,这是后续鸿蒙app的project_id,项目ID
https://i-blog.csdnimg.cn/direct/032eebf0e8e34f62a4bcba0c5c12dab7.png
https://i-blog.csdnimg.cn/direct/58010fcdb6ce497e8fbf2cd65c81c883.png
2.一般都是创建一个新的权限不高的IAM用户来获取XToken,在后续的鸿蒙app中用于获取XToken,只有颠末验证后的XToken,才气让鸿蒙app获取云端数据或者下发命令
https://i-blog.csdnimg.cn/direct/816071a07bb64693acf7ef867fd87b7d.png
https://i-blog.csdnimg.cn/direct/3792cbf6172f436db5b03240d3af525b.png
https://i-blog.csdnimg.cn/direct/f77ecddeaee44c7393cd9c210a67002f.png
https://i-blog.csdnimg.cn/direct/75418c8fc13e4c75bee4b9cb8d3a1589.png
3.在创建的鸿蒙项目的ets目录下创建Tools目录和Models目录,然后在Tools创建一个HttpTool的ArkTS文件,在Models目录下创建一个HW_User的ArkTS文件(这是将常用的Http操纵和IAM用户获取X-Token进行封装,方便后续操纵)
https://i-blog.csdnimg.cn/direct/4c8d1899161f4aaa94a025c5ce2f0fdb.png
https://i-blog.csdnimg.cn/direct/cf58816ce8b34a6b97b63d2e01d91b6f.png
HW_User.ets
export class HW_User {
auth: Auth
constructor(name: string, password: string, domain: string) {
this.auth = {
"identity": {
"methods": [
"password"
],
"password": {
"user": {
"domain": {
"name": domain //IAM用户所属账号名
},
"name": name, //IAM用户名
"password": password //IAM用户密码
}
}
},
"scope": {
"domain": {
"name": domain //IAM用户所属账号名
}
}
}
}
}
interface Auth {
identity: Identity
scope: Scope
}
interface Identity {
methods: string[]
password: Password
}
interface Password {
user: User
}
interface User {
name: string
password: string
domain: Domain
}
interface Domain {
name: string
}
interface Scope {
domain: Domain
}
布局是固定的,通过封装类来实现
参考文档:
获取IAM用户Token(使用密码)_同一身份认证服务 IAM_华为云
文档中的哀求示例
HttpTool.ets
import { http } from '@kit.NetworkKit'
import { BusinessError } from '@kit.BasicServicesKit'
export class HttpTool {
static get(url: string, fn: Function) {
// 每一个httpRequest对应一个HTTP哀求任务,不可复用
let httpRequest = http.createHttp()
let options: http.HttpRequestOptions = {
method: http.RequestMethod.GET,
// 当使用POST哀求时此字段用于传递哀求体内容,具体格式与服务端协商确定
expectDataType: http.HttpDataType.OBJECT, // 可选,指定返回数据的类型
// 开发者根据自身业务需要添加header字段
// header: { 'Accept': 'application/json' },
header: {
'Content-Type': 'application/json',
'X-Auth-Token': globalThis.token //获取云端数据需要xToken认证,这里使用全局变量
},
}
httpRequest.request(url, options, (err: BusinessError, data: http.HttpResponse) => {
if (!err) {
fn(data)
} else {
console.info('error:' + JSON.stringify(err))
}
httpRequest.destroy()
})
}
//一般情况下的post哀求
static post(url: string, param: string | Object | ArrayBuffer, fn: Function) {
// 每一个httpRequest对应一个HTTP哀求任务,不可复用
let httpRequest = http.createHttp()
let options: http.HttpRequestOptions = {
method: http.RequestMethod.POST,
// 当使用POST哀求时此字段用于传递哀求体内容,具体格式与服务端协商确定
extraData: param,
expectDataType: http.HttpDataType.OBJECT, // 可选,指定返回数据的类型
// 开发者根据自身业务需要添加header字段
// header: { 'Accept': 'application/json' },
header: {
'Content-Type': 'application/json',
},
}
httpRequest.request(url, options, (err: BusinessError, data: http.HttpResponse) => {
if (!err) {
fn(data)
} else {
console.info('error:' + JSON.stringify(err))
}
httpRequest.destroy()
})
}
//命令下发使用的post哀求
static postCommands(url: string, param: string | Object | ArrayBuffer, fn: Function) {
// 每一个httpRequest对应一个HTTP哀求任务,不可复用
let httpRequest = http.createHttp()
let options: http.HttpRequestOptions = {
method: http.RequestMethod.POST,
// 当使用POST哀求时此字段用于传递哀求体内容,具体格式与服务端协商确定
extraData: param,
expectDataType: http.HttpDataType.OBJECT, // 可选,指定返回数据的类型
// 开发者根据自身业务需要添加header字段
// header: { 'Accept': 'application/json' },
header: {
'Content-Type': 'application/json',
'X-Auth-Token': globalThis.token //下发命令需要xToken认证,这里使用全局变量
},
}
httpRequest.request(url, options, (err: BusinessError, data: http.HttpResponse) => {
if (!err) {
fn(data)
} else {
console.info('error:' + JSON.stringify(err))
}
httpRequest.destroy()
})
}
}
参考文档:
文档中心
Index.ets
import { HW_User } from '../Models/HW_User'
import { HttpTool } from '../Tools/HttpTool'
import { http } from '@kit.NetworkKit'
//通过接口的封装来下达命令和接受返回参数
interface Command {
service_id: string
command_name: string
paras: Paras
}
interface Paras {
value: string
}
interface Properties {
LedStatus: string
}
// Command和Paras使用接口来实现命令下发的上传格式,Properties是使用接口获取云端数据的返回数据
@Entry
@Component
struct Index {
private url: string = 'https://iam.myhuaweicloud.com/v3/auth/tokens'
private hw_user = new HW_User('你创建的IAM用户', '你的IAM用户密码', '你的登录或注册的默认用户就是domain')
// 使用封装的HW_User来进行用户的认证,从左往右依次是新创建的IAM用户及其密码,还有你的默认用户企业管理员
private endpoint: string = '你的http接入所在'
private project_id: string = '你的api根据也就是项目id'
private device_id: string = '你的装备id'
//endpoint是你之前复制的https接入所在,project_id是你复制的api根据(要与区域保持同等),device_id是你的装备id
private url1: string =
'https://' + this.endpoint + '/v5/iot/' + this.project_id + '/devices/' + this.device_id + '/shadow'
private url2: string =
'https://' + this.endpoint + '/v5/iot/' + this.project_id + '/devices/' + this.device_id + '/commands'
//url1是获取云端数据的写法,url2是命令下发的写法
@State properties: Properties = { LedStatus: '' }
private com: Command = { service_id: 'TS001', command_name: 'LedSwitch', paras: { 'value': 'ON' } }
//使用接口重载可以方便后续的调整
build() {
Column() {
Column() {
//onClick事件,当单击文本时,触发内里所写的内容
Text('获取Token').fontSize(25).onClick(() => {
HttpTool.post(this.url, this.hw_user, (data: http.HttpResponse) => {
console.log('result:', JSON.stringify(data.result))
globalThis.token = data.header['x-subject-token'] //x-subject-token作为全局变量,让封装的HttpTool类可以使用
})
// 使用封装类后的HttpTool的post哀求获取到x-token的值
})
Text('获取数据').fontSize(25).onClick(() => {
HttpTool.get(this.url1, (data: http.HttpResponse) => {
console.log('result:', JSON.stringify(data.result)) //打印获取的效果到终端上
this.properties = data.result['shadow'].reported.properties as Properties
console.log('LedStatus:' + this.properties.LedStatus) //将获取到的LedStatus打印到终端上
})
})
Text('命令下发测试').fontSize(25).onClick(() => {
HttpTool.postCommands(this.url2, this.com, (data: http.HttpResponse) => {
console.log('result:', JSON.stringify(data.result))//将获取到的命令返回效果打印到终端上
})
})
}
}.width('100%').height('100%')
}
}
数据获取参考文档
查询装备影子数据_装备接入 IoTDA_华为云
命令下发参考文档
下发装备命令_装备接入 IoTDA_华为云
4.代码写好后,启动预览器或者模拟器,然后打开日志调试终端,进行测试
https://i-blog.csdnimg.cn/direct/1bea77d2849c4dfa92e301308f7aa5b8.png
https://i-blog.csdnimg.cn/direct/a3650c5883ca4464bfcee1266bac64b7.png
https://i-blog.csdnimg.cn/direct/6072858977594fdd98ba0979374bcc30.png
https://i-blog.csdnimg.cn/direct/1a67dc3b90524c38ad8203efb867f2e7.png
软件模拟或硬件做出命令回应的格式参考文档
平台命令下发_装备接入 IoTDA_华为云
软件模拟或硬件上传数据的格式参考文档
装备属性上报_装备接入 IoTDA_华为云
https://i-blog.csdnimg.cn/direct/aab0cd44642e4705a67ad8277aec7cf3.png
https://i-blog.csdnimg.cn/direct/aa1504b34ff948acb0b15f0c52ac3844.png
至此,有关鸿蒙app毗连华为云获取硬件上传的数据和下发命令的操纵教程竣事,至于本地服务端的搭建,因每个人所使用的web框架和数据库不一样,这里不在写了。简单来说就是web框架毗连数据库,从数据库获取数据,然后使用鸿蒙app的post哀求获取web框架的页面路由返回数据,就可以将数据读取到鸿蒙app中。
鸿蒙的ArkTS语言学习参考文档:
官方文档:
文档中心-HarmonyOS NEXT开发文档-华为开发者联盟
官方免费的视频教程:
华为开发者学堂
或者别的平台的学习资源
操纵手册——硬件篇
[*] 一、OpenHarmony硬件开发情况配置
声明:提供的资料文件有
hi3861_hdu_iot_application240515
DevTools_Hi3861V100_v1.0.zip
CH341SER.EXE
串口调试助手
(一)、安装 Visual Studio Code
1.下载VSCode
VSCode全称是Visual Studio Code,它是一款免费开源的现代化轻量级代码编辑器。VSCode官方下载所在是:Visual Studio Code - Code Editing. Redefined我们使用Windows x64 版本
具体安装步骤参考VSCode安装配置使用教程(最新版超详细保姆级含插件)一文就够了_vscode使用教程-CSDN博客
2.安装VSCode相干插件
安装完VSCode后,需要安装如下图的插件:
https://i-blog.csdnimg.cn/direct/e26c04f94bd845cf964e4dc3c25c80ee.png
以C/C++插件安装为例,点击左侧的扩展商店里输入“C/C++”,选择下载第一个
https://i-blog.csdnimg.cn/direct/78a9c56011ef4dc0839828579c5fefa2.png
别的插件安装步骤相似,最终安装效果表现如下:
https://i-blog.csdnimg.cn/direct/428fb555aecf420289851ae7092f939c.png
https://i-blog.csdnimg.cn/direct/60a96182625547fe8d67af2df3124c1c.png
[*]安装DevEco Device Tool
HUAWEI DevEco Device Tool(以下简称DevEco Device Tool)是HarmonyOS面向智能装备开发者提供的一站式集成开发情况,支持HarmonyOS的组件按需定制,支持代码编辑、编译、烧录和调试等功能,支持C/C++语言,以插件的情势摆设在Visual Studio Code上。
[*]打开HarmonyOS官网开发工具网站:华为集成开发情况IDE DevEco Device Tool下载 | HarmonyOS装备开发
找到“DevEco Device Tool 4.0 Release”
https://i-blog.csdnimg.cn/direct/fd18a9990f66408bab651d68b5a9feb5.png
[*]在控制面板-添加或删除步伐中,搜索Python关键字,遭到所有安装的Python进行卸载,特别是安装Anconda情况下的Python,制止干扰情况,确保在cmd中输入python后系统找不到python情况即可。
https://i-blog.csdnimg.cn/direct/b4bca980511b476581e4f7778a4bd636.png
[*]双击DevEco Device Tool安装包步伐,点击“Next”,进行安装。https://i-blog.csdnimg.cn/direct/81662c5739d74e4fbe63c78187ead143.png
[*]设置安装路径,点击“Next”。
https://i-blog.csdnimg.cn/direct/327330a665c2481caa84bdde0b72f265.png
[*]第2)步中已经卸载Python,所以选择“自界说安装”(注意选择Add Python 3.8 to PATH),然后点击Install Now。安装完成后点击Close即可。
https://i-blog.csdnimg.cn/direct/8ae5e8cfc24247999f81757e07b669d9.png
https://i-blog.csdnimg.cn/direct/e036882fc53442828eca1db2e6918b38.png
选择添加PATH选项
https://i-blog.csdnimg.cn/direct/91d08d40841e44288f5a2c850735945e.png
注意 Python 必须安装在全英文目录!假如默认目录不是全英文目录,需要点击 Customize install ation 选项:
https://i-blog.csdnimg.cn/direct/f83de4879f4a460681e9cced9815efa6.png
然后点击 Next:
https://i-blog.csdnimg.cn/direct/32c909c8a5fb42318fc5251cf6c72234.png
勾选 Install for all users 和 Add Python to environment variables,从而包管英文安装目录并添加情况变量。
https://i-blog.csdnimg.cn/direct/05c9bbe0f1e54aa1be9d83e8b007d3b5.png
在界面中点击“安装”进行软件安装。
https://i-blog.csdnimg.cn/direct/73deba16fc9e462582c2025ee42cd6b9.png
安装乐成后打开VSCode后扩展览表现这四个扩展:
https://i-blog.csdnimg.cn/direct/8c9ef52b729a48a8924814c0223b3c7b.png
4.启动DevEco Device Tool
1)启用VSCode,在DevEco Device Tool运行时依赖C/C++、CodeLLDB插件,可以在VSCode的扩展包管理处进行搜索和安装。
https://i-blog.csdnimg.cn/direct/b7f6266e64d74622a4bf5fe872864f85.png
[*]重启VSCode软件,点击左侧扩展列表,即可打开DevEco Home界面,表现乐成安装开发情况。
https://i-blog.csdnimg.cn/direct/495d7ad0adec4eaf84ae1d9130c0cb11.png
5.下载SDK
我会将SDK压缩包提供出来
我们的例程代码位于目录【\\hi3861_hdu_iot_application\src\vendor\hqyj\fs_hi3861\demo】面,可通过编辑【\\hi3861_hdu_iot_application\src\applications\sample\wifi-iot\app\BUILD.gn】中的信息来将编译目录指向我们的例程,如下图所示:
https://i-blog.csdnimg.cn/direct/e81b6e376db94aa3bfd0e2edda367481.png
[*]开发工具下载
1)我将提供DevTools_Hi3861V100_v1.0.zip包,注意解压到全英文目录下,解压后的目录文件布局如下:
https://i-blog.csdnimg.cn/direct/5867b5ead3fa4d35bbdcbb233e5295d6.png
2)打开VSCode,打开DevEco Device Tool主页,点击“导入工程”。
https://i-blog.csdnimg.cn/direct/935b6d44bb6640ab9514b996f487b1f2.png
3)在导入工程弹窗中选择Hi3861 SDK目录,点击“导入”。
https://i-blog.csdnimg.cn/direct/af2c904c6537470296de12a784791dd1.png
4)在后续导入工程弹窗,SOC栏选择Hi3861,开发板栏选择hi3861,框架栏选择hb,之后点击“导入”,等待导入乐成即可。
https://i-blog.csdnimg.cn/direct/8ca04ef75bdf47c2a519dc4bf7c167a0.png
[*]代码导入乐成后,即工程创建乐成,之后可使用该IDE 实现代码开发、一键编译、一键烧写等功能。
https://i-blog.csdnimg.cn/direct/7bca8bbd52754f06823e85ed61b50240.png
7)配置开发工具路径,点击左侧的“工程配置”,选中“请选择自界说工具包”(有的版本可能无此界面,直接进行下一步即可)。
https://i-blog.csdnimg.cn/direct/edf5f69f6ce04640aea058778ebfc215.png
8)然后在右侧窗口中找到“hi3861,”找到“compiler_bin_path”,选择到之前下载的开发工具。
https://i-blog.csdnimg.cn/direct/96cdde6a990b4322aed359cede08669d.png
[*]配置产品
注意:以下步骤已经在所给文件中配置完成,不消手动配置,后期更改编译文件时在选择性地配置。
1)在src/applications/sample/wifi-iot/BUILD.gn文件中,修改features,如下所示。该路径用于指示编译系统去哪里探求需要编译的组件。其中冒号前的demo指的是文件所在的目录,冒号后的demo 指的是该目录下的BUILD.gn文件中的哪个lite_component。
https://i-blog.csdnimg.cn/direct/94c9ff1ee540442ab120d16de6e13e64.png
2).修改vendor/hqyj/fs_hi3861/demo/BUILD.gn,根据需要编译对应的示例步伐:
https://i-blog.csdnimg.cn/direct/0a7e8d6aa1a04846ae4b53d421d6dc9f.png
3)由于编译过程中涉及到部门板级的驱动,因此需要复制光盘资料里的硬件驱动代码到hi3861_hdu_iot_application\src\vendor\hqyj\fs_hi3861\common\bsp目录,而且在步伐里引入相应文件时包管该工程下的BUILD.gn文件内里包罗了相应的路径。我们提供的工程文件已做好这些内容,因此不消再次操纵。
https://i-blog.csdnimg.cn/direct/5d5eb1ad43334156ad791dee1babe17f.png
https://i-blog.csdnimg.cn/direct/fe7a1d23e1894ceea4bc76bf519e2088.png
https://i-blog.csdnimg.cn/direct/cca3a485e61642e3a85b80edee762824.png
[*]编译工程
1)配置完成后,点击左侧“Rebuild”,开始编译。
https://i-blog.csdnimg.cn/direct/b3bf5f94f03742529e9b8ebf1e10d43f.png
2)初次编译会解压编译工具,时间较长。等待编译完成即可。
https://i-blog.csdnimg.cn/direct/9a679297a99343eeb3d95a45bc7f2854.png
[*]代码烧录
[*]串口驱动安装
1.先使用配套的Type-C数据线,将开发板与电脑的USB口进行毗连。
2.安装CH340G驱动。安装CH341SER.EXE文件。
https://i-blog.csdnimg.cn/direct/bff246eb338c4070a101201bf9a7dcc0.png
双击CH341SER.EXE驱动,进入安装界面,点击安装按钮即可,驱动安装乐成后,再点击确定按钮,即可表现安装驱动乐成。
https://i-blog.csdnimg.cn/direct/e5a3144b80dd4d2e9eb250a368458123.png
[*]打开Windows的装备管理器,查看串口装备,若未出现CH340串口装备,请检查驱动是否安装正常。
https://i-blog.csdnimg.cn/direct/30341fd42b164dac97e7fd38380cd408.png
[*]串口烧录
[*]当前DevEco Device Tool工具支持Hi3861单板一键烧录功能。需要毗连开发板,配置开发板对应的串口,在编译竣事后,进行烧录。点击左侧“工程配置”,找到“upload_port”选项,选择开发板对应的烧录串口(注意:假如正在使用Monitor功能,请先关闭Monitor,才气正常烧,否则串口占用无法烧录乐成)。
https://i-blog.csdnimg.cn/direct/2e03d5d49ce749e9b791a932ef2dacca.png
2.打开开发板左下角的电源S1。
https://i-blog.csdnimg.cn/direct/28ad3821447342599406ac41356938a8.png
3.点击VSCode左下角“upload”按键,等待提示(出现Connecting,please reset device...),手动进行开发板复位(按下开发板复位按键)。
https://i-blog.csdnimg.cn/direct/b7ce5320d0f84d46b996197e1f977671.png
4.等待烧录完成,约莫30s左右,烧录乐成。
https://i-blog.csdnimg.cn/direct/493b7e5a3df548f08ceb386dbfac955f.png
10.串口打印
1)烧录完成后,可以通过Monitor界面查看串口打印,配置Monitor串口,如下图所示。
https://i-blog.csdnimg.cn/direct/cef6de4060c4423dab17a2695b5d664a.png
2)配置完Monitor串口后,直接点击monitor按钮,复位开发板,查看开发板端的打印信息。
https://i-blog.csdnimg.cn/direct/6b2ab8e99525410fb54d84949667fd13.png
https://i-blog.csdnimg.cn/direct/e63e0a04ebbd42d5bd1548eabbe1b177.png
查看串口信息也可用串口调试助手(UartAssist)进行。注意,假如使用中文,需要选择好编码集。
https://i-blog.csdnimg.cn/direct/8b8550b361564aca99c2d194af2413e1.png
智能农业的项目实操
[*]修改文件
对C:\hi3861_hdu_iot_application\src\vendor\hqyj\fs_hi3861\common\bsp\include\hal_bsp_ssd1306_bmps.h路径下的文件进行
#define smartFarm 0
修改成
#define smartFarm 1
https://i-blog.csdnimg.cn/direct/f4c5b79cd6c34f399eb6a9d76b462e74.png
修改
C:\hi3861_hdu_iot_application\src\vendor\hqyj\fs_hi3861\demo\BUILD.gn文件中
的 "smartFarm:smartFarm_demo",将表明的#号去掉
https://i-blog.csdnimg.cn/direct/024bf686b3c04c52aba49b9efaa0c27b.png
进入我们已经注册过的阿里云物联网平台中,点击进入装备接入ioTDA。
https://i-blog.csdnimg.cn/direct/94082866fb744f5fa8c274d62d0d2154.png
点击试用进入控制台
https://i-blog.csdnimg.cn/direct/15565eaa9521437ba2c43db9e327ec87.png
点击进入iot实例
https://i-blog.csdnimg.cn/direct/afd8cbe809cf4621b86f6917547ef998.png
点击装备—所有装备
https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=file%3A%2F%2F%2FC%3A%5CUsers%5CADMINI~1%5CAppData%5CLocal%5CTemp%5Cksohtml9156%5Cwps106.jpg&pos_id=ias4bkLo
进入后可以看到我们在上面已经创建过的装备
https://i-blog.csdnimg.cn/direct/63a9f80c36f34f0e811d9b97fd25361f.png
点击详情操纵页面
https://i-blog.csdnimg.cn/direct/a6e99e1859ca4d0ea79e4ea0f55d95bb.png
找到mqtt毗连参数,点击查看
https://i-blog.csdnimg.cn/direct/7045a2dd78c44eca848982628f34e4eb.png
可以查看毗连mqtt所需要的参数
https://i-blog.csdnimg.cn/direct/790a8c0fb72442309b5347832baa1cbc.png
回到vccode中
在我们的代码中找到smartfarm的项目文件夹,代码的路径
C:\hi3861_hdu_iot_application\src\vendor\hqyj\fs_hi3861\demo\smartFarm
https://i-blog.csdnimg.cn/direct/57790209f0da4a37aee538b04d7eed95.png
打开项目中的sys_config.h文件
https://i-blog.csdnimg.cn/direct/4af4897903be4843a773778c815afb11.png
点击进入配置代码
https://i-blog.csdnimg.cn/direct/32bfc522659547b7a56d78bda1f69238.png
https://i-blog.csdnimg.cn/direct/869c390fe26b4936ad3f7c9b2bc40c11.png
将mqtt的毗连参数复制到代码中,需要注意逐一对应且端口号是1883并非是8883.
https://i-blog.csdnimg.cn/direct/b0215cc311a441d991bd077977c0cfb0.png
修改华为云平台的MQTT服务器的IP所在,打开Windows下cmd控制端,在控制端输入内容。
https://i-blog.csdnimg.cn/direct/9306fc9fcde348e48fb3f1826899ba6d.png
将这个ip所在填入代码中
https://i-blog.csdnimg.cn/direct/1a16fa1536444a449822882d8016f5a1.png
填入mqtt信息
https://i-blog.csdnimg.cn/direct/011b2727bb124c82943c1c7f3ab945c7.png
回到华为云平台iot实例,点击产品
https://i-blog.csdnimg.cn/direct/e2bacf8e94ad44ae88658eab2c2f01d9.png
点击详情
https://i-blog.csdnimg.cn/direct/1cfe005110f94f3eb692564dea8330fa.png
进入模子界说界面,点击编辑
https://i-blog.csdnimg.cn/direct/39c69f514ffb4c7e8a5511e2252256b7.png
添加基础服务(base)
https://i-blog.csdnimg.cn/direct/93c0a6a49d744af48f7cd2d3bd40c1d6.png
添加控礼服务(control)
https://i-blog.csdnimg.cn/direct/9042376ac921400a92bfc156b181b525.png
在基础服务(base)中添加“fan”属性
https://i-blog.csdnimg.cn/direct/14c0c37650a04d3a91d5d3e8c238b396.png
在基础服务(base)中添加“humidity”属性
https://i-blog.csdnimg.cn/direct/99cd320111cd47568660dc23e61496f3.png
在基础服务(base)中添加temperature”属性
https://i-blog.csdnimg.cn/direct/6f2d95c7baf4497fa92738648d7a064c.png
在基础服务(base)中添”automode’属性
https://i-blog.csdnimg.cn/direct/5c7e74652a834034834626a41858c241.png
在控礼服务(control)中添加“fan”命令
https://i-blog.csdnimg.cn/direct/91d07511ab1b40fa95ed23a0ee60fd9f.png
在控礼服务(control)中添加“automode”命令
https://i-blog.csdnimg.cn/direct/12f33298263c42c0a66e1e2e8f442229.png
回到demo代码中,进入
C:\hi3861_hdu_iot_application\src\vendor\hqyj\fs_hi3861\common\bsp\src\hal_bsp_nfc_to_wifi.c文件将上面部门表明掉
https://i-blog.csdnimg.cn/direct/780ae68f19ca411684e1ec179373ee18.png
并添加这串代码
uint8_t wechat_GetWiFi_ssid_passwd(const char *nfc_buff, char *wifi_name,char *wifi_passwd)
{
uint8_t payload_len = nfc_buff; // 获取数据长度
//uint8_t payload_len = nfc_buff; // 获取数据长度
uint8_t *payload = (uint8_t *)malloc(payload_len + 1);
uint8_t ret = 0;
if (payload == NULL) {
printf("payload malloc failed.\r\n");
return 0;
}
memset_s(payload, payload_len + 1, 0, payload_len + 1);
//memcpy_s(payload, payload_len + 1, nfc_buff + NDEF_PROTOCOL_VALID_DATA_OFFSET, payload_len);
memcpy_s(payload, payload_len + 1, nfc_buff + 9, payload_len);
printf("Use Wechat system..........\n");
printf("payload = %s\r\n", payload);
cJSON *root = cJSON_Parse(payload);
cJSON *ssid = cJSON_GetObjectItem(root, "ssid");
cJSON *password = cJSON_GetObjectItem(root, "passwd");
if (root != NULL && ssid != NULL && password != NULL) {
printf("ssid = %s, password = %s", ssid->valuestring, password->valuestring);
if (strcpy_s(wifi_name, strlen(ssid->valuestring) + 1, ssid->valuestring) == 0) {
ret = 1;
} else {
ret = 0;
}
if (strcpy_s(wifi_passwd, strlen(password->valuestring) + 1, password->valuestring) == 0) {
ret = 1; // 乐成获取到WiFi名称和密码
} else {
ret = 0;
}
cJSON_Delete(root);
free(payload);
ssid = NULL;
password = NULL;
root = NULL;
payload = NULL;
return ret;
}
}
uint32_t NFC_configuresWiFiNetwork(uint16_t *ndefBuff)
{
if (ndefBuff == NULL) {
printf("NFC_configuresWiFiNetwork to ndefBuff is NULL\r\n");
return -1;
}
uint8_t ret = 0;
char * wifi_name = {0}; // WiFi名称
char * wifi_passwd = {0}; // WiFi密码
//使用微信小步伐进行配网
#if 0
if (ndefBuff == 't') {
ret = wechat_GetWiFi_ssid_passwd(ndefBuff, wifi_name, wifi_passwd);
} else {
ret = ios_GetWiFi_ssid_passwd(ndefBuff, wifi_name, wifi_passwd);
}
#endif
ret = wechat_GetWiFi_ssid_passwd(ndefBuff, wifi_name, wifi_passwd);
if (ret)
//char *wifi_name = "peigezhao";
//char *wifi_passwd = "peigezhao";
printf("wifi_name: %s\n", wifi_name);
printf("wifi_passwd: %s\n", wifi_passwd);
// 毗连wifi
if (WIFI_SUCCESS == WiFi_connectHotspots(wifi_name, wifi_passwd)) {
printf("thongth to nfc connect wifi is success.\r\n");
ret= 0;
} else {
printf("thongth to nfc connect wifi is failed.\r\n");
ret=1;
}
return ret;
}
https://i-blog.csdnimg.cn/direct/e97269f9992445acbe78d2d7a23bfe65.png
https://i-blog.csdnimg.cn/direct/137fe4e08718447e89f4b377496f66af.png
对修改的代码进行编译
https://i-blog.csdnimg.cn/direct/20e6cc5bb18e4934a37051ac22fa4407.png
编译假如出现succes的绿色字体证明编译乐成
https://i-blog.csdnimg.cn/direct/3f167958ef964b03ac94d9fd2bbf5e72.png
点击烧录按钮,需要检测端口号是否正确
https://i-blog.csdnimg.cn/direct/4c8b8ad982ac41bebd88768e112e9e2d.png
手机下载nfc标签助手
https://i-blog.csdnimg.cn/direct/6b81d453c1554727a9ef4d7cb71f1a81.png
、
点击进入软件进行nfc配网
点击文本
https://i-blog.csdnimg.cn/direct/2f1cad20b7294b5b88280c24a797f98f.png
在内里以josn的格式输入自己的wifi名和wifi密码
https://i-blog.csdnimg.cn/direct/59cbb1cf24f64a47a76d2cf7d8b65510.png
写入后靠近hi3861开发板,重启开发板即可配网乐成
https://i-blog.csdnimg.cn/direct/b443a2a3dac94633bf40148c69e05679.png
重启后可观察到开发版的实际效果
https://i-blog.csdnimg.cn/direct/01154b2d65324ea69b1b9a964aa11ab7.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]