This is a project I have been working on and off for some time now to produce an device which will monitor the temperature of an aquarium and notify the owner through a mobile app allowing them to take action on an otherwise unnoticed issue.
I have been using the Zentser app for this as it seems like it should be well suited to this application if I could just sort the coding using the ESP8266 wifi board and a DS18B20 temperature sensor
coding is as below
/*#include <YOUR_SENSORS_LIBRARY> */
#include <OneWire.h>
#include <DallasTemperature.h>
char const *ssid = "BT-HSAJ86";
char const *wiFiPassword = "XrpGXTDPAUFd4u";
// Replace on generated code from Zentser Application
// --- START ---
static const char caCert[] PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
static const char caCert[] PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF
ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6
b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL
MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv
b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj
ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM
9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw
IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6
VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L
93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm
jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA
A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI
U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs
N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv
o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU
5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy
rqXRfboQnoZsG4q5WTP468SQvvG5
-----END CERTIFICATE-----
)EOF";
static const char cert[] PROGMEM = R"KEY(
-----BEGIN CERTIFICATE-----
MIIDWTCCAkGgAwIBAgIUES2kO/WdmCKdhLoC18nVrQnSBFgwDQYJKoZIhvcNAQEL
BQAwTTFLMEkGA1UECwxCQW1hem9uIFdlYiBTZXJ2aWNlcyBPPUFtYXpvbi5jb20g
SW5jLiBMPVNlYXR0bGUgU1Q9V2FzaGluZ3RvbiBDPVVTMB4XDTIyMDkxNTExNDUy
MFoXDTQ5MTIzMTIzNTk1OVowHjEcMBoGA1UEAwwTQVdTIElvVCBDZXJ0aWZpY2F0
ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7/AtFr8g+BPym5hwSj
Q0jrKWsUFmK6Mbv16PgsRPS2wyZF9/PsVTg51bFSoaLs2+kTJA/0REBYRjnh33yE
HvQoYuDDYmm4CSVMD6HMgnz2QlwS9aIwx3Co7eo94dfMWuzcvrBPghyQ3vyKqN3E
NK+0+CIdVBDQpeSn1oPuyvExAraJLTDcgIahhH9ELcTaCmv2u/zDrMREJvcQceJu
YDGieKEuBBIhIeEpOQY/jJJVmGz3R5oxL1l3OeN3jlf5f+rpRo9Km6rHW+a0UudK
mrrS/rZrCLkDeR0H+0qaBU7XrZOf4isKUShrjqVK19vI/wN82I+kpcPCprZ11+an
pKUCAwEAAaNgMF4wHwYDVR0jBBgwFoAUO70Cx9v0FtPNMYYDrMdMQOq3uDkwHQYD
VR0OBBYEFJaZ8emX71v2NbC1HnjFJA+xdjTNMAwGA1UdEwEB/wQCMAAwDgYDVR0P
AQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4IBAQBQILTFSPmn6Fx8jymORAE8Eft1
czZgxsUajS5F6Atrw1l4XB0BmrwXmqHTAi/so8SY5ucq9JzX4O3p6lOyjTBnZpG0
OU3eA+U7szC9z3r0FN1dmqibgEriY83p7FsinZ2dnF8XNQyUHEZ3zW8cWciBHEMn
WadoTUiwaIGW4YqD/9twBJ3PRkM1zX9QaBFoncI4wo1TGEllPb3YBqDYrfk5DhlG
ysV1BA5SPvvBTfRz8cDr6UyWCOZ1ONfad8ifn8QjVTZry9J+ZAp8T2fvtTUDKt91
tpp3MOoaTDAHomLsOM+r2fqa9D/95F4ax+U6YII/9QUbUU/7Frac9lIvTysz
-----END CERTIFICATE-----
)KEY";
static const char privateKey[] PROGMEM = R"KEY(
-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEAvv8C0WvyD4E/KbmHBKNDSOspaxQWYroxu/Xo+CxE9LbDJkX3
8+xVODnVsVKhouzb6RMkD/REQFhGOeHffIQe9Chi4MNiabgJJUwPocyCfPZCXBL1
ojDHcKjt6j3h18xa7Ny+sE+CHJDe/Iqo3cQ0r7T4Ih1UENCl5KfWg+7K8TECtokt
MNyAhqGEf0QtxNoKa/a7/MOsxEQm9xBx4m5gMaJ4oS4EEiEh4Sk5Bj+MklWYbPdH
mjEvWXc543eOV/l/6ulGj0qbqsdb5rRS50qautL+tmsIuQN5HQf7SpoFTtetk5/i
KwpRKGuOpUrX28j/A3zYj6Slw8KmtnXX5qekpQIDAQABAoIBAQC1hMzb1Zhm7fHm
qMFOQg+3ZG+nqZ6g085ikZKJEiGy5WNQo5zEgO55ElYqQZsGqc9SkvNqCj83W+3a
IvXwc+yrJRrb/DUyvkpK3R/aKPA27SAiO46hR3S0eIgsYAWcv0YG6MB99gJ1PaX/
I5TbtxZPi1Frsq3rkTCowG5aUv8i+0nu+bL82BCPM4lHHcU0VDLbPR+ss5mIwDbB
/P4hTeT5HuCnDKEP/XDPsGGlz+RPQOgLu++cmp9WUQMCMS1nTGx82ooQJIxfn0k3
dpyjOc8Pv36cWMhAvQ40JF7jzRWJ/rnqBItVA+8UG836oXmL9dai+K6hoqucQ3Ji
2Z/UXDShAoGBAOHibKG/glBu4mZPUAYpKvC4F/m61r5ziwTOsw6WrjsSySOX5zNF
Vco3QbMMcNctFsTzDflZ9U3xHMYfBDUpTh829tCKk6j/BJZd64SkTSN0KjnWEd9D
iPE7jUxbRykvWhevDDgSL4WiaSphTkx0CM71PN+qrD5T0MT9XLDlAuEtAoGBANh1
05CyifRI+Bx6myHEaOHMf4kVBFqHnGr8AU3IPx9bp6uYl4ale51iKT9H1yAp+fBd
HrHoQFYMrNz/mUyHgsQu/xAjOc3uAV2XBcqiEnz0NSQiMwaOvQAMUA+iJc+zrBzX
lTElTqrr8xGWnWgMTokrGgy0N/6/iqP93F95xkxZAoGBAMBa8gk3rYBTPObFCa+F
ZTTCgGBAtFhQyoTYhHCa7loN4E04MUFe/PSL453WrUz/75DeLfs2mQe7mLY6eXnP
59/7DWl/aMkUCdMGveYhiDL13HOOEYAf4cET5nqsjEfNNBpRDcW97swNByN445WF
hm6/Ngx+KdmVxIXMAB//lVktAoGBANESXVpxWBX/NMYtFhGzZ6pQnw6EokPeoBIl
fgzm0TE0keqH5DNFOvR0j2pztTF32dVz2+XycdGrRHvg1Oy6Jm/fBLVNkNN6gw8m
g42IpVrTdVCFR8uZqquVOO8gqmzHGgJxp8RkSGuGoqvmUfrhiCms2+hRWZRQ5VQo
KuZ89C9hAoGBAK2ajW0Lno5Ck8nbNJLF8QHRw47mVyL0toJsNsh/CHXtrnK5eTxZ
A1tl7U5G7qijMeqevK3U/fKHIFRVBMD056OHugjISHTUxm4PrPAJmgMsyOX1n2Id
O706x+TwNSdXAIWmcwV0Rc8t0NtCIJX2qn0JCPZyRh/fbVg/8x69XiAC
-----END RSA PRIVATE KEY-----
)KEY";
String deviceId = "154872";
Sensor sensors[] {
Sensor("274", "Temperature (C)"),
};
// --- END ---
AWSConfig aws = AWSConfig(deviceId, sensors); // init AWS function
// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 1
/********************************************************************/
// Setup a oneWire instance to communicate with any OneWire devices
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
/********************************************************************/
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensor(&oneWire);
float TempC;
// Function to connect to WiFi
void connectToWiFi() {
Serial.print("\nConnecting to AP ...");
WiFi.begin(ssid, wiFiPassword);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to AP");
}
// initial function at starting your microcontroller (ESP, Arduino, etc)
void setup() {
Serial.begin(115200); // init serial for logging
connectToWiFi(); // call function to start WiFi connection
//get AWS certificates to authenticate sending sensor data
aws.setupAWSCertificates(cert, privateKey, caCert);
// connect and start your sensor
// start serial port
Serial.begin(9600);
Serial.println("Dallas Temperature IC Control Library Demo");
// Start up the library
sensor.begin();
delay(500);
}
// main loop for microcontroller where you will collect and send sensor data
void loop() {
// Check Wifi connection is still active
if (WiFi.status() != WL_CONNECTED) {
connectToWiFi();
}
// MODIFY to get sensor readings from hardware connected to your microcontroller
Serial.print(" Requesting temperatures...");
sensor.requestTemperatures(); // Send the command to get temperature readings
Serial.println("DONE");
Serial.print("Temperature is: ");
Serial.print(sensor.getTempCByIndex(0)); // Why "byIndex"?
// You can have more than one DS18B20 on the same bus.
// 0 refers to the first IC on the wire
sensors[0].value = TempC;
aws.sendSensorsTelemetry();
// check that we're not bombarding Zentser with too much data
// don't want to bring the system down in unintended DDoS attack
aws.delayNextRead();
}
type or paste code here
currently the sensor seems to be communicating with the app but is always returning a temperature of 0
I have been looking at this for a while and cannot work out why my initial thought was that the 0 is this line should match the 274 which looks like it has been generated by the app as a name for the sensor - I don't have any logic behind this reasoning but thought I would give it a go anyway - this code runs but still has the same issue
sensors[0].value = TempC;
aws.sendSensorsTelemetry();
I have been looking at this for about a week now at the same stage and I am no closer to a solution so any advice would be magic
Thanks