I was able to get this working - https://www.youtube.com/watch?v=8hpro1olRK0 - send an SMS and email of temperature and humidity data from AWS IOT using esp8266 + dht11 but all of a sudden it stopped updating the shadow.
Here is the code
#include <ESP8266WiFi.h>
#include <DHT11.h>
#include <AmazonIOTClient.h>
#include <ESP8266AWSImplementations.h>
Esp8266HttpClient httpClient;
Esp8266DateTimeProvider dateTimeProvider;
AmazonIOTClient iotClient;
ActionError actionError;
const char* ssid = "";
const char* password = "";
// Pin 2 will be used to read sensor data
int pin = 2;
// Initializing the sensor
DHT11 dht11(pin);
//Function to convert Celsius to Fahrenheit
double Fahrenheit(double celsius) {
return ((celsius * 9 / 5) + 32);
}
void setup() {
Serial.begin(115200);
delay(10);
Serial.println();
// Connecting to Wi-Fi
WiFi.mode(WIFI_STA);
Serial.println();
Serial.println();
Serial.println("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
iotClient.setAWSRegion("us-west-2");
iotClient.setAWSEndpoint("amazonaws.com");
iotClient.setAWSDomain("al1x5kb4rzh0x.iot.us-west-2.amazonaws.com");
iotClient.setAWSPath("$aws/things/esp8266/shadow/update/accepted");
iotClient.setAWSKeyID("AKIAJJQ6ASLIDIPBE4PQ");
iotClient.setAWSSecretKey("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");
iotClient.setHttpClient(&httpClient);
iotClient.setDateTimeProvider(&dateTimeProvider);
}
void loop() {
int err;
float temp, humi;
//Reading the sensor data
if ((err = dht11.read(humi, temp)) == 0) {
Serial.print(" temperature:");
Serial.print(temp);
Serial.print(" humidity:");
Serial.print(humi);
Serial.println();
} else {
Serial.println();
Serial.print(" Error No :");
Serial.print(err);
Serial.println();
}
// Converting the float data to char arrays
char sTemp[10], sHumi[10];
dtostrf(humi, 6, 2, sHumi);
dtostrf(temp, 6, 2, sTemp);
// Creating the thing shadow to be sent to aws iot
char shadow[100];
strcpy(shadow, "{\"state\":{\"reported\": {\"Humidity\":");
strcat(shadow, sHumi);
strcat(shadow, ", \"Temperature\":");
strcat(shadow, sTemp);
strcat(shadow, "}}}");
Serial.print(shadow);
char* result = iotClient.update_shadow(shadow, actionError);
Serial.print(result);
delay(60000);
}
Output as expected
Connecting to
NETGEAR53
.........
WiFi connected
temperature:31.00 humidity:32.00
{"state":{"reported": {"Humidity": 32.00, "Temperature": 31.00}}}al1x5kb4rzh0x.iot.us-west-2.amazonaws.com
443
POST $aws/things/esp8266/shadow/update/accepted HTTP/1.1
Content-Type: application/json
Connection: close
Content-Length: 65
Host: al1x5kb4rzh0x.iot.us-west-2.amazonaws.com
x-amz-content-sha256: 923ed1ae613a9e14b45e4d080b092daf5cf61118041dc5225956299d5b0f8d49
x-amz-date: 20180323T034259Z
Authorization: AWS4-HMAC-SHA256 Credential=AKIAJJQ6ASLIDIPBE4PQ/20180323/us-west-2/iotdata/aws4_request,SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date,Signature=a10f0969043e609743412478567c10290b8c000185f2824e4a9cf07bb96cf279
{"state":{"reported": {"Humidity": 32.00, "Temperature": 31.00}}}