Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 将esp8266连接到AWS物联网_Arduino_Esp8266_Aws Iot - Fatal编程技术网

Arduino 将esp8266连接到AWS物联网

Arduino 将esp8266连接到AWS物联网,arduino,esp8266,aws-iot,Arduino,Esp8266,Aws Iot,我正在尝试使用基于ESP8266的WeMos D1 mini连接到亚马逊网络服务AWS物联网 但是,当我闪存设备时,会返回403,并显示以下消息: “凭据的作用域应为正确的服务:'执行api'。” 改变 this->awsService = "iotdata"; 到 在AmazonitClient.cpp中,结果为404: “找不到与http方法POST的路由内容/my thing/shadow匹配的方法。” 而且,根据服务的要求,请求成功的前提是“iotdata” 是否有人遇到过同样的

我正在尝试使用基于ESP8266的WeMos D1 mini连接到亚马逊网络服务AWS物联网

但是,当我闪存设备时,会返回403,并显示以下消息: “凭据的作用域应为正确的服务:'执行api'。”

改变

this->awsService = "iotdata";

在AmazonitClient.cpp中,结果为404: “找不到与http方法POST的路由内容/my thing/shadow匹配的方法。” 而且,根据服务的要求,请求成功的前提是“iotdata”

是否有人遇到过同样的问题并找到了让它运行的方法?如果是这样,我们将不胜感激。谢谢

下面是示例的完整代码:

#include <AmazonIOTClient.h>
#include <Esp8266AWSImplementations.h>
#include <AWSFoundationalTypes.h>
#include "keys.h"

const int sleepTimeS = 30;

void printWiFiData();
void printCurrentNetwork();
void publish(const char *topic, String data);
void publishToAWS();

void setup() {

  Serial.begin(9600);

  Serial.println("Started!");

  publishToAWS();
  ESP.deepSleep(sleepTimeS * 1000000);
}

void loop() {
}

void printWiFiData() {

  // IP address
  Serial.print("IP Address: ");
  Serial.println(WiFi.localIP());

  // MAC address
  byte mac[6];
  WiFi.macAddress(mac);
  Serial.print("MAC address: ");
  Serial.print(mac[5], HEX);
  Serial.print(":");
  Serial.print(mac[4], HEX);
  Serial.print(":");
  Serial.print(mac[3], HEX);
  Serial.print(":");
  Serial.print(mac[2], HEX);
  Serial.print(":");
  Serial.print(mac[1], HEX);
  Serial.print(":");
  Serial.println(mac[0], HEX);
}

void printCurrentNetwork() {

  // SSID
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // signal strength:
  Serial.print("signal strength (RSSI): ");
  Serial.println(WiFi.RSSI());
}

void publish(const char *topic, String data) {

  AmazonIOTClient iotClient;
  ActionError actionError;

  Esp8266HttpClient httpClient;
  Esp8266DateTimeProvider dateTimeProvider;

  Serial.println();
  Serial.print("Connecting to ");
  Serial.print(wifiSsid);
  Serial.println("...");

  WiFi.begin(wifiSsid, wifiPwd);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(50);
  }

  Serial.println("");
  Serial.println("WiFi connected");

  printCurrentNetwork();
  printWiFiData();

  delay(50);

  Serial.println("Initializing IoT client...");

  iotClient.setAWSRegion(awsIotRegion);
  iotClient.setAWSEndpoint(awsIotEndpoint);
  iotClient.setAWSDomain(awsIotDomain);
  iotClient.setAWSPath("/things/my-thing/shadow");
  iotClient.setAWSKeyID(awsKeyID);
  iotClient.setAWSSecretKey(awsSecKey);
  iotClient.setHttpClient(&httpClient);
  iotClient.setDateTimeProvider(&dateTimeProvider);

  delay(50);

  Serial.println("Updating thing shadow...");

  MinimalString shadow = ("{\"state\":{\"reported\":{\"text\":" + data + "}}}").c_str();
  char* result = iotClient.update_shadow(shadow, actionError);

  Serial.print("result: ");
  Serial.println(result);
}

void publishToAWS() {

  Serial.println("Publishing to AWS IoT Broker");

  publish("my-thing/text", "Hello World!");
}

我终于可以贡献一些东西了:)

几天前,我得到了一个非常相似的例子。然而,我使用的是同一个库,只是一个不同的分支。我不记得必须做出任何更改,如您所述:

this->awsService=“iotdata”
本->awsService=“执行api”

以下是进入keys.cpp的AWS端点的正确设置

  awsIotRegion = "us-east-1";
  awsIotEndpoint = "amazonaws.com";
  awsIotDomain = "axxxxs2pxxxrlx.iot.us-east-1.amazonaws.com";`
同时添加
delete[]结果
publish()
的末尾,以节省一些宝贵的堆空间

我建议使用iot get shadow and cleanup分支,因为它修复了内存泄漏

我又做了一个更改,以解决在不断更新卷影时堆空间不足的所有问题。在AWSClient4.cpp中,我更改了
//删除[]服务器删除[]数据-我不能100%确定这是否必要,但与添加的
delete[]结果相结合我能够在不丢失任何堆的情况下每分钟连续一小时更新阴影


希望这有帮助

遗憾的是,按照您的建议更改keys.cpp文件中的设置并没有解决问题(现在我甚至没有从服务器获得响应),即使使用iot get shadow and cleanup分支也是如此。谢谢你的帮助!
#include "keys.h"

// AWS User Credentials
const char* awsKeyID = "XXXXXXXXXXXXXXXXXXXX";
const char* awsSecKey = "X1xxx23xxxxXXXX34XXxxxxX56xXxxxxxxXx789x";

// AWS IoT
const char* awsIotRegion = "eu-central-1";
const char* awsIotEndpoint = "xxxxxxxxxxxxxx";
const char* awsIotDomain = "iot.eu-central-1.amazonaws.com";

// Init and connect WiFi to local WLAN
char* wifiSsid = "mySSID";
char* wifiPwd = "password";
  awsIotRegion = "us-east-1";
  awsIotEndpoint = "amazonaws.com";
  awsIotDomain = "axxxxs2pxxxrlx.iot.us-east-1.amazonaws.com";`