ESP32 ThingSpeak – Cách hiển thị dữ liệu cảm biến cực đơn giản
Trong hướng dẫn về chủ đề ESP32 ThingSpeak lần này, mình sẽ hướng dẫn bạn cách gửi dữ liệu đọc được từ cảm biến lên ThingSpeak và hiển thị trực quan hơn. Trong bài dưới, mình sử dụng cảm biến nhiệt độ BME280 để phục vụ dự án, nhưng bạn có thể chọn bất kỳ cảm biến nào bạn thích đều được nhé!
ThingSpeak là một nền tảng cho phép chúng ta xuất bản dữ liệu từ cảm biến lên Website và hiển thị dưới dạng biểu đồ, có các cột mốc thời gian rất trực quan. Bạn có thể truy cập vào Website này để đọc dữ liệu đo được từ cảm biến tại mọi nơi, chỉ cần có kết nối Internet.
Chuẩn bị phần cứng
Để thực hiện dự án ESP32 ThingSpeak này, bạn cần chuẩn bị:
- Mạch ESP32
- Cảm biến nhiệt độ BME280
- Breadboard
- Dây Jumper
Cài thư viện trên Arduino IDE
Thư viện ThingSpeak
Có rất nhiều cách để gửi dữ liệu lên ThingSpeak. Trong hướng dẫn này, mình sẽ gợi ý cách đơn giản nhất – sử dụng thư viện ThingSpeak-Arduino.
Bạn có thể mở Arduino IDE và click theo thứ tự: Sketch >> Include Library >> Manage Libraries… và tìm kiếm từ khóa “ThingSpeak”, rồi tiến hành cài đặt thư viện ThingSpeak từ MathWorks nhé!
Thư viện BMT280
Như đã đề cập, mình sẽ lấy kết quả đo được từ cảm biến nhiệt độ BME280 để hiển thị lên ThingSpeak. Do đó, bạn cần cài đặt các thư viện sau để ESP32 có thể làm việc với cảm biến:
Hoặc ngoài ra, bạn cũng có thể mở Sketch >> Include Library >> Manage Libraries… và tìm kiếm tên thư viện, sau đó cài đặt bình thường.
Thư viện trên VS Code + PlatformIO
Nếu bạn thực hiện dự án ESP32 ThingSpeak này với VS Code và tiện ích mở rộng PlatformIO, bạn hãy copy đoạn code sau vào file platformio.ini để cài đặt các thư viện nhé:
lib_deps = mathworks/ThingSpeak@^2.0.0 adafruit/Adafruit Unified Sensor @ ^1.1.4 adafruit/Adafruit BME280 Library @ ^2.1.2
Kết nối phần cứng
Mình sẽ kết nối BME280 với ESP32 thông qua giao tiếp I2C, cụ thể là nối với cổng GPIO 22 (SCL) và GPIO 21 (SDA) của ESP32 như hình:
Lưu ý: Bạn nên tham khảo sơ đồ chân GPIO của mạch ESP32 bạn đang dùng, để kết nối sao cho phù hợp nhé!
Làm việc với ThingSpeak
Bạn hãy truy cập ThingSpeak qua đường link bên dưới, và click vào “Get Started For Free” để tạo tài khoản mới và sử dụng. Tài khoản này được liên kết với tài khoản Mathworks, nên nếu bạn đã có tài khoản Mathworks thì bạn đăng nhập vào trực tiếp bằng tài khoản đó để dùng nhé!
Tạo kênh (channel) mới
Sau khi có tài khoản, bạn đăng nhập vào, mở tab Channels và chọn My Channels:
Click nút New Channel để tạo kênh mới:
Bạn nhập tên và mô tả cho kênh của mình. Trong dự án ESP32 ThingSpeak này, mình xuất bản các dữ liệu về nhiệt độ nên mình sẽ cài đặt như bên dưới.
Nếu bạn muốn xuất bản thêm các thông số khác như độ ẩm, áp suất,… bạn có thể bật thêm nhiều trường thông tin khác tùy theo nhu cầu.
Click vào Save Channel để lưu kênh vừa tạo.
Tùy chỉnh biểu đồ
Bạn có thể chuyển sang tab Private View và click vào biểu tượng chỉnh sửa, để tùy chỉnh biểu đồ của mình nhé:
Bạn có thể thay đổi tiêu đề, tùy chỉnh màu nền biểu đồ, trục x hoặc trục y,…. tùy thích:
Sau khi điền xong các thông tin, bạn nhấn Save.
API Key
Để gửi dữ liệu đọc được từ ESP32 đến ThingSpeak, chúng ta cần có một Write API Key. Bạn hãy mở tab “API Keys”, copy phần Write API Key và lưu lại. Chúng ta sẽ dùng đến chúng trong đoạn code của dự án ESP32 ThingSpeak này.
Code cho dự án ESP32 ThingSpeak
Bạn copy đoạn code sau vào Arduino IDE (hoặc copy vào file main.cpp nếu bạn dùng PlatformIO nhé). Lưu ý rằng bạn cần thay đổi một số thông tin thành của bạn như hướng dẫn ngay dưới đoạn code, thì code ESP32 ThingSpeak này mới chạy được.
#include <WiFi.h> #include "ThingSpeak.h" #include <Adafruit_BME280.h> #include <Adafruit_Sensor.h> const char* ssid = "REPLACE_WITH_YOUR_SSID"; // tên mạng WiFi của bạn const char* password = "REPLACE_WITH_YOUR_PASSWORD"; // mật khẩu mạng WiFi của bạn WiFiClient client; unsigned long myChannelNumber = X; const char * myWriteAPIKey = "XXXXXXXXXXXXXXXX"; // Biến thời gian unsigned long lastTime = 0; unsigned long timerDelay = 30000; // Variable to hold temperature readings float temperatureC; //uncomment if you want to get temperature in Fahrenheit //float temperatureF; // Create a sensor object Adafruit_BME280 bme; //BME280 connect to ESP32 I2C (GPIO 21 = SDA, GPIO 22 = SCL) void initBME(){ if (!bme.begin(0x76)) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } } void setup() { Serial.begin(115200); //Initialize serial initBME(); WiFi.mode(WIFI_STA); ThingSpeak.begin(client); // Initialize ThingSpeak } void loop() { if ((millis() - lastTime) > timerDelay) { // Connect or reconnect to WiFi if(WiFi.status() != WL_CONNECTED){ Serial.print("Attempting to connect"); while(WiFi.status() != WL_CONNECTED){ WiFi.begin(ssid, password); delay(5000); } Serial.println("\nConnected."); } // Get a new temperature reading temperatureC = bme.readTemperature(); Serial.print("Temperature (ºC): "); Serial.println(temperatureC); //uncomment if you want to get temperature in Fahrenheit /*temperatureF = 1.8 * bme.readTemperature() + 32; Serial.print("Temperature (ºC): "); Serial.println(temperatureF);*/ // Write to ThingSpeak. There are up to 8 fields in a channel, allowing you to store up to 8 different // pieces of information in a channel. Here, we write to field 1. int x = ThingSpeak.writeField(myChannelNumber, 1, temperatureC, myWriteAPIKey); //uncomment if you want to get temperature in Fahrenheit //int x = ThingSpeak.writeField(myChannelNumber, 1, temperatureF, myWriteAPIKey); if(x == 200){ Serial.println("Channel update successful."); } else{ Serial.println("Problem updating channel. HTTP error code " + String(x)); } lastTime = millis(); } }
Để code ESP32 ThingSpeak trên hoạt động, bạn cần chèn thông tin mạng WiFi của bạn vào đoạn code sau:
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
Bạn cũng cần chèn số thứ tự của kênh trên ThingSpeak mà bạn muốn hiển thị dữ liệu. Nếu bạn chỉ có 1 kênh duy nhất trên ThingSpeak, số kênh sẽ là 1. Bạn có thể theo dõi số kênh ở tab Private View trên ThingSpeak.
unsigned long myChannelNumber = 1;
Cuối cùng, bạn cần chèn Write API Key mà bạn đã lưu lại lúc nãy:
const char * myWriteAPIKey = "XXXXXXXXXXXXXXXX";
Demo dự án ESP32 ThingSpeak
Vậy là xong, chúng ta đã hoàn thành dự án ESP32 ThingSpeak! Bạn hãy nạp đoạn code trên vào mạch EPS32 của mình, hệ thống sẽ kết nối thành công và gửi các thông tin đọc được từ cảm biến lên ThingSpeak.
Lời kết
Trong bài viết trên, mình đã hướng dẫn bạn cách thực hiện dự án ESP32 ThingSpeak cực kỳ đơn giản, nhằm hiển thị dữ liệu từ cảm biến một cách trực quan. Chúc bạn thành công!
Trên Web IoTZone còn khá nhiều bài viết khác về ESP32, bạn có thể tham khảo nếu thích nhé:
- Cách dùng ESP32 Load Cell và HX711 module làm cân kỹ thuật số
- Hướng dẫn cảm biến nhiệt độ DS18B20 Arduino
- Đồ án hệ thống tưới nước thông minh với ESP32 Blynk App
IoTZone – Chuyên cung cấp thiết bị điện tử & tài liệu cho Makers
- Website: https://www.iotzone.vn/
- Fanpage: https://www.facebook.com/Iotzonemaker
- SDT: 0364174499
- Zalo: https://zalo.me/0364174499