润和Hi3861学习笔记(一)

您所在的位置:网站首页 homegate软件无法控制灯 润和Hi3861学习笔记(一)

润和Hi3861学习笔记(一)

2024-07-16 22:29| 来源: 网络整理| 查看: 265

前言

本文学习参照润和软件HarmonyOSIoT设备开发一书,但由于版本迭代,书中很多代码无法编译,笔者在此进行补充更改,如有错误,请各位大佬多多指正。更多细节可购买此书进一步了解。 注:本文源代码版本:OpenHarmony v3.0.1LTS(2022-01-12) image.png

代码变动

1.0版本的头文件"wifiiot_gpio.h"和”wifiiot_gpio_ex.h"现在已经合并 为"iot_gpio.h"。

函数名的变化大多都是在原名前加上IOT, 例如:GpioSetDir()改为IOTGpioSetDir()。

部分函数放在了其他文件中并且名字发生了变化, 比如IoSetPull(id,val)现在放在了"hi_io.h"中,函数名变为hi_io_set_pull();

其他: WifiIotGpioValue -> IotGpioValue (注意:这里的Iot的t是小写)

WIFI_IOT_GPIO_VALUE0 ->IOT_GPIO_VALUE0

IosetFunc() -> hi_io_set_func()

可以通过查找它的头文件,了解各个函数的具体定义。方法:在vscode中打开源码目录,然后ctrl+p,在输入框中输入要查找的头文件,它就能自动定位到头文件所在位置并打开。 例如输入hi_io.h,就能定义到device\hisilicon\hispark_pegasus\sdk_liteos\include\hi_io.h这个位置,里面有描述各个函数的功能

通过查询GPIO状态控制LED灯 1.在源码application/sample/wifi-iot/app下新建gpio_demo文件夹,在gpio_demo文件夹中新建gpio_input_set.c文件。

代码目录如下: 代码目录 内容如下:

#include #include #include "ohos_init.h" #include "cmsis_os2.h" #include "iot_gpio.h" #include "hi_io.h" #define WIFI_IOT_IO_NAME_GPIO_9 9 // for hispark_pegasus #define WIFI_IOT_IO_NAME_GPIO_5 5 static void GpioTask(void *arg) { (void) arg; //初始化GPIO IoTGpioInit(WIFI_IOT_IO_NAME_GPIO_9); IoTGpioInit(WIFI_IOT_IO_NAME_GPIO_5); //将GPIO09设置普通IO hi_io_set_func(HI_IO_NAME_GPIO_9,HI_IO_FUNC_GPIO_9_GPIO); //将GPIO09引脚方向设置为输出 IoTGpioSetDir(WIFI_IOT_IO_NAME_GPIO_9,IOT_GPIO_DIR_OUT); //将GPIO05设置普通IO hi_io_set_func(HI_IO_NAME_GPIO_5,HI_IO_FUNC_GPIO_5_GPIO); //将GPIO05引脚方向设置为输入 IoTGpioSetDir(WIFI_IOT_IO_NAME_GPIO_5,IOT_GPIO_DIR_IN); //IoSetPull(WIFI_IOT_IO_NAME_GPIO_5,WIFI_IOT_IO_PULL_UP); //将GPIO05引脚设置上拉状态,上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平 hi_io_set_pull(WIFI_IOT_IO_NAME_GPIO_5,HI_IO_PULL_UP); while(1){ IotGpioValue value = IOT_GPIO_VALUE0; //获取GPIO05引脚状态 IoTGpioGetInputVal(WIFI_IOT_IO_NAME_GPIO_5,&value); //获取GPIO09引脚状态 //当GPIO09输出高电平时,LED处于熄灭状态 IoTGpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9,value); } } static void GpioEntry(void) { osThreadAttr_t attr={0}; attr.name = "GpioTask"; attr.stack_size = 4096; attr.priority = osPriorityNormal; if (osThreadNew((osThreadFunc_t)GpioTask, NULL, &attr) == NULL) { printf("[GpioEntry] Falied to create GpioTask!\n"); } } SYS_RUN(GpioEntry); 2.在gpio_demo文件夹中新建BUILD.gn文件,

目录如下: BUILD.gn 内容如下:

static_library("gpiodemo") { sources = [ "gpio_input_get.c" ] include_dirs = [ "//utils/native/lite/include", "//kernel/liteos_m/components/cmsis/2.0", "//base/iot_hardware/peripheral/interfaces/kits", ] } 3.修改app文件夹下的BUILD.gn文件,

目录如下: appBUILD 修改后内容如下:

import("//build/lite/config/component/lite_component.gni") lite_component("app") { features = [ "gpio_demo:gpiodemo", ] } 原理图

user按键原理图: user按键原理图 LED原理图: LED原理图 user按键与引脚GPIO05相连,当按键按下时,GPIO05引脚接地,处于低电平状态。由于我们设置了读取GPIO05状态的函数,所以此时GPIO09也会被设置为低电平状态,LED灯亮起。而又因为右边的显示屏下方的按键1和按键2也同样接的是GPIO05引脚,所以按下它们也会有同样的效果。

效果演示

IMG_20220514_155923.png IMG_20220514_155929.png IMG_20220514_155931.png 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3