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);
本部分功能实现,参考了网上的公开代码。
这里使用的是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和分布式能力进行数据处理和设备联动。