Amazon IOT và ESP8266

Hướng dẫn kết nối ESP8266 với AWS IoT, lần trước mình có thử dùng Firebase của anh google rồi, giờ chuyển sang thử dùng AWS xem thế nào, trong bài viết này mình tập trung tới mục đích chính là kết nối với AWS, do thằng AWS này việc kết nối tới nó nếu không biết cũng mất khá nhiều thời gian vô ích

Bài viết theo dạng từng bước luôn cho các bạn có thể theo dõi và làm theo, nếu các bạn muốn tìm hiểu thêm về các bài hướng dẫn ESP8266 có thể xem thêm IoT cơ bản

Chuẩn bị

  • Phần cứng là modul ESP8266 Node MCU
  • Phần mềm Arduino IDE và thư viện AWS arduino

Thực hiện

Trước tiên muốn dùng được AWS thì phải tạo tài khoản, tài khoản ở đây yêu cầu phải có liên kết với tài khoản ngân hàng, do đó bạn có thẻ visa thì hãy đăng ký, sẽ được miễn phí 1 năm đầu tiên sử dụng, phần đăng ký này mình sẽ bỏ qua không nói trong các bước thực hiện, mặc định bạn đã có 1 tài khoản AWS

Bước 1: Tìm IOT trong service

Bước 2: Tạo Thing, chọn create

Bước 3: Nhập tên cho thiết bị của bạn (Thing) và Create thing, kết quả sẽ là tên Thing hiện lên trong AWS IoT

Bước 4: Check thông tin, copy lưu phần Thing ARN lại để tạo policy ở bước sau

Bước 5: Tạo user, group user và policy bằng IAM, về lại mục service và gõ tìm IAM

Bước 6: Thêm mới user bằng cách chọn Add user

Bước 7: Cập nhật thông tin user, chọn Access Type là Programmatic access

Bước 8: Tạo group bằng cách ấn nút Create group

Bước 9: Trước khi tạo group thì chọn Create policy trước, nút Create group ấn sau khi đã tạo policy xong

Bước 10: Tạo policy bằng cách select Policy Generator

Bước 11: Edit permission để có thể thao tác ghi dữ liệu lên AWS, chỗ này cần lưu ý AWS Service là AWS IoT, Action là UpdateThingShadow và ARN là đoạn mã ARN bạn đã copy ở bước 4

Bước 12: Ấn vào Add Statement sau khi đã nhập đủ thông tin, kết quả

Bước 13: Kiểm tra lại thông tin Policy Name(bạn có thể đổi tên này), sau đó chọn Create Policy là xong bước tạo Policy

Bước 14: Quay lại tab chứa màn hình lúc trước tạo Policy và ấn vào Create Group

Bước 15: Ấn nút review và chọn Create User

Bước 16: Lưu lại thông tin về Access key ID và Secret access key để lưu vào chương trình

Bước 17: Quay lại IAM (tìm theo bước 5) chỉnh lại permission, Attach Policy

Bước 18: Chọn vào Creatiion Time sẽ ra tên policygen mình mới tạo vừa nãy, tick chọn và OK, vậy là user đã có quyền ghi dữ liệu vào AWS IoT

Bước 19: Quay lại AWS IoT (tìm theo bước 1) vào Interact lưu lại thông tin HTTPS và tên Device, ở đây device của mình tên là IoTTestDevice

Bước 20: Cài đặt thư viện AWS arduino

Sau đó tiến hành lập trình, chương trình mẫu mình để bên dưới, có 1 số lưu ý như sau

Cần nhập đúng thông tin wifi và password thông qua

char *ssid="HocARM";
char *password="12345678";

Phần thông tin AWS bạn cần thay đổi là setAWSRegion dựa trên tên domain, setAWSDomain thay bằng mục ở bước 19, setAWSPath là đường dẫn device (thường là tên device), setAWSKeyIDsetAWSSecretKey là key bước 16 đã lưu

iotClient.setAWSRegion("us-east-1");
iotClient.setAWSEndpoint("amazonaws.com");
iotClient.setAWSDomain("a1yldg4jxcj5mx.iot.us-east-1.amazonaws.com");
iotClient.setAWSPath("/things/IotTestDevice/shadow");
iotClient.setAWSKeyID("AKIAIFYKE3UKXDGJIYGA");
iotClient.setAWSSecretKey("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");
iotClient.setHttpClient(&httpClient);
iotClient.setDateTimeProvider(&dateTimeProvider);

Dữ liệu gửi lên AWS IOT sẽ có cấu trúc

{\"state\":{\"reported\":{\"test_value1\":123, \"test_value2\":234}}

Chương trình

#include <ESP8266WiFi.h>
#include <AmazonIOTClient.h>
#include "ESP8266AWSImplementations.h"

Esp8266HttpClient httpClient;
Esp8266DateTimeProvider dateTimeProvider;

AmazonIOTClient iotClient;
ActionError actionError;

char *ssid="HocARM";
char *password="12345678";

void setup() {
  Serial.begin(115200);
  delay(10);

  // Connect to WAP
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  iotClient.setAWSRegion("us-east-1");
  iotClient.setAWSEndpoint("amazonaws.com");
  iotClient.setAWSDomain("a1yldg4jxcj5mx.iot.us-east-1.amazonaws.com");
  iotClient.setAWSPath("/things/IotTestDevice/shadow");
  iotClient.setAWSKeyID("AKIAIFYKE3UKXDGJIYGA");
  iotClient.setAWSSecretKey("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");
  iotClient.setHttpClient(&httpClient);
  iotClient.setDateTimeProvider(&dateTimeProvider);
}

void loop(){

  char shadow[100];
  strcpy(shadow, "{\"state\":{\"reported\":{\"test_value1\":123, \"test_value2\":234}}}");
  
  Serial.println("Trying to send data");
  Serial.print(shadow);
  
  char* result = iotClient.update_shadow(shadow, actionError);
  Serial.print(result);
  
  delay(10000);
}

Kết quả

Mở terminal của Arduino lên coi kết quả, đồng thời vào mục Shadow của AWS xem thông tin đã được gửi lên

Tạm kết

Như vậy mình đã thực hiện được các bước hướng dẫn cơ bản để bạn có thể kết nối và gửi dữ liệu từ ESP8266 lên AWS IoT, mục đích chính của bài viết này đã đạt được một cách nhanh chóng nhất, giờ thì mọi người có thể dựa trên đó để phát triển ý tưởng của mình cũng như nghiên cứu thêm những vấn đề to lớn hơn với AWS IoT.