找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1985|回复: 4
收起左侧

stm32f103写的pm2.5通过nrf24l01射频发送数据源程序

[复制链接]
ID:556573 发表于 2019-7-21 15:41 | 显示全部楼层 |阅读模式
pm2.5传感器采集到数据后再通过nrf24l01射频模块发送出去,使用时射频模块里的地址和通道要与接收程序一样

单片机源程序如下:
  1. #include "GP2Y.h"
  2. #include "stm32f10x.h"
  3. #include "delay.h"
  4. #include "usart.h"
  5. #include "adc.h"
  6. #include "led.h"
  7.         u32 AD_PM;
  8. void GP2Yinit(void)
  9. {
  10. //定义变量
  11.     ADC_InitTypeDef A_InitStructure;
  12.     GPIO_InitTypeDef G_InitStructure;        //PA0
  13.         
  14.     GPIO_InitTypeDef Gpio_InitStructure;//PB1
  15.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB|RCC_APB2Periph_ADC1 , ENABLE );   //使能ADC2通道时钟
  16.      
  17.     RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M

  18.     //PA0 作为模拟通道输入引脚                        
  19.     G_InitStructure.GPIO_Pin = GPIO_Pin_6;
  20.     G_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚
  21.     GPIO_Init(GPIOA, &G_InitStructure);
  22.    
  23.     ADC_DeInit(ADC1);  //复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值
  24.    
  25.     A_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式:ADC1和ADC2工作在独立模式
  26.     A_InitStructure.ADC_ScanConvMode = DISABLE; //模数转换工作在单通道模式
  27.     A_InitStructure.ADC_ContinuousConvMode = ENABLE; //模数转换工作在单次转换模式
  28.     A_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动
  29.     A_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐
  30.     A_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则转换的ADC通道的数目
  31.     ADC_Init(ADC1, &A_InitStructure); //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器  
  32.    
  33.    
  34.     ADC_Cmd(ADC1, ENABLE);         //使能指定的ADC1
  35.                
  36.     ADC_ResetCalibration(ADC1); //使能复位校准
  37.     while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束
  38.     ADC_StartCalibration(ADC1);  //开启AD校准
  39.     while(ADC_GetCalibrationStatus(ADC1));  //等待校准结束
  40.                
  41.     Gpio_InitStructure.GPIO_Pin = GPIO_Pin_1;                        
  42.     Gpio_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出  
  43.     Gpio_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;           
  44.     GPIO_Init(GPIOB, &Gpio_InitStructure);
  45.     GP2Y_High;
  46. }

  47. //获得ADC值
  48. //ch:通道值 0~3
  49. u16 Get_Adc(u8 ch)   
  50. {
  51.           //设置指定ADC的规则组通道,一个序列,采样时间
  52.         ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );        //ADC1,ADC通道,采样时间为239.5周期                                      
  53.   
  54.         ADC_SoftwareStartConvCmd(ADC1, ENABLE);                //使能指定的ADC1的软件转换启动功能        
  55.          
  56.         while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束

  57.         return ADC_GetConversionValue(ADC1);        //返回最近一次ADC1规则组的转换结果
  58. }

  59. u16 Get_Adc_Average(u8 ch,u8 times)
  60. {
  61.         u32 temp_val=0;
  62.         u8 t;
  63.         for(t=0;t<times;t++)
  64.         {
  65.                 temp_val+=Get_Adc(ch);
  66.                 delay_ms(5);
  67.         }
  68.         return temp_val/times;
  69. }         


  70. float pma,values;
  71. void GetGP2Y(void)
  72. {

  73.         GP2Y_Low;
  74.         delay_us(280);
  75.         AD_PM = Get_Adc(ADC_Channel_6);        //PA0
  76.         delay_us(40);
  77.         GP2Y_High;
  78.         delay_us(9680);
  79.         values=AD_PM*3.3/4096;
  80.         pma = 0.17*AD_PM-0.1; //电压-灰尘转换
  81. }
复制代码
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "led.h"
  6. #include "stdio.h"
  7. #include "spmk.h"
  8. #include "spi.h"
  9. #include "gp2y.h"

  10. extern float values;
  11. extern float pma;
  12. u8 txbuf[20];
  13. int main(void)
  14. {
  15.         delay_init();                     //延时函数初始化         
  16.         uart_init(9600);                 //串口初始化为9600
  17.         LED_Init();                                  //初始化与LED连接的硬件接口
  18.   GP2Yinit();         
  19.         NRF24L01_Init( );
  20.         while(NRF24L01_Check( )!=0)
  21.         {
  22.                 led=!led;
  23.                 delay_ms(200);        
  24.         }
  25.         led=0;
  26.         NRF24L01_TX_Mode( );
  27.         while(1)
  28.         {
  29.                 GetGP2Y();
  30.                 sprintf(txbuf,"\"PM2.5\":%0.2f",pma);
  31.                 if(NRF24L01_TxPacket(txbuf)==TX_OK)
  32.                 {
  33.                         led=!led;
  34.                         printf("/r/nad:%0.2f\n",pma);
  35.                 }
  36.                 delay_ms(500);        
  37.         }                                                                                            
  38. }        
复制代码


所有资料51hei提供下载:
PM2.5.7z (214.54 KB, 下载次数: 69)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:540642 发表于 2019-12-11 18:52 | 显示全部楼层
这个接受端怎么查看这个数据

回复

使用道具 举报

ID:556573 发表于 2020-1-16 14:05 | 显示全部楼层
chen132 发表于 2019-12-11 18:52
这个接受端怎么查看这个数据

接收端把射频的模式改成接受的就可以了啊
回复

使用道具 举报

ID:355082 发表于 2020-3-21 10:37 | 显示全部楼层
PM2.5模块怎么接
回复

使用道具 举报

ID:556573 发表于 2020-11-19 21:46 | 显示全部楼层
LS4 发表于 2020-3-21 10:37
PM2.5模块怎么接

你可以查找网上的教程,讲的都很细
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表