查看: 3203|回复: 3

【GoKit试用体验】MQ2电压读取

[复制链接]
  • TA的每日心情
    开心
    2016-2-19 11:45
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2015-10-7 14:52:10 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 USin 于 2015-10-10 18:41 编辑

    今天发第三篇使用贴,我的问题机智云人员还未帮我搞定,时间缘故,就来发帖了。
    本次是通过云端添加数据点用来转发MQ2产生的电压,设备端通过STM32F103C8自带的ADC,实现读取MQ2的模拟电压输出。
    本次出现了一个小插曲就是云端分辨率一旦设为小数,APP端就好像数据大部分损坏,全不显示,至今未找到原因,如有知道怎么解决的,非常希望留下方法。
    不废话了,下面就说说我的步骤:
    第一部分:设备端代码的修改
    这一部分,我参考了原子的初始化ADC的代码,和读取ADC所得到的值的代码.
    Hal_MQ2.c
    1. #include "include.h"

    2. void MQ2_GPIO_Init(void)
    3. {
    4.         GPIO_InitTypeDef GPIO_InitStructure;
    5.         
    6.         
    7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);         
    8.          
    9.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    10.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    11.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    12.         GPIO_Init(OLED_CS_PORT, &GPIO_InitStructure);
    13. }

    14. void MQ2_Init(void)
    15. {
    16.         MQ2_GPIO_Init();
    17.         ADC_Config();
    18. }

    19. void ADC_Config(void)
    20. {
    21.         ADC_InitTypeDef ADC_InitStructure;
    22.         
    23.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 , ENABLE );
    24.         RCC_ADCCLKConfig(RCC_PCLK2_Div6);
    25.         
    26.         ADC_DeInit(ADC1);
    27.         
    28.         ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
    29.         ADC_InitStructure.ADC_ScanConvMode = DISABLE;
    30.         ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
    31.         ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
    32.         ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    33.         ADC_InitStructure.ADC_NbrOfChannel = 1;
    34.         ADC_Init(ADC1, &ADC_InitStructure);
    35.         
    36.         ADC_Cmd(ADC1, ENABLE);
    37.         ADC_ResetCalibration(ADC1);
    38.         while(ADC_GetResetCalibrationStatus(ADC1));
    39.         ADC_StartCalibration(ADC1);
    40.         while(ADC_GetCalibrationStatus(ADC1));
    41.         
    42. }

    43. u16 Get_Adc(u8 ch)
    44. {
    45.         ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );
    46.         ADC_SoftwareStartConvCmd(ADC1, ENABLE);
    47.         while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
    48.         return ADC_GetConversionValue(ADC1);
    49. }

    50. u16 Get_Adc_Average(u8 ch,u8 times)
    51. {
    52.         u32 temp_val=0;
    53.         u8 t;
    54.         for(t=0;t<times;t++)
    55.         {
    56.                 temp_val+=Get_Adc(ch);
    57.                 Delay_ms(5);
    58.         }
    59.         return temp_val/times;
    60. }
    复制代码
    Hal_MQ2.h
    1. #ifndef _HAL_MQ2
    2. #define _HAL_MQ2

    3. #include <stdio.h>
    4. #include <stm32f10x.h>

    5.         void MQ2_GPIO_Init(void);
    6.         void ADC_Config(void);
    7.         u16 Get_Adc(u8 ch);
    8.         u16 Get_Adc_Average(u8 ch,u8 times);
    9.         void MQ2_Init(void);

    10. #endif
    复制代码
    接着在Hal_init函数添加MQ2_Init函数,接着在只读设备结构体添加uint16_t    Mq2;还有Pro_D2W_ReportDevStatusHandle函数添加Pro_D2W_ReportStatusStruct.Device_All.Device_Read.Mq2 = Device_ReadStruct.Mq2;
    这样,再在while里加入
    1. adcx = Get_Adc_Average(ADC_Channel_0,10);
    2.                 Device_ReadStruct.Mq2 = adcx*(33.0/4096);
    复制代码
    由于小数显示有点问题,所以电压值扩大了10倍显示。
    第二部分:云端设置
    云端设置官方有很详细的步骤了,再此不再多说,就是加上Mq2数据点,类型选数值,分辨率为1.
    第三部分:图片展示
    IMG_20151010_181013.jpg.JPG IMG_20151010_181024.jpg.JPG IMG_20151010_181229.jpg.JPG Screenshot_2015-10-10-17-43-46.jpeg.JPG Screenshot_2015-10-10-17-43-54.jpeg.JPG Screenshot_2015-10-10-18-09-01.jpeg.JPG Screenshot_2015-10-10-18-09-29.jpeg.JPG Screenshot_2015-10-10-18-13-57.jpeg.JPG

    IMG_20151010_181340.jpg.JPG
    回复

    使用道具 举报

  • TA的每日心情

    2017-3-26 16:00
  • 签到天数: 141 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-11-11 09:47:38 | 显示全部楼层

    大额红包,来个1111
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-1-16 00:54
  • 签到天数: 129 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-10-31 00:35:02 | 显示全部楼层
    感谢 分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-11-30 14:39
  • 签到天数: 66 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2015-10-18 22:30:57 | 显示全部楼层
    不错,学习了!!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-15 09:00 , Processed in 0.163866 second(s), 23 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.