HarmonyOS鸿蒙Next Hi3861:自家开发版上实现人体红外感应

HarmonyOS鸿蒙Next Hi3861:自家开发版上实现人体红外感应 这里使用的是hi3861的三色灯板块,使用到的功能是上面的人体红外感应,当有人靠近的时候,灯光变亮,周围无人灯光暗淡。

代码如下:

#include<stdio.h>
#include<unistd.h>

#include "ohos_init.h"
#include "cmsis_os2.h"
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"
#include "wifiiot_pwm.h"
#include "wifiiot_adc.h"
#include "wifiiot_errno.h"

#define PWM_FREQ_DIVITION 64000
#define ADC_RESOLUTION 4996

static void jltfcloudcom(void *arg)
{
    (void)arg;

    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_IO_FUNC_GPIO_10_PWM1_OUT);

    PwmInit(WIFI_IOT_PWM_PORT_PWM1);

    while(1){
        unsigned short data = 0;
        unsigned short duty = 0;

        if(AdcRead(WIFI_IOT_ADC_CHANNEL_3,&data,WIFI_IOT_ADC_EQU_MODEL_4,WIFI_IOT_ADC_CUR_BAIS_DEFAULT,0)==WIFI_IOT_SUCCESS)
        {
            printf("data:%d",data);
            duty = PWM_FREQ_DIVITION * (unsigned int)data / ADC_RESOLUTION;
        }

        PwmStart(WIFI_IOT_PWM_PORT_PWM1,duty,PWM_FREQ_DIVITION);
        usleep(10000);

        PwmStop(WIFI_IOT_PWM_PORT_PWM1);
    }
}

static void jltfcloudcn(void)
{
    osThreadAttr_t attr;

    GpioInit();

    attr.name="jltfcloudcom";
    attr.attr_bits=0U;
    attr.cb_mem=NULL;
    attr.cb_size=0U;
    attr.stack_mem=NULL;
    attr.stack_size=4096;
    attr.priority=osPriorityNormal;

    if(osThreadNew(jltfcloudcom,NULL,&attr) == NULL){
        printf("[jltfcloudcn] Failed to create jltfcloudcom!\n");
    }
}

APP_FEATURE_INIT(jltfcloudcn);

本部分功能实现,参考了网上的公开代码。
5 回复

这里使用的是hi3861的三色灯板块,使用到的功能是上面的人体红外感应,当有人靠近的时候,灯光变亮,周围无人灯光暗淡。代码如下:

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

#define PWM_FREQ_DIVITION 64000
#define ADC_RESOLUTION 4996 

static void jltfcloudcom(void *arg){
    (void)arg;
    //由于炫彩灯板中红色led灯的GIPO为10,这里初始化控制GPIO10的控制方式为PWM模式    
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10,WIFI_IOT_IO_FUNC_GPIO_10_PWM1_OUT);     
    //调用函数初始化PWM模式    
    PwmInit(WIFI_IOT_PWM_PORT_PWM1);       

    while(1){
        unsigned short data = 0;
        unsigned short duty = 0;
        //使用AdcRead函数对3通道进行ADC信号读取,读取到的结果存储在data中       
        if(AdcRead(WIFI_IOT_ADC_CHANNEL_3,&data,WIFI_IOT_ADC_EQU_MODEL_4,WIFI_IOT_ADC_CUR_BAIS_DEFAULT,0)==WIFI_IOT_SUCCESS)
        {
            printf("data:%d",data);
            duty = PWM_FREQ_DIVITION *(unsigned int)data / ADC_RESOLUTION;
            //128 1820            
            //duty = PWM_FREQ_DIVITION * (1948-(unsigned int)data) / ADC_RESOLUTION;
        }       
        //PWM模式开启对红色led灯的控制        
        PwmStart(WIFI_IOT_PWM_PORT_PWM1,duty,PWM_FREQ_DIVITION);       
        usleep(10000);       
        //PWM模式关闭对红色led灯的控制        
        PwmStop(WIFI_IOT_PWM_PORT_PWM1);    
    }
}

static void jltfcloudcn(void){
    osThreadAttr_t attr;
    GpioInit();
    attr.name="jltfcloudcom";
    attr.attr_bits=0U;
    attr.cb_mem=NULL;
    attr.cb_size=0U;
    attr.stack_mem=NULL;
    attr.stack_size=4096;
    attr.priority=osPriorityNormal;    

    if(osThreadNew(jltfcloudcom,NULL,&attr) == NULL){
        printf("[jltfcloudcn] Failed to create jltfcloudcom!\n");
    }   
} 

APP_FEATURE_INIT(jltfcloudcn);

本部分功能实现,参考了网上的公开代码。

更多关于HarmonyOS鸿蒙Next Hi3861:自家开发版上实现人体红外感应的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


先插个眼 , 你这个分享可以

我们发布的文章,绝大部分的代码是分享了的。

在鸿蒙Next Hi3861开发板上实现人体红外感应,可以通过集成红外传感器模块来实现。Hi3861是华为推出的一款低功耗Wi-Fi SoC芯片,支持鸿蒙操作系统。人体红外感应通常使用PIR(Passive Infrared)传感器,该传感器可以检测人体发出的红外辐射。

在鸿蒙Next Hi3861开发板上,首先需要将PIR传感器与Hi3861的GPIO引脚连接。PIR传感器通常有三个引脚:VCC(电源正极)、GND(电源负极)和OUT(信号输出)。将VCC连接到Hi3861的3.3V电源引脚,GND连接到地,OUT连接到Hi3861的某个GPIO引脚。

在鸿蒙操作系统中,可以通过编写设备驱动和应用代码来读取PIR传感器的输出信号。首先,需要在鸿蒙的设备驱动框架中注册PIR传感器设备,并配置GPIO引脚为输入模式。然后,在应用代码中,可以通过轮询或中断的方式读取GPIO引脚的状态,判断是否检测到人体红外信号。

鸿蒙提供了丰富的API和开发工具,可以方便地进行设备驱动开发和应用程序编写。通过鸿蒙的分布式能力,还可以将人体红外感应的数据与其他鸿蒙设备进行共享和联动,实现更复杂的智能家居场景。

总结来说,在鸿蒙Next Hi3861开发板上实现人体红外感应,需要连接PIR传感器,编写设备驱动和应用代码,利用鸿蒙的API和分布式能力进行数据处理和设备联动。

在HarmonyOS鸿蒙Next Hi3861开发板上实现人体红外感应,首先需要连接红外传感器(如HC-SR501)到开发板的GPIO引脚。通过编写代码,利用Hi3861的GPIO接口读取传感器信号。当检测到人体红外信号时,传感器输出高电平,触发相应的处理逻辑。可以在代码中设置中断或轮询方式检测信号变化,并实现报警、灯光控制等功能。开发过程中,需注意传感器的供电和信号处理,确保稳定性和准确性。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!