Thứ Hai, Tháng Chín 27, 2021
Trang chủ DIY IoT - Giám sát từ xa thông qua ThingSpeak và ESP8266

IoT – Giám sát từ xa thông qua ThingSpeak và ESP8266

Giới thiệu

Chào các bạn  , trong bài viết này mình sẽ hướng dẫn các bạn cách xây dựng một hệ thống giám sát nhiệt độ và độ ẩm môi trường từ bất kì đâu thông qua ThingSpeak và ESP8266 !

Vậy ThingSpeak là gì ?

ThingSpeak là một clound service khá nổi tiếng và phổ biến trong cộng đồng IoT, cho phép người dùng dữ liệu lên clound và từ clound lấy dữ liệu về qua giao thức HTTP. Ngoài ra với giao diện đồ họa hiển thị dữ liệu khá bắt mắt chắc chắn sẽ là một dự án thú vị cho các bạn yêu thích IoT.

Biểu đồ nhiệt độBiểu đồ độ ẩm

Chuẩn bị

1. Phần cứng:

2. Phần mềm:

Hướng dẫn

1. Phần cứng:

Kết nối Kit Arduino Wifi ESP8266 NodeMCU Lua WeMos D1 R2 với DHT11 như sau:

 

2. Phần mềm:

Thingspeak

Bước 1 : Các bạn truy cập vào website Thingspeak 


Chọn Sign Up và đăng kì tài khoản miễn phí bằng Gmail.

Bước 2 : Khởi tạo new Channel

Nhập Name,Description,Field1,Field2

Sau đó chọn Save Channel

Chúng ta chỉnh lại tên cho phù hợp 

Thêm Widget Gauge vào cho sinh động 

 

Bước 3 : ThingSpeak API KEY và ID Channel

Sau khi tạo Channel thành công các bạn vào API Keys

Các bạn lưu lại Channel ID và API KEY ( xíu nữa chúng ta sẽ cần dùng tới )

• Arduino IDE

Bước 1 : Cài đặt thư viện Thingspeak

Bước 2 : Cài đặt thư viện DHT11

Các bạn tải thư viện DHT11 tại đây. Sau đó chúng ta sẽ add thư viện vào Arduino.

Nếu thêm thư viện thành công các bạn sẽ thấy “Library added to your library. Check “Include library” menu

Các bạn chọn Tool-board : Wemos D1 R1 và chọn cổng COM kết nối

Code Test DHT11

#include "DHT.h"

#define DHTPIN D6
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);



void setup() {
  Serial.begin(115200);
  Serial.println("MakerLab-ThingSpeak DHT11 test!");
  dht.begin();
}

void loop() {
  delay(250);
  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.print(" *C ");
  Serial.println();
}

Các bạn nạp chương trình Code test DHT11 vào và để kiểm tra xem thử cảm biến DHT11 đã đọc được chưa?

Bước 3 :Gửi dữ liệu lên Server 

Code gửi dữ liệu lên Server

#include "DHT.h"
#include "ESP8266WiFi.h"
#include <ThingSpeak.h>
#define DHTPIN D6
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

const char *ssid =  "YourSSID";
const char *pass =  "YouPassword";
const char *server = "api.thingspeak.com";
unsigned long myChannelNumber = yourChannelNumber;
const char * myWriteAPIKey = "yourAPIKey";

int lastHumi , lastTemp;

unsigned long send_time = 0, dht_time = 0;
unsigned long dht_time_repeat = 3000, send_time_repeat = 15000;

float h = 0;
float t = 0;

WiFiClient client;

void setup() {
  Serial.begin(115200);
  Serial.println("Makerlab.vn - DHT11 Test");
  dht.begin();
  setupWiFi();
}

void loop() {
  //  delay(2000);
  if (millis() - dht_time >= dht_time_repeat) {
    readDHT11();
    dht_time = millis();
  }
  if (millis() - send_time >= send_time_repeat) {
    client_Sendata();
    send_time = millis();
  }

  //  client_Sendata();
  //  delay(20000);
}


void client_Sendata() {
  static boolean data_state = false;
  if ( data_state )
  {
    ThingSpeak.writeField(myChannelNumber, 1, lastTemp, myWriteAPIKey);
    data_state = false;
  }
  else
  {
    ThingSpeak.writeField(myChannelNumber, 2, lastHumi, myWriteAPIKey);
    data_state = true;
  }
  Serial.println("Data send to ThingSpeak");

}

void setupWiFi() {
  Serial.println("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  ThingSpeak.begin(client);
}

void readDHT11() {
  h = dht.readHumidity();
  t = dht.readTemperature();
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  } else {
    lastHumi = h;
    lastTemp = t;
  }
  Serial.print("Humidity: ");
  Serial.print(lastHumi);
  Serial.print("%t");
  Serial.print("Temperature: ");
  Serial.print(lastTemp);
  Serial.print("°C");
  Serial.println();
}

Các bạn chỉnh sửa lại code như sau:

Thay “YourSSID” bằng tên WiFi của bạn

const char *ssid = “YourSSID”; 

Thay “YourPassword” bằng mật khẩu WiFi của bạn

const char *pass = “YouPassword”;

Thay “yourChannelNumber” bằng số Channel mà mình đã nhắc bạn lưu lại ở trên

unsigned long myChannelNumber = yourChannelNumber;

Tương tự bạn cũng thay “yourAPIKey” bằng mã API ở trên

const char * myWriteAPIKey = “yourAPIKey”;

Kết Quả

Vậy là chúng ta đã làm xong demo giám sát các thông số từ xa thông qua ThingSpeak và ESP8266. Ngoài sử dụng board mạch Wemos D1 R2 ra các bạn cũng có thể sử dụng các loại board khác như NodeMCU CP2102, ESP8266 D1 MINI, NodeMCU CH340…v…v.
Chúc các bạn thành công với các dự án của mình !

1 BÌNH LUẬN

Subscribe
Notify of
guest
1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Nguyễn Hoàng Huy
Nguyễn Hoàng Huy
24/10/2020 12:22 sáng

Có cách nào send data lên thingspeak bằng C# không ạ

Most Popular

Tìm hiểu cách sử dụng các cảm biến Nhiệt độ & Độ ẩm DHT

Chắc nhiều bạn sinh viên cũng quá quen mấy con này rồi. Nói không sai, DHT có thể xem như cảm biến quốc dân...

Tìm hiểu về Nhiệt độ biểu kiến cũng như Cách ta cảm nhận nhiệt độ

Có bạn nào từng thắc mắc rằng, tại sao đôi khi nhiệt độ ngoài trời không cao lắm, nhưng ta lại thấy nóng nực...

Tìm hiểu cách sử dụng cảm biến PM2.5 GP2Y1010AU0F

Chào các bạn, trong bài này mình sẽ hướng dẫn cách tiếp cận sử dụng một cảm biến Bụi PM2.5 giá rẻ 😀, dễ...

Tìm hiểu về tác hại của PM2.5 cũng như cách nhận biết Chất lượng không khí

Các bạn có bao giờ tự hỏi, vì sao có những nơi, những không gian, hay những thời điểm trong ngày khiến ta suy...

Recent Comments

1
0
Would love your thoughts, please comment.x
()
x