0% encontró este documento útil (0 votos)
22 vistas14 páginas

Publicación MQTT desde ESP8266 a AWS

Este documento describe los pasos para publicar datos desde un dispositivo ESP8266 hacia AWS IoT Core. Los pasos incluyen: 1) crear un objeto en AWS IoT Core, generar un certificado y asignarle una política; 2) convertir los certificados de AWS a formato .der; 3) instalar la herramienta ESP8266FS en Arduino IDE; 4) escribir el sketch de Arduino y modificarlo según el objeto creado; 5) cargar los certificados y código en el ESP8266; 6) probar la publicación y suscrip

Cargado por

Suave Villegas
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
22 vistas14 páginas

Publicación MQTT desde ESP8266 a AWS

Este documento describe los pasos para publicar datos desde un dispositivo ESP8266 hacia AWS IoT Core. Los pasos incluyen: 1) crear un objeto en AWS IoT Core, generar un certificado y asignarle una política; 2) convertir los certificados de AWS a formato .der; 3) instalar la herramienta ESP8266FS en Arduino IDE; 4) escribir el sketch de Arduino y modificarlo según el objeto creado; 5) cargar los certificados y código en el ESP8266; 6) probar la publicación y suscrip

Cargado por

Suave Villegas
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Publicar tema MQTT desde un ESP8266 hacia AWS

1. Crear un Objeto en AWS, generar un certificado y adjuntarle una política.


2. Conversión de credenciales AWS de formato .pem a .der
3. Instalación de la herramienta de carga de datos de boceto ESP8266 en Arduino IDE
4. Boceto de Arduino y modificaciones según el objeto
5. Cargar certificados y código de AWS en NodeMCU ESP8266
6. Prueba / Suscripción de tema en AWS
7. Resultados y registro de datos

Crear un Objeto en AWS, generar un certificado y adjuntarle una política


En el primer paso creara un objeto o cosa la cual en contexto de IoT, es una entidad que tiene un
sistema integrado y la capacidad de transferir datos.

 Inicie sesión en la consola de administración de AWS y seleccione IoT Core en los servicios
de Amazon.
 Posicionarse en Administración > Objetos y seleccione la opción de “Crear” (Si es la
primera vez que crea un objeto seleccione la opción de “Registrar objeto”).

Luego asigne un nombre a su objeto y toque el botón “Siguiente”.


Posteriormente se da la opción de generar los certificados que son los que ayudaran a AWS a
autenticarse mientras el dispositivo intenta comunicase con él.

Ubique la opción de generación de certificado en un solo clic. Esto creara un certificado X.590,
descargue el certificado, la clave privada y una CA raíz. No olvide presionar el botón de “Activar”
para poder utilizar el certificado. Para finalizar este paso de clic en listo.

NOTA: Para descargar la CA raíz. Se muestra una nueva página web. Elija la clave RSA de 2048 bits:
Amazon Root CA 1. Esto abre otra página web con el texto del certificado de CA raíz. Copie este
texto y péguelo en un archivo de texto llamado [Link]

A continuación, crearemos y adjuntaremos una política al certificado, la cual se utiliza para


autorizar a su dispositivo a realizar operaciones en AWS IoT Core, como suscribirse o publicar
temas MQTT.
Diríjase a AWS IoT y seleccione Seguro > Políticas, luego de clic a la opción “Crear”.

Elija un nombre para su política y complete los campos Acción y ARN de recursos con “iot:*” y “*”
respectivamente, maque la opción Permitir y luego presione crear.

Ahora toque la sección de certificados que se encuentra justo encima de la sección de políticas.
Verá un certificado que ha creado anteriormente, toque los tres puntos y elija adjuntar la política.
aparecerá un mensaje emergente que mostrará sus políticas existentes, seleccione la política
creada anteriormente y de clic en Asociar.

En este punto ya tendrá un objeto creado con su certificado y política adjuntada.


Conversión de credenciales AWS (certificado, clave privada, CA raíz) de
formato .pem a .der
Lo primero que debe hacer es asegurarse de que su sistema tenga instalado OpenSSL: esta es una
herramienta que proporciona una implementación de código abierto de los protocolos SSL y TLS y
que se puede utilizar para convertir los archivos de certificados en los más populares basados en
X.509 v3 formatos. aquí lo usaremos para convertir los archivos .pem a .DER.

Si está utilizando Linux, puede instalar OpenSSL con el siguiente   comando de consola YUM:


$ yum install openssl
Si su distribución se basa en APT en lugar de YUM, puede usar el siguiente comando en su lugar:
$ apt-get install openssl

Una vez que se instale OpenSSL, podremos usarlo para convertir nuestros certificados SSL en
varios formatos.

Ahora vaya a la carpeta donde se descargan todos los certificados. El certificado de AWS será algo
así como "[Link]". Así que ahora cambie el nombre de ese documento
a "[Link]".

Los siguientes comandos convertirán los archivos de certificado del dispositivo descargados al
formato correcto para este script.

> openssl x509 -in [Link] -out [Link] -outform DER


> openssl rsa -in [Link] -out [Link] -outform DER
> openssl x509 -in [Link] -out [Link] -outform DER

Reemplace "xxxxxxxxxx" con su nombre de certificado y AmazonRootCA1 seguirá siendo el mismo


porque no hay cambios

Ejemplo:

> openssl x509 -in [Link] -out [Link] -outform DER


> openssl rsa -in [Link] -out [Link] -outform DER
> openssl x509 -in [Link] -out [Link] -outform DER

Después de ejecutar estos comandos, verá los certificados guardados en la misma carpeta con
formato .der, copie estos archivos con formato DER en una carpeta llamada data
Instalación de la herramienta de carga de datos de boceto ESP8266 en
Arduino IDE
Ahora instalemos el cargador del sistema de archivos Arduino ESP8266 que empaqueta la carpeta
de datos de croquis en la imagen del sistema de archivos SPIFFS y carga la imagen en la memoria
flash ESP8266.

 Descargue el archivo de herramientas " [Link] " de la página de versiones de


Git Hub.

 En el directorio de su cuaderno de bocetos Arduino, cree un directorio tools si aún no


existe. Puede encontrar la ubicación del directorio de su cuaderno de bocetos en el IDE de
Arduino en Archivo> Preferencias> Ubicación del cuaderno de bocetos.

 Descomprima la herramienta en el directorio tools (la ruta se verá como <sketchbook


directory>/tools/ESP8266FS/tool/[Link]).

 Reinicie Arduino IDE.

 Seleccione "herramientas> ESP8266 Sketch Data Upload" estará allí.

Boceto de Arduino y modificaciones según el objeto


A continuación, se conecta su NodeMCU ESP8266 al servidor AWS IoT:

 Se publicarán 3 datos: " mac_Id, random_number, randon_string " al tema "outTopic"


cada dos segundos en el servidor.
 Se suscribe al tema "inTopic", imprimiendo cualquier mensaje que provenga del servidor.

Abra un nuevo archivo de boceto de Arduino IDE, copie y pegue el código que se muestra al final y
guárdelo con algún nombre de archivo. es decir, "ESP8266_AWS_IoTCore"

Debe asegurarse de proporcionar el nombre de usuario y la contraseña de WiFi, que están


disponibles en el rango.
const char* ssid = "Electronics_Innovation";
const char* password = "subscribe";
Además, cambie el AWS_endpoint, que es la dirección del agente MQTT para su cuenta de AWS en
una región específica.
const char* AWS_endpoint = "[Link]";
//MQTT broker ip

Este AWS_endpoint lo puede encontrar en la sección Punto de enlace personalizado de la pestaña


Configuración de sus objetos registrados.

Cargar certificados y código de AWS en NodeMCU ESP8266


Asegúrese de que la carpeta data este junto con su código Arduino como se muestra a
continuación, para eso puede mover la carpeta data a la Carpeta del código Arduino.

Ahora abra su código y seleccione Herramientas> Elemento de menú de carga de datos de boceto
ESP8266. Comenzara a cargar los archivos en el sistema de archivos flash ESP8266. Cuando
termine, la barra de estado IDE mostrará el mensaje de imagen cargada SPIFFS.
Una vez que los certificados se hayan cargado correctamente, compile y cargue el código a su
NodeMCU. Una vez cargado el código puede verificar la salida en el monitor serial.
Prueba / Suscripción de tema en AWS
Para verificar que la carga enviada desde su tarjeta este llegando correctamente regrese a AWS
IoT y seleccione Pruebas. Luego en la barra de Tema de suscripción escriba el tema “outTopic” y de
clic en “suscribirse al tema”.

Resultados y registro de datos


Como ultimo paso, al suscribirse al tema “outTopic” le debe aparecer los datos que visualizamos
en el monitor serial.
Código Fuente

/*Developed by M V Subrahmanyam - [Link]


subrahmanyam-mediboina-b63997145/
Project: AWS | NodeMCU ESP8266 Tutorials
Electronics Innovation - [Link]

GitHub - [Link]
YouTube - [Link]

Upload date: 07 October 2019

AWS Iot Core

This example needs [Link]

It connects to AWS IoT server then:


- publishes "hello world" to the topic "outTopic" every two seconds
- subscribes to the topic "inTopic", printing out any messages
*/

#include "FS.h"
#include <ESP8266WiFi.h>
#include <PubSubClient.h> //[Link]
client
#include <NTPClient.h> //[Link]
#include <WiFiUdp.h>

// Update these with values suitable for your network.

const char* ssid = "Electronics_Innovation";


const char* password = "subscribe";

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "[Link]");

const char* AWS_endpoint = "[Link]";


//MQTT broker ip

void callback(char* topic, byte* payload, unsigned int length) {


[Link]("Message arrived [");
[Link](topic);
[Link]("] ");
for (int i = 0; i < length; i++) {
[Link]((char)payload[i]);
}
[Link]();

}
WiFiClientSecure espClient;
PubSubClient client(AWS_endpoint, 8883, callback, espClient); //set MQTT port
number to 8883 as per //standard
//============================================================================
#define BUFFER_LEN 256
long lastMsg = 0;
char msg[BUFFER_LEN];
int value = 0;
byte mac[6];
char mac_Id[18];
//============================================================================

void setup_wifi() {

delay(10);
// We start by connecting to a WiFi network
[Link](512, 512);
[Link]();
[Link]("Connecting to ");
[Link](ssid);

[Link](ssid, password);

while ([Link]() != WL_CONNECTED) {


delay(500);
[Link](".");
}

[Link]("");
[Link]("WiFi connected");
[Link]("IP address: ");
[Link]([Link]());

[Link]();
while(![Link]()){
[Link]();
}

espClient.setX509Time([Link]());

void reconnect() {
// Loop until we're reconnected
while (![Link]()) {
[Link]("Attempting MQTT connection...");
// Attempt to connect
if ([Link]("ESPthing")) {
[Link]("connected");
// Once connected, publish an announcement...
[Link]("outTopic", "hello world");
// ... and resubscribe
[Link]("inTopic");
} else {
[Link]("failed, rc=");
[Link]([Link]());
[Link](" try again in 5 seconds");

char buf[256];
[Link](buf,256);
[Link]("WiFiClientSecure SSL error: ");
[Link](buf);

// Wait 5 seconds before retrying


delay(5000);
}
}
}

void setup() {

[Link](115200);
[Link](true);
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
setup_wifi();
delay(1000);
if (![Link]()) {
[Link]("Failed to mount file system");
return;
}

[Link]("Heap: "); [Link]([Link]());

// Load certificate file


File cert = [Link]("/[Link]", "r"); //replace [Link] eith your uploaded
file name
if (!cert) {
[Link]("Failed to open cert file");
}
else
[Link]("Success to open cert file");

delay(1000);

if ([Link](cert))
[Link]("cert loaded");
else
[Link]("cert not loaded");

// Load private key file


File private_key = [Link]("/[Link]", "r"); //replace private eith your
uploaded file name
if (!private_key) {
[Link]("Failed to open private cert file");
}
else
[Link]("Success to open private cert file");

delay(1000);
if ([Link](private_key))
[Link]("private key loaded");
else
[Link]("private key not loaded");

// Load CA file
File ca = [Link]("/[Link]", "r"); //replace ca eith your uploaded file name
if (!ca) {
[Link]("Failed to open ca ");
}
else
[Link]("Success to open ca");

delay(1000);

if([Link](ca))
[Link]("ca loaded");
else
[Link]("ca failed");

[Link]("Heap: "); [Link]([Link]());

//===========================================================================
[Link](mac);
snprintf(mac_Id, sizeof(mac_Id), "%02x:%02x:%02x:%02x:%02x:%02x",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
[Link](mac_Id);
//============================================================================

void loop() {

if (![Link]()) {
reconnect();
}
[Link]();

long now = millis();


if (now - lastMsg > 2000) {
lastMsg = now;
//============================================================================
String macIdStr = mac_Id;
uint8_t randomNumber = random(20, 50);
String randomString = String(random(0xffff), HEX);
snprintf (msg, BUFFER_LEN, "{\"mac_Id\" : \"%s\", \"random_number\" :
%d, \"random_string\" : \"%s\"}", macIdStr.c_str(), randomNumber,
randomString.c_str());

[Link]("Publish message: ");


[Link](msg);
//[Link]("outTopic", msg);
[Link]("outTopic", msg);
//=============================================================================
[Link]("Heap: "); [Link]([Link]()); //Low heap can cause
problems
}
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(100); // wait for a second
}

También podría gustarte