Project tự động bật thiết bị khi về nhà, tắt khi ra khỏi nhà với ESP8266

Mô tả khái quát Project: Sử dụng mạng wifi hiện có, lập trình cho ESP8266 Ping đến điện thoại, theo dõi phản hồi để đưa ra hành động bật hay tắt một thiết bị nào đó 🙂 , tất cả chỉ là ý tưởng và DIY theo sở thích, hi vọng không phải nhận nhiều gạch đá của 500 anh em cộng đồng. Thanks so much!

Có bạn nào thấy hứng thú ko nhỉ 🙂

Những công việc cơ bản sẽ làm trong Project này:

  1. Thực hiện gán địa chỉ IP cố định cho điện thoại, cái mà luôn mang theo người(Smart Phone 🙂
  2. Lập trình cho ESP8266 Ping đến địa chỉ của điện thoại theo chu kì 5s

1.Thực hiện gán địa chỉ IP cố định cho điện thoại, cái mà luôn mang theo người(Smart Phone 🙂

Bước 1: Truy cập vào Access Point của mình và đăng nhập

Trong thẻ menu bên phải, tìm đến DHCP->Address Reservation

Mở cài đặt trên điện thoại, tìm địa chỉ MAC

Nhập địa chỉ MAC vào, gán địa chỉ IP tương ứng mà mình muốn đặt

Ví dụ min họa, địa chỉ IP sẽ là địa chỉ mà ESP sẽ thường xuyên Ping tới.

2. Lập trình cho ESP8266 Ping đến địa chỉ của điện thoại theo chu kì 5s

Trước khi lập trình cho ESP, chúng ta cần chuẩn bị thư viện cho ESP, ở đây là thư viện Streaming.h (Link tải)

#include <ESP8266WiFi.h> 
extern “C” {
#include <user_interface.h> 
#include <ping.h> 
}
#include <Streaming.h> 

/******* EDIT *******/
const char* mySSID = “*****”;  // Tên wifi
const char* myPASSWORD = “*****”;  // Mật khẩu wifi
const uint8_t pingCount = 3; // number off Ping repetition
const uint8_t pingInterval = 1; // Ping repetition every n sec
/* Local Ping example: 6 x IP on (W)LAN to test if the device is ONline or OFFline *
* Of course, this can also with internet addresses */
const uint8_t ipCount = 6; // number of IP addresses in pingIp[2][n] array
const char* pingIp[2][ipCount] = {{“192.168.21.100”},
{“iphone6+”}};  
/***** END EDIT *****/

struct ping_option pingOpt, pOpt;
struct ping_resp pingResp;
const uint8_t port = 80;
uint8_t ipNext = 0;

/***** prototype declaration *****/
void doPing(const char *);

void setup() {
pinMode(16, OUTPUT);  // chân điều khiển Rơle
Serial.begin(9600);
delay(100);
WiFi.disconnect();
WiFi.begin(mySSID, myPASSWORD);
Serial.print(“Connect to wifi”);
while (WiFi.status() != WL_CONNECTED) {delay(200);Serial.print(“>”); }
Serial.println(“WiFi connected with ip “);
Serial.println(WiFi.localIP());
Serial.println(“Pinging host 192.168.21.100 “); 

}

void loop()

{

doPing(“192.168.21.100”); // start Ping đến điện thoại
delay(5000);  // Ping sau 5s
}

void pingRecv(void *arg, void *pdata) { // Pong callback function
// struct ping_option *pingOpt = (struct ping_option *)arg;
struct ping_resp *pingResp = (struct ping_resp *)pdata;
if (pingResp->ping_err == -1)   // Không có phản hồi từ điện thoại về
{
Serial << “No Pong (device OFFline)” << endl;
digitalWrite(16, HIGH);  // Ngắt Relay
}
else
{
Serial << “ping recv: bytes = ” << pingResp->bytes << “, time = ” << pingResp->resp_time << “ms” << endl;
digitalWrite(16, LOW);  // Nếu có, mở Relay
}
}

void pingSent(void *arg, void *pdata) { // Ping finished callback
// struct ping_option *pingOpt = (struct ping_option *)arg;
// struct ping_resp *pingResp = (struct ping_resp *)pdata;
Serial << “ping finished” << endl;
//if (++ipNext < ipCount) { // next Ping?
// Serial << “Ping IP: ” << pingIp[0][ipNext] << “, ” << pingIp[1][ipNext] << endl;
//doPing(pingIp[0][ipNext]); // init and start Ping IP[0][n]
// doPing(“192.168.21.100”);
//}
}

void doPing(const char *targetIpAddress) { // init and start Ping
struct ping_option *pingOpt = &pOpt;
pingOpt->count = pingCount;
pingOpt->coarse_time = pingInterval;
pingOpt->ip = ipaddr_addr(targetIpAddress);
ping_regist_recv(pingOpt, pingRecv); // Pong callback function ‘pingRecv’
ping_regist_sent(pingOpt, pingSent); // Ping finished callback function ‘pingSent’
ping_start(pingOpt); // start Ping
}

Kết quả test thử: Chỉ thực hiện mở và tắt wifi

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 *