-
Notifications
You must be signed in to change notification settings - Fork 0
/
WebGyBMP280.ino
222 lines (196 loc) · 9.5 KB
/
WebGyBMP280.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ThingSpeak.h>
// assign the ESP8266 pins to arduino pins
#define D1 5 //gpio05
#define D2 4 //gpio04
#define D3 0 //gpio00
#define D4 2 //gpio02
// assign the SPI bus to pins
#define BMP_SCK D1 // Serial Clock
#define BMP_MISO D4 // Serial Data Out
#define BMP_MOSI D2 // Serial Data In
#define BMP_CS D3 // Chip Select
#define SEALEVELPRESSURE_HPA (1013.25)
#ifndef STASSID
#define STASSID "SSID"
#define STAPSK "password"
#endif
float temperature, pressure, altitude;
const char* ssid = STASSID;
const char* password = STAPSK;
ESP8266WebServer server(80);
//Adafruit_BMP280 bmp; // I2C
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);
//api
unsigned long myChannelNumber = 1193624;
const char * myWriteAPIKey = "E5Z7SA2XWB06ML07";
WiFiClient client;
void setup() {
Serial.begin(9600);
Serial.println(F("BMP280 test"));
if (!bmp.begin()) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
// while (1);//loop if not detect bmp
}
Serial.println("Inicio de la wifi......");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// Initialize ThingSpeak
ThingSpeak.begin(client);
server.on("/temp", bmp280);
server.on("/inline", []() {
server.send(200, "text/plain", "this works as well");
});
server.onNotFound(handleNotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop() {
server.handleClient();
temperature = bmp.readTemperature();
pressure =bmp.readPressure()*0.01;
altitude = bmp.readAltitude(1013.25);
// set the fields with the values
ThingSpeak.setField(1, temperature);
ThingSpeak.setField(2, altitude);
ThingSpeak.setField(3, pressure);
ThingSpeak.setStatus(String("Ok...."));
// write to the ThingSpeak channel
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if(x == 200){
Serial.println("Channel update successful.");
}
else{
Serial.println("Problem updating channel. HTTP error code " + String(x));
}
delay(20000);
}
void bmp280(){
Serial.print(F("Temperature = "));
Serial.print(temperature);
Serial.println(" *C");
Serial.print(F("Pressure = "));
Serial.print(pressure);
Serial.println(" hPa");
Serial.print(F("Approx altitude = "));
Serial.print(altitude); /* Adjusted to local forecast! */
Serial.println(" m");
Serial.println();
server.send(200, "text/html", SendHTML(temperature,pressure,altitude));
}
void handleNotFound() {
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
}
String SendHTML(float temperature,float pressure,float altitude){
String str = "<!DOCTYPE html>";
str +="<html>";
str +="<head>";
str +="<title>ESP8266 Weather Station</title>";
str +="<meta name='viewport' content='width=device-width, initial-scale=1.0'>";
str +="<link href='https://fonts.googleapis.com/css?family=Open+Sans:300,400,600' rel='stylesheet'>";
str +="<style>";
str +="html { font-family: 'Open Sans', sans-serif; display: block; margin: 0px auto; text-align: center;color: #444444;}";
str +="body{margin: 0px;} ";
str +="h1 {margin: 50px auto 30px;} ";
str +=".side-by-side{display: table-cell;vertical-align: middle;position: relative;}";
str +=".text{font-weight: 600;font-size: 19px;width: 200px;}";
str +=".reading{font-weight: 300;font-size: 50px;padding-right: 25px;}";
str +=".temperature .reading{color: #F29C1F;}";
str +=".humidity .reading{color: #3B97D3;}";
str +=".pressure .reading{color: #26B99A;}";
str +=".altitude .reading{color: #955BA5;}";
str +=".superscript{font-size: 17px;font-weight: 600;position: absolute;top: 10px;}";
str +=".data{padding: 10px;}";
str +=".container{display: table;margin: 0 auto;}";
str +=".icon{width:65px}";
str +="</style>";
str +="</head>";
str +="<body>";
str +="<h1>ESP8266 Weather Station</h1>";
str +="<div class='container'>";
str +="<div class='data temperature'>";
str +="<div class='side-by-side icon'>";
str +="<svg enable-background='new 0 0 19.438 54.003'height=54.003px id=Layer_1 version=1.1 viewBox='0 0 19.438 54.003'width=19.438px x=0px xml:space=preserve xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink y=0px><g><path d='M11.976,8.82v-2h4.084V6.063C16.06,2.715,13.345,0,9.996,0H9.313C5.965,0,3.252,2.715,3.252,6.063v30.982";
str +="C1.261,38.825,0,41.403,0,44.286c0,5.367,4.351,9.718,9.719,9.718c5.368,0,9.719-4.351,9.719-9.718";
str +="c0-2.943-1.312-5.574-3.378-7.355V18.436h-3.914v-2h3.914v-2.808h-4.084v-2h4.084V8.82H11.976z M15.302,44.833";
str +="c0,3.083-2.5,5.583-5.583,5.583s-5.583-2.5-5.583-5.583c0-2.279,1.368-4.236,3.326-5.104V24.257C7.462,23.01,8.472,22,9.719,22";
str +="s2.257,1.01,2.257,2.257V39.73C13.934,40.597,15.302,42.554,15.302,44.833z'fill=#F29C21 /></g></svg>";
str +="</div>";
str +="<div class='side-by-side text'>Temperature</div>";
str +="<div class='side-by-side reading'>";
str +=(int)temperature;
str +="<span class='superscript'>°C</span></div>";
str +="</div>";
// str +="<div class='data humidity'>";
// str +="<div class='side-by-side icon'>";
// str +="<svg enable-background='new 0 0 29.235 40.64'height=40.64px id=Layer_1 version=1.1 viewBox='0 0 29.235 40.64'width=29.235px x=0px xml:space=preserve xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink y=0px><path d='M14.618,0C14.618,0,0,17.95,0,26.022C0,34.096,6.544,40.64,14.618,40.64s14.617-6.544,14.617-14.617";
// str +="C29.235,17.95,14.618,0,14.618,0z M13.667,37.135c-5.604,0-10.162-4.56-10.162-10.162c0-0.787,0.638-1.426,1.426-1.426";
// str +="c0.787,0,1.425,0.639,1.425,1.426c0,4.031,3.28,7.312,7.311,7.312c0.787,0,1.425,0.638,1.425,1.425";
// str +="C15.093,36.497,14.455,37.135,13.667,37.135z'fill=#3C97D3 /></svg>";
// str +="</div>";
str +="<div class='data pressure'>";
str +="<div class='side-by-side icon'>";
str +="<svg enable-background='new 0 0 40.542 40.541'height=40.541px id=Layer_1 version=1.1 viewBox='0 0 40.542 40.541'width=40.542px x=0px xml:space=preserve xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink y=0px><g><path d='M34.313,20.271c0-0.552,0.447-1,1-1h5.178c-0.236-4.841-2.163-9.228-5.214-12.593l-3.425,3.424";
str +="c-0.195,0.195-0.451,0.293-0.707,0.293s-0.512-0.098-0.707-0.293c-0.391-0.391-0.391-1.023,0-1.414l3.425-3.424";
str +="c-3.375-3.059-7.776-4.987-12.634-5.215c0.015,0.067,0.041,0.13,0.041,0.202v4.687c0,0.552-0.447,1-1,1s-1-0.448-1-1V0.25";
str +="c0-0.071,0.026-0.134,0.041-0.202C14.39,0.279,9.936,2.256,6.544,5.385l3.576,3.577c0.391,0.391,0.391,1.024,0,1.414";
str +="c-0.195,0.195-0.451,0.293-0.707,0.293s-0.512-0.098-0.707-0.293L5.142,6.812c-2.98,3.348-4.858,7.682-5.092,12.459h4.804";
str +="c0.552,0,1,0.448,1,1s-0.448,1-1,1H0.05c0.525,10.728,9.362,19.271,20.22,19.271c10.857,0,19.696-8.543,20.22-19.271h-5.178";
str +="C34.76,21.271,34.313,20.823,34.313,20.271z M23.084,22.037c-0.559,1.561-2.274,2.372-3.833,1.814";
str +="c-1.561-0.557-2.373-2.272-1.815-3.833c0.372-1.041,1.263-1.737,2.277-1.928L25.2,7.202L22.497,19.05";
str +="C23.196,19.843,23.464,20.973,23.084,22.037z'fill=#26B999 /></g></svg>";
str +="</div>";
str +="<div class='side-by-side text'>Pressure</div>";
str +="<div class='side-by-side reading'>";
str +=pressure;
str +="<span class='superscript'>hPa</span></div>";
str +="</div>";
str +="<div class='data altitude'>";
str +="<div class='side-by-side icon'>";
str +="<svg enable-background='new 0 0 58.422 40.639'height=40.639px id=Layer_1 version=1.1 viewBox='0 0 58.422 40.639'width=58.422px x=0px xml:space=preserve xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink y=0px><g><path d='M58.203,37.754l0.007-0.004L42.09,9.935l-0.001,0.001c-0.356-0.543-0.969-0.902-1.667-0.902";
str +="c-0.655,0-1.231,0.32-1.595,0.808l-0.011-0.007l-0.039,0.067c-0.021,0.03-0.035,0.063-0.054,0.094L22.78,37.692l0.008,0.004";
str +="c-0.149,0.28-0.242,0.594-0.242,0.934c0,1.102,0.894,1.995,1.994,1.995v0.015h31.888c1.101,0,1.994-0.893,1.994-1.994";
str +="C58.422,38.323,58.339,38.024,58.203,37.754z'fill=#955BA5 /><path d='M19.704,38.674l-0.013-0.004l13.544-23.522L25.13,1.156l-0.002,0.001C24.671,0.459,23.885,0,22.985,0";
str +="c-0.84,0-1.582,0.41-2.051,1.038l-0.016-0.01L20.87,1.114c-0.025,0.039-0.046,0.082-0.068,0.124L0.299,36.851l0.013,0.004";
str +="C0.117,37.215,0,37.62,0,38.059c0,1.412,1.147,2.565,2.565,2.565v0.015h16.989c-0.091-0.256-0.149-0.526-0.149-0.813";
str +="C19.405,39.407,19.518,39.019,19.704,38.674z'fill=#955BA5 /></g></svg>";
str +="</div>";
str +="<div class='side-by-side text'>Altitude</div>";
str +="<div class='side-by-side reading'>";
str +=(int)altitude;
str +="<span class='superscript'>m</span></div>";
str +="</div>";
str +="</div>";
str +="</body>";
str +="</html>";
return str;
}