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), setAWSKeyID
và setAWSSecretKey
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.