自動化抽水系統實現監測端(測試版)

@zgcwkj  2020年01月18日

分類:

代碼 其它 

下面代碼可能有點簡陋,還請大神輕噴!

硬件:

一、ESP8266
二、超聲波測距

原理:

通過超聲波測距獲取水池剩餘量,通過 TCP 協議將數據傳輸到服務端,由服務端控制水泵的工作狀態

源碼:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>

const char *ssid = "zgcwkj_2.4G";          //WiFi名稱
const char *password = "1234567890";       //WiFi密碼
const IPAddress serverIP(192, 168, 2, 10); //服務器地址
const uint16_t serverPort = 2025;          //服務器端口號
const int trigPin = D4;                    //超聲波Trig引腳編號
const int echoPin = D3;                    //超聲波Echo引腳編號
const int topValue = 3;                    //頂部預值
const int botValue = 130;                  //底部預值

WiFiClient tcpClient; //聲明TCP客戶端對象

void setup()
{
  Serial.begin(115200);
  Serial.println("\r\n _ \r\n");
  WiFi.mode(WIFI_STA);                  //設置工作模式
  WiFi.begin(ssid, password);           //連接WIFI
  while (WiFi.status() != WL_CONNECTED) //檢查WiFi連接狀態
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("Connected");
  Serial.print("IP Address:");
  Serial.println(WiFi.localIP());
}

void loop()
{
  Serial.println("Try to connect to the server");        //尝試連接到服務器
  if (tcpClient.connect(serverIP, serverPort))           //設置訪問目標地址
  {                                                      //
    initUltrasoundDistance();                            //初始化超聲波測距的參數
    while (1)                                            //死循環
    {                                                    //
                                                        // # > 發送數據
      int distance = getUltrasoundDistance();            //獲取超聲波測距的數據
      size_t status = tcpClient.print((String)distance); //通過TCP協議發送至服務端
      if (!status)                                       //判斷發送是否成功
        break;                                           //跳出循環
                                                        // # > 發送數據
      delay(30000);                                      //延時
    }                                                    //
    Serial.println("Close current connection");          //關閉當前連接
    tcpClient.stop();                                    //關閉客戶端
  }                                                      //
  else                                                   //
  {                                                      //
    Serial.println("Open TCP server failed");            //訪問失敗
    tcpClient.stop();                                    //關閉客戶端
  }                                                      //
  delay(5000);                                           //延時
}

//初始化超聲波測距的參數
void initUltrasoundDistance()
{
  pinMode(trigPin, OUTPUT); //設置為輸出
  pinMode(echoPin, INPUT);  //設置為輸入
}

//獲取超聲波測距的數據
int getUltrasoundDistance()
{
  digitalWrite(trigPin, LOW);                                              //設置電平
  delayMicroseconds(2);                                                    //延遲微妙
                                                                          //
  digitalWrite(trigPin, HIGH);                                             //設置電平
  delayMicroseconds(10);                                                   //延遲微妙
  digitalWrite(trigPin, LOW);                                              //設置電平
                                                                          //
  long duration = pulseIn(echoPin, HIGH);                                  //讀取echoPin,以微秒為單位返回聲波傳播時間 //持續時間
                                                                          //
  int distance = duration * 0.034 / 2;                                     //計算距離
  Serial.print("Distance: ");                                              //打印距離
  Serial.println(distance);                                                //打印距離
                                                                          //
  float percentage = ((float)distance - topValue) / (botValue - topValue); //計算數據的百分比
  Serial.print("Percentage: ");                                            //打印百分比
  Serial.println(percentage);                                              //打印百分比
  return percentage;
}

說明:

注意更改 WIFI名稱和密碼,超聲波數據的引腳等


評論已關閉

Top