III. KẾT QUẢ THỰC NGHIỆM
3.4. Cách kết nối các module
a. Kết nối cảm biến khí ga MQ-9 với Wifi ESP8266 NodeMCU Lua CP2102 Bước 1: Kết nối Cảm Biến MQ9
Cảm biến MQ-9 có 4 chân:
● VCC: Cấp nguồn cho cảm biến (thường là 5V).
● GND: Chân nối đất (ground).
● AO (Analog Output): Đầu ra tín hiệu analog.
● DO (Digital Output): Đầu ra tín hiệu kỹ thuật số.
Bước 2: Kết Nối ESP8266 NodeMCU
● VCC của MQ-9 nối với 3.3V (hoặc 5V nếu MQ-9 yêu cầu) của ESP8266.
● GND của MQ-9 nối với GND của ESP8266.
● AO của MQ-9 nối với chân A0 của ESP8266 nếu bạn muốn đọc tín hiệu analog (nồng độ khí thay đổi liên tục).
● DO của MQ-9 nối với chân D0, D1, D2, D3... (bất kỳ chân GPIO nào) của ESP8266 nếu bạn muốn đọc tín hiệu kỹ thuật số (HIGH/LOW).
Bước 3: Lập Trình ESP8266 NodeMCU // Khai báo chân
int analogPin = A0; // Chân A0 cho tín hiệu Analog int digitalPin = D1; // Chân D1 cho tín hiệu Digital (DO) void setup() {
Serial.begin(115200); // Bắt đầu kết nối Serial pinMode(digitalPin, INPUT); // Đặt chân D1 là INPUT }
void loop() {
// Đọc tín hiệu analog từ MQ-9
int analogValue = analogRead(analogPin);
// Đọc tín hiệu digital từ MQ-9
int digitalValue = digitalRead(digitalPin);
// In giá trị analog và digital ra Serial Monitor Serial.print("Analog Value: ");
Serial.print(analogValue);
Serial.print(" | Digital Value: ");
Serial.println(digitalValue);
delay(1000); // Dừng lại 1 giây trước khi đọc lại }
b. Kết nối cảm biến nhiệt độ, độ ẩm DHT11 ASAIR với Wifi ESP8266 NodeMCU Lua CP2102.
Hình 17: Kết nối cảm biến nhiệt độ, độ ẩm Bước 1: Kết Nối Cảm Biến DHT11
Cảm biến DHT11 thường có 3 chân, gồm:
● VCC: Nguồn cung cấp điện (VD: 5V).
● GND: Kết nối với đất.
● DATA: Đầu ra dữ liệu, kết nối với một chân số trên ESP8266 (VD: D1).
Bước 2: Kết Nối ESP8266 NodeMCU
ESP8266 NodeMCU Lua CP2102 thường có các chân quan trọng như sau:
● Vin: Nguồn cung cấp điện (VD: 5V).
● GND: Đất.
● D1, D2, ...: Các chân số có thể sử dụng để kết nối với DATA của DHT11 hoặc để kết nối với mạch Wifi.
Bước 3: Lập Trình ESP8266 NodeMCU
Sử dụng môi trường phát triển Arduino hoặc PlatformIO để lập trình ESP8266. Dưới đây là một ví dụ đơn giản để đọc giá trị từ cảm biến DHT11 và gửi nó lên mạng Wifi:
#include <DHT.h>
#include <ESP8266WiFi.h>
#define DHTPIN D1 // Chân số kết nối với DATA của DHT11
#define DHTTYPE DHT11 // Loại cảm biến DHT11 const char* ssid = "tên_wifi";
const char* password = "mật_khẩu_wifi";
DHT dht(DHTPIN, DHTTYPE);
void setup() { Serial.begin(115200);
delay(10);
// Kết nối Wifi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
}
void loop() {
// Đọc dữ liệu từ cảm biến DHT11 float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// In ra Serial Monitor Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print("%, Temperature: ");
Serial.print(temperature);
Serial.println("°C");
// Đợi 2 giây trước khi đọc dữ liệu mới delay(2000);
}
Hãy chắc chắn rằng đã điền đúng SSID và mật khẩu Wifi trong mã lập trình.
Nếu muốn thiết lập SSID và mật khẩu trong khi chạy chương trình, có thể sử dụng WifiManager để quản lý cấu hình Wifi.
● Cần phải cài đặt thư viện DHT trước khi biên dịch mã.
c. Kết nối cảm biến lửa với Wifi ESP8266 NodeMCU Lua CP2102:
Hình : Kết nối cảm biến lửa với Wifi ESP8266 Bước 1: Kết Nối Cảm Biến Lửa
Cảm biến lửa thường có 4 chân, bao gồm:
●VCC: Nguồn cung cấp điện (VD: 5V).
●GND: Đất.
●A0: Đầu ra tín hiệu analog, kết nối với một chân analog trên ESP8266 (VD: A0).
●D0: Đầu ra tín hiệu số, kết nối với một chân số trên ESP8266 (VD:
D1).
Bước 2: Kết Nối ESP8266 NodeMCU
ESP8266 NodeMCU Lua CP2102 thường có các chân quan trọng như sau:
●Vin: Nguồn cung cấp điện (VD: 5V).
●GND: Đất.
●A0: Một chân analog có thể sử dụng để kết nối với A0 của cảm biến lửa.
●D1, D2, ...: Các chân số có thể sử dụng để kết nối với D0 của cảm biến lửa hoặc để kết nối với mạch Wifi.
Bước 3: Lập Trình ESP8266 NodeMCU
Sử dụng môi trường phát triển Arduino hoặc PlatformIO để lập trình ESP8266. Dưới đây là một ví dụ đơn giản để đọc giá trị từ cảm biến lửa và gửi nó lên mạng Wifi:
#define FLAME_SENSOR_ANALOG A0 // Chân analog của cảm biến lửa kết nối với A0 trên NodeMCU
#define FLAME_SENSOR_DIGITAL D1 // Chân số của cảm biến lửa kết nối với D1 trên NodeMCU
const char* ssid = "tên_wifi";
const char* password = "mật_khẩu_wifi";
void setup() { Serial.begin(115200);
pinMode(FLAME_SENSOR_DIGITAL, INPUT);
}
void loop() {
// Đọc giá trị tín hiệu từ cảm biến lửa
int analogValue = analogRead(FLAME_SENSOR_ANALOG);
int digitalValue = digitalRead(FLAME_SENSOR_DIGITAL);
// In ra Serial Monitor Serial.print("Analog Value: ");
Serial.print(analogValue);
Serial.print(", Digital Value: ");
Serial.println(digitalValue);
// Kết nối Wifi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Gửi giá trị lên mạng, bạn có thể sử dụng các thư viện khác như HTTPClient để thực hiện điều này.
// Đợi 5 giây trước khi đọc giá trị mới delay(5000);
}
Bước 4: Kết Nối Wifi và Gửi Dữ Liệu
Cần thêm mã lập trình để kết nối Wifi và gửi giá trị từ cảm biến lửa lên mạng. Có thể sử dụng thư viện như HTTPClient để thực hiện điều này, tùy thuộc vào nhu cầu.
Chắc chắn rằng đã điền đúng SSID và mật khẩu Wifi trong mã lập trình.
d. Kết nối Wifi ESP8266 NodeMCU Lua CP2102 với còi chíp 5V 12095 12x9.5mm và đèn led
Hình 19: Kết nối Wifi ESP8266 NodeMCU Lua CP2102 với còi chíp Bước 1: Kết Nối Còi Chíp 5V
Còi chíp thường có 2 chân, gồm:
●VCC: Nguồn cung cấp điện (VD: 5V).
●GND: Đất.
Bước 2: Kết Nối ESP8266 NodeMCU
ESP8266 NodeMCU Lua CP2102 thường có các chân quan trọng như sau:
●Vin: Nguồn cung cấp điện (VD: 5V).
●GND: Đất.
●D1, D2, ...: Các chân số có thể sử dụng để kết nối với còi chíp.
Bước 3: Lập Trình ESP8266 NodeMCU
Sử dụng môi trường phát triển Arduino hoặc PlatformIO để lập trình ESP8266. Dưới đây là một ví dụ đơn giản để bật còi chíp trong một khoảng thời gian và sau đó tắt nó:
#define BUZZER_PIN D1 // Chân số kết nối với còi chíp void setup() {
pinMode(BUZZER_PIN, OUTPUT);
Serial.begin(115200);
}
void loop() { // Bật còi chíp
digitalWrite(BUZZER_PIN, HIGH);
Serial.println("Buzzer ON");
// Đợi 2 giây delay(2000);
// Tắt còi chíp
digitalWrite(BUZZER_PIN, LOW);
Serial.println("Buzzer OFF");
// Đợi 2 giây trước khi bắt đầu lại delay(2000);
} Phần mềm
a. Kết nối Wifi ESP8266 NodeMCU Lua CP 2102 với FireBase:
Hình 21: Kết nối Wifi ESP8266 với FireBase Bước 1: Tạo Dự Án Firebase và Tài Khoản
1. Truy cập Firebase Console và tạo một dự án mới.
2. Trong cấu hình dự án, thêm một ứng dụng và lấy khóa API Firebase.
3. Vào phần "Database" của dự án và tạo một Realtime Database.
4. Chọn "Rất lớn (Start in test mode)" khi được hỏi về quy tắc bảo mật cho cơ sở dữ liệu để đơn giản hóa quyền truy cập trong quá trình phát triển.
Bước 2: Cài Đặt Thư Viện Firebase ESP8266
1. Mở Arduino IDE và chọn "Sketch" > "Include Library" > "Manage Libraries".
2. Tìm và cài đặt thư viện "Firebase ESP8266".
Bước 3: Lập Trình ESP8266 NodeMCU
Dưới đây là một ví dụ đơn giản để gửi dữ liệu từ NodeMCU lên Firebase Realtime Database. Thay đổi các giá trị như ‘ssid’, ‘password’, và
‘firebaseHost’ để phản ánh thông tin của bạn.
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>
#define FIREBASE_HOST "tên-dự-án.firebaseio.com"
#define FIREBASE_AUTH "khóa-api"
#define WIFI_SSID "tên-mạng-wifi"
#define WIFI_PASSWORD "mật-khẩu-wifi"
void setup() { Serial.begin(115200);
// Kết nối Wifi
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) { delay(500);
Serial.print(".");
}
Serial.println("\nConnected to WiFi");
// Khởi tạo kết nối Firebase
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}
void loop() {
// Gửi dữ liệu lên Firebase Realtime Database Firebase.pushInt("sensor/value", analogRead(A0));
delay(1000); // Đợi 1 giây trước khi gửi dữ liệu mới }
Trong ví dụ trên, giá trị đọc từ chân analog A0 sẽ được gửi lên Firebase Realtime Database. Có thể thay đổi phần này để phản ánh dữ liệu cảm biến.
Chắc chắn rằng đã cài đặt đúng thư viện Firebase ESP8266 và điền đúng thông tin Wifi và Firebase trong mã lập trình.
Lưu ý: Trong quá trình sử dụng, có thể phải thay đổi quy tắc bảo mật của Firebase Realtime Database để cho phép quyền truy cập từ thiết bị di động.
b. Kết nối FireBase với điện thoại:
Hình 22: Kết nối FireBase với điện thoại Bước 1: Tạo Dự Án Firebase và Realtime Database
1. Truy cập Firebase Console và tạo một dự án mới.
2. Trong cấu hình dự án, thêm một ứng dụng di động vào dự án của bạn.
3. Chọn "Realtime Database" và tạo một cơ sở dữ liệu.
Bước 2: Tạo Ứng Dụng Di Động
1. Tạo một ứng dụng di động trên nền tảng bạn muốn (Android).
2. Thêm SDK Firebase vào ứng dụng của bạn. Theo dõi hướng dẫn của Firebase cho nền tảng cụ thể của bạn.
Bước 3: Sử Dụng SDK Firebase Trong Ứng Dụng Di Động
Trong mã nguồn của ứng dụng di động, sử dụng SDK Firebase để kết nối với Firebase Realtime Database. Dưới đây là một ví dụ sử dụng SDK Firebase trên Android:
// Thêm dependencies trong file build.gradle (Module: app) implementation 'com.google.firebase:firebase-database:23.0.0' // Trong file MainActivity.java hoặc nơi cần sử dụng import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
public class MainActivity extends AppCompatActivity { // Khai báo DatabaseReference
DatabaseReference databaseReference;
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Kết nối đến Firebase Realtime Database
databaseReference = FirebaseDatabase.getInstance().getReference();
// Ghi dữ liệu vào Firebase Realtime Database
databaseReference.child("message").setValue("Hello, Firebase!");
} }
Bước 4: Hiển Thị Dữ Liệu
Trong ứng dụng của bạn, bạn có thể sử dụng SDK Firebase để lắng nghe sự thay đổi trong Realtime Database và hiển thị dữ liệu lên giao diện người dùng của ứng dụng.
// Lắng nghe sự thay đổi trong Realtime Database
databaseReference.child("message").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) { // Xử lý dữ liệu khi có sự thay đổi
String message = snapshot.getValue(String.class);
textView.setText(message);
}
@Override
public void onCancelled(@NonNull DatabaseError error) { // Xử lý khi có lỗi xảy ra
Log.e("Firebase", "Error: " + error.getMessage());
} });
Bước 5: Cấp Quyền Truy Cập
Chắc chắn rằng đã cấp quyền truy cập cho ứng dụng di động của mình trong cài đặt Firebase Console.
Lưu ý: Đối với ứng dụng iOS, sẽ sử dụng ngôn ngữ Swift và thêm SDK Firebase cho iOS vào ứng dụng.
c. Kết nối với App
Hiển thị lên app mobile trên điê •n thoại android thông minh các thông tin về nhiê •t đô • đô • ẩm, cảm biến khí, cảm biến lửa tại module. Ngoài ra còn các thông tin về trạng thái còi báo đô •ng, có cảnh báo hay không giúp người dùng có thể nhâ •n biết dễ dàng.
Phần mềm được xây dựng trên nền tảng mit app giúp người dùng có thể dễ dàng xây dựng ứng dụng di đô •ng
sử dụng app iventor để build app android Bước 1
Truy cập vào MIT, đăng nhập tài khoản Google và khởi tạo một project mới.
Lúc này, trên màn hình sẽ có giao diện đơn giản gồm 3 phần chính. Bên trái là tập hợp các control bao gồm: User Interface, Media, Sensor, Social,… Để sử dụng những nút điều khiển này, bạn chỉ cần click chuột và kéo thả vào Screen.
Ở giữa là Screen mô phỏng màn hình ứng dụng của chúng ta, cũng sẽ nơi hiển thị project khi hoàn thiện. Còn bên phải là cửa sổ quản lý các Component, Media, và Property cho từng Control.
Ta sẽ dùng các khối block này để thiết kế nên phần điều khiển bên ngoài của ứng dụng.
Bước 2:
Khi ứng dụng đã có giao diện trực quan, ta bước tiếp sang phần code ứng dụng.
Góc trên bên phải màn hình có nút Block, bạn cần click vào đó để đổi sang màn hình code.
Khi code, ta sử dụng các mệnh đề như if then, when do để tiến hành tạo nên các câu lệnh. Bên trái màn hình sẽ có các câu lệnh đã được soạn sẵn. Việc của bạn là ghép lệnh vào mệnh đề hoàn chỉnh.
Hình : Giao diện
Tạo các node trên firebase làm trung gian lưu trữ, từ đây các dữ liê •u từ cảm biến sẽ thông qua module wifi ESP8266 gửi lên chính xác các node dữ liê •u tương ứng. Từ đây dữ liê •u sẽ được truyền qua điê •n thoại di đô •ng android và hiển thị lên app người dùng. ESP8266 sẽ gửi yêu cầu POST, PUT, hoặc PATCH để cập nhật dữ liệu, sử dụng HTTP để gửi dữ liệu đến Firebase Realtime Database