找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2453|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

stm32f103寫的pm2.5通過nrf24l01射頻發(fā)送數(shù)據(jù)源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:556573 發(fā)表于 2019-7-21 15:41 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
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);   //設(shè)置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);  //復(fù)位ADC1,將外設(shè) ADC1 的全部寄存器重設(shè)為缺省值
  24.    
  25.     A_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式:ADC1和ADC2工作在獨立模式
  26.     A_InitStructure.ADC_ScanConvMode = DISABLE; //模數(shù)轉(zhuǎn)換工作在單通道模式
  27.     A_InitStructure.ADC_ContinuousConvMode = ENABLE; //模數(shù)轉(zhuǎn)換工作在單次轉(zhuǎn)換模式
  28.     A_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //轉(zhuǎn)換由軟件而不是外部觸發(fā)啟動
  29.     A_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC數(shù)據(jù)右對齊
  30.     A_InitStructure.ADC_NbrOfChannel = 1; //順序進行規(guī)則轉(zhuǎn)換的ADC通道的數(shù)目
  31.     ADC_Init(ADC1, &A_InitStructure); //根據(jù)ADC_InitStruct中指定的參數(shù)初始化外設(shè)ADCx的寄存器  
  32.    
  33.    
  34.     ADC_Cmd(ADC1, ENABLE);         //使能指定的ADC1
  35.                
  36.     ADC_ResetCalibration(ADC1); //使能復(fù)位校準(zhǔn)
  37.     while(ADC_GetResetCalibrationStatus(ADC1)); //等待復(fù)位校準(zhǔn)結(jié)束
  38.     ADC_StartCalibration(ADC1);  //開啟AD校準(zhǔn)
  39.     while(ADC_GetCalibrationStatus(ADC1));  //等待校準(zhǔn)結(jié)束
  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.           //設(shè)置指定ADC的規(guī)則組通道,一個序列,采樣時間
  52.         ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );        //ADC1,ADC通道,采樣時間為239.5周期                                      
  53.   
  54.         ADC_SoftwareStartConvCmd(ADC1, ENABLE);                //使能指定的ADC1的軟件轉(zhuǎn)換啟動功能        
  55.          
  56.         while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待轉(zhuǎn)換結(jié)束

  57.         return ADC_GetConversionValue(ADC1);        //返回最近一次ADC1規(guī)則組的轉(zhuǎn)換結(jié)果
  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; //電壓-灰塵轉(zhuǎn)換
  81. }
復(fù)制代碼
  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. }        
復(fù)制代碼


所有資料51hei提供下載:
PM2.5.7z (214.54 KB, 下載次數(shù): 69)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:540642 發(fā)表于 2019-12-11 18:52 | 只看該作者
這個接受端怎么查看這個數(shù)據(jù)

回復(fù)

使用道具 舉報

板凳
ID:556573 發(fā)表于 2020-1-16 14:05 | 只看該作者
chen132 發(fā)表于 2019-12-11 18:52
這個接受端怎么查看這個數(shù)據(jù)

接收端把射頻的模式改成接受的就可以了啊
回復(fù)

使用道具 舉報

地板
ID:355082 發(fā)表于 2020-3-21 10:37 | 只看該作者
PM2.5模塊怎么接
回復(fù)

使用道具 舉報

5#
ID:556573 發(fā)表于 2020-11-19 21:46 | 只看該作者

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表