Trong chương trình Python dùng để gửi dữ liệu lên Server ThingSpeak, có các mục rất quan trọng mà chúng ta cần phải biết là “User API Key“, “MQTT API Key” và “Field#“. Các thông tin này cần phải được điều chỉnh chính xác để đảm bảo việc lưu trữ dữ liệu lên Server có thể thực hiện được. Trong phần này chúng ta sẽ sử dụng Server vừa được tạo ra bên trên để thực hiện các bài thí nghiệm.
Tiến hành đăng nhập vào Server ThingSpeak để lấy thông tin về các khóa API và các trường lưu trữ (Field) có trong kênh lưu trữ trên Server. Trong trường hợp này, để có được các thông tin về trường lưu trữ chúng ta sẽ thực hiện tương tự như ở phần giao thức HTTP nêu trên. Tuy nhiên, để nhận được các khóa API sử dụng cho giao thức MQTT thì sẽ có sự khác biệt so với giao thức HTTP nêu trên, khi đó tại góc trên bên phải của giao diện website ta thực hiện các thao tác lệnh như sau “Account My Profile“. Khi đó trên giao diện của website sẽ xuất hiện khóa API người dùng (User API Key) và khóa API dùng cho MQTT (MQTT API Key). Các thông tin này được minh họa chi tiết trong Hình 4.3.
Hình 4.3. Các khóa API của kênh Test_Data_Server dùng cho giao thức MQTT.
Lưu ý rằng trong ngôn ngữ lập trình Python muốn sử dụng được thư viện dành cho giao thức MQTT thì chúng ta cần phải cài đặt bổ sung thêm vào Raspberry Pi chạy hệ điều hành Raspbian. Để cài đặt thư viện dành cho giao thức MQTT, tại Terminal ta nhập lệnh sau:
pi@raspberrypi:~$sudo pip install paho-mqtt
Nhằm giúp hiểu rõ hơn cách thức sử dụng ngôn ngữ lập trình Python để viết chương trình gửi dữ liệu lên Server ThingSpeak sử dụng giao thức MQTT, chúng ta sẽ thực hiện một ví dụ minh họa đơn giản như sau: Cứ sau mỗi 20 giây, Raspberry Pi sẽ gửi một dữ liệu ngẫu nhiên (giá trị nằm trong khoảng 0 – 50) lên Server ThingSpeak tại trường lưu trữ “Field1” có tên định danh là “Temparature“.
Mã nguồn hoàn chỉnh cho ví dụ minh họa này như sau:
# Gui du lieu ngau nhien len Server ThingSpeak sau moi 20s
data_random = randint(0,50) # Tao cac gia tri du lieu ngau nhien
print data_random
thingspeak_mqtt(data_random)
sleep(20)
Hình 4.4. Minh họa một số lần gửi dữ liệu lên Server của Raspberry Pi.
Bây giờ ta sẽ phân tích chi tiết đoạn mã nguồn này, nó được bắt đầu bằng việc khai báo các thư viện được sử dụng. Trong đó, dòng lệnh đầu tiên chính là dòng khai báo sử dụng thư viện hỗ trợ để gửi dữ liệu lên Server theo giao thức MQTT.
import paho.mqtt.client as mqtt
from time import sleep
from random import randint
Tiếp theo là đoạn chương trình khai báo khóa API người dùng (User API Key) được mô tả trong tham số “password“, chi tiết xem trong Hình 4.3.
Tiếp theo là đoạn chương trình con gửi chuỗi dữ liệu lên Server theo giao thức MQTT. Trong đó, tham số “channel_ID” chính là mã nhận dạng của kênh lưu trữ dữ liệu (Channel ID), tham số “api_key_write” chính là khóa API ghi dữ liệu (Write API Key) được cung cấp từ Server ThingSpeak, chi tiết xem trong Hình 4.1. Ngoài ra, tham số “field1” là tên trường lưu trữ mà ta muốn gửi dữ liệu vào đó, tham số “data” là dữ liệu cần gửi lên Server.
Cuối cùng là đoạn chương trình tạo ra các giá trị ngẫu nhiên nằm trong khoảng từ 0 – 50. Các giá trị ngẫu nhiên này sẽ được hiển thị trên màn hình Console và được dùng làm dữ liệu để gửi lên Server sau mỗi 20 giây.
while True:
# Gui du lieu ngau nhien len Server ThingSpeak sau moi 20s
data_random = randint(0,50) # Tao cac gia tri du lieu ngau nhien
print data_random
thingspeak_mqtt(data_random)
sleep(20)
Bài tập củng cố kiến thức – bài 9 và bài 10
Bài tập 1
Yêu cầu bài tập: Sử dụng Raspberry Pi làm bộ điều khiển trung tâm để thu thập giá trị nhiệt độ và độ ẩm của môi trường từ cảm biến DHT22. Bằng cách sử dụng giao thức HTTP để gửi các dữ liệu này lên Server ThingSpeak để lưu trữ. Các dữ liệu này được gửi lên Server sau mỗi 30 giây.
Báo cáo kết quả thực hiện bài tập:
Hướng khắc phục khi bị lỗi cảm biến (đọc sai, mất dữ liệu).
Hướng khắc phục khi bị mất kết nối Internet.
Trong báo cáo phải thể hiện kết quả của ít nhất 30 phút gửi dữ liệu liên tục lên Server. Các trường hợp xảy ra sự cố khi bị lỗi cảm biến, mất kết nối Internet khi đang chạy, tốc độ nhanh nhất để truyền lên Server mà không bị lỗi (có minh chứng).
Trong báo cáo phải trình bày sơ đồ khối hệ thống, các mô-đun sử dụng trong thí nghiệm và sơ đồ kết nối giữa các mô-đun.
Trong báo cáo phải trình bày lưu đồ giải thuật, mã nguồn của chương trình điều khiển.
Bài tập 2
Yêu cầu bài tập: Sử dụng Raspberry Pi làm bộ điều khiển trung tâm để thu thập giá trị nhiệt độ và độ ẩm của môi trường từ cảm biến DHT22. Bằng cách sử dụng giao thức MQTT để gửi các thông tin này lên Server ThingSpeak để lưu trữ. Các thông tin này được gửi lên Server sau mỗi 30 giây.
Báo cáo kết quả thực hiện bài tập:
Hướng khắc phục khi bị lỗi cảm biến (đọc sai, mất dữ liệu).
Hướng khắc phục khi bị mất kết nối Internet.
Trong báo cáo phải thể hiện kết quả của ít nhất 30 phút gửi dữ liệu liên tục lên Server. Các trường hợp xảy ra sự cố khi bị lỗi cảm biến, mất kết nối Internet khi đang chạy, tốc độ nhanh nhất để truyền lên Server mà không bị lỗi (có minh chứng).
Trong báo cáo phải trình bày sơ đồ khối hệ thống, các mô-đun sử dụng trong thí nghiệm và sơ đồ kết nối giữa các mô-đun.
Trong báo cáo phải trình bày lưu đồ giải thuật, mã nguồn của chương trình điều khiển.