下面代码可能有点简陋,还请大神轻喷!
硬件:
一、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://blog.zgcwkj.cn/archives/141.html
转载声明:请注明本文章的标题及内容的出处和声明,谢谢
评论已关闭