ESP8266 + DHT11 AWS IOT Thing не обновляет thing shadow - работал раньше

Мне удалось заставить это работать ... https://www.youtube.com/watch?v=8hpro1olRK0 - отправьте SMS и электронную почту с данными о температуре и влажности от AWS IOT с помощью esp8266 + dht11, но внезапно он перестал обновлять тень.

Вот код

#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);
}

Результат как и ожидалось

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}}}

, 👍0

Обсуждение

#включить<ESP8266WiFi.h> #включить<DHT11.h> #включить<AmazonIOTClient.h> #включить<ESP8266AWSImplementations.h> Esp8266HttpClient HttpClient; Esp8266DateTimeProvider dateTimeProvider; AmazonIOTClient iotClient; ActionError actionError;, @Susindran Srinivasan

Небольшая коррекция на выходе, иногда она идеальна, но иногда я получаю тайм-аут приема данных сервера времени {"состояние":{"отчет": {"Влажность": 41.00, "Температура": 31.00}}}al1x5kb4rzh0x.iot.us-west-2.amazonaws.com 443 POST /things/ESP/shadow HTTP/1.1 ------------------------ {"состояние":{"отчет": {"Влажность": 41.00, "Температура": 31.00}}}тайм-аут приема данных сервера времени, @Susindran Srinivasan

Я также сталкиваюсь с той же проблемой, и все же я не получил никакого ответа...в настоящее время я также работаю над этим, @Soumen Nayak

Кто-нибудь смог это решить? У меня та же проблема, @David Glass

Я планирую попробовать очистить библиотеки AWSiot, которые работали в прошлый раз, но сейчас для меня работает только одно устройство. Возможно, я мог бы попробовать другой набор кода. Пожалуйста, поделитесь своим кодом, ребята - я постараюсь помочь. Также я пробую разные ключи AWS., @Susindran Srinivasan

Пожалуйста, опубликуйте библиотеки aws iot, которые вы используете. Ot уверен, что изменилось, но ничего не работает и тень вещи не обновляется, @Susindran Srinivasan


2 ответа


1

Я столкнулся с аналогичной проблемой: безуспешно пытался обновить тень вещи в IoT AWS. После некоторых исследований я обнаружил, что использую устаревшую библиотеку. В этом вопросе они советуют использовать aws-sdk-arduinoот heskew в ветке iot-get-shadow и очистки:

https://github.com/heskew/aws-sdk-arduino/tree/iot-get-shadow-and-cleanup.

Кроме того, я думаю, что в вашем коде есть небольшая ошибка. Насколько я знаю, AWSPath, это должно выглядеть так:

iotClient.setAWSPath("/things/esp8266/shadow");

По крайней мере, это работает для меня, и они используют это таким образом в этом видео.

Это все, что я могу сказать... Я тоже учусь в этот момент. Надеюсь, это поможет!!

,

Большое вам спасибо за ваш ответ, очень ценю это. Мое имя на самом деле ESP, поэтому я установил его как ---iotClient.setAWSPath("/вещи/ESP/тень");--- или это должно быть только esp8266? я удалил старые библиотеки и использовал вышеприведенную, но все равно моя тень не обновляется. Пожалуйста, помогите. Другой пример видео, на которое вы ссылались, - это тоже не работает, @Susindran Srinivasan

https://arduinoprosto.ru/q/51059/esp8266-dht11-aws-iot-thing-not-updating-thing-shadow-was-working-before, @Susindran Srinivasan


1

Просто измените тему Aws : это должно быть $aws/вещи/esp8266/тень/обновление

и вам также нужно добавить путь к сертификату

,