自动化抽水系统实现监测端(测试版)

@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