VSCode开发Hi3861全流程详解
到这里,VSCode开发Hi3861的全流程就结束了,从环境搭建、项目创建、代码编写,到编译烧录、调试优化,每一步都详细讲解,新手跟着做,就能成功运行第一个Hi3861程序。Hi3861作为一款高性能的Wi-Fi IoT芯片,应用场景非常广泛,除了LED灯控制,还可以开发温湿度采集、WiFi通信、MQTT协议对接华为云物联网平台等项目(参考Gitee上的Hi3861安防系统项目)。后续我会继续分享
大家好~ 最近一直在基于Hi3861开发OpenHarmony物联网相关项目,踩了不少环境配置和开发调试的坑,整理了这篇完整的VSCode开发Hi3861实操指南,从前期准备、环境搭建到项目创建、编译烧录,再到调试优化,每一步都附详细步骤和避坑说明,适合新手入门,也适合有经验的开发者参考避坑。
先简单介绍下核心工具和硬件:Hi3861是华为海思推出的一款高性能、低功耗的Wi-Fi IoT芯片,广泛用于物联网终端开发,支持OpenHarmony系统;而VSCode作为轻量且强大的代码编辑器,搭配华为官方的DevEco Device Tool插件,就能实现Hi3861的全流程开发,无需切换多个工具,效率拉满。本文将以Windows环境为例(新手最易上手),全程实操,确保大家跟着做就能成功运行第一个Hi3861程序。
一、前期准备(必做,缺一不可)
开发前需准备好硬件、软件和相关工具,避免后续因缺少组件导致流程卡壳,所有工具均提供官方下载路径,放心使用。
1.1 硬件准备
-
核心硬件:Hi3861开发板(推荐小熊派BearPi-HM Nano、华清远见FS-Hi3861或海思HiSpark T1,本文以BearPi-HM Nano为例,其他型号操作一致);
-
辅助硬件:Type-C数据线(支持数据传输,避免用仅充电的线材)、电脑(Windows 10/11 64位,建议内存4G以上);
-
可选硬件:传感器(如LED灯、温湿度传感器),用于后续实战案例演示。
1.2 软件及工具准备
所有工具优先下载最新稳定版,避免版本兼容问题,下载后按步骤安装即可,无需额外配置。
-
VSCode:微软官方代码编辑器,轻量且插件丰富,下载地址:https://code.visualstudio.com/(选择Windows版本,按默认步骤安装,勾选“添加到PATH”,方便后续命令行调用);
-
DevEco Device Tool:华为官方推出的OpenHarmony开发插件,以VSCode插件形式部署,支持代码编辑、编译、烧录、调试全流程,下载地址:https://device.harmonyos.com/cn/develop/ide#download(选择Windows版本,下载后解压备用);
-
Hi3861工具链:包含编译工具、串口驱动等,下载地址:https://hispark.obs.cn-east-3.myhuaweicloud.com/DevTools_Hi3861V100_v1.0.zip(解压后放在磁盘根目录,避免路径过长);
-
Hi3861 SDK源码:OpenHarmony官方适配Hi3861的源码,可通过Git拉取,命令:
git clone https://gitee.com/HiSpark/hi3861_hdu_iot_application.git(也可直接下载压缩包,同样放在磁盘根目录); -
Git:用于拉取SDK源码,下载地址:https://git-scm.com/download/win(默认安装即可);
-
串口驱动:CH340G驱动,用于电脑识别Hi3861开发板的串口,解压Hi3861工具链后,在
usb_serial_driver目录下找到CH341SER.EXE,双击安装即可。
避坑提醒:Windows系统路径不能超过260个字符,因此Hi3861 SDK源码、工具链解压后,务必放在磁盘根目录(如D:\hi3861_sdk、D:\DevTools_Hi3861),否则后续编译会报错“文件找不到”。
二、VSCode环境搭建(核心步骤)
环境搭建的核心是安装DevEco Device Tool插件,并配置Hi3861相关工具链和SDK,全程跟着步骤来,避免遗漏配置项。
2.1 安装VSCode及基础插件
-
安装VSCode:双击下载的VSCode安装包,勾选“我同意此协议”,下一步,勾选“添加到PATH”(关键),其他默认即可,安装完成后启动VSCode;
-
安装基础插件:打开VSCode,点击左侧“扩展”图标(Ctrl+Shift+X),搜索并安装以下插件(提高开发效率):
-
C/C++:微软官方插件,用于Hi3861的C语言代码编辑、语法高亮、代码提示;
-
Chinese (Simplified):VSCode中文语言包,新手友好,安装后按Ctrl+Shift+P,输入“Configure Display Language”,选择“zh-cn”,重启VSCode即可切换中文;
-
DevEco Device Tool:华为官方Hi3861开发插件,点击“扩展”→“从VSIX安装”,选择之前解压的DevEco Device Tool插件文件(后缀为.vsix),安装完成后重启VSCode,插件会自动加载。
-
2.2 配置DevEco Device Tool插件
重启VSCode后,左侧会出现“DevEco Device Tool”图标,点击进入插件主页,开始配置Hi3861相关参数,这一步是关键,直接影响后续编译和烧录。
-
打开插件主页:点击左侧“DevEco Device Tool”图标,进入主页后,点击“导入工程”(新手推荐导入现有SDK,避免新建工程踩坑);
-
选择SDK路径:在弹出的窗口中,选择之前下载并解压的Hi3861 SDK源码目录(如D:\hi3861_hdu_iot_application),点击“导入”;
-
选择芯片和开发板:弹出配置窗口,“SOC”选择“HI3861”,“开发板”选择对应的型号(如BearPi-HM Nano选择“hi3861”),点击“导入”,插件会自动识别SDK信息;
-
配置工具链路径:点击左侧“工程配置”,在右侧窗口找到“compiler_bin_path”选项,选择之前解压的Hi3861工具链路径,找到
env_set.py文件所在的目录层级(如D:\DevTools_Hi3861V100_v1.0),保存配置; -
检查环境:配置完成后,点击插件主页的“环境检查”,查看是否有缺失的组件,若有缺失,点击“修复”,插件会自动下载补充,确保所有组件都显示“正常”。
温馨提示:若环境检查时提示“Python未安装”,无需额外下载,DevEco Device Tool插件已自带Python环境,只需重启VSCode即可解决。
2.3 配置串口(用于烧录和调试)
将Hi3861开发板通过Type-C数据线连接到电脑,安装之前下载的CH340G驱动,配置串口参数,确保电脑能识别开发板。
-
安装串口驱动:双击Hi3861工具链中
usb_serial_driver目录下的CH341SER.EXE,点击“安装”,提示“预安装成功”即可; -
查看串口编号:右键点击“此电脑”→“管理”→“设备管理器”→“端口(COM和LPT)”,找到“USB-SERIAL CH340(COMx)”(x为串口编号,如COM3),记住这个编号;
-
配置VSCode串口:回到VSCode的DevEco Device Tool插件,点击“工程配置”,找到“upload_port”选项,选择刚才查到的串口编号(如COM3),保存配置;同时设置串口参数(默认即可):波特率115200、数据位8、停止位1、校验位无、流控无。
三、Hi3861项目开发(实操演示)
环境配置完成后,我们以“LED灯控制”为例,演示Hi3861项目的创建、代码编写、编译和烧录全流程,新手可直接照搬代码,快速上手。
3.1 创建项目目录和文件
Hi3861的项目代码需放在SDK的指定目录下,避免编译时无法识别,步骤如下:
-
打开SDK目录:在VSCode中,点击“文件”→“打开文件夹”,选择Hi3861 SDK源码目录(如D:\hi3861_hdu_iot_application),加载所有文件;
-
创建项目目录:在
applications/sample/wifi-iot/app/目录下,新建一个文件夹(如led_control),用于存放我们的LED控制项目; -
创建代码文件:在
led_control目录下,新建两个文件:-
led_control.c:存放业务代码(LED控制逻辑); -
BUILD.gn:存放编译配置(告诉编译器如何编译当前项目)。
-
3.2 编写代码(LED灯控制)
Hi3861开发板中,GPIO09通常控制LED灯,GPIO05与用户按钮连接,我们通过按钮控制LED灯的亮灭,代码如下,直接复制到对应文件即可。
3.2.1 编写led_control.c代码
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "hi_gpio.h"
#include "hi_io.h"
// 定义LED和按钮对应的GPIO引脚
#define LED_GPIO 9 // LED灯控制引脚
#define BUTTON_GPIO 5 // 用户按钮控制引脚
#define LED_TASK_STACK_SIZE 512 // 任务栈大小
#define LED_TASK_PRIO 25 // 任务优先级
// 全局变量,用于标记LED状态(0:熄灭,1:点亮)
static volatile int led_status = 0;
// 按钮中断回调函数:按下按钮后切换LED状态
static void ButtonIsrFunc(void *arg)
{
led_status = !led_status; // 切换LED状态
}
// LED控制任务:循环检测LED状态并控制灯的亮灭
static void LedControlTask(void *arg)
{
(void)arg;
// 初始化GPIO引脚
hi_gpio_init(); // 初始化GPIO
hi_io_set_func(LED_GPIO, HI_IO_FUNC_GPIO_9_GPIO); // 设置LED引脚为GPIO功能
hi_io_set_func(BUTTON_GPIO, HI_IO_FUNC_GPIO_5_GPIO); // 设置按钮引脚为GPIO功能
hi_gpio_set_dir(LED_GPIO, HI_GPIO_DIR_OUT); // 设置LED引脚为输出模式
hi_gpio_set_dir(BUTTON_GPIO, HI_GPIO_DIR_IN); // 设置按钮引脚为输入模式
// 注册按钮中断:下降沿触发(按下按钮时触发)
hi_gpio_register_isr_function(BUTTON_GPIO, HI_INT_TYPE_EDGE, HI_GPIO_EDGE_FALL_LEVEL_LOW, ButtonIsrFunc, NULL);
// 循环控制LED灯
while (1)
{
// 根据led_status控制LED亮灭
hi_gpio_set_output_val(LED_GPIO, led_status);
osDelay(100); // 延时100ms,降低CPU占用
}
}
// 项目初始化函数,注册LED控制任务
static void LedControlInit(void)
{
osThreadAttr_t attr;
// 配置任务属性
attr.name = "LedControlTask";
attr.attr_bits = 0U;
attr.cb_mem = NULL;
attr.cb_size = 0U;
attr.stack_mem = NULL;
attr.stack_size = LED_TASK_STACK_SIZE;
attr.priority = LED_TASK_PRIO;
// 创建LED控制任务
if (osThreadNew(LedControlTask, NULL, &attr) == NULL)
{
printf("Failed to create LedControlTask!\r\n");
}
}
// 注册初始化函数,系统启动时自动执行
APP_FEATURE_INIT(LedControlInit);
3.2.2 编写BUILD.gn编译配置文件
编译配置文件用于告诉编译器当前项目的编译规则,确保项目能被正确编译到固件中,代码如下:
import("//build/lite/config/component/lite_component.gni")
// 定义组件,名称为led_control,对应我们的项目
lite_component("led_control") {
// 依赖的组件,确保能调用Hi3861的GPIO和OS相关接口
deps = [
"//base/iot_hardware/peripheral:gpio",
"//third_party/cmsis_os2:cmsis_os2",
]
// 要编译的源文件(当前项目的.c文件)
sources = [
"led_control.c",
]
}
// 将当前项目添加到app组件中,确保编译时能被包含
group("app") {
deps = [
":led_control",
]
}
3.2.3 修改全局编译配置
需要修改SDK根目录下的applications/sample/wifi-iot/app/BUILD.gn文件,将我们的项目添加到全局编译中,否则编译时会忽略当前项目:
-
打开
applications/sample/wifi-iot/app/BUILD.gn文件; -
找到
lite_component("app")节点,在features中添加我们的项目路径,修改后如下:import("//build/lite/config/component/lite_component.gni")lite_component("app") {features = ("led_control:led_control", // 新增:我们的LED控制项目# 其他默认项目(可保留,也可删除,不影响))}
3.3 项目编译(关键步骤,避坑重点)
编译的目的是将我们编写的代码转换成Hi3861能识别的固件文件(.bin格式),VSCode中可通过DevEco Device Tool插件一键编译,步骤如下:
-
打开编译面板:点击VSCode左侧“DevEco Device Tool”→“PROJECT TASKS”→“build”,点击“build”开始编译;
-
查看编译过程:编译过程中,VSCode终端会输出编译日志,耐心等待1-3分钟(取决于电脑配置);
-
判断编译成功:若终端最后输出“SUCCESS”,且无报错(红色字体),说明编译成功;若出现报错,按以下方式排查:
-
报错“文件找不到”:检查SDK路径是否过长,或文件路径是否正确;
-
报错“未定义的引用”:检查BUILD.gn文件中的依赖是否添加,或代码中是否有语法错误;
-
报错“权限不足”:以管理员身份运行VSCode,重新编译。
-
-
找到固件文件:编译成功后,固件文件位于
out/hispark_pegasus/wifiiot_hispark_pegasus/Hi3861_wifiiot_app_allinone.bin,后续烧录时会自动识别该文件。
避坑提醒:编译时若出现“account_related_group_manager_mock.c: No such file or directory”报错,是Windows路径过长导致的,将SDK目录移动到磁盘根目录(如D:\hi3861_sdk),重新编译即可解决。
3.4 项目烧录(将固件写入Hi3861开发板)
编译成功后,将固件烧录到Hi3861开发板中,开发板才能运行我们编写的LED控制程序,步骤如下:
-
确认开发板连接:确保Hi3861开发板通过Type-C数据线连接到电脑,且串口配置正确(之前配置的COM口);
-
开始烧录:点击VSCode左侧“DevEco Device Tool”→“PROJECT TASKS”→“upload”,点击“upload”开始烧录;
-
触发烧录:烧录过程中,终端会提示“Connecting, please reset device...”,此时快速按下开发板上的“RST”(复位)键,烧录会继续进行;
-
判断烧录成功:若终端最后输出“SUCCESS”,说明烧录成功;若烧录失败,排查以下问题:
-
串口选择错误:重新检查设备管理器中的串口编号,修改“upload_port”配置;
-
数据线无法传输数据:更换一根支持数据传输的Type-C数据线;
-
开发板未复位:烧录时及时按下“RST”键,确保开发板进入烧录模式。
-
3.5 运行测试(验证成果)
烧录成功后,开发板会自动重启,运行我们编写的LED控制程序,测试步骤如下:
-
打开串口终端:在VSCode中,点击“终端”→“新建终端”,输入串口终端命令:
serial-monitor -p COM3 -b 115200(COM3替换为你的串口编号),按下回车,终端会显示开发板的运行日志; -
测试LED控制:按下开发板上的“USER”(用户)按钮,LED灯会随之切换亮灭状态;再按一次,恢复原来的状态,说明程序运行正常;
-
查看日志:终端会输出程序启动日志,若出现“Failed to create LedControlTask!”,说明任务创建失败,检查代码中的任务配置(如栈大小、优先级),重新编译烧录即可。
四、调试优化(新手必看,解决常见问题)
开发过程中难免会遇到各种问题,这里整理了最常见的问题及解决方案,还有调试技巧,帮助大家快速排查问题,提高开发效率。
4.1 常见问题及解决方案
-
问题1:VSCode无法识别DevEco Device Tool插件? 解决方案:重启VSCode,若仍无法识别,重新安装插件,确保插件版本与VSCode版本兼容(优先下载最新版)。
-
问题2:编译报错“路径过长”? 解决方案:将SDK目录、工具链目录移动到磁盘根目录,缩短路径长度,避免超过260个字符。
-
问题3:烧录时提示“无法连接设备”? 解决方案:检查串口驱动是否安装成功、数据线是否支持数据传输、串口编号是否正确,重新连接开发板,按下“RST”键后再尝试烧录。
-
问题4:LED灯不亮,按钮无反应? 解决方案:检查GPIO引脚定义是否正确(不同开发板的引脚可能不同,参考开发板手册)、代码中的中断注册是否正确、BUILD.gn依赖是否添加,重新编译烧录。
-
问题5:终端无日志输出? 解决方案:检查串口编号、波特率是否正确,重新打开串口终端,或重启开发板。
4.2 调试技巧
-
添加日志调试:在代码中添加
printf语句,输出关键变量的值(如led_status),通过串口终端查看日志,定位问题所在; -
断点调试:在VSCode中,点击代码行号左侧,设置断点,然后点击“运行和调试”(Ctrl+Shift+D),选择“DevEco Device Tool”调试配置,启动调试,可逐步执行代码,查看变量变化;
-
硬件排查:若程序运行异常,先检查开发板供电是否正常、传感器接线是否正确(如LED灯正负极),排除硬件问题。
4.3 进阶优化建议
-
代码规范:遵循C语言开发规范,添加注释,方便后续维护和他人阅读;
-
内存管理:Hi3861资源有限,避免使用过多全局变量,慎用动态内存分配,防止内存泄漏和栈溢出;
-
中断优化:中断服务程序(ISR)应短小精悍,仅执行简单操作(如置标志位),避免在ISR中进行打印、延迟等复杂操作;
-
版本控制:使用Git管理代码,定期提交代码,避免代码丢失,方便后续回滚和协作开发。
五、总结与拓展
到这里,VSCode开发Hi3861的全流程就结束了,从环境搭建、项目创建、代码编写,到编译烧录、调试优化,每一步都详细讲解,新手跟着做,就能成功运行第一个Hi3861程序。
Hi3861作为一款高性能的Wi-Fi IoT芯片,应用场景非常广泛,除了LED灯控制,还可以开发温湿度采集、WiFi通信、MQTT协议对接华为云物联网平台等项目(参考Gitee上的Hi3861安防系统项目)。后续我会继续分享Hi3861的进阶开发内容,比如WiFi连接、传感器数据采集、物联网平台对接等,感兴趣的朋友可以关注我~
最后,如果你在开发过程中遇到其他问题,欢迎在评论区留言,我会及时回复,帮助大家避坑。祝大家开发顺利,早日实现自己的Hi3861物联网项目!
补充说明:本文以Windows环境为例,若你使用Ubuntu环境,步骤类似,只需将工具链和SDK放在Ubuntu系统中,通过Docker编译环境(参考相关教程),即可完成开发,核心代码和配置一致。
更多推荐
所有评论(0)