標題: stm32f103寫的pm2.5通過nrf24l01射頻發(fā)送數(shù)據(jù)源程序 [打印本頁]

作者: liu51hei    時間: 2019-7-21 15:41
標題: stm32f103寫的pm2.5通過nrf24l01射頻發(fā)送數(shù)據(jù)源程序
pm2.5傳感器采集到數(shù)據(jù)后再通過nrf24l01射頻模塊發(fā)送出去,使用時射頻模塊里的地址和通道要與接收程序一樣

單片機源程序如下:
  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; //模數(shù)轉換工作在單通道模式
  27.     A_InitStructure.ADC_ContinuousConvMode = ENABLE; //模數(shù)轉換工作在單次轉換模式
  28.     A_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //轉換由軟件而不是外部觸發(fā)啟動
  29.     A_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC數(shù)據(jù)右對齊
  30.     A_InitStructure.ADC_NbrOfChannel = 1; //順序進行規(guī)則轉換的ADC通道的數(shù)目
  31.     ADC_Init(ADC1, &A_InitStructure); //根據(jù)ADC_InitStruct中指定的參數(shù)初始化外設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的規(guī)則組通道,一個序列,采樣時間
  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規(guī)則組的轉換結果
  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();                     //延時函數(shù)初始化         
  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, 下載次數(shù): 69)



作者: chen132    時間: 2019-12-11 18:52
這個接受端怎么查看這個數(shù)據(jù)


作者: liu51hei    時間: 2020-1-16 14:05
chen132 發(fā)表于 2019-12-11 18:52
這個接受端怎么查看這個數(shù)據(jù)

接收端把射頻的模式改成接受的就可以了啊
作者: LS4    時間: 2020-3-21 10:37
PM2.5模塊怎么接

作者: liu51hei    時間: 2020-11-19 21:46
LS4 發(fā)表于 2020-3-21 10:37
PM2.5模塊怎么接

你可以查找網(wǎng)上的教程,講的都很細




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1