极品馒头泬19p,国产精品亚洲一区二区三区,狠狠色噜噜狠狠狠7777奇米,国产精品视频一区二区三区无码,国产欧美日韩久久久久

【E781】STM32數(shù)字網(wǎng)絡(luò)溫度計

2021-09-04 10:39:46      索煒達電子      714     

項目編號:E781

文件大?。?8M

源碼說明:帶中文注釋

開發(fā)環(huán)境:C編譯器

簡要概述:

項目簡介:stm32項目,時間片論詢結(jié)構(gòu),驅(qū)動OLED顯示溫度歷史曲線,具備物聯(lián)網(wǎng)功能發(fā)送數(shù)據(jù)至手機APP,可PI計算輸出控制溫度方案

【E781】STM32數(shù)字網(wǎng)絡(luò)溫度計

項目起因:     大學(xué)專業(yè)課程設(shè)計,需設(shè)計一款基于DS18B20 的數(shù)字溫度計


項目要求:

1.實現(xiàn)測溫范圍 -5~125℃,誤差+-0.1℃

2.實時采集溫度數(shù)據(jù),并實時顯示記錄溫度曲線

3.設(shè)置控制的期望值范圍,超出范圍則聲光報警


擴展要求:

4. 可與計算機進行通訊 ,可上傳溫度數(shù)據(jù) 

5. 具有PI控制算法,可計算輸出值 

6. 具有物聯(lián)網(wǎng)功能,將數(shù)據(jù)傳遞至服務(wù)器,手機顯示溫度曲線 基于ESP8266-01S 

7. 位式或連續(xù)溫度調(diào)節(jié)


項目器件:

-STM32F103C8T6 主控芯片*1

-DS18B20 測溫*1

-OLED_IIC 屏幕*1

-ESP8266-01S WIFI模塊*1

-LED燈

-蜂鳴器

-etc..

項目實現(xiàn)



1. 原理圖設(shè)計:

    首先進行原理圖設(shè)計,基于最基礎(chǔ)的STM32F103C8T6芯片,將需要用到的元器件模塊等等,連接至主控。 具體可以參考以下原理圖。(如有錯誤請指正 謝謝)

【E781】STM32數(shù)字網(wǎng)絡(luò)溫度計


2. PCB設(shè)計:

    將原理圖畫成PCB文件,并找一個商家發(fā)板。     每次發(fā)板子,等待都是漫長的過程。但是還好,嘉立創(chuàng)每月可以發(fā)兩次5元的板子,算是對學(xué)生和工程師的優(yōu)惠了     PCB設(shè)計如下:(如有錯誤請指正 謝謝)

【E781】STM32數(shù)字網(wǎng)絡(luò)溫度計

3. Code 代碼部分

    板子到手后,就急急忙忙的焊完了,通電測試正常后,開始編寫程序。


程序部分分為兩塊:主控STM32的程序和ESP8266-01S的固件 主控采用Keil編寫,ESP采用Arduino編寫,因為Arduino的Wifi庫真的很好用。

STM32F103主控部分:

    主控的思路基本就是,一個循環(huán)里做各任務(wù)的調(diào)用,如按鍵掃描鍵值處理,屏幕的動態(tài)更新,等等 每個任務(wù)都是采用Void形式,不返回數(shù)值,全部使用全局變量的標志來實現(xiàn)各函數(shù)間的通訊信息傳遞。 這樣的好處就是不會阻塞程序的運行,使得程序的每一個部分都會被執(zhí)行到。與RTOS等時間片論相比 就有那味兒了??!     主控部分我的大部分精力都花在了OLED的刷新速率優(yōu)化和按鍵處理上


    OLED最后采用硬件IIC + DMA 的行為傳送,在主控RAM里模擬一個1024B的顯存,每次顯存有變化則刷新至OLED,以O(shè)LED-IIC 400Kpbs的速率下,刷新整屏幕只需要 0.02332s 理論上刷新率可以達到42幀,而采用DMA傳輸,還不浪費CPU的資源。


    主循環(huán)中的進程主要有下面四個


//while(1)主循環(huán)里 順序執(zhí)行以下進程,進程基本無阻礙,使用全局變量消息傳遞機制,可保證實時性。

myKey_GetKeyValue();//獲取鍵值

app_Handle_KeyState();//鍵值處理

app_Updata_Interface();//界面更新

app_Dynamic_Display();//動態(tài)顯示

    先硬件層上,中斷處理按鍵,是否有按鍵按下,然后調(diào)用


myKey_GetKeyValue();//獲取鍵值

根據(jù)按下的時間更新按鍵消息。再根據(jù)按鍵消息來執(zhí)行各個函數(shù)功能。 具體按鍵處理機制,可以參考我的另一篇博客 STM32按鍵處理機制


    之后是界面更新函數(shù)進程和動態(tài)更新函數(shù)進程。 界面更新函數(shù)進程主要根據(jù)當前頁面序號與上次頁面序號是否相同,來決定是不是要更新界面,具體定義如下:


//界面顯示

typedef enum 

{

No_Interface = 256,

Main_Interface = 0,

Menu_Interface = 1,

Menu_ENTER_Interface = 2,

Input_Interface = 3

}Interface_Num_enumTypedef;//頁面序號定義


Interface_Num_enumTypedef now_Interface_Num = No_Interface ; //當前的頁面序號

Interface_Num_enumTypedef next_Interface_Num = Main_Interface; //下次需要更新到的頁面序號

頁面靜態(tài)更新函數(shù):


//靜態(tài)顯示 aka 靜態(tài)頁面更新進程

void app_Updata_Interface()

{

if(now_Interface_Num != next_Interface_Num)

{

OLED_RamClear();

switch (next_Interface_Num)

{

case Main_Interface:

OLED_ShowBMP(0,0,127,63, (u8 *)Interface_Main);

now_Interface_Num = Main_Interface;

break;

case Menu_Interface:

OLED_ShowBMP(0,0,127,63, (u8 *)Interface_Menu);

now_Interface_Num = Menu_Interface;

break;

case Menu_ENTER_Interface:

OLED_ShowBMP(0,0,127,63, (u8 *)MENU_ENTER_INTERFACE);

············省略

動態(tài)更新每一個主循環(huán)進行一次,就會動態(tài)更新一次,以便于顯示按鍵動畫,溫度曲線等動態(tài)效果。當處于哪個頁面就會更新相應(yīng)的效果,具體應(yīng)用具體設(shè)計。篇幅過大就不貼出來了。源碼已上傳至Github


    那么界面顯示最主要的還是OLED的驅(qū)動顯示,OLED驅(qū)動好了,更新速率上去了,動畫才會更加流暢??梢詤⒖?STM32 DMA-IIC刷新OLED屏(理論可達42+幀率)


ESP8266-01S部分:

    ESP的程序相對來說簡單了很多,需要做的只是連接WIFI然后串口接受溫度數(shù)據(jù),并HTTP-POST請求上傳數(shù)據(jù)置服務(wù)器即可。(其實可以做的復(fù)雜點,就是自己設(shè)計一個通訊協(xié)議,這樣通訊更嚴謹,但由于時間問題,就草草的設(shè)計了簡單的通訊,無幀頭幀尾和校驗位)


    //本來打算加個選擇連接WIFI的功能,并且增加軟鍵盤輸入密碼等功能,但是學(xué)期末了,時間不太夠了,想想覺得很麻煩,就算了,直接將WIFI名和密碼寫在了程序里。


    ESP的程序編寫用到了Arduino的ESP8266的庫,網(wǎng)上可以下載到,也可以到我的GitHub上下載。


    思路:先連接WIFI 然后一直循環(huán)在串口接收的函數(shù)里,判斷是否有正確的溫度數(shù)據(jù)被接受,有則POST請求至服務(wù)器


char* getValue()

{

  while (true)

  {

    if (Serial.available() > 0)

    {

      inByte = Serial.read();

      //Serial.print(inByte);

      if (inByte == '[')

      {

        isCommand = true;

        rxBuffer_tail = 0;

        //rxBuffer[0] = 0;

      }

      else if (inByte == ']')

      {

        isCommand = false;

        rxBuffer[rxBuffer_tail] = '\0';

        return rxBuffer;

      }

      else if (isCommand)

      {

        rxBuffer[rxBuffer_tail++] = inByte;

      }

    }

  }

}

目錄│文件列表:

 │ ShaoBing-No.1.rar

 │ 不繞彎路,獲取海量資源.jpg

 └ ShaoBing-No.1

    └ ShaoBing-No.1

       └ ShaoBing-No.1

          │ 程序流程圖.png

          ├ Code

          │  ├ ESP8266_01S_UART_HTTP

          │  │  │ ESP8266_01S_UART_HTTP.ino

          │  │  ├ DOC

          │  │  │  └ readme.txt

          │  │  └ Lib

          │  │     └ 8266_package_2.5.0.exe

          │  └ ShaoBing_No_1_F103C8T6

          │     ├ Doc

          │     │  │ 1.h

          │     │  │ 1.h.bak

          │     │  │ OLED 刷新全屏幕速度.txt

          │     │  │ Readme.txt

          │     │  │ 主界面.bmp

          │     │  │ 右.h

          │     │  │ 右.h.bak

          │     │  │ 右箭頭10x11.bmp

          │     │  │ 左.h

          │     │  │ 左.h.bak

          │     │  │ 左箭頭10x11.bmp

          │     │  │ 菜單.bmp

          │     │  │ 菜單進入選項.bmp

          │     │  │ 菜單進入選項.h

          │     │  │ 規(guī)劃.txt

          │     │  ├ lcd漢字取模軟件

          │     │  │  │ 1.h

          │     │  │  │ 1.h.bak

TAG數(shù)字網(wǎng)絡(luò)溫度計
  • 3 次
  • 1 分