Gửi Dữ liệu Cảm biến lên ThingSpeak bằng Arduino (ESP8266)
ThingSpeak là một nền tảng đám mây (cloud service) dành cho Internet of Things (IoT). Nó cho phép các thiết bị của bạn (như Arduino, ESP8266, Raspberry Pi) gửi dữ liệu cảm biến lên internet một cách dễ dàng thông qua giao thức HTTP. Sau đó, bạn có thể truy cập, phân tích và hiển thị dữ liệu đó dưới dạng biểu đồ trực quan đẹp mắt ngay trên trình duyệt web.
Phần 1: Thiết lập trên ThingSpeak
Bước 1: Đăng ký tài khoản
Truy cập trang web ThingSpeak: https://thingspeak.com/
Nhấp vào nút "Sign Up" (Đăng ký).
Điền thông tin yêu cầu hoặc chọn đăng ký bằng tài khoản Google (Gmail) hoặc MathWorks của bạn. Đây là tài khoản miễn phí cho các mục đích sử dụng cá nhân và thử nghiệm.
Bước 2: Tạo Kênh (Channel) mới
Kênh (Channel) giống như một thư mục lưu trữ dữ liệu cho dự án của bạn. Mỗi kênh có thể chứa nhiều "trường" (Field) dữ liệu khác nhau.
Sau khi đăng nhập, vào mục "Channels" -> "My Channels".
Nhấp vào nút "New Channel".
Điền thông tin cho kênh:
Name: Tên cho kênh của bạn (Ví dụ: DHT11 Sensor Data, Theo dõi phòng khách).
Description: Mô tả chi tiết hơn về kênh (Ví dụ: Đo nhiệt độ và độ ẩm phòng khách sử dụng ESP8266 và DHT11).
Field 1: Đặt tên cho trường dữ liệu đầu tiên (Ví dụ: Temperature (°C)). Đánh dấu tick vào ô bên cạnh để kích hoạt trường này.
Field 2: Đặt tên cho trường dữ liệu thứ hai (Ví dụ: Humidity (%)). Đánh dấu tick vào ô bên cạnh để kích hoạt.
(Bạn có thể tạo tối đa 8 trường cho mỗi kênh trên tài khoản miễn phí).
Cuộn xuống dưới và nhấp vào "Save Channel"
Bước 3: Lấy thông tin API Key và Channel ID
Để Arduino có thể gửi dữ liệu đúng vào kênh bạn vừa tạo, chúng ta cần hai thông tin quan trọng:
Channel ID: Mã số định danh duy nhất cho kênh của bạn.
Write API Key: Chìa khóa bí mật cho phép ghi dữ liệu vào kênh. Hãy giữ bí mật khóa này!
Cách lấy thông tin:
Sau khi lưu kênh, nhấp vào tab "API Keys" trong trang cài đặt kênh.
Sao chép (copy) và lưu lại cẩn thận giá trị "Channel ID" và "Write API Key". Chúng ta sẽ cần chúng trong code Arduino.
Bước 4: (Tùy chọn) Tùy chỉnh Giao diện Hiển thị
ThingSpeak tự động tạo biểu đồ đường (line chart) cho các trường dữ liệu. Bạn có thể làm cho giao diện trực quan hơn bằng cách thêm các Widget khác:
Chuyển sang tab "Private View" hoặc "Public View" (nếu bạn muốn chia sẻ công khai).
Nhấp vào nút "Add Widget".
Chọn loại Widget bạn muốn, ví dụ: "Gauge" (đồng hồ đo).
Cấu hình Widget (chọn trường dữ liệu tương ứng, đặt tên, dải giá trị Min/Max). Ví dụ: tạo một Gauge cho Nhiệt độ (Field 1) và một Gauge cho Độ ẩm (Field 2).
Nhấp "Create". Sắp xếp lại các widget nếu muốn.
Phần 2: Thiết lập Môi trường Arduino IDE
Bước 1: Cài đặt Thư viện ThingSpeak
Thư viện này giúp đơn giản hóa việc gửi dữ liệu lên ThingSpeak từ Arduino.
Mở Arduino IDE.
Vào menu Sketch -> Include Library -> Manage Libraries...
Trong ô tìm kiếm, gõ ThingSpeak.
Tìm thư viện "ThingSpeak Communication Library" của MathWorks và nhấp "Install".
Bước 2: Cài đặt Thư viện DHT Sensor
Thư viện này dùng để giao tiếp với cảm biến DHT11/DHT22.
Vẫn trong cửa sổ Library Manager, tìm kiếm DHT sensor library.
Tìm thư viện "DHT sensor library" của Adafruit và nhấp "Install". Nó có thể yêu cầu cài đặt thêm thư viện phụ thuộc "Adafruit Unified Sensor", hãy đồng ý cài đặt cả thư viện đó.
Cách khác (nếu tải file .zip): Tải file thư viện DHT (ví dụ: từ link này - Nhấp Code -> Download ZIP). Sau đó, trong Arduino IDE, vào Sketch -> Include Library -> Add .ZIP Library... và chọn file .zip bạn vừa tải về.
Bước 3: Cài đặt Board ESP8266 (Nếu chưa có)
Nếu đây là lần đầu bạn sử dụng Wemos D1 R1 hoặc bo mạch ESP8266 khác, bạn cần cài đặt hỗ trợ cho nó:
Vào File -> Preferences.
Trong ô "Additional Boards Manager URLs", dán link sau:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Nhấp "OK".
Vào Tools -> Board -> Boards Manager...
Tìm kiếm esp8266.
Chọn "esp8266" by ESP8266 Community và nhấp "Install".
Bước 4: Chọn Board và Cổng COM
Vào Tools -> Board -> ESP8266 Boards và chọn loại board bạn đang dùng (Ví dụ: "LOLIN(WEMOS) D1 R1 & mini").
Kết nối board ESP8266 với máy tính qua cáp USB.
Vào Tools -> Port và chọn cổng COM tương ứng với board của bạn (Ví dụ: COM3, COM4...).
Phần 3: Kết nối Phần cứng (Ví dụ: DHT11 và Wemos D1 R1)
Kết nối rất đơn giản:
DHT11 VCC (hoặc +) -> Wemos 3.3V hoặc 5V (Kiểm tra datasheet của module DHT11 bạn dùng, thường dùng 3.3V an toàn hơn cho Wemos).
DHT11 GND (hoặc -) -> Wemos GND.
DHT11 DATA (hoặc OUT) -> Wemos D4 (Hoặc một chân Digital khác, nhớ cập nhật trong code nếu đổi chân).
(Bạn có thể cần một điện trở kéo lên 4.7kΩ - 10kΩ giữa chân VCC và chân DATA của DHT11, nhưng nhiều module đã tích hợp sẵn).
Phần 4: Code Arduino để Gửi Dữ liệu
Sao chép đoạn code sau vào Arduino IDE:
#include <ESP8266WiFi.h>
#include "ThingSpeak.h"
#include "DHT.h"
const char* ssid = "YourSSID";
const char* password = "YourPassword";
unsigned long myChannelNumber = 123456;
const char * myWriteAPIKey = "YOUR_WRITE_API_KEY";
#define DHTPIN D4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
WiFiClient client;
void setup() {
Serial.begin(115200);
delay(10);
dht.begin();
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
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());
ThingSpeak.begin(client);
}
void loop() {
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
ThingSpeak.setField(1, t);
ThingSpeak.setField(2, h);
int httpCode = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (httpCode == 200) {
Serial.println("Channel update successful.");
} else {
Serial.println("Problem updating channel. HTTP error code " + String(httpCode));
}
delay(20000);
}
Quan trọng: Chỉnh sửa Code
Trước khi nạp code, bạn phải thay thế các giá trị sau bằng thông tin của bạn:
"YourSSID": Thay bằng tên mạng WiFi (SSID) của bạn.
"YourPassword": Thay bằng mật khẩu WiFi của bạn.
123456: Thay bằng Channel ID bạn đã lưu ở Phần 1 - Bước 3.
"YOUR_WRITE_API_KEY": Thay bằng Write API Key bạn đã lưu ở Phần 1 - Bước 3.
(Tùy chọn) Nếu bạn nối chân DATA của DHT vào chân khác D4, hãy thay đổi #define DHTPIN D4.
(Tùy chọn) Nếu bạn dùng cảm biến DHT22, hãy thay đổi #define DHTTYPE DHT11 thành #define DHTTYPE DHT22.
Phần 5: Nạp Code và Xem Kết quả
Kiểm tra: Đảm bảo bạn đã chọn đúng Board và Port trong menu Tools.
Nạp Code: Nhấn nút "Upload" (mũi tên sang phải) trên Arduino IDE.
Mở Serial Monitor: Sau khi nạp xong, mở Serial Monitor (biểu tượng kính lúp hoặc Tools -> Serial Monitor). Đặt tốc độ baud là 115200.
Bạn sẽ thấy thông báo kết nối WiFi.
Sau đó, bạn sẽ thấy giá trị nhiệt độ, độ ẩm được in ra và thông báo "Channel update successful" nếu gửi dữ liệu thành công.
Nếu có lỗi đọc DHT hoặc lỗi gửi lên ThingSpeak, thông báo lỗi sẽ hiện ra.
Kiểm tra ThingSpeak: Quay lại trang web ThingSpeak, vào kênh của bạn và xem tab "Private View". Sau khoảng 20-30 giây (do delay trong code và thời gian xử lý), bạn sẽ thấy các biểu đồ và widget bắt đầu cập nhật dữ liệu mới!