OpenHarmony鸿蒙硬件Hi3861-交通灯功能开发

说明

通过编程,控制下图中红框处 红、绿、黄 LED灯的开启和关闭

D2

电路图

  • GPIO_10 连接红色LED,输出高电平点亮红色LED灯
  • GPIO_11 连接绿色LED,输出高电平点亮绿色LED灯
  • GPIO_12 连接黄色LED,输出高电平点亮黄色LED灯

实现

步骤

  1. 初始化GPIO设备
  2. 设置管脚 WIFI_IOT_IO_NAME_GPIO_10、WIFI_IOT_IO_NAME_GPIO_11、WIFI_IOT_IO_NAME_GPIO_12 功能为IO
  3. 设置引脚 WIFI_IOT_IO_NAME_GPIO_10、WIFI_IOT_IO_NAME_GPIO_11、WIFI_IOT_IO_NAME_GPIO_12 方向为输出
  4. 循环点亮绿、黄、红LED灯
  5. 注册模块到应用子系统

代码

创建文件:

\\applications\sample\wifi-iot\app\code_v2.0\std_04\traffic_light_demo.c

代码:

#include <stdio.h>
#include <unistd.h>
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"

// 初始化操作
void init(void)
{
    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);
}

static void StartTrafficLightTask(void)
{
    init();
    // 循环点亮绿、黄、红LED灯
    while (1)
    {
        GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_VALUE1);
        usleep(3000 * 1000);
        GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_VALUE0);
        GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_VALUE1);
        usleep(1000 * 1000);
        GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_VALUE0);
        GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_VALUE1);
        usleep(3000 * 1000);
        GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_VALUE0);
    }
}
APP_FEATURE_INIT(StartTrafficLightTask);

代码说明

  • GpioInit():初始化GPIO设备,详见链接
  • IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_IO_FUNC_GPIO_10_GPIO):设置GPIO引脚功能,详见链接

    • 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):设置 GPIO 引脚的方向,详见链接

    • WIFI_IOT_GPIO_DIR_OUT:输出模式,详见链接
  • GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_VALUE0):设置GPIO引脚输出电平值,详见链接

  • usleep(1000 * 1000):详见链接

  • APP_FEATURE_INIT(StartTrafficLightTask):详见链接

编辑BUILD.gn文件

编辑1

在代码同级目录创建下面文件:

BUILD.gn

内容:

# static_library中指定业务模块的编译结果.为静态库文件libmyapp.a,开发者根据实际情况完成填写。
#sources中指定静态库.a所依赖的.c文件及其路径,若路径中包含"//"则表示绝对路径(此处为代码根路径),若不包含"//"则表示相对路径。
#include_dirs中指定source所需要依赖的.h文件路径。
static_library("traffic_demo") { 
    sources = [ 
        "traffic_light_demo.c" 
    ]
    include_dirs = [
        "//utils/native/lite/include",
        "//base/iot_hardware/interfaces/kits/wifiiot_lite",
        "//kernel/liteos_m/components/cmsis/2.0",
    ] 
}

编辑2

编辑下面文件:

\\applications\sample\wifi-iot\app\BUILD.gn

内容:

import("//build/lite/config/component/lite_component.gni")

lite_component("app") {
    features = [
        "code_v2.0/std_03:hello_demo",
    ]
}

编译代码

详见链接:
https://www.malaoshi.top/show_1GW1wTyUOMPk.html


原文出处:/show_1GW1wTKKogRD.html