· 6 years ago · Jan 09, 2020, 03:38 PM
1// Library
2#include <ESP8266WiFi.h>
3#include <NewPing.h>
4
5// Thingspeak API key,
6String apiKey = "zzz";
7
8// WiFi settings
9const char* ssid = "id";
10const char* password = "pass";
11
12// Calculate time
13uint32_t bootTime, setupTime, WiFiTime;
14
15// Static IP details...
16IPAddress ip(192, 168, 1, 109);
17IPAddress gateway(192, 168, 1, 1);
18IPAddress subnet(255, 255, 255, 0);
19IPAddress dns(192, 168, 1, 1);
20
21// Host
22const char* server = "api.thingspeak.com";
23
24// Time to sleep (in minute):
25const int sleepTimeS = 15;
26
27WiFiClient client;
28//****************Ping sensor stuff******************
29#define TRIGGER_PIN 4 // Arduino pin tied to trigger pin on the ultrasonic sensor. orange
30#define ECHO_PIN 5 // Arduino pin tied to echo pin on the ultrasonic sensor. yellow
31#define MAX_DISTANCE 100 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
32
33NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
34
35int waterAtEmpty = 126; //distance in cm of sensor to water level at empty.
36int waterAtFull = 5; //distance in cm from sensor to water level at full.
37int dist;
38const int T1 = 12;//ping sensor power pin
39
40RF_PRE_INIT() {
41bootTime = millis();
42}
43
44void setup() {
45 setupTime=millis();
46 Serial.begin(74880);
47 delay(10);
48 pinMode(T1, OUTPUT);
49 digitalWrite(T1, LOW); // put sensor on sleep mode
50 pinMode(D0, WAKEUP_PULLUP);
51
52 WiFi.mode(WIFI_STA);
53 WiFi.config(ip, dns, gateway, subnet);
54 WiFi.begin(ssid, password);
55
56 // Attempt to connect
57 Serial.println();
58 Serial.printf("Core: %s/%s\n",ESP.getCoreVersion().c_str(),ESP.getSdkVersion());
59 Serial.println(ESP.getResetReason().c_str());
60 Serial.print("Connecting to ");
61 Serial.println(ssid);
62 int wifi_timeout = 0;
63 while (WiFi.status() != WL_CONNECTED)
64 {
65 delay(10);
66 wifi_timeout++;
67 delay(500);
68 Serial.print(".");
69 if(wifi_timeout > 20)
70 {
71 unsigned long sleeptimer = (sleepTimeS * 60) * 1000000;
72 Serial.println("");
73 Serial.println("Failed to connect to Wifi after 10 seconds!");
74 Serial.println("ESP8266 in sleep mode for " + String(sleepTimeS) + " minutes");
75 ESP.deepSleep(sleeptimer);
76 }
77 }
78 long WiFiTime = millis();
79 Serial.println("");
80 Serial.print("Connected to ");
81 Serial.println(ssid);
82 Serial.print("IP address: ");
83 Serial.println(WiFi.localIP());
84 Serial.printf("bootTime: %d ms setupTime: %d ms WifiTime %d ms\n", bootTime, setupTime, WiFiTime);
85 Serial.print("RSSI: ");
86 Serial.println(WiFi.RSSI());
87
88 //*******read water level*****
89 digitalWrite(T1, HIGH);//turn on ping sensor via 8050 transistor
90 delay(1000);//warm up ping sensor
91 unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
92 delay(100);
93 uS = sonar.ping();
94 delay(100);
95 uS = sonar.ping();
96 delay(100);
97 digitalWrite(T1, LOW);//turn off ping sensor, save power!
98 dist = (uS / US_ROUNDTRIP_CM); //raw distance in cm.
99 int waterRange = waterAtEmpty - waterAtFull; //difference between full and empty in cm.
100 int adjDist = dist - waterAtFull; //water level from full in cm.
101 float percent = map(adjDist, waterRange, 0, 0, 100); //Map waterRange to percent.
102
103 //*******read batt voltage*******
104 // read the input on analog pin 0:
105 int sensorValue = analogRead(A0);
106 // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 3.2V):
107 float voltage = ((analogRead(A0)) / 165.50);//This needs to be adjusted for each case to be accurate.
108
109//*******send to thingspeak*****
110 if (client.connect(server, 80)) { // "184.106.153.149" or api.thingspeak.com
111 String postStr = apiKey;
112 postStr += "&field1=";
113 postStr += String(percent);
114 postStr += "&field2=";
115 postStr += String(voltage);
116 postStr += "\r\n\r\n";
117 //postStr += "\r\n";
118
119 client.print("POST /update HTTP/1.1\n");
120 client.print("Host: api.thingspeak.com\n");
121 client.print("Connection: close\n");
122 client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n");
123 client.print("Content-Type: application/x-www-form-urlencoded\n");
124 client.print("Content-Length: ");
125 client.print(postStr.length());
126 client.print("\n\n");
127 client.print(postStr);
128 client.stop();
129
130 Serial.print("Tank level ");
131 Serial.print(percent);
132 Serial.print(",A0 sensor Value ");
133 Serial.print(sensorValue);
134 Serial.print(",Batt voltage ");
135 Serial.print(voltage);
136 Serial.print("\n");
137 Serial.println("Data sent to Thingspeak");
138 }
139
140
141delay(1000);
142 // Sleep
143 Serial.println("Closing connection");
144 Serial.println("ESP8266 in sleep mode for " + String(sleepTimeS) + " minutes");
145 unsigned long sleeptimer = (sleepTimeS * 60) * 1000000;
146 ESP.deepSleep(sleeptimer);
147}
148
149void loop() {
150 // We don't do anything in here
151}