简介
H3 H861 WiFi 开发板 是一款基于Hi3861V100 WiFi模组设计的开发板,纯国产化芯片设计方案,最小化模块尺寸。Hi3861V100是一款高度集成的2.4GHz WiFi SoC芯片,集成IEEE 802.11b/g/n基带和RF电路,RF电路包括功率放大器PA、低噪声放大器LNA、RF balun、天线开关以及电源管理等模块;支持20MHz标准带宽和5MHz/10MHz窄带宽,提供最大72.2Mbit/s物理层速率。芯片集成高性能32bit微处理器、硬件安全引擎以及丰富的外设接口,外设接口包括SPI、UART、I2C、PWM、GPIO和多路ADC,最高时钟可达50MHz;芯片内置SRAM和Flash,可独立运行,并支持在Flash上运行程序。WiFi基带支持正交频分复用(OFDM)技术,并向下兼容直接序列扩频(DSSS)和补码键控(CCK)技术,支持IEEE 802.11 b/g/n协议的各种数据速率。
H3 H861 WiFi开发板属于开发级产品,上手需要一定的软件开发经验,新手上车需谨慎!!!
技术规格
- 接口:USB-TYPE-C
- 工作电压:3.3V
- 模块:WF-H861-RTA1
- IO口:11个
- 复位按键:×1
- 尺寸:41×25.4mm
引脚说明
使用教程
HarmonyOS开发环境配置
写在前面的话:
- Open Harmony OS环境搭建步骤较多,比较繁琐,建议多多尝试,最好有相关的底层软件开发经验。
- Open Harmony OS功能多导致整个框架较为复杂,同一功能会有不同的源文件来自不同区域,对于新手来说,可能会混淆
- I2C仅支持主机模式,不支持从机模式
- Open Harmony OS使用DevEco Device Tool作为VSCode插件进行工程管理,使用GN/Ninja进行源码构建与编译,使用海思官方的ToolChain进行代码上传。
- 教程文档略长,请耐心阅读,谢谢!
硬件准备
- DFRobot H3 H861 WiFi dev board * 1
- USB-C线缆
DevEco Device配置下载
Open Harmony OS通过华为官方推出的DevEco Device Tool插件,在VSCode中进行开发。
- 下载VSCode ,安装完成后完全退出VSCode
- 下载HUAWEI DevEco Device Tool
解压DevEco Device Tool压缩包,双击安装包程序,点击“下一步”进行安装(如果之前安装过这个环境,会弹出先卸载之前版本再安装,请按照要求卸载)
设置DevEco Device Tool的安装路径,请注意安路径不能包含中文字符,并且安装目录尽可能短,同时不要安装到C盘目录。
我们建议您再其他盘根目录新建一个文件夹安装。
点击"下一步"。
根据安装向导提示,安装依赖的python(默认路径即可)以及VSCode,其中VSCode在我们之前的指导中已经安装过,所以这里就会显示安装完成
按照提示正常安装DevEco后,再次打开VSCode,扩展出现DevEco环境
VSCode扩展配置
建议在Extension 中安装”Chinese“ "GN" "C/C++"
Chinese插件是VSCode中文界面插件。
GN是Make工具插件,安装后可更方便管理GN文件
C/C++是代码环境,该插件可让开发者高效开发C/C++代码
Hi3861 SDK(开发工具包)配置
以下两种方法选一个就可以安装SDK
方法一:
点击下载 Hi3861 SDK
下载过程中需要注册并登录Gitee账号。
将该压缩包解压至DevEco Device Tool安装路径下,具体路径见下图
可能您从Gitee的SDK包中hi3861_hdu_iot目录下并没有1.0.0文件夹,需要自己手动新建文件夹,并且将所有文件都直接放在1.0.0文件夹下。
工程配置
在DevEco中,菜单->主页->新建工程,并按照下图进行工程配置
配置完成后,点击确认完成工程配置
样例代码
配置完成后打开该项目文件夹,在这里我们将修改两个.gn文件来指定编译对应的代码,一个.c源文件来编写代码
首先需要将如下路径的.gn编译文件修改并保存。
src->applications/sample/wifi-iot->app->BUILD.gn
该.gn文件会指定编译"iothardware->led_example"文件夹
import("//build/lite/config/component/lite_component.gni")
lite_component("app") {
features = [
"iothardware:led_example",
]
}
接下来,我们需要将src->applications/sample/wifi-iot->app->-iothardware->BUILD.gn保存
该.gn文件会指定编译同目录下的"led_example.c"
static_library("led_example") {
sources = [
"led_example.c"
]
include_dirs = [
"//utils/native/lite/include",
"//kernel/liteos_m/kal/cmsis",
"//base/iot_hardware/peripheral/interfaces/kits",
]
}
最后将src->applications/sample/wifi-iot->app->iothardware->led_example.c文件,修改为如下样例代码并保存
#include <stdio.h>
#include <unistd.h>
#include "cmsis_os2.h"
#include "ohos_init.h"
#include "iot_gpio.h"
#define LED_TASK_GPIO 6
#define LED_TASK_STACK_SIZE 1024
#define LED_TASK_PRIO 25
#define DELAY_TICKS_50 (50)
#define GPIO_HIGH (1)
#define GPIO_LOW (0)
static void* GpioTask(void)
{
static int count = 100;
IoTGpioInit(LED_TASK_GPIO);
IoTGpioSetDir(LED_TASK_GPIO, IOT_GPIO_DIR_OUT);
while (count--) {
printf(" Hello World!\n");
IoTGpioSetOutputVal(LED_TASK_GPIO, GPIO_LOW);
osDelay(DELAY_TICKS_50);
IoTGpioSetOutputVal(LED_TASK_GPIO, GPIO_HIGH);
osDelay(DELAY_TICKS_50);
}
return NULL;
}
static void GpioExampleEntry(void)
{
osThreadAttr_t attr;
attr.name = "GpioTask";
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;
if (osThreadNew((osThreadFunc_t)GpioTask, NULL, &attr) == NULL) {
printf("[GpioExample] Falied to create GpioTask!\n");
}
}
SYS_RUN(GpioExampleEntry);
Tool Chain/烧录接口配置
下载Hi3861 ToolChain(烧录工具链)
将Tool Chain压缩文件解压到电脑非C盘的任意位置,但是注意文件路径不要过长。
随后在DevEco->菜单->工程配置->hi3861->编译->compiler_bin_path中配置。
将选择刚刚解压后文件的目录即可。
下载CH34x驱动安装软件,并按照提示安装驱动。
然后我们使用USB-C线缆将DFRobot Harmony OS 开发板连接到电脑上,此时电脑设备管理器中会出现名为CH340K的端口
在DevEco->菜单->工程配置->hi3861->烧录->upload_port中选择出现的CH340K COM口
编译/烧录
在界面左下角PROJECT TASKS中,点击clean清除上次编译结果
点击build进行编译(初次编译耗时很长,大约5分钟)
出现success,编译成功
点击Upload上传代码
出现Connecting, please reset device键后点击板载RST按键
如果长时间不按RST的话可能导致烧录失败,并且此时再次点击Upload的话,会因为上次烧录程序异常退出而导致端口号被占用。需要重新插拔USB后再次点击Upload。
出现Execution Successful,上传成功
点击Monitor打开串口监视器,串口打印Hello World,并且板载LED灯间隔一秒闪烁
样例代码
在鸿蒙OS中添加测试程序
**applications/sample/wifi-iot/app/**目录下添加一个新文件夹,在这个文件夹下再添加一个.c文件(这个就是需要实现的demo),还有一个.gn文件(用于编译)。
修改demo目录下的.gn文件。
Sources里面需要填写demo的名字,include_dirs下面填写的是demo中包含的头文件的绝对地址。
修改在app文件夹下面的.gn文件。
在.gn下的features下面添加需要编译的demo。
GPIO使用(在线程中实现引脚的高低电平的切换)
//GPIO引脚初始化
GpioInit();
//将复用引脚设置为 GPIO
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);
//设置为输出
GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);
//引脚输出低电平
GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);
//延时300ms
usleep(300000);
//开引脚拉高/低的线程LedTask()
osThreadNew((osThreadFunc_t)LedTask, NULL, &attr);
ADC采集
按教程添加完ADC文件,添加入下图的工程文件
编译运行之后可以在串口上看到电压值输出为:
输出PWM
鸿蒙OS默认PWM是不打开的,需要手动配置打开,在vendor\hisi\hi3861\hi3861\build\config\usr_config.mk中,将**# CONFIG_PWM_SUPPORT is not set改为CONFIG_PWM_SUPPORT=y**
PWM 的使用
在vendor\hisi\hi3861\hi3861\app\wifiiot_app\init\app_io_init.c 文件中:
配置7号引脚为pwm输出
PWM信号占空比=duty/freq。频率=时钟源频率/freq。使用默认参数可以
编译运行上面的代码可以在7号引脚(PWM0)上看到波形输出
IIC驱动SSD1306
- 编写代码
- 修改配置文件为:
- 打开iic
- 编译烧录
串口通信
编译并运行demo
把TX接出来在sscom上可以看到uart2串口的数据,完成回环测试
读取板子的温度
编译并运行demo
串口打印出温度值
AT指令测试
SDK中,UART1默认用作AT命令通道
Flash读写
编译运行flash_demo,打印读取指定地址的flash值(注意在写flash的时候地址偏移要避免与程序空间冲突),在sscom上可以看到打印结果
自动连接wifi
根据教程:https://bbs.elecfans.com/jishu_1994865_1_1.html
编译运行demo,可以在sscom上看到wifi连接情况
ANY测试
ANY功能是一种华为私有的短数据通信功能,允许处于同一信道的2个Wi-Fi设备进行
直接的点对点无连接通信。参考:https://bbs.elecfans.com/jishu_1994996_1_1.html
- 调用hi_wifi_softap_start()启动softap
- 调用hi_wifi_any_init(),对模块进行初始化
- 创建UDP通信
- 手机作为sta扫描附近wifi连接模块
- 手机安装教程附件的app
- 手机使用app想模块发送可以连接的wifi的ssid以及pswd
- 可以在sscom上看到此时的模块变成sta模式并接入wifi
在ANY测试demo中添加NV操作以便保存wifi 密码
在上一个实验中模块每次初始化以后都需要手机端发送一次wifi的密码才能使模块再次连接,所以在此处加入nv操作,将密码保存在nv非工厂区
MQTT测试
1.解压https://github.com/eclipse/paho.mqtt.embedded-c中的压缩包
2.移植到鸿蒙OS工程中
3.编译运行
4.使用sscom给hi3861发送AT指令连接wifi
5.AT+MQTTTEST(该AT指令是注册进系统的自定义指令),用来启动MQTT循环发送
6.使用mqtt工具连接服务器并订阅hi3861的topic,可以看到订阅的消息
SPI通信
1.编译运行例程
- 连接arduino SPI从机
在串口打印中可以看到来自hi3861的数据