k210实现人脸识别+测温

一、简介

我的测温模块是安服优的B-1的红外测温模块(最好在淘宝官方店购买,其他地方可能是盗版哦)

我自己就吃亏在拼多多买,然后买回来的模块一连接板子,板子的正常工作的指示灯就灭了,还让我自己买了一个万用表,最后测出来模块短路了(衰啊。。。。)

不过这个模块的优点就是精度了,官方温度说可以达到0.2的精确度,我查询到的所有测温模块这个精度属于最高了。

测温模块链接:安服优B-1红外测温传感器模块 体温物温采集IR温度UART/IIC接口 - Taobao

k210套件的话就是一系列套件链接在下面(这个我主要是做人脸识别的)

https://mobile.yangkeduo.com/goods1.html?goods_id=255394630243&page_from=101&pxq_secret_key=PTM5HB2MM5W3VW3GO2HOS4AQWQR776FJQTUY5HWYV7LM5VDJNK7Q&_oak_share_detail_id=2401253748&_oak_share_time=1679398755&_oak_share_snapshot_num=24668&share_uin=YCYPQTUROCMNUL3SDBKISYPPZI_GEXDA&_wv=1&refer_share_id=28e4c2c81cdd4ab7b25ce448add20eac&refer_share_uin=YCYPQTUROCMNUL3SDBKISYPPZI_GEXDA&refer_share_channel=qq&refer_share_form=card&_wvx=10

二、模块介绍

①模块协议转换(这个模块比较特殊,我也是第一次接触这种通信协议可以转换的)

②uart通信方式 帧格式

③uart通信方式设置

 ④测温命令

 

 以上了解到基本这个模块就可以上手了!!!

三、代码部分

B_1_uart.h

#ifndef _B_1_INIT_H_
#define _B_1_INIT_H_

#include <uart.h>
#include <stdio.h>
#include <fpioa.h>
#include "sleep.h"
#include <string.h>

//   这些东西是因为 k210的IO口是FPIOA的,也就是它的IO引脚你可以自己设置为UART的rx、tx或者iic的scl/sda,所以按照人家官方的API接口就是这样

//pin num
#define PIN_B1_URAT_RX   (32)
#define PIN_B1_URAT_TX   (33)

//pin function
#define FUNC_B1_URAT_RX       (FUNC_UART1_RX)
#define FUNC_B1_URAT_TX       (FUNC_UART1_TX)

//gpio uart
#define UART_B_1  (UART_DEVICE_1)




#endif

mian.c

#include "B_1_init.h"



int B_1_init(void)
{
    int B_1_init_flag;
    B_1_init_flag = fpioa_set_function(PIN_B1_URAT_RX, FUNC_B1_URAT_RX);
    if(B_1_init_flag != 0)
    {
        printf("B_1_init_fpioa_set_function_RX error!\r\n");
        return -1;
    }
    B_1_init_flag = fpioa_set_function(PIN_B1_URAT_TX,FUNC_B1_URAT_TX);
    if(B_1_init_flag != 0)
    {
        printf("B_1_init_fpioa_set_function_TX error!\r\n");
        return -1;
    }
    return 0;
}


void B_1_uart_init(void)
{
    uart_init(UART_B_1);
    uart_configure(UART_B_1, 38400, UART_BITWIDTH_8BIT, UART_STOP_1, UART_PARITY_NONE);
}

void SETSendCmd(int cmd, char *para, char para_len) 
{
    char buf[128] = {0};
    int chk = 0,i;
    // 包头
    buf[0] = 0xAA;
    buf[1] = 0xA5;

    // 包长
    buf[2] = 3 + para_len;

    // 包命令
    buf[3] = cmd;

    // 包内容
    for(i = 0; i < para_len; i++)
    {
        chk += para[i];
        buf[4 + i] = para[i];
    }
    // 校验和
    chk = buf[2] + cmd + chk;
    buf[4 + para_len] = chk;
    // 包尾
    buf[5 + para_len] = 0x55;


    for(i = 0; i < strlen(buf); i++)
    {
        uart_send_data(UART_B_1, &buf[i], 1);
    }
    usleep(300);
    printf("\n");
}

// 设置通信方式
int B_1_COMM_SET(void)
{
    char para[10] = {0};
    char recv_buf[128] = {0};
    para[0] = 0x01;
    SETSendCmd(0x05, para, strlen(para));
    uart_receive_data(UART_B_1, recv_buf, 20);
    usleep(300);
    return 0;
}

int main()
{ 
    // 这些主要就是初始化
    B_1_init();
    B_1_uart_init();
    // 设置uart通信方式
    B_1_COMM_SET();

    
    char recv_buf[128] = {0};

    while(1)
    {
        float tmp = 0;
        SETSendCmd(0x01,NULL,0);// 发送测温命令
        uart_receive_data(UART_B_1, recv_buf, 20);
        usleep(100000);

        //温度计算
        tmp += (recv_buf[5] >> 4) * 256 * 16;
        tmp += (recv_buf[5] & 0x0F) * 256;
        tmp += (recv_buf[6] >> 4) * 16;
        tmp += (recv_buf[6] & 0x0F);

        tmp /= 10;
        printf("tmp = %f\n",tmp);
        
        sleep(1);
    }
    return 0;
}

 四、结果展示

设置通信方式串口得到的数据(以上代码没有打印的这些操作是因为我完成功能后给删了)

 测温串口得到的数据 

五、重点问题点

我这边主要把我遇到的问题和大家分享一下;

① 测温模块是   上电内5秒内   要发送通信方式设置的命令,也就是先把程序烧录进去后,关掉开发板电源,再连接模块,然后再给开发板供电,然后复位,跑代码!(一定要理解上电5秒内,很重要!!!)

② 就是这个测温模块超级容易误触,接触不良,拿着它的时候一定要注意手势,不然心态真的会炸裂!!!

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值