Hiển thị nhiệt độ, độ ẩm lên Thingspeak với ESP32

Quan trac nhiet do do am voi ESP32 va thingspeak

Trong bài này chúng ta sẽ học cách sử dụng esp32 http post gửi nhiệt độ, độ ẩm lên Thingspeak để có thể quan sát theo dạng đồ thị sự biến thiên của chúng.
Bài 6 WIFI Trong serie Học ESP32 từ A tới Z

Cách sử dụng Thingspeak

Thingspeak là gì?

Thingspeak là một nền tảng mà bạn có thể hiển thi dữ liệu trên Cloud. Bạn có thể truy cập để hiển thị hoặc lấy dữ liệu từ Cloud về thiết bị IOT thông qua giao thức HTTP. Thingspeak hoàn toàn miễn phí và giao diện cũng khá đẹp nên có rất nhiều người trên thế giới sử dụng.

Thingspeak
Mô hình của Thingspeak

Cách lấy API Thingspeak

Tương tự như cách giao tiếp với các server khác, Thingspeak sử dụng API và có 1 key để định danh người sử dụng.

Đầu tiên đăng kí và đăng nhập vào https://thingspeak.com/

Vào Channels – My channels- New channels

thingspeak tao api

Trong new channel Tạo tên bảng của bạn. Các trường cần hiển thị. Ở đây mình sử dụng 2 trường là Temparature và Humidity. Nhấn Save channel để hoàn thành.

thingspeak tao api 2

Chuyển qua tap API Keys để lấy key và example. Các bạn có thể copy Example và dùng postman để kiểm thử

thingspeak tao api 3

Sử dụng Postman thử gửi 3 nhiệt độ là 32,36 và 33. Phần response trả về sẽ là số lần ghi lên Thingspeak

thingspeak test voi postman

Kết quả

thingspeak test voi postman 2

Đo nhiệt độ, độ ẩm với DHT11

Cài thư viện DHT

Để đo được nhiệt độ với cảm biến DHT11 đầu tiên chúng ta cài thư viện DHT sensor

pio lib install “adafruit/DHT sensor library”

Kèm theo thư viện sensor để không sảy ra lỗi nhé!

pio lib install “adafruit/Adafruit Unified Sensor”

Chuẩn bị phần cứng

Phần cứng bao gồm:

  • Kit ESP32
  • Trở 10k
  • DHT11

Chúng ta sẽ mắc chân data/signal của DHT11 với chân GPIO 12. Với cảm biến DHT11 4 chân chúng ta cần mắc trở treo chân Data lên 3.3V với trở 4.7k – 10k. Còn module thì không cần.

DHT11

Lập trình đọc nhiệt độ, độ ẩm với DHT11

Để lập trình, chúng ta làm theo các bước:

  1. Include thư viện với:  #include "DHT.h"
  2. Khởi tạo kiểu cảm biến, chân data và biến DHT:
    #define DHTPIN 12 
    #define DHTTYPE DHT11   // DHT 11
    DHT dht(DHTPIN, DHTTYPE);
  3. Trong setup khởi chạy biến DHT bằng lệnh:
    dht.begin();
  4. Đọc nhiệt độ, độ ẩm rồi in ra màn hình.
    float h = dht.readHumidity();
    float t = dht.readTemperature();

dht11 code

Gửi nhiệt độ, độ ẩm lên Thingspeak với ESP32 HTTP

Tương tự như bài Dự báo thời tiết với ESP32, chúng ta sử dụng giao thức HTTP để gửi kết quả lên server. Để hiểu rõ về HTTP là gì các bạn đón đọc:

Tất tần tật về giao thức HTTP và HTTPS

Các bước như sau:

  • Đầu tiên khởi tạo 1 Url chứa đường dẫn và api key:
String UrlThingspeak = "https://api.thingspeak.com/update?api_key=J69MXGIE0KLMA27C";
  • Tiếp đó, sau khi đọc nhiệt độ, độ ẩm, cần conver chúng từ float sang string bằng sprintf
sprintf(para,"&field1=%6.2f&field2=%6.2f",t,h);
  • Tiếp tới cộng 2 String lại để đc Url hoàn chỉnh
String Url = UrlThingspeak + String(para);
  • Cuối cùng sử dụng hàm http request để truyền kết quả lên.
httpGETRequest(Url.c_str());

Full code

 

#include <Arduino.h>
#include "DHT.h"
#include <HTTPClient.h>
#include <WiFi.h>
#include <string.h>
const char* ssid = "Nha Tao";
const char* password = "25251325" ;
#define DHTPIN 12     // Digital pin connected to the DHT sensor

#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);
String UrlThingspeak = "https://api.thingspeak.com/update?api_key=J69MXGIE0KLMA27C";

String httpGETRequest(const char* Url);
void setup() {
  Serial.begin(9600);
  Serial.println(F("DHTxx to Thingspeak!"));

  dht.begin();
    //setup wifi
  WiFi.begin(ssid,password);
  Serial.println("conecting");
  while(WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to WiFi network with IP Address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  // Wait a few seconds between measurements.
  delay(10000);
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }
  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.println(" %");
  Serial.print(F("Temperature: "));
  Serial.print(t);
  Serial.println(" oC");
  char para[50];
  sprintf(para,"&field1=%6.2f&field2=%6.2f",t,h);
  String Url = UrlThingspeak + String(para);
  httpGETRequest(Url.c_str());
}

String httpGETRequest(const char* Url)
{
  HTTPClient http;
  http.begin(Url);
  int responseCode = http.GET();
  String responseBody = "{}";
  if(responseCode > 0)
  {
    Serial.print("responseCode:");
    Serial.println(responseCode);
    responseBody = http.getString();
  }
  else 
  {
    Serial.print("Error Code: ");
    Serial.println(responseCode);
  }
  http.end();
  return responseBody;
}

Kết quả

esp32 thingspeak
Đồ thị trên thingspeak

 

Kết

Thingspeak là một dashboard view rất được ưa chuộng khi mới bắt đầu đặt chân vào lập trình IOT. Ngoài việc gửi dữ liệu lên, nó cũng có thể được dùng để lấy dữ liệu về.

Tuy vậy các dự án thực tế lại ít dùng bởi chúng khá đơn giản không đáp ứng đủ nhu cầu.

Nếu thấy có ích hãy chia sẻ bài viết và tham gia nhóm Nghiện Lập Trình để giao lưu và học hỏi nhé

5/5 - (1 bình chọn)

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *