项目介绍
我们在平时行驶在公路上,看到各类的交通灯,你是否也会想到自己设计制作一款。今天就来基于鸿蒙Hi3861芯片,即其扩展板来制作这样一款交通灯。
开发环境
- VS Code
- HUAWEI DevEco Device Tool(HarmonyOS面向智能设备开发者提供的一站式集成开发环境)
- HiBurn(用于烧录)
- VMware
- Ubuntu(Linux系统)
具体设计
文件结构
先在./applications/sample/wifi-iot/app路径下新建一个目录(或一套目录结构),用于存放业务源码文件。
本例程:在app下新增业务led,其中hello_world.c为业务代码,BUILD.gn为编译脚本,具体规划目录结构如下:
代码语言:javascript复制└── applications
└── sample
└── wifi-iot
└── app
│── led
│ │── led.c
│ └── BUILD.gn
└── BUILD.gn
功能实现
新建./applications/sample/wifi-iot/app/led下的led.c文件,在led.c中新建业务入口函数led,并实现业务逻辑。并在代码最下方,使用HarmonyOS启动恢复模块接口SYS_RUN()启动业务。(SYS_RUN定义在ohos_init.h文件中)
BUILD.gn为编译脚本
led.c为业务逻辑代码所在文件
BUILD.gn(app/led/BUILD.gn)
代码语言:javascript复制static_library("bahuyang") {
sources = [
"led.c"
]
include_dirs = [
"//utils/native/lite/include",
"//kernel/liteos_m/components/cmsis/2.0",
"//base/iot_hardware/interfaces/kits/wifiiot_lite",
]
}
- “bahuyang”:是生成静态库名称,可随意更改
- “led.c”:代码文件
BUILD.gn(appBUILD.gn)
代码语言:javascript复制import("//build/lite/config/component/lite_component.gni")
lite_component("app") {
features = [
#"startup",
"led:bahuyang"
]
}
- 将"startup"注释,运行我们自己的文件
- “led”:工程目录
- bahuyang:静态库文件
功能程序
我们实现的功能就是先亮红灯,隔一秒,换成亮黄灯,在一秒,换成绿灯。如此循环往复。
HarmonyOS IOT硬件子系统提供了控制外设硬件的应用程序编程接口(API)其中GPIO模块的相关API可用于控制芯片引脚的数字输入和数字输出。GPIO模块与输出相关的API和功能描述如下:
API | 功能描述 |
---|---|
GpioInit() | GPIO模块初始化 |
GpioSetDir(id,val) | 设置GPIO引脚方向,id参数用于指定引脚,dir参数用于指定输入输出 |
GpioSetOutputVal(id,val) | 设置GPIO引脚的输出状态,id参数用于指定引脚,val参数用于指定高电平或低电平 |
IoSetFunc(id,val) | 设置引脚功能,id参数用于指定引脚,val用于指定引脚功能 |
GpioDeinit() | 解锁GPIO模块初始化 |
关键程序
代码语言:javascript复制 GpioInit();
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_IO_FUNC_GPIO_10_GPIO);
GpioSetDir(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_DIR_OUT);
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_FUNC_GPIO_11_GPIO);
GpioSetDir(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_DIR_OUT);
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO);
GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_OUT);
GpioSetOutputVal(YELLOW_GPIO, 0);
GpioSetOutputVal(RED_GPIO,1);
GpioSetOutputVal(GREEN_GPIO,0);
usleep(1000);
GpioSetOutputVal(YELLOW_GPIO, 1);
GpioSetOutputVal(RED_GPIO,0);
GpioSetOutputVal(GREEN_GPIO,0);
usleep(1000);
GpioSetOutputVal(YELLOW_GPIO, 0);
GpioSetOutputVal(RED_GPIO,0);
GpioSetOutputVal(GREEN_GPIO,1);
usleep(1000);
功能演示