基于nrf51822的蓝牙4.0 dht11测温开发

一、概述

      使用nrf51822蓝牙4.0芯片,驱动dht11测量温湿度,然后将温湿度数值通过notification方式传送到安卓手机app端,并显示。安卓端使用lightblue app进行蓝牙连接测试。效果如图:

       基于nrf51822的蓝牙4.0 dht11测温开发_第1张图片    基于nrf51822的蓝牙4.0 dht11测温开发_第2张图片

第一幅图是服务,第二幅图是heart rate服务中包含的characteristics。基于nrf51822 heart rate service 开发程序。

二、dht11测量温湿度

      nrf51822下的dht11驱动编写同51单片机类似,重要在于高低电平时序的控制。

三、nrf51822下蓝牙通信开发

     我使用了nrf51822的例程 heart rate service,通过在heart rate service中添加characteristics实现多数据发送。

     仿照ble_hrs.c文件中的为服务添加heart_rate_measurement characteristic,我又添加了两个characteristics,一个是温度,一个是湿度。


    //增加heart rate service服务。

     sd_ble_gatts_service_add(BLE_GATTS_SRVC_TYPE_PRIMARY, &ble_uuid, &p_hrs->service_handle);  


   //增加characteristics

   sd_ble_gatts_characteristic_add(p_hrs->service_handle,
                                           &char_md,
                                           &attr_char_value,
                                           &p_hrs->bsl_handles);

   

//通过蓝牙4.0发送characteristic

  sd_ble_gatts_hvx(p_hrs->conn_handle, &hvx_params);


//接收主机写入characteristic内的值

   case BLE_GATTS_EVT_WRITE:
            on_write(p_hrs, p_ble_evt);    //on_write函数进行处理
            break;


//on_write函数根据不同的handle号选择不同的处理函数

static void on_write(ble_hrs_t * p_hrs, ble_evt_t * p_ble_evt)
{
    ble_gatts_evt_write_t * p_evt_write = &p_ble_evt->evt.gatts_evt.params.write;
    
    if (p_evt_write->handle == p_hrs->hrm_handles.cccd_handle)
    {
        on_hrm_cccd_write(p_hrs, p_evt_write);
    }

if (p_evt_write->handle == p_hrs->tpm_handles.cccd_handle)
    {
        on_tpm_cccd_write(p_hrs, p_evt_write);
    }


if (p_evt_write->handle == p_hrs->hdm_handles.cccd_handle)
    {
        on_hdm_cccd_write(p_hrs, p_evt_write);
    }
}



在main.c中添加timer,定时测量温湿度并发送数据。




你可能感兴趣的:(综合项目)