· 5 years ago · Nov 03, 2020, 09:42 PM
1#include <Arduino.h>
2
3#include <Wire.h>
4#include <LiquidCrystal_I2C.h>
5#include <DS3231.h>
6#include <OneWire.h>
7#include <DallasTemperature.h>
8#include <SoftwareSerial.h>
9#include <SPI.h>
10#include <nRF24L01.h>
11#include <RF24.h>
12#define ONE_WIRE_BUS 8
13#define BACKLIGHT_PIN 3
14LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7);
15//NewSoftSerial mySerial = NewSoftSerial(2, 3);
16SoftwareSerial virtualSerial(2, 3);
17DS3231 rtc(SDA, SCL);
18int readcounter = 0;
19OneWire oneWire(ONE_WIRE_BUS);
20DallasTemperature sensors(& oneWire);
21float temperatura_wewnetrzna;
22float temperatura_zewnetrzna_bmp;
23float dane[4];
24RF24 radio(9, 10); // CE, CSN
25
26float temp_wewn, temp_zewn, wilg, cisnienie;
27
28
29int licznik_ekranow = 1;
30int ekran_plus = 7;
31int ekran_minus = 5;
32int resetuj = 6;
33
34boolean obecny_plus = LOW;
35boolean ostatni_plus = LOW;
36boolean ostatni_minus = LOW;
37boolean obecny_minus = LOW;
38
39String apiKey = "UIP3W43H4ZY7R0JR"; //Write API key Thingspeak
40
41String ssid = "sciszone"; // Nazwa WiFi
42String haslo = "B2h89whpb88o"; // Hasło
43
44boolean DEBUG = true;
45const uint64_t paczka = 0x12345678;
46
47void showResponse(int waitTime) {
48 long t = millis();
49 char c;
50 while (t + waitTime > millis()) {
51 if (virtualSerial.available()) {
52 c = virtualSerial.read();
53 if (DEBUG) Serial.print(c);
54 }
55 }
56}
57
58//===============================================================
59void setup() {
60 DEBUG = true;
61 lcd.begin(20, 4); // initialize the lcd
62 lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
63 lcd.setBacklight(HIGH);
64 virtualSerial.begin(9600);
65 Serial.begin(9600);
66
67 radio.begin();
68 radio.openReadingPipe(1, paczka);
69 radio.setPALevel(RF24_PA_MIN);
70 radio.startListening();
71
72 sensors.begin();
73 rtc.begin();
74 //rtc.setDOW(SUNDAY); // Set Day-of-Week to SUNDAY
75 //rtc.setTime(17, 50, 0); // Set the time to 12:00:00 (24hr format)
76 //rtc.setDate(1, 11, 2020); // Set the date to January 1st, 2014
77
78 pinMode(ekran_minus, INPUT_PULLUP);
79 pinMode(ekran_plus, INPUT_PULLUP);
80 pinMode(resetuj, INPUT_PULLUP);
81
82boolean obecny_plus = LOW;
83boolean ostatni_plus = LOW;
84boolean ostatni_minus = LOW;
85boolean obecny_minus = LOW;
86
87//virtualSerial.println("AT+CIOBAUD=9600");
88//showResponse(1000);
89
90virtualSerial.println("AT+RST");
91showResponse(1000);
92
93virtualSerial.println("AT+CWMODE=1"); // set esp8266 as client
94 showResponse(1500);
95
96 virtualSerial.println("AT+CWJAP=\"" + ssid + "\",\"" + haslo + "\""); // set your home router SSID and password
97 showResponse(5000);
98
99 Serial.println("Setup completed");
100}
101 boolean debounce(boolean ostatni, int pin) {
102 boolean obecny = digitalRead(pin);
103 if (ostatni != obecny) {
104 delay(5);
105 obecny = digitalRead(pin);
106 }
107 return obecny;
108}
109//============================================================
110void loop(void){
111 readcounter++;
112 //float temperatura_wewnetrzna, temperatura_zewnetrzna, cisnienie, wilgotnosc;
113 float (temp_wewn, temp_zewn, wilg, cisnienie); //temp_bmp;
114 //temp_wewnetrzna = sensors.getTempCByIndex(0);
115
116 sensors.requestTemperatures();
117 temp_wewn = sensors.getTempCByIndex(0);
118
119 if (radio.available()) {
120 bool done = false;
121 while (!done) {
122 radio.read(dane, sizeof(dane));
123 }
124 temp_zewn=dane[0];
125 temp_bmp=dane[2];
126 wilg = dane[1];
127 cisnienie = dane[3];
128
129 }
130
131
132 Serial.print(dane[0]);
133Serial.print(" ");
134Serial.println(temp_zewn);
135Serial.print(dane[1]);
136Serial.print(" ");
137Serial.print(wilg);
138
139
140 if (readcounter == 300){
141
142 lcd.clear();
143 lcd.setCursor(5, 0);
144 lcd.print("WYSYLANIE");
145 lcd.setCursor(7, 1);
146 lcd.print("DANYCH");
147 lcd.setCursor(9, 2);
148 lcd.print("NA");
149 lcd.setCursor(7, 3);
150 lcd.print("SERWER!");
151
152 thingSpeakWrite(temp_wewn, temp_zewn, wilg, cisnienie); //cisnienie);
153
154 readcounter = 0;
155 lcd.clear();
156 }
157
158//////////////////////PRZYCISKI/////////////////////////////
159 obecny_plus = debounce(ostatni_plus, ekran_plus); //Debounce for Up button
160 obecny_minus = debounce(ostatni_minus, ekran_minus); //Debounce for Down button
161
162 //Page Up
163 if (ostatni_plus == LOW && obecny_plus == HIGH) { //When up button is pressed
164 lcd.clear(); //When page is changed, lcd clear to print new page
165 if (licznik_ekranow < 3) { //Page counter never higher than 3(total of pages)
166 licznik_ekranow = licznik_ekranow + 1; //Page up
167
168 } else {
169 licznik_ekranow = 3;
170 }
171 }
172
173 ostatni_plus = obecny_plus;
174
175 //Page Down
176 if (ostatni_minus == LOW && obecny_minus == HIGH) { //When down button is pressed
177 lcd.clear(); //When page is changed, lcd clear to print new page
178 if (licznik_ekranow > 1) { //Page counter never lower than 1 (total of pages)
179 licznik_ekranow = licznik_ekranow - 1; //Page down
180
181 } else {
182 licznik_ekranow = 1;
183 }
184 }
185
186 ostatni_minus = obecny_minus;
187 //////////////////////////////////////////////////////////////
188
189
190switch (licznik_ekranow) {
191
192 case 1:
193 { //Design of home page 1
194
195
196 lcd.setCursor(3, 2);
197 //lcd.write((uint8_t)1);
198 lcd.print("T zewn: ");
199 lcd.print(temp_zewn);
200
201 //lcd.write((uint8_t)0);
202 // lcd.write(0);
203 lcd.setCursor(3, 3);
204 //lcd.write((uint8_t)1);
205 lcd.print(" Wewn: ");
206 lcd.print(temperatura_wewnetrzna);
207
208 // lcd.write((uint8_t)0);
209 //lcd.write(0);
210 }
211 break;
212
213 case 2:
214 { //Design of page 2
215
216
217 lcd.setCursor(0, 2);
218 lcd.write("Wilgotnosc ");
219 //lcd.write((uint8_t)2);
220 lcd.print(" ");
221 lcd.print(dane[1]);
222 lcd.print(" %");
223 lcd.setCursor(0, 3);
224 lcd.print(" Cisn ");
225 lcd.print(dane[3]);
226 lcd.print(" hPa");
227 }
228 break;
229
230
231 case 3:
232 { //Design of page 3
233 lcd.setCursor(2, 2);
234 lcd.print("Temp BMP");
235 lcd.setCursor(7, 3);
236 lcd.print(dane[2]);
237 lcd.print(" C");
238
239
240 }
241 break;
242}
243
244
245
246}
247
248void thingSpeakWrite(float value1, float value2, float value3, float value4) {
249 String cmd = "AT+CIPSTART=\"TCP\",\""; // TCP connection
250 cmd += "184.106.153.149"; // api.thingspeak.com
251 cmd += "\",80";
252 virtualSerial.println(cmd);
253 if (DEBUG) Serial.println(cmd);
254 if (mySerial.find("Error")) {
255 if (DEBUG) Serial.println("AT+CIPSTART error");
256 return false;
257 }
258
259 String getStr = "GET /update?api_key="; // prepare GET string
260 getStr += apiKey;
261
262 getStr += "&field1=";
263 getStr += String(value1);
264 getStr += "&field2=";
265 getStr += String(value2);
266 getStr += "&field3=";
267 getStr += String(value3);
268 getStr += "&field4=";
269 getStr += String(value4);
270 // ...
271 getStr += "\r\n\r\n";
272
273 // send data length
274 cmd = "AT+CIPSEND=";
275
276 cmd += String(getStr.length());
277 virtualSerial.println(cmd);
278 if (DEBUG) Serial.println(cmd);
279
280 delay(200);
281 if (virtualSerial.find(">")) {
282 virtualSerial.print(getStr);
283 if (DEBUG) Serial.print(getStr);
284 } else {
285 virtualSerial.println("AT+CIPCLOSE");
286 // alert user
287 if (DEBUG) Serial.println("AT+CIPCLOSE");
288 return false;
289 }
290 return true;
291}