Thứ Sáu, Tháng Chín 25, 2020
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 !

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments

Most Popular

Hướng dẫn sử dụng Mạch đóng ngắt tải không tiếp xúc chế tạo Thiết bị vệ sinh tự động

Từ ngày 03/08/2020 mạch chuyển sang phiên bản mới tuy nhiên kích thước, vị trí linh kiện và chức năng của mạch giống và...

Lưu trữ nhật ký dữ liệu Online với ESP32 và Google Spreadsheets

Giới Thiệu Chào các bạn, trong các dự án IoT nhỏ gọn thì việc lưu trữ  và kiểm soát dữ liệu trên đám mây cũng...

Đọc Cảm Biến DHT11/DHT21/DHT22 không bị DELAY chương trình

Giới Thiệu Chào các bạn, hôm nay mình giới thiệu và hướng dẫn cách đọc cảm biến các dòng DHT11/DHT21/DHT22 ở bài này mình sử...

Gỡ lỗi ESP8266/ESP32 với thư viện ArduinoTrace

Giới Thiệu Chào các bạn, thông thường khi các bạn debug chương trình các bạn thường sử dùng hàm Serial.print() tuy nhiên, hôm nay mình sẽ...

Recent Comments

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