Thứ Bảy, 17 tháng 3, 2018

Published tháng 3 17, 2018 by Nặc danh with 0 comment

Điều khiển thiết bị trong nhà bằng ESP32

Ngày nay với sự phát triển của công nghệ thì việc làm cho căn nhà của bạn thông minh hơn với việc diều khiển các thiết bị từ qua internet là một ý tưởng hay.
Hôm nay mình sẽ hướng dẫn các bạn thực hiện điều đó trên ESP32
Để hiểu hơn vế ESP32 các bạn hãy xem các bài hướng dẫn trước của mình . Bài này dành cho các bạn đã hiều về ESP32 khá một chút
Bài toán như sau  : Căn nhà gồm 4 thiết bị là đèn phòng khách, tv phòng khách , quạt phòng ngủ và radio ở phòng bếp ,.. mình chỉ minh họa 4 thiết bị này . Để điều jhiển mình dùng 4 OUTPUT của ESP32 là chân 19 , 21, 22, 23 lần lượt cho các thiết bị là đèn, tv , radio, quạt
Sau đó mình dùng ESP32 nạp code vào ( code phía dưới). tạo 1 tài khoản CloudMQTT , và dùng một app trên di động để làm 1 thiết bị điều khiển nhỏ gọn và di động thay vì làm trên máy tính app mình hay dùng là MQTT dash.
Hướng dẫn dùng
Sau khi bạn kết nối với CloudMqtt mình điều khiển bằng cách

điền đường dẫn topic ra lệnh (on) để nó bật đèn thông qua hàm callback có nghĩ là MQTT sẽ ra lệnh cho thiết bị ESP32 , tương tự với các thiết bị khác.
sau khi nhận lệnh nó sẽ phản hồi tức là ESP32 gửi một phản hồi về thông qua Client.Publish để báo cho MQTT biết lệnh được thực thi

Thì đó là làm trên máy tính
Còn khi bạn muốn điều khiển qua điện thoại cho nhanh thì dùng app MQTT Dash
Hướng dẫn cấu hình , bạn chỉ cần lấy thông tin ở MqttCloud rồi paste vào cho nhanh




Xong rồi Save lại , 4 thiết bị thì làm 4 nút để điều khiển
Còn bạn nào chưa rành về MQTT thì xem các bài trước của mình để tạo và lấy thông tin
Code mình để ở đây, chúc các bạn thành công nhé :


// KHAI BAO CAC THU VIEN //
#include "WiFi.h"
#include <PubSubClient.h>

// KHAI BAO CAC BIEN khoi tao client//
const char* ten_wifi = "TUDONGHOA_K56"; //ten wifi
const char* mk_wifi = "taokhongbiet"; //pass wifi
const char* mqtt_server = "m12.cloudmqtt.com"; //ten broker
int mqtt_port =17437; //port
const char* username_mqtt = "tjujybro"; //ten dang nhap vao broker
const char* pass_mqtt = "cGUF7qJr9-1v"; // pass dang nhap
// chon chan cua esp32
int light = 19;
int television =21;
int radio = 22;
int fan =23;
// topic dang ky
char topiclight[30] ="livingroom/light/dk";
char topictv[30] ="livingroom/tv/dk";
char topicradio[30] ="kitchen/radio/dk";
char topicfan[30] ="bedroom/fan/dk";
// topic phan hoi
char topiclightph[30] ="livingroom/light/ph";
char topictvph[30] ="livingroom/tv/ph";
char topicradioph[30] ="kitchen/radio/ph";
char topicfanph[30] ="bedroom/fan/ph";

// khai bao bien chuoi
String str_Topic; // tao bien topic dang chuoi
String str_Message; // tao bien mess dang chuoi
//TAO RA CLIENT //
WiFiClient Hocesp;
PubSubClient client(Hocesp);
// KHOI TAO NHAN DU LIEU //
void callback(char* topic, byte* message, unsigned int length) // broker truyen topic va message cua client dang ky
{
message[length] = '\0'; // tin nhan payload co do dai leanght
str_Topic = String((char*)topic); // ep kieu thanh string
str_Message = String((char*)message); // ep kieu thanh string

// neu co lenh dieu khien den
if (str_Topic == topiclight)
{
if (str_Message == "on")
{
digitalWrite(light,1);
client.publish(topiclightph, "turn on", true); // client phan hoi lai cho broker;
}
else if (str_Message == "off")
{
digitalWrite(light,0);
client.publish(topiclightph, "turn off", true); // client phan hoi lai cho broker;
}
}
// nue co lenh dieu khien tv
if (str_Topic ==topictv)
{
if (str_Message == "on")
{
digitalWrite(television, 1);
client.publish(topictvph, "turn on", true); // client phan hoi lai cho broker;
}
else if (str_Message == "off")
{
digitalWrite(television, 0);
client.publish(topictvph, "turn off", true); // client phan hoi lai cho broker;
}
}
// neu co lenh dieu khien radio
if (str_Topic ==topicradio)
{
if (str_Message == "on")
{
digitalWrite(radio, 1);
client.publish(topicradioph, "turn on", true); // client phan hoi lai cho broker;
}
else if (str_Message == "off")
{
digitalWrite(radio, 0);
client.publish(topicradioph, "turn off", true); // client phan hoi lai cho broker;
}
}
// neu co lenh dieu khien quat
if (str_Topic ==topicfan)
{
if (str_Message == "on")
{
digitalWrite(fan, 1);
client.publish(topicfanph, "turn on", true); // client phan hoi lai cho broker;
}
else if (str_Message == "off")
{
digitalWrite(fan, 0);
client.publish(topicfanph, "turn off", true); // client phan hoi lai cho broker;
}
}

}
// Ham duoc goi khi ket noi thanh cong
void reconnect() {
if (client.connect("ESP8266Client", username_mqtt, pass_mqtt, "lwt1", 2, true, "Connecting...")) //last will mat ket noi se gui "Connecting..." boolean connect (clientID, username, password, willTopic, willQoS, willRetain, willMessage)
{
client.publish("lwt1", "connected", true); //khi ket noi se gui "Connected" int publish (topic, payload, retained)
client.subscribe(topiclight); // Topic ma smart phone gui den phan cung de dieu khien
client.subscribe(topictv);
client.subscribe(topicradio);
client.subscribe(topicfan);
}
else delay(5000); // sau 5s neu ket noi that bai se ket noi lai
}

void setup() {
//cai dat chan ngo ra
pinMode(light,OUTPUT);
pinMode(television,OUTPUT);
pinMode(radio,OUTPUT);
pinMode(fan,OUTPUT);
//cai dat trang thai ban dau cac chan
digitalWrite(light, 0); // trang thai ban dau
digitalWrite(television, 0);
digitalWrite(radio, 0);
digitalWrite(fan, 0);
// cai dat wifi
WiFi.begin(ten_wifi,mk_wifi); // kich hoat wifi
client.setServer(mqtt_server, mqtt_port ); // kich hoat server
client.setCallback(callback); // kich hoat callback
reconnect();
}
void loop()
{
// neu mat ket noi goi lai ham ket noi.
if (!client.connected())
{
reconnect();
}
//duy tri client
client.loop();
}
      edit

0 nhận xét:

Đăng nhận xét