爱板网论坛

查看: 661|回复: 4

[原创] 【TYDE3.0 涂鸦智能 IoT开发板】4 显示芯片温度

[复制链接]

主题

好友

5040

积分

版主

  • TA的每日心情
    奋斗
    2018-6-14 13:38
  • 签到天数: 699 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2018-2-25 11:24:45 |显示全部楼层
    本帖最后由 ddllxxrr 于 2018-2-25 14:26 编辑

    在开发板上有一个STM32芯片,它上边自带了个温度检测器。

    我想不会太准但测下芯片的大根温度是可以地。

    于是,我就又新建了个产品,产品只是上报一下温度:
    tuya1.jpg


    然后选APP界面,我本想选那个好看点 的,但我选完了一片漆黑,我就选了第二个:
    tuya2.jpg


    然后下载SDK:
    tuya3.jpg



    接上一贴程序改哈:

    我是这样子改的:
    首先加入温度检测程序:

    1. #define HAL_USER_FLASH_GLOBAL
    2. #include "include.h"


    3. void delay_ms(u16 time)
    4. {   
    5.    u16 i=0;  
    6.    while(time--)
    7.    {
    8.       i=12000;  //自己定义
    9.       while(i--) ;   
    10.    }
    11. }



    12. void T_Adc_Init(void)  //ADC通道初始化
    13. {
    14.     ADC_InitTypeDef ADC_InitStructure;
    15.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1    , ENABLE );   //使能GPIOA,ADC1通道时钟
    16.     RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //分频因子6时钟为72M/6=12MHz
    17.     ADC_DeInit(ADC1);  //将外设 ADC1 的全部寄存器重设为缺省值
    18.     ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;  //ADC工作模式:ADC1和ADC2工作在独立模式
    19.     ADC_InitStructure.ADC_ScanConvMode = DISABLE;   //模数转换工作在单通道模式
    20.     ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //模数转换工作在单次转换模式
    21.     ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动
    22.     ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;  //ADC数据右对齐
    23.     ADC_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则转换的ADC通道的数目
    24.     ADC_Init(ADC1, &ADC_InitStructure); //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器
    25.     ADC_TempSensorVrefintCmd(ENABLE); //开启内部温度传感器
    26.     ADC_Cmd(ADC1, ENABLE);  //使能指定的ADC1
    27.     ADC_ResetCalibration(ADC1); //重置指定的ADC1的复位寄存器
    28.     while(ADC_GetResetCalibrationStatus(ADC1)); //获取ADC1重置校准寄存器的状态,设置状态则等待
    29.     ADC_StartCalibration(ADC1);
    30.     while(ADC_GetCalibrationStatus(ADC1));      //获取指定ADC1的校准程序,设置状态则等待
    31. }

    32. u16 T_Get_Adc(u8 ch)
    33. {
    34.     ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );  //ADC1,ADC通道3,第一个转换,采样时间为239.5周期                    
    35.     ADC_SoftwareStartConvCmd(ADC1, ENABLE);     //使能指定的ADC1的软件转换启动功能
    36.     while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
    37.     return ADC_GetConversionValue(ADC1);    //返回最近一次ADC1规则组的转换结果
    38. }

    39. //得到ADC采样内部温度传感器的值
    40. //取10次,然后平均
    41. u16 T_Get_Temp(void)
    42. {
    43.     u16 temp_val=0;
    44.     u8 t;
    45.     for(t=0;t<10;t++)
    46.     {
    47.         temp_val+=T_Get_Adc(ADC_Channel_16);      //TampSensor
    48.         delay_ms(5);
    49.     }
    50.     return temp_val/10;
    51. }

    52. //获取通道ch的转换值
    53. //取times次,然后平均
    54. u16 T_Get_Adc_Average(u8 ch,u8 times)
    55. {
    56.     u32 temp_val=0;
    57.     u8 t;
    58.     for(t=0;t<times;t++)
    59.     {
    60.         temp_val+=T_Get_Adc(ch);
    61.         delay_ms(5);
    62.     }
    63.     return temp_val/times;
    64. }      

    65. //得到温度值
    66. //返回值:温度值(扩大了100倍,单位:℃.)
    67. short Get_Temprate(void)    //获取内部温度传感器温度值
    68. {
    69.     u32 adcx;
    70.     short result;
    71.     double temperate;
    72.     adcx=T_Get_Adc_Average(ADC_Channel_16,20);  //读取通道16,20次取平均
    73.     temperate=(float)adcx*(3.3/4096);       //电压值
    74.     temperate=(1.43-temperate)/0.0043+25;   //转换为温度值     
    75.     result=temperate*=100;                  //扩大100倍.
    76.     return result;
    77. }


    复制代码
    再在库文件中加入ADC那个库文件。
    然后再写个User_Adc.h:
    1. #ifndef __USER_ADC_H__
    2. #define __USER_ADC_H_


    3. void delay_ms(u16 time);

    4. void T_Adc_Init(void);  //ADC通道初始化


    5. u16 T_Get_Adc(u8 ch);

    6. u16 T_Get_Temp(void);

    7. u16 T_Get_Adc_Average(u8 ch,u8 times);


    8. short Get_Temprate(void);    //获取内部温度传感器温度值

    9. #endif
    复制代码
    然后我是这样改的:

    1,改产品标识:注意是本人的标识,请不要考贝。错了不负责哈。
    1. #define PRODUCT_KEY "aMwruVkvkO7Rxano"    //开发平台创建产品后生成的16位字符产品唯一标识
    复制代码
    2,include.h中加入temp变量

    1. typedef struct {
    2.   uint32_t magic_code;
    3.   uint8_t led_switch;
    4.   uint8_t temp;
    5.   uint8_t work_mode;
    6.   uint8_t led_switch2;
    7.   uint8_t bright_value;
    8.   uint8_t colour[14];
    9.   uint8_t scene[14];
    10. } TYPE_BUFFER_S;
    复制代码
    3,在protocol.c中根据SDK改为:
    1. const DOWNLOAD_CMD_S download_cmd[] =
    2. {
    3.   {DPID_TEMPCURRENT, DP_TYPE_VALUE},
    4. };

    5. 上传所有数据改为:
    6. void all_data_update(void)
    7. {

    8.   mcu_dp_value_update(DPID_TEMPCURRENT,FlashBuffer.temp); //VALUE型数据上报;
    9. }

    10. 上报数据及下传数据处理改为:
    11. unsigned char dp_download_handle(unsigned char dpid,const unsigned char value[], unsigned short length)
    12. {
    13.   /*********************************
    14.   当前函数处理可下发/可上报数据调用                    
    15.   具体函数内需要实现下发数据处理
    16.   完成用需要将处理结果反馈至APP端,否则APP会认为下发失败
    17.   ***********************************/
    18.   unsigned char ret;
    19.    ret=Get_Temprate();    //得到温度值
    20.   FlashBuffer.temp = Get_Temprate();
    21.   switch(dpid)
    22.   {

    23.   default:  mcu_dp_value_update(DPID_TEMPCURRENT,FlashBuffer.temp); //VALUE型数据上报;
    24.     break;
    25.   }
    26.   return ret;
    27. }

    复制代码
    4,在主程序main()中加入ADC初始化函数:
    1. T_Adc_Init();               //ADC初始化
    复制代码
    好了,下面看下运行的截图:
    Screenshot_2018-02-25-10-59-54.png











    回复

    使用道具 举报

    主题

    好友

    113

    积分

    童生

  • TA的每日心情
    开心
    2018-2-18 22:25
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2018-2-25 19:37:33 |显示全部楼层
    我去,我居然不知道STM32自带温度检测器
    回复

    使用道具 举报

    主题

    好友

    5040

    积分

    版主

  • TA的每日心情
    奋斗
    2018-6-14 13:38
  • 签到天数: 699 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2018-2-26 13:16:52 |显示全部楼层
    回到原点123 发表于 2018-2-25 22:37
    我去,我居然不知道STM32自带温度检测器

    呵呵,我早就知道了
    回复

    使用道具 举报

    主题

    好友

    100

    积分

    童生

  • TA的每日心情
    慵懒
    2018-3-2 15:56
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2018-2-26 14:52:49 |显示全部楼层
                                              
    回复

    使用道具 举报

    主题

    好友

    5040

    积分

    版主

  • TA的每日心情
    奋斗
    2018-6-14 13:38
  • 签到天数: 699 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2018-2-26 15:34:50 |显示全部楼层
    trucy 发表于 2018-2-26 17:52

    :
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /4 下一条

    手机版|爱板网

    GMT+8, 2018-6-22 17:15 , Processed in 0.124925 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-5   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001056号

    Powered by Discuz!

    返回顶部