-
Notifications
You must be signed in to change notification settings - Fork 135
/
DS18BTemperatureToThingSpeak.c
246 lines (215 loc) · 5.8 KB
/
DS18BTemperatureToThingSpeak.c
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
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
#include<stdlib.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#define SSID "YOUR SSID HERE"
#define PASS "YOUR PASSWORD HERE"
#define IP "184.106.153.149" // thingspeak.com
String GET = "GET /update?key=YOURTHINGSPEAKAPIKEY&field2=";
void setup()
{
Serial.begin(115200);
sensors.begin();
Serial.println("AT");
delay(5000);
if(Serial.find("OK")){
connectWiFi();
}
}
void loop(){
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
//tempC = DallasTemperature::toFahrenheit(tempC);
char buffer[10];
String tempF = dtostrf(tempC, 4, 1, buffer);
updateTemp(tempF);
//Serial.println(tempF);
delay(60000);
}
void updateTemp(String tempF){
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += IP;
cmd += "\",80";
Serial.println(cmd);
delay(2000);
if(Serial.find("Error")){
return;
}
cmd = GET;
cmd += tempF;
cmd += "\r\n";
Serial.print("AT+CIPSEND=");
Serial.println(cmd.length());
//delay(1000);
if(Serial.find(">")){
Serial.print(cmd);
}else{
Serial.println("AT+CIPCLOSE");
}
}
boolean connectWiFi(){
Serial.println("AT+CWMODE=3");
delay(2000);
String cmd="AT+CWJAP=\"";
cmd+=SSID;
cmd+="\",\"";
cmd+=PASS;
cmd+="\"";
Serial.println(cmd);
delay(5000);
if(Serial.find("OK")){
return true;
}else{
return false;
}
}
After managing to send data to web, I tried to implement a webserver which can post data to my network, from where I can monitor that incoming wifi stream with my browser... Found a wonderful sketch on the net which is written by Ray Wang to test wifi sensor node by ESP8266 unit.... works like a charm... I can monitor all my analog ports with this sketch... easy to be modified to one's needs for other ports... The sketch enables the wifi unit, connects to your wifi network via WPA2-PSK, gets an IP adress from the router and you can monitor your sensor node in your beowser using the unit's IP at port 8080...
/* ====== ESP8266 Demo ======
* Print out analog values
* ==========================
*
* Change SSID and PASS to match your WiFi settings.
* The IP address is displayed to soft serial upon successful connection.
*
* Ray Wang @ Rayshobby LLC
* http://rayshobby.net/?p=9734
*/
// comment this part out if not using LCD debug
#include <SoftwareSerial.h>
SoftwareSerial dbg(7, 8); // using pin 7, 8 for software serial
enum {WIFI_ERROR_NONE=0, WIFI_ERROR_AT, WIFI_ERROR_RST, WIFI_ERROR_SSIDPWD, WIFI_ERROR_SERVER, WIFI_ERROR_UNKNOWN};
#define BUFFER_SIZE 128
#define SSID "YOURSSID" // change this to match your WiFi SSID
#define PASS "YOURPASS" // change this to match your WiFi password
#define PORT "8080" // using port 8080 by default
char buffer[BUFFER_SIZE];
void setup() {
Serial.begin(115200);
Serial.setTimeout(5000);
dbg.begin(9600);
dbg.println("begin.");
byte err = setupWiFi();
if (err) {
// error, print error code
dbg.print("setup error:");
dbg.println((int)err);
} else {
// success, print IP
dbg.print("ip addr:");
char *ip = getIP();
if (ip) {
dbg.println(ip);
}
else {
dbg.println("none");
}
maxTimeout();
}
}
bool maxTimeout() {
// send AT command
Serial.println("AT+CIPSTO=0");
if(Serial.find("OK")) {
return true;
} else {
return false;
}
}
char* getIP() {
// send AT command
Serial.println("AT+CIFSR");
// the response from the module is:
// AT+CIFSR\n\n
// 192.168.x.x\n
// so read util \n three times
Serial.readBytesUntil('\n', buffer, BUFFER_SIZE);
Serial.readBytesUntil('\n', buffer, BUFFER_SIZE);
Serial.readBytesUntil('\n', buffer, BUFFER_SIZE);
buffer[strlen(buffer)-1]=0;
return buffer;
}
void loop() {
int ch_id, packet_len;
char *pb;
Serial.readBytesUntil('\n', buffer, BUFFER_SIZE);
if(strncmp(buffer, "+IPD,", 5)==0) {
// request: +IPD,ch,len:data
sscanf(buffer+5, "%d,%d", &ch_id, &packet_len);
if (packet_len > 0) {
// read serial until packet_len character received
// start from :
pb = buffer+5;
while(*pb!=':') pb++;
pb++;
if (strncmp(pb, "GET /", 5) == 0) {
serve_homepage(ch_id);
}
}
}
}
void serve_homepage(int ch_id) {
String header = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: close\r\nRefresh: 5\r\n";
String content="";
// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
content += "analog input ";
content += analogChannel;
content += " is ";
content += sensorReading;
content += "<br />\n";
}
header += "Content-Length:";
header += (int)(content.length());
header += "\r\n\r\n";
Serial.print("AT+CIPSEND=");
Serial.print(ch_id);
Serial.print(",");
Serial.println(header.length()+content.length());
if (Serial.find(">")) {
Serial.print(header);
Serial.print(content);
delay(20);
}
/*Serial.print("AT+CIPCLOSE=");
Serial.println(ch_id);*/
}
byte setupWiFi() {
Serial.println("AT");
if(!Serial.find("OK")) {
return WIFI_ERROR_AT;
}
delay(500);
// reset WiFi module
Serial.println("AT+RST");
if(!Serial.find("ready")) {
return WIFI_ERROR_RST;
}
delay(500);
// set mode 3
Serial.print("AT+CWJAP=\"");
Serial.print(SSID);
Serial.print("\",\"");
Serial.print(PASS);
Serial.println("\"");
delay(2000);
if(!Serial.find("OK")) {
return WIFI_ERROR_SSIDPWD;
}
delay(500);
// start server
Serial.println("AT+CIPMUX=1");
if(!Serial.find("OK")){
return WIFI_ERROR_SERVER;
}
delay(500);
Serial.print("AT+CIPSERVER=1,"); // turn on TCP service
Serial.println(PORT);
if(!Serial.find("OK")){
return WIFI_ERROR_SERVER;
}
delay(500);
return WIFI_ERROR_NONE;
}