OneNET麒麟座應用開發之二:串口讀取PM25感應器資料

來源:互聯網
上載者:User

標籤:err   服務   大數   讀取   顯示   http   公式   分享   gpio   

 

作為環境資料監測站首先要擷取大氣中可吸入顆粒物的資料。為了檢測PM25資料,我們採用北京海聯信為的HLPM025K3型號感應器,該感應器使用雷射法測量PM25和PM10的資料。

該型感應器的檢測對象如下:

M2.5:測量空氣中0.3-2.5微米顆粒物;

PM10:測量空氣中 0.3-10微米顆粒物。

該感應器採用的通訊協議如下:

(1)傳輸速率: 9600bit/S;資料位元:8位;停止位:1位;校正位:無;

(2)資料發送間隔時間為0.8~1.2S(秒) ,

(3)資料格式:7個位元組,其中校正位=PM2.5(H)+PM2.5(L)+PM10(H)+PM10(L)。

 

(4)資料處理:

接收到的資料按公式計算後得到PM2.5和PM10的值,例如:

PM2.5= ( PM2.5(H)×256+PM2.5(L)) ×0.1;

PM10= ( PM2.5(H)×256+PM2.5(L)) ×0.1

感應器要與OneNet麒麟座相連,我們必須看看其介面需求:

 

如所示其需要5V電源和一個串口以及一個GPIO口,我們在麒麟座上發現USART1(PA9:USART1_TX,PA10:USART1_RX)連接埠已經引到了J5端子排的J5_6和J5_5。同時需要的一個GPIO口我們選用PA8,因為也被引到了J5端子排的J5_7。只有5V電源我們沒有發現引出來,但這沒有問題,所有的5V電源均引自電源開關SW1的第6腳,我們焊接一根導線來解決這個問題。至於接地(GND)已經引到了端子排J5_9和J6_2,直接使用就可以了。

接好線後我們使用STM32CubeMX配置好硬體介面,串口的通訊參數,中斷,時鐘等,並產生基本的配置代碼,如所示:

 

配置代碼如下:

static void MX_USART1_UART_Init(void)

{

  huart1.Instance = USART1;

  huart1.Init.BaudRate = 9600;

  huart1.Init.WordLength = UART_WORDLENGTH_8B;

  huart1.Init.StopBits = UART_STOPBITS_1;

  huart1.Init.Parity = UART_PARITY_NONE;

  huart1.Init.Mode = UART_MODE_TX_RX;

  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;

  huart1.Init.OverSampling = UART_OVERSAMPLING_16;

  if (HAL_UART_Init(&huart1) != HAL_OK)

  {

    Error_Handler();

  }

 

HAL_UART_Receive_IT(&huart1, (uint8_t *)rxBuffer, 7);

}

以上最後一行用於開啟接收中斷並且設定接收緩衝以及接收緩衝接收最大資料量,因為感應器的返回位元組為固定的7個位元組所以我們就直接設定好了。當然中斷產生後,中斷服務程式會關掉中斷,所以我們在回呼函數中要將其重開才能進行下一次接收。

static void MX_GPIO_Init(void)

{

  GPIO_InitTypeDef GPIO_InitStruct;

 

  __HAL_RCC_GPIOD_CLK_ENABLE();

  __HAL_RCC_GPIOA_CLK_ENABLE();

 

  HAL_GPIO_WritePin(Senser_Set_GPIO_Port, Senser_Set_Pin, GPIO_PIN_SET);

 

  GPIO_InitStruct.Pin = Senser_Set_Pin;

  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

  HAL_GPIO_Init(Senser_Set_GPIO_Port, &GPIO_InitStruct);

}

 

void HAL_UART_MspInit(UART_HandleTypeDef* huart)

{

 

  GPIO_InitTypeDef GPIO_InitStruct;

  if(huart->Instance==USART1)

  {

    __HAL_RCC_USART1_CLK_ENABLE();

 

    GPIO_InitStruct.Pin = GPIO_PIN_9;

    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

 

    GPIO_InitStruct.Pin = GPIO_PIN_10;

    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

    GPIO_InitStruct.Pull = GPIO_NOPULL;

    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

 

    HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);

    HAL_NVIC_EnableIRQ(USART1_IRQn);

  }

}

配置完成後我們還需要按照協議對資料進行解析,解析完全就是將協議翻譯成程式設計語言,非常簡單,在此就不說了。最後再來一張結果顯示:

 

OneNET麒麟座應用開發之二:串口讀取PM25感應器資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.