Helpex - Trao đổi & giúp đỡ Đăng nhập

Hướng dẫn cảm biến bảo mật bằng cách sử dụng cảm biến Pir và ESP8266

Hướng dẫn cảm biến bảo mật bằng cách sử dụng cảm biến Pir và ESP8266

Hướng dẫn này sẽ hướng dẫn bạn qua các bước sử dụng ESP8266 và Cảm biến Pir (Cảm biến hồng ngoại thụ động) để phát hiện chuyển động và gửi thông báo cho bạn bằng Wia F

Bạn cần gì

  • Cảm biến Pir (HC-SR501)
  • ESP8266
  • Dây nhảy từ nữ đến nam
  • Cáp USB

Trước khi bắt đầu

Nếu bạn chưa làm như vậy, hãy truy cập hướng dẫn của chúng tôi về việc bắt đầu với ESP8266 . Nó chi tiết môi trường chính xác để hoàn thành hướng dẫn này.

Kết nối phần cứng

Kết nối dây của bạn theo biểu đồ:
| Cảm biến Pir | ESP8266 |
| : -------------: |: -------------: / | | GND | GND |
| NGOÀI RA | D7 |
| VCC | 3,3V |

Hướng dẫn cảm biến bảo mật bằng cách sử dụng cảm biến Pir và ESP8266

Cảm biến Pir chạy trên dải điện áp hoạt động - DC 4.5-20V. Nhưng, có một cách để cấp nguồn cho cảm biến từ nguồn 3,3V. Các Hpin ở phía bên của bộ cảm biến được ký hiệu bởi VCCtrong hình minh họa ở trên và được kết nối với một bộ điều chỉnh điện áp có thể chuyển đổi các nguồn 3.3V.

Cài đặt thư viện

Trong Arduino IDE, đi đến Sketch > Include Libraries > Manage Libraries. Cài đặt từng thư viện sau bằng cách tìm kiếm tên của chúng trong thanh tìm kiếm trong phương thức. Một nút sẽ xuất hiện ở dưới cùng bên phải của hộp cho phép bạn cài đặt thư viện.

  • ArduinoJson
  • ESP8266WiFi
  • ArduinoHttpClient

Do những thay đổi gần đây trong thư viện, hãy nhớ cài đặt ArduinoJson 6.0 để bạn luôn cập nhật.

Nếu một thư viện không hiển thị trong kết quả khi bạn tìm kiếm nó, bạn có thể cần cập nhật phiên bản Arduino IDE của mình. Bạn có thể tải phiên bản mới nhất tại đây .

Trong Arduino IDE, sao chép và dán đoạn mã sau:

#include <arduinojson.h>
#include <esp8266wifi.h>
#include <arduinohttpclient.h>
#include <arduino.h>
const char* ssid     = "wifi-ssid"; // Your WiFi ssid
const char* password = "wifi-password"; //Your Wifi password

/* Get this secret key from the wia dashboard, in the `configuration` tab
    for your device. It should start with `d_sk` */
const char* device_secret_key = "your-device-secret-key";
// Wia API parameters
char server[] = "api.wia.io";
char path[] = "/v1/events";
char statePath[] = "/v1/devices/me";

int port = 80;

WiFiClient client;
int status = WL_IDLE_STATUS;

StaticJsonDocument<200> jsonBuffer;
HttpClient httpClient = HttpClient(client, server, port);
JsonObject& root = jsonBuffer.to<jsonobject>();

String response;
int statusCode = 0;

int BUTTON = 0;
int SENSOR = 13;
boolean buttonState = HIGH;
boolean buttonDown = false;
boolean stateAlarm = LOW;
long motion = LOW;

String dataStr = "";
String stateStr = "";


void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(BUTTON, INPUT);
  pinMode(SENSOR, INPUT);
  digitalWrite(LED_BUILTIN, HIGH);


  // initialize serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  WiFi.begin(ssid, password);
  Serial.print("Attempting to connect to SSID: ");
  Serial.print(ssid);
  // attempt to connect to WiFi network:
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    // Connect to WPA/WPA2 network. Change this line if using open or WEP  network:
    // wait 5 seconds for connection:
    delay(5000);
  }
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.println("Connected");
}
// Thing function runs continiously
void loop() {
  buttonState = digitalRead(BUTTON);
  if (buttonState == LOW && stateAlarm == LOW) {
    if (buttonDown == false) {
      buttonDown = true;
      Serial.println("Alarm on!");
      stateAlarm = HIGH;
      digitalWrite(LED_BUILTIN, LOW);
      updateStateWia(stateAlarm);
      delay(750);
    }
  }
  else if (buttonState == LOW && stateAlarm == HIGH) {
    if (buttonDown == false) {
      buttonDown = true;
      stateAlarm = LOW;
      digitalWrite(LED_BUILTIN, HIGH);
      Serial.println("Alarm off!");
      updateStateWia(stateAlarm);
      delay(750);
    }
  }
  else {
    buttonDown = false;

  }
  if (stateAlarm == HIGH) {
    motion = digitalRead(SENSOR);
    //Serial.println(String(motion));
    if (motion == HIGH) {
      Serial.println("Motion Detected!");
      root["name"] = "motion";
      root["data"] = String(motion);
      sendToWia(root);
      delay(2000);
    }
  }
}


void updateStateWia(boolean& state) {
  if (state == HIGH) {
    stateStr = "{\"state\": {\"enabled\": true}}";
  }
  else {
    stateStr = "{\"state\": {\"enabled\": false}}";
  }
  Serial.println(stateStr);
  httpClient.beginRequest();
  httpClient.put(statePath);
  httpClient.sendHeader("Content-Type", "application/json");
  httpClient.sendHeader("Content-Length", stateStr.length());
  httpClient.sendHeader("Authorization", "Bearer "  + String(device_secret_key));
  httpClient.beginBody();
  httpClient.print(stateStr);
  httpClient.endRequest();
}

// Adds the correct headers for HTTP and sends Data to Wia
void sendToWia(JsonObject& data) {
  dataStr = "";
  serializeJson(data, dataStr);
  httpClient.beginRequest();
  httpClient.post(path);
  httpClient.sendHeader("Content-Type", "application/json");
  httpClient.sendHeader("Content-Length", dataStr.length());
  httpClient.sendHeader("Authorization", "Bearer "  + String(device_secret_key));
  httpClient.beginBody();
  httpClient.print(dataStr);
  httpClient.endRequest();
}</jsonobject></arduino.h></arduinohttpclient.h></esp8266wifi.h></arduinojson.h>


Thay thế các giá trị sau trong mã bằng cách đặt các giá trị của riêng bạn vào giữa các dấu ngoặc kép.

  • your-WiFi-ssid (Đây là tên của mạng WiFi của bạn)
  • your-WiFi-password (Mật khẩu mạng WiFi của bạn)
  • your-device-secret-key(Điều hướng đến Bảng điều khiển Wia > Thiết bị và chọn thiết bị của bạn. Device_secret_key sẽ nằm trong tab Cấu hình)
    • Nếu bạn chưa có Tài khoản Wia, hãy đăng ký tại đây

Đoạn mã trên xuất bản Sự kiện tới Wia mỗi khi phát hiện chuyển động, với namegiá trị motion(bạn sẽ cần điều này sau này, khi xây dựng Lưu lượng của bạn) và datagiá trị bằng với số đọc từ cảm biến chuyển động.

Hãy chắc chắn rằng bảng đúng được chọn. Đi đến tools > boardvà chọn NodeMCU 1.0 (ESP-12E Module). Đảm bảo rằng cổng chính xác được chọn :  tools > port.

Bật báo thức

Để bật báo thức của bạn, nhấn nút flash trên Esp 8266. Đèn LED màu xanh sẽ bật. Để tắt báo thức, nhấn và giữ nút flash trong ít nhất 2 giây, đèn LED màu xanh sẽ tắt.

Thiết lập lưu lượng của bạn

Tạo dòng chảy

Cho phép thiết lập một luồng sẽ gửi thông báo đến điện thoại của bạn khi phát hiện chuyển động bởi Bộ cảm biến chuyển động Pir.

Chuyển đến Bảng điều khiển Wia của bạn và nhấp vào Flowsmenu bên trái. Tạo một luồng mới với bất kỳ tên nào bạn thích.

Thêm một nút kích hoạt sự kiện

Trong Flow Studio, kéo một Eventnút từ phần Kích hoạt và:

  • Nhập motionlàm tên sự kiện
  • Thêm thiết bị của bạn

Hướng dẫn cảm biến bảo mật bằng cách sử dụng cảm biến Pir và ESP8266

Thêm một nút logic trạng thái

Bây giờ, thêm một Check Statenút từ phần Logic

  • Nhập enabledlàm chìa khóa
  • Chọn 'Bằng với` từ trình đơn thả xuống Điều kiện
  • Nhập truelàm Giá trị

Hướng dẫn cảm biến bảo mật bằng cách sử dụng cảm biến Pir và ESP8266

Thêm một nút thông báo

Tiếp theo, kéo qua một Notificationnút từ phần Hành động.

  • Nhập "Đã phát hiện chuyển động" làm Thông báo.

Hướng dẫn cảm biến bảo mật bằng cách sử dụng cảm biến Pir và ESP8266

Bây giờ, Wia có thể gửi cho bạn một tin nhắn đến ứng dụng di động Wia khi Bộ cảm biến bảo mật của bạn phát hiện ra một chuyển động.

Thêm một widget

Tiếp theo, hãy đi tới tab 'Tổng quan' của Thiết bị. Nhấp vào 'Thêm tiện ích'. Đặt tên cho Widget Motion Detected, chọn loại 'văn bản' của Widget và nhập tên của sự kiện tức là motion.

Hướng dẫn cảm biến bảo mật bằng cách sử dụng cảm biến Pir và ESP8266

Các biện pháp độ nhạy cảm biến Pir

Cảm biến Pir cho phép bạn thay đổi thời gian trễ và mức độ nhạy.

Cảm biến Pir là một thiết bị kỹ thuật số. Điều này có nghĩa là nó đọc hai giá trị: CAO và THẤP. Khi cảm biến phát hiện chuyển động, nó đọc CAO. Nếu không, nó đọc THẤP.

Cài đặt độ trễ xác định cảm biến Pir sẽ đọc CAO bao lâu sau khi phát hiện chuyển động. Cảm biến độ nhạy xác định khoảng cách mà tại đó Cảm biến Pir sẽ đăng ký một chuyển động. Cảm biến này chính xác hơn khi được đặt ở mức độ gần thấp hơn. Bạn có thể kiểm soát các cài đặt này bằng cách sử dụng các bảng màu cam nằm trực tiếp từ các chân bạn đã sử dụng để nối dây cho thiết bị của mình.Hướng dẫn cảm biến bảo mật bằng cách sử dụng cảm biến Pir và ESP8266

Xử lý sự cố

Nếu bạn gặp khó khăn trong việc tìm bảng đúng, hãy tham khảo lại cách bắt đầu của chúng tôi với hướng dẫn ESP8266 .

Nếu cổng của bạn không hiển thị tùy chọn USB, hãy thử chuyển đổi cáp USB và kiểm tra xem cáp không "chỉ sạc". Nếu điều này không có ích, bạn có thể cần phải cài đặt trình điều khiển. Hướng dẫn này chứa một phần sẽ hướng dẫn bạn qua các bước đó.

Nếu bạn nhận được lỗi StaticJsonDocument does not name a type,thì đó là do thay đổi vi phạm được đưa vào ArduinoJsonthư viện. Truy cập sketch > include libraryvà quản lý thư viện để cập nhật lên phiên bản 6+.

1 hữu ích 0 bình luận 8.7k xem chia sẻ

Có thể bạn quan tâm

loading