Tự chế hệ thống ngắt thiết bị thông minh khi đi ra ngoài

Ngày nay với sự phổ biến của Wifi gia đình, smartphone, các module wifi lập trình được, tại sao chúng ta ko nghĩ ra một cái gì đó có thể ứng dụng chúng.

Ngày nay với sự phổ biến của Wifi gia đình, smartphone, các module wifi lập trình được, tại sao chúng ta ko nghĩ ra một cái gì đó có thể ứng dụng chúng.

Bài toán: Thiết kế một hệ thống nhỏ gọn, tiêu thụ điện thấp, có khả năng nhận diện được smartphone của chủ nhà đang kết nối vào wifi của gia đình, mục đích để biết được chủ nhân đang ở nhà hay ra ngoài, sau đó sẽ bật tắt một thiết bị nào đó để tiết kiệm điện...(cái này tùy vào nhu cầu sử dụng điện của mỗi người)

Hướng giải quyết: 

Chắc hẳn chúng ta đã biết cấu hình qua về thiết bị wifi của nhà mình, chúng ta hoàn toàn có thể cấu hình cho thiết bị wifi này giành riêng cho smartphone của chúng ta một địa chỉ cố định ví dụ: 192.168.17.111 , địa chỉ này chỉ dành riêng duy nhất cho cái smartphone của chúng ta, nếu chúng ra đi ra ngoài về, điện thoại sẽ tự động kết nối và nhận được IP như trên. Từ đây chúng ta có thể sử dụng chế độ  Station và các thư viện của ESP8266 để tiến hành Ping đến điện thoại 1 phút/1 lần chẳng hạn. ==> Nếu ping tới điện thoại có phản hồi có nghĩa là Smartphone đang ở nhà ( kèm theo khả năng 95% chúng ta cũng đang ở nhà hoặc đâu đó gần nhà :3 ) , Nếu Ping không thầy có phản hồi từ điện thoại có nghĩa là chúng ta ko có ở nhà. ==> Đây có thể là phương án giải quyết tương đối cho bài toán nêu trên :))). Bây h chúng ta tiến hành làm.

Chuẩn bị:

- Nếu bạn là DIY thì chuẩn bị :

+ ESP8266, Module Relay để tự thiết kế cho mình một board chức năng thu phát wifi đồng thời điều khiển tắt mở thiết bị điện xoay chiều.

- Nếu bạn là người mới, muốn nghiên cứu tạo cho mình một ứng dụng gì đó có thể mua các module ESP8266 Relay có sẵn trên thị trường, giá cũng khá rẻ, dao động khoảng 200K trở lên. Ví dụ như hình sau:

ESP8266 kết hợp điều khiển Relay giá 230K, link mua

Những thứ còn lại chỉ là cục phát Wifi, và điện thoại có thể kết nối Wifi.

 

Thực hiện:

1. Thiết lập Wifi giành riêng địa chỉ cho SmartPhone là 192.168.17.111. Nếu bạn nào chưa biết cách làm thì xem tham khảo tại đây

2. Lập trình cho ESP8266 là Station kết nối vào Wifi và Ping đến điện thoại theo địa chỉ 192.168.17.111

Ngôn ngữ lập trình ở đây là Arduino cho ESP. Nếu bạn nào mới bắt đầu chưa biết thiết lập để lập trình cho ESP8266 trên Arduino thì xem tại đây.

Code:

#include <ESP8266WiFi.h>      // Sử dụng thư viện của ESP8266
extern "C" {
  #include <user_interface.h>  // Sử dụng thêm các thư viện cho việc ping đến smartphone
  #include <ping.h>            // Sử dụng thêm các thư viện cho việc ping đến smartphone
}

#include <Streaming.h>    //  Sử dụng thêm các thư viện cho việc ping đến smartphone

//( Đến đây bạn nào bị lỗi Streaming.h not found thì tải tại đây)

const char* mySSID     = "wifi"; // tên wifi gia đình
const char* myPASSWORD = "password"; // mật khẩu wifi

// khai bao một số cấu trúc cho chức năng Ping


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

// phần settup 

void doPing(const char *);

void setup() {
  pinMode(16, OUTPUT); // định nghĩa chân cho vệc điều khiển bật tắt RELAY
  Serial.begin(9600);  // giao tiếp serialMonitor tốc độ 9600
  delay(100);
  WiFi.disconnect(); 
  WiFi.begin(mySSID, myPASSWORD); // kết nối với wifi gia đình
  Serial.print("Connect to wifi");
  while (WiFi.status() != WL_CONNECTED) {delay(200);Serial.print(">"); } // in một vài kí tự thể hiện kết nối wifi     //thành công
  Serial.println("WiFi connected with ip ");  
  Serial.println(WiFi.localIP());
  Serial.println("Pinging host 192.168.17.111 ");  //
  
}

// Hàm loop();

void loop()

   {
   doPing("192.168.17.111");  // start Ping IP[0][0]
   delay(5000);
  }

// các hàm con

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) 
  {
  Serial << "No Pong (device OFFline)" << endl;
  digitalWrite(16, HIGH);
  }
    else 
  {
    Serial << "ping recv: bytes = " << pingResp->bytes << ", time = " << pingResp->resp_time << "ms" << endl;
    digitalWrite(16, LOW);
  }
}

void pingSent(void *arg, void *pdata)

{  // Ping finished callback
  Serial << "ping finished" << endl;
}

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
}

Code đầy đủ tại đây

Kết quả khi điện thoại có kết nối với wifi thì sáng đèn chân GPIO16, không kết nối wifi thì tắt đèn GPIO16 

 

Số lượt xem bài viết: 338



Comment
Name
Message
Coppy right ©: 2016 by Đỗ Ngọc Tuấn-TCU
Email: ngoctuansqtt@gmail.com