下面代碼可能有點簡陋,還請大神輕噴!
硬件:
一、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名稱和密碼,超聲波數據的引腳等
版權屬於:zgcwkj
本文鏈接:https://www.zgcwkj.com/archives/141.html
轉載聲明:請注明本文章的標題及內容的出處和聲明,謝謝
評論已關閉