Hiển thị các bài đăng có nhãn Bài 33: Gửi Dữ liệu Cảm biến lên ThingSpeak bằng Arduino (ESP8266). Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Bài 33: Gửi Dữ liệu Cảm biến lên ThingSpeak bằng Arduino (ESP8266). Hiển thị tất cả bài đăng

Chủ Nhật, 5 tháng 11, 2023

Bài 33: Gửi Dữ liệu Cảm biến lên ThingSpeak bằng Arduino (ESP8266)

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

  1. Truy cập trang web ThingSpeak: https://thingspeak.com/

  2. Nhấp vào nút "Sign Up" (Đăng ký).

  3. Đ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.

  1. Sau khi đăng nhập, vào mục "Channels" -> "My Channels".

  2. Nhấp vào nút "New Channel".

  3. Đ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:

  1. Channel ID: Mã số định danh duy nhất cho kênh của bạn.

  2. 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:

  1. Sau khi lưu kênh, nhấp vào tab "API Keys" trong trang cài đặt kênh.

  2. Sao chép (copy) và lưu lại cẩn thận giá trị "Channel ID""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:

  1. Chuyển sang tab "Private View" hoặc "Public View" (nếu bạn muốn chia sẻ công khai).

  2. Nhấp vào nút "Add Widget".

  3. Chọn loại Widget bạn muốn, ví dụ: "Gauge" (đồng hồ đo).

  4. 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).

  5. 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.

  1. Mở Arduino IDE.

  2. Vào menu Sketch -> Include Library -> Manage Libraries...

  3. Trong ô tìm kiếm, gõ ThingSpeak.

  4. 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.

  1. Vẫn trong cửa sổ Library Manager, tìm kiếm DHT sensor library.

  2. 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 đó.

  3. 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ó:

  1. Vào File -> Preferences.

  2. Trong ô "Additional Boards Manager URLs", dán link sau:
    http://arduino.esp8266.com/stable/package_esp8266com_index.json

  3. Nhấp "OK".

  4. Vào Tools -> Board -> Boards Manager...

  5. Tìm kiếm esp8266.

  6. Chọn "esp8266" by ESP8266 Community và nhấp "Install".

Bước 4: Chọn Board và Cổng COM

  1. Vào Tools -> Board -> ESP8266 Boards và chọn loại board bạn đang dùng (Ví dụ: "LOLIN(WEMOS) D1 R1 & mini").

  2. Kết nối board ESP8266 với máy tính qua cáp USB.

  3. 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"
// --- Thông tin mạng WiFi ---
const char* ssid = "YourSSID"; // <--- THAY TÊN WIFI CỦA BẠN VÀO ĐÂY
const char* password = "YourPassword"; // <--- THAY MẬT KHẨU WIFI CỦA BẠN VÀO ĐÂY
// --- Thông tin Kênh ThingSpeak ---
unsigned long myChannelNumber = 123456; // <--- THAY BẰNG CHANNEL ID CỦA BẠN
const char * myWriteAPIKey = "YOUR_WRITE_API_KEY"; // <--- THAY BẰNG WRITE API KEY CỦA BẠN
// --- Cấu hình Cảm biến DHT ---
#define DHTPIN D4 // Chân DATA của DHT nối với chân D4 trên Wemos
#define DHTTYPE DHT11 // Loại cảm biến là DHT11 (Nếu dùng DHT22 thì đổi thành DHT22)
DHT dht(DHTPIN, DHTTYPE);
WiFiClient client; // Khởi tạo client WiFi để ThingSpeak sử dụng
void setup() {
Serial.begin(115200); // Bắt đầu Serial Monitor để xem log
delay(10);
dht.begin(); // Khởi động cảm biến DHT
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
// Kết nối WiFi
WiFi.mode(WIFI_STA); // Đặt chế độ Station (kết nối tới router)
WiFi.begin(ssid, password);
// Chờ kết nối WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Khởi tạo ThingSpeak client
ThingSpeak.begin(client);
}
void loop() {
// Chờ ít nhất 2 giây giữa các lần đọc DHT (theo khuyến nghị)
delay(2000);
// Đọc độ ẩm (%)
float h = dht.readHumidity();
// Đọc nhiệt độ (°C)
float t = dht.readTemperature();
// Kiểm tra nếu đọc lỗi (ví dụ: cảm biến không kết nối)
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return; // Thoát khỏi vòng lặp này và thử lại lần sau
}
// In giá trị đọc được ra Serial Monitor để kiểm tra
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
// --- Gửi dữ liệu lên ThingSpeak ---
// Đặt giá trị cho các trường (Field)
ThingSpeak.setField(1, t); // Field 1 là nhiệt độ
ThingSpeak.setField(2, h); // Field 2 là độ ẩm
// Ghi các trường dữ liệu lên kênh ThingSpeak
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));
}
// ThingSpeak yêu cầu khoảng nghỉ giữa các lần cập nhật (tài khoản miễn phí ~15 giây)
// Đặt delay lớn hơn để đảm bảo không bị chặn
delay(20000); // Chờ 20 giây trước khi gửi dữ liệu tiếp theo
}

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:

  1. "YourSSID": Thay bằng tên mạng WiFi (SSID) của bạn.

  2. "YourPassword": Thay bằng mật khẩu WiFi của bạn.

  3. 123456: Thay bằng Channel ID bạn đã lưu ở Phần 1 - Bước 3.

  4. "YOUR_WRITE_API_KEY": Thay bằng Write API Key bạn đã lưu ở Phần 1 - Bước 3.

  5. (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.

  6. (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ả

  1. Kiểm tra: Đảm bảo bạn đã chọn đúng Board và Port trong menu Tools.

  2. Nạp Code: Nhấn nút "Upload" (mũi tên sang phải) trên Arduino IDE.

  3. 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.

  4. 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!