mbedtls_net_connect вернул -0x52 при подключении к AWS IoT с использованием ESP32 в Arduino IDE.

Я пытаюсь подключиться к AWS IoT, используя базовый пример pubsub на моей плате ESP32 с помощью Arduino IDE.

В качестве базового примера он подключается к AWS IoT и публикует сообщения, но когда я даю статический IP-адрес программе, он подключается к Wi-Fi с указанным IP-адресом (я также назначил статический IP-адрес MAC-адресу платы. в моем маршрутизаторе), но он не может опубликовать сообщения и выдает следующую ошибку:

Попытка подключиться к SSID: RCB Rocks !!!! Подключено к Wi-Fi

E (37583) aws_iot: не удалось! mbedtls_net_connect вернул -0x52

E (37583) AWS_IOT: Ошибка (-23) при подключении к ***********. iot.eu-west-2.amazonaws.com:8883,

Попытка восстановить соединение

Я использую следующий код:

#include <AWS_IOT.h>
#include <WiFi.h>
AWS_IOT hornbill;

char WIFI_SSID[]="RCB Rocks!!!!";
char WIFI_PASSWORD[]="********";
char HOST_ADDRESS[]="************.iot.eu-west-2.amazonaws.com";
char CLIENT_ID[]= "1008";
char TOPIC_NAME[]= "smk";
IPAddress ip(192, 168, 0, 20);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
int status = WL_IDLE_STATUS;
int tick=0,msgCount=0,msgReceived = 0;
char payload[512];
char rcvdPayload[512];

void mySubCallBackHandler (char *topicName, int payloadLen, char *payLoad) {
  strncpy(rcvdPayload,payLoad,payloadLen);
  rcvdPayload[payloadLen] = 0;
  msgReceived = 1;
}

void setup() {
  Serial.begin(115200);
  delay(2000);
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(WIFI_SSID);
    WiFi.config(ip,gateway,subnet);
    WiFi.mode(WIFI_STA);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
    // wait 5 seconds for connection:
    delay(5000);
  }

  Serial.println("Connected to wifi");
  if(hornbill.connect(HOST_ADDRESS,CLIENT_ID)== 0) {
    Serial.println("Connected to AWS");
    delay(1000);
    if(0==hornbill.subscribe(TOPIC_NAME,mySubCallBackHandler)) {
      Serial.println("Subscribe Successfull");
    } else {
      Serial.println("Subscribe Failed, Check the Thing Name and Certificates");
      while(1);
    }
  } else {
    Serial.println("AWS connection failed, Check the HOST Address");
    while(1);
  }
  delay(2000);
}

void loop() {
  if(msgReceived == 1) {
    msgReceived = 0;
    Serial.print("Received Message:");
    Serial.println(rcvdPayload);
  }
  if(tick >= 5) {
    // publish to topic every 5seconds
    tick=0;
    sprintf(payload,"Hello from hornbill ESP32 : %d",msgCount++);
    if(hornbill.publish(TOPIC_NAME,payload) == 0) {
      Serial.print("Publish Message:");
      Serial.println(payload);
    } else {
      Serial.println("Publish failed");
    }
  }
  vTaskDelay(1000 / portTICK_RATE_MS);
  tick++;
}

Я нашел этот SDK AWS IoT для Arduino ESP32 здесь и выполнил инструкции, приведенные в этот веб-сайт.


person Saikiran Kallatti    schedule 01.08.2017    source источник


Ответы (3)


Попытка подключиться к SSID: RCB Rocks !!!! Подключен к Wi-Fi

Итак, ваша плата может получить сетевое соединение.

E (37583) aws_iot: не удалось! mbedtls_net_connect вернул -0x52

Эта ошибка означает

NET - не удалось получить IP-адрес для данного имени хоста.

Либо имя хоста неверно, либо что-то не так с настройкой DNS. Учитывая, что ваша программа работает, когда вы не используете статический IP-адрес, проблема должна заключаться в настройке DNS на плате. Когда плата получает динамический IP-адрес от DHCP, DHCP-сервер также отправляет ей настройки DNS. Если вы используете статический IP-адрес вместо DHCP, вам также необходимо настроить DNS-сервер статически.

person Gilles 'SO- stop being evil'    schedule 14.10.2017

Вы можете попробовать проверить, может ли плата ESP подключаться к Интернету с помощью этого статического IP-адреса. Вы можете попробовать запустить этот скетч. https://learn.sparkfun.com/tutorials/esp32-thing-hookup-guide#arduino-example-wifi.

У меня была такая же проблема на моей плате, и я получал DNS_PROBE_FINISHED_NO_INTERNET, если я подключался к беспроводной сети из Chrome. Переход на другую сеть устранил проблему.

person Sarim A.    schedule 02.08.2017

Я знаю, что это устарело, но перемещение Wifi.begin() за пределы цикла for помогло мне:

WiFi.config(ip,gateway,subnet);
WiFi.mode(WIFI_STA);

Serial.print("Attempting to connect to SSID: ");
Serial.println(WIFI_SSID);

// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

while (WiFi.status() != WL_CONNECTED) {
  Serial.print(".");
  delay(500);
}

Serial.print("connected.");
person Paul    schedule 12.04.2018