Mục lục
1. AWS IoT là gì?
Amazon Web Services (AWS) là một nền tảng điện toán đám mây (cloud computing) được phát triển toàn diện bởi Amazon. Nền tảng này cung cấp hơn 175 dịch vụ máy tính cho khách hàng như cơ sở dữ liệu, web server,… mà không cần phải đầu tư phần cứng. AWS cung cấp các dịch vụ kèm theo các bộ phát triển phần mềm (Software Development Kit – SDK) tương ứng cho rất nhiều ngôn ngữ lập trình thông dụng hiện nay, điều này giúp cho nền tảng này ngày càng trở nên phổ biến trên thế giới.
AWS IoT (AWS Internet of Things) là một trong nhiều dịch vụ mà AWS cung cấp. Dịch vụ này giúp cho các nhà phát triển kết nối các thiết bị (cảm biến, động cơ, công tắc…) lên dịch vụ điện toán đám mây. Ngoài ra, sau khi được kết nối, nhà phát triển có thể mở rộng ứng dụng của mình với nhiều dịch vụ khác do AWS cung cấp như cơ sở dữ liệu, tính toán đám mây,….

2. MQTT là gì?

Message Queuing Telemetry Transport (MQTT) là một giao thức mạng kích thước nhỏ, hoạt động theo cơ chế publish – subscribe để truyền tin giữa các thiết bị. Chính nhờ vào tính chất các gói tin nhỏ, tiết kiệm dữ liệu và chi phí, nên giao thức này rất phù hợp với các ứng dụng internet vạn vật để gửi dữ liệu lên server, khi mà khoảng cách gửi dữ liệu thường xa và băng thông của thiết bị còn hạn chế.
MQTT là giao thức chính trong hầu hết các ứng dụng liên quan đến internet vạn vật hiện nay như nhà thông minh, nông trại thông minh, nhà máy thông minh,… và nhiều ứng dụng liên quan khác. Và không ngoại lệ, AWS IoT cũng cung cấp giao thức truyền tin này cho người dùng kết nối thiết bị. Trong bài viết hôm nay, chúng ta sẽ tìm hiểu cách để kết nối và gửi dữ liệu qua MQTT lên AWS IoT bằng ngôn ngữ lập trình Python.
3. Hướng dẫn kết nối MQTT với AWS sử dụng Python
3.1. Tạo tài khoản AWS
Đầu tiên, bạn phải có tài khoản AWS để sử dụng dịch vụ của nền tảng này. Bạn truy cập vào trang web https://aws.amazon.com/ sau đó chọn đăng ký tài khoản mới. Do phần lớn các dịch vụ của AWS là trả phí (đối với các cá nhân, doanh nghiệp sử dụng cho kinh doanh), do đó khi đăng ký tài khoản bạn phải có một thẻ thanh toán quốc tế. Tuy nhiên, việc đăng ký không hề mất một khoản phí nào, chỉ khi sử dụng quá nhiều bạn mới bắt đầu bị tính phí thôi, do đó bạn cứ yên tâm đăng ký nhé.
Sau khi đã đăng ký được tài khoản, bạn tìm đến dịch vụ AWS IoT như hình ảnh dưới đây để chuẩn bị cho các bước tiếp theo.

Tại đây, thanh tùy chọn bên trái màn hình đã cung cấp đủ các hướng dẫn (Documentation) để bạn có thể sử dụng một cách thành thạo dịch vụ này. Tuy nhiên, các hướng dẫn này bằng tiếng Anh và sẽ khá tốn thời gian để tìm hiểu nếu như bạn mới tiếp xúc, do đó bạn có thể tham khảo hướng dẫn bằng tiếng Việt của mình sau đây nhé.
3.2. Tìm key để kết nối
Key là mã khóa mà bất kỳ giao thức kết nối nào cũng cần để đảm bảo kết nối của bạn bảo mật. Bạn sẽ không muốn một ngày nào đó tin tặc kết nối đến tài khoản AWS IoT của bạn, sử dụng thật nhiều băng thông rồi người trả tiền lại chính là bạn phải không nào.
Tùy dịch vụ, key có thể chỉ đơn giản là một chuỗi dài ngẫu nhiên hoặc một tập hợp các chuỗi khác nhau. Đối với AWS IoT, key được cung cấp gồm 3 file chính (cert.pem, private.key và public.key). Để tải các file này, bạn vào mục Connect one device từ các tùy chọn bên trái, chọn Next để đến bước 2. Tại bước này, bạn cần Create a new thing nếu bạn chưa từng làm việc với AWS IoT hoặc Choose an existing thing.

Bạn bấm Next để đến bước 3, tại bước này bạn chọn vào hệ điều hành bạn dùng (Windows, MacOS/Linux) và chọn ngôn ngữ lập trình. Trong bài này mình sẽ chọn Windows và Python và nhấn Next.

Tại bước 4, AWS sẽ cung cấp cho bạn một Connection Kit, đây chính là các key cần thiết để bạn kết nối một cách bảo mật đến server AWS. Bạn nhấn Download connection kit để tải về và giải nén nó. Bạn nên đặt các key này trong thư mục mã nguồn của mình để tiện hơn khi lập trình, nhưng lưu ý đừng công khai những key bí mật này nhé.
Tại bước 5, AWS cung cấp cho bạn một cách đơn giản là sử dụng chương trình mẫu của họ để chạy thử chương trình. Bạn có thể tham khảo để hiểu rõ hơn về quy trình kết nối. Hoặc để đỡ tốn thời gian bạn có thể xem và sử dụng mã nguồn mình cung cấp sau đây.
3.3. Chương trình Python
Dựa trên SDK của AWS cung cấp, mình có viết lại một class AWS_MQTT bằng Python để sử dụng trên nhu cầu của bản thân. Bạn có thể tìm thấy mã nguồn tại:
Đầu tiên, trước khi thực hiện kết nối, bạn phải tải thêm file Root CA certificate bằng cách chạy lệnh dưới đây trong Terminal/Command Promt.
Invoke-WebRequest -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile root-CA.crt
Sau khi có đủ các file, bạn có thể sử dụng class AWS_MQTT mình cung cấp để kết nối đến server. Bạn cần cung cấp tối thiểu các tham số như ảnh dưới đây. Lưu ý rằng đường dẫn đến ca_file, cert_file và private_file phải tùy thuộc vào các file key này bạn đặt ở đâu trong máy nhé. Các tham số khác bạn có thể giữ nguyên như hình.

3.4. Chạy thử kết nối
Để biết kết nối có thành công hay không, bạn hãy chạy thử chương trình python bằng nút Run của trình biên dịch. Nếu chương trình chạy ổn định và không đưa ra lỗi nào thì 50% đã thành công. 50% còn lại bạn cần phải kiểm tra xem các gói tin đã được gửi lên AWS IoT hay chưa.
Để kiểm tra điều này, trong các tùy chọn bên trái của AWS IoT, bạn chọn vào MQTT test client. Tại ô Subscribe to a topic bạn nhập tên topic trong chương trình Python ở phần trước (sdk/test/python) và nhấn Subscribe. Lúc này, khi chạy chương trình Python, bạn có thể thấy các lời nhắn sẽ được gửi 5 giây một lần như phía dưới.

Tới đây, việc kết nối lên server đã thành công, bạn có thể gửi dữ liệu cảm biến và các giá trị khác của hệ thống để tiến hành các bước lưu trữ, xử lý nâng cao hơn sau này.
4. Kết luận
Tóm lại, qua bài chia sẻ này, mình đã hướng dẫn các bạn thiết lập kết nối đến AWS IoT bằng giao thức MQTT – một giao thức vô cùng thông dụng trong các ứng dụng IoT. Chúng ta cũng đã kiểm tra kết nối bằng một chương trình Python đơn giản để gửi lời chào lên server mỗi 5 giây. Ở các bài viết sau, mình sẽ hướng dẫn các bạn các tùy chỉnh nâng cao khi làm việc với AWS IoT như làm cách nào để điều chỉnh tên topic, tên client,… Nếu có thắc mắc gì các bạn có thể để lại bình luận, mình sẽ trả lời trong thời gian sớm nhất nhé.
Cảm ơn bạn đã dành thời gian đọc bài viết của mình!

Để lại một bình luận