Created
January 8, 2021 15:20
-
-
Save slav123/00e2231742edd91ad27472369a965654 to your computer and use it in GitHub Desktop.
Arduino Water Level sensor with battery check
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <ESP8266WiFi.h> | |
#include <ESP8266HTTPClient.h> | |
#include <ArduinoJson.h> | |
#define trigPin 14 // d5 | |
#define echoPin 12 // d6 | |
#define SERVER_IP "10.0.0.55" | |
const int analogInPin = A0; | |
float vOUT = 0.0; | |
float vIN = 0.0; | |
float R2 = 7500.0; | |
float R1 = 30000.0; | |
// WiFi credentials. | |
const char* WIFI_SSID = "wifi-name"; | |
const char* WIFI_PASS = "wifi-password"; | |
WiFiClientSecure wifiClient; | |
void connect() { | |
// Connect to Wifi. | |
Serial.println(); | |
Serial.print("Connecting to "); | |
Serial.println(WIFI_SSID); | |
WiFi.begin(WIFI_SSID, WIFI_PASS); | |
// WiFi fix: https://github.com/esp8266/Arduino/issues/2186 | |
WiFi.persistent(false); | |
WiFi.mode(WIFI_OFF); | |
WiFi.mode(WIFI_STA); | |
WiFi.begin(WIFI_SSID, WIFI_PASS); | |
unsigned long wifiConnectStart = millis(); | |
while (WiFi.status() != WL_CONNECTED) { | |
// Check to see if | |
if (WiFi.status() == WL_CONNECT_FAILED) { | |
Serial.println("Failed to connect to WiFi. Please verify credentials: "); | |
delay(10000); | |
} | |
delay(500); | |
Serial.println("..."); | |
// Only try for 5 seconds. | |
if (millis() - wifiConnectStart > 15000) { | |
Serial.println("Failed to connect to WiFi"); | |
return; | |
} | |
} | |
Serial.println(""); | |
Serial.println("WiFi connected"); | |
Serial.println("IP address: "); | |
Serial.println(WiFi.localIP()); | |
Serial.println(); | |
} | |
void sendData(int distance, float voltage) { | |
Serial.print("Sending data to collector..."); | |
HTTPClient http; | |
http.begin("http://" SERVER_IP "/home/store"); | |
http.addHeader("Content-Type", "application/json"); | |
http.addHeader("Accept", "application/json"); | |
DynamicJsonDocument root(1024); | |
root["distance"] = distance; | |
root["voltage"] = voltage; | |
String json; | |
serializeJson(root, json); | |
Serial.println(json); | |
int httpCode = http.POST(json); | |
if (httpCode > 0) { | |
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_CREATED) { | |
Serial.println("Return code is ok"); | |
// Read response | |
Serial.print(http.getString()); | |
} else { | |
Serial.printf("Return code %d\n", httpCode); | |
if (httpCode == 400) { | |
Serial.println("Validation error: The device ID, access key, or access secret is not in the proper format."); | |
} else { | |
Serial.println("Unknown response from API"); | |
} | |
return; | |
} | |
} else { | |
return; | |
} | |
http.end(); | |
} | |
// liczymy napiecie z wartosci | |
float calcVoltage(int value) { | |
float vOUT; | |
float vIN; | |
vOUT = (value * 3.3) / 1024.0; | |
vIN = vOUT / (R2 / (R1 + R2)); | |
return vIN; | |
} | |
// liczy odleglosc | |
int sonar() { | |
long duration; | |
int distance; | |
// Clears the trigPin | |
digitalWrite(trigPin, LOW); | |
delayMicroseconds(2); | |
// Sets the trigPin on HIGH state for 10 micro seconds | |
digitalWrite(trigPin, HIGH); | |
delayMicroseconds(10); | |
digitalWrite(trigPin, LOW); | |
// Reads the echoPin, returns the sound wave travel time in microseconds | |
duration = pulseIn(echoPin, HIGH); | |
// Calculating the distance | |
distance = duration * 0.034 / 2; | |
return distance; | |
} | |
void setup(void) { | |
pinMode(LED_BUILTIN, OUTPUT); | |
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output | |
pinMode(echoPin, INPUT); // Sets the echoPin as an Input | |
digitalWrite(LED_BUILTIN, 0); | |
Serial.begin(115200); | |
//Serial.setTimeout(2000); | |
Serial.println(""); | |
// while(!Serial) { } | |
connect(); | |
int distance; | |
int value; | |
float voltage; | |
distance = sonar(); | |
value = analogRead(analogInPin); | |
voltage = calcVoltage(value); | |
sendData(distance, voltage, value); | |
Serial.println("sleep"); | |
ESP.deepSleep(30e6); | |
} | |
void loop() { | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment