งานที่ 16

ESP8266 ตัวตรวจสอบสถานะประตู NodeMCU พร้อมการแจ้งเตือนทางอีเมล (IFTTT)

ในโครงการนี้ คุณจะต้องตรวจสอบสถานะของประตูโดยใช้บอร์ด ESP8266 NodeMCU และสวิตช์กกแม่เหล็ก คุณจะได้รับอีเมลแจ้งเตือนทุกครั้งที่ประตูเปลี่ยนสถานะ: เปิดหรือปิด การแจ้งเตือนทางอีเมลจะถูกส่งโดยใช้ IFTTT และบอร์ด ESP8266 จะถูกตั้งโปรแกรมโดยใช้ Arduino IDE

ESP8266 ตัวตรวจสอบสถานะประตู NodeMCU พร้อมการแจ้งเตือนทางอีเมล IFTTT Arduino IDE

แทนที่จะส่งการแจ้งเตือนทางอีเมลด้วย IFTTT คุณสามารถใช้เซิร์ฟเวอร์ SMTP แทนได้ หากต้องการเรียนรู้วิธีส่งอีเมลด้วย ESP8266 โดยใช้เซิร์ฟเวอร์ SMTP คุณสามารถทำตามบทช่วยสอนต่อไปนี้:

หากต้องการ คุณสามารถส่งการแจ้งเตือนไปยังบัญชีโทรเลขของคุณได้ เรียนรู้วิธีใช้ Telegram กับ ESP8266 ในบทช่วยสอนต่อไปนี้:

เรามีบทช่วยสอนที่คล้ายกันสำหรับบอร์ด ESP32: การตรวจสอบสถานะประตูพร้อมการแจ้งเตือนทางอีเมล (IFTTT)

ภาพรวมโครงการ

ในโปรเจ็กต์นี้ คุณจะส่งการแจ้งเตือนทางอีเมลทุกครั้งที่ประตูเปลี่ยนสถานะ ในการตรวจจับการเปลี่ยนแปลง เราจะใช้สวิตช์หน้าสัมผัสแบบแม่เหล็ก ในการส่งอีเมล เราจะใช้ IFTTT

สวิตช์สัมผัสแม่เหล็กนั้นโดยทั่วไปแล้วจะเป็นสวิตช์กกที่หุ้มอยู่ในเปลือกพลาสติก คุณจึงนำไปใช้กับประตู หน้าต่าง หรือลิ้นชักได้อย่างง่ายดายเพื่อตรวจสอบว่าประตูเปิดหรือปิดอยู่

สวิตช์สัมผัสแม่เหล็ก สวิตช์กก

วงจรไฟฟ้าจะปิดเมื่อแม่เหล็กอยู่ใกล้สวิตช์ นั่นคือประตูปิด เมื่อแม่เหล็กอยู่ห่างจากสวิตช์—เปิดประตู—วงจรเปิดอยู่ ดูรูปด้านล่าง

สวิตช์กกแม่เหล็ก ฉันทำงานอย่างไร

เราสามารถเชื่อมต่อสวิตช์กกกับ ESP8266 GPIO เพื่อตรวจจับการเปลี่ยนแปลงในสถานะ

การส่งอีเมลด้วย IFTTT

ในการส่งอีเมลด้วย ESP8266 เราจะใช้บริการฟรี* ที่เรียกว่า IFTTT ซึ่งย่อมาจาก "If This Then That"

IFTTT เป็นแพลตฟอร์มที่ให้คุณควบคุมผลิตภัณฑ์และแอพต่างๆ ได้อย่างสร้างสรรค์ คุณสามารถทำให้แอปทำงานร่วมกันได้ ตัวอย่างเช่น การส่งคำขอเฉพาะไปยัง IFTTT จะทริกเกอร์แอปเพล็ตที่ทำให้บางสิ่งเกิดขึ้น เช่น การส่งการแจ้งเตือนทางอีเมลถึงคุณ

ฉันชอบบริการ IFTTT และเมื่อคุณเข้าใจวิธีการทำงานแล้ว ก็ใช้งานง่าย อย่างไรก็ตาม ฉันไม่ชอบเลย์เอาต์ของเว็บไซต์ของพวกเขามากนัก และความจริงที่ว่ามันมีการเปลี่ยนแปลงอยู่ตลอดเวลา

* ขณะนี้ คุณสามารถมีแอปเพล็ตที่ใช้งานพร้อมกันได้สามแอปในเวอร์ชันฟรี

การสร้างบัญชี IFTTT

การสร้างบัญชีบน IFTTT นั้นฟรี!

ไปที่เว็บไซต์อย่างเป็นทางการ: https://ifttt.com/และคลิกปุ่มเริ่มต้นใช้งานที่ด้านบนของหน้าหรือลงทะเบียนหากคุณมีบัญชีอยู่แล้ว

IFTTT เริ่มต้นหน้าเว็บ

การสร้างแอปเพล็ต

ขั้นแรก คุณต้องสร้างแอปเพล็ตใน IFTTT แอพเพล็ตเชื่อมต่อแอพหรืออุปกรณ์ตั้งแต่สองตัวขึ้นไปเข้าด้วยกัน (เช่น ESP8266 และส่งอีเมล)

แอปเพล็ตประกอบด้วยทริกเกอร์และการกระทำ:

  • ทริกเกอร์บอกให้แอปเพล็ตเริ่มทำงาน ESP8266 จะส่งคำขอ (webhooks) ที่จะเรียกใช้แอปเพล็ต
  • การดำเนินการคือผลลัพธ์สุดท้ายของการรันแอปเพล็ต ในกรณีของเราส่งอีเมล

ทำตามคำแนะนำถัดไปเพื่อสร้างแอปเพล็ตของคุณ

1) คลิกที่ลิงค์นี้เพื่อเริ่มต้นการสร้าง Applet

2)คลิกที่ปุ่มเพิ่ม

IFTTT สร้างแอปเพล็ตของคุณ

3)ค้นหา "Webhooks" และเลือก

IFTTT สร้างแอปเพล็ตของคุณ เลือกบริการ

4)เลือกตัวเลือก “รับคำขอทางเว็บ”

IFTTT สร้างเว็บฮุคแอปเพล็ตของคุณ รับคำขอทางเว็บ

5)ป้อนชื่อเหตุการณ์เช่นdoor_status คุณสามารถเรียกชื่ออื่นก็ได้ แต่ถ้าคุณเปลี่ยน คุณจะต้องเปลี่ยนในรหัสที่ให้ไว้ในภายหลังด้วย

IFTTT สร้างแอปเพล็ตของคุณ รับคำขอทางเว็บ

6)จากนั้น คุณต้องคลิกปุ่มเพิ่มบนเมนู "จากนั้น" เพื่อเลือกสิ่งที่จะเกิดขึ้นเมื่อมีการทริกเกอร์เหตุการณ์ก่อนหน้า

IFTTT สร้างแอปเพล็ตของคุณ สร้างของคุณเอง

7)ค้นหาอีเมลและเลือกตัวเลือกอีเมล

IFTTT สร้างแอปเพล็ตของคุณ เลือกอีเมลบริการ

8)คลิกที่ส่งอีเมลฉัน

IFTTT สร้างแอปเพล็ตของคุณ เลือกการกระทำ

9)จากนั้นเขียนหัวเรื่องและเนื้อหาของอีเมล คุณสามารถทิ้งข้อความเริ่มต้นไว้หรือเปลี่ยนเป็นอะไรก็ได้ที่คุณต้องการ NS{{ชื่อกิจกรรม}} เป็นตัวยึดสำหรับชื่อเหตุการณ์ ในกรณีนี้ มันคือ ประตู_สถานะNS{{เกิดขึ้นที่}}เป็นตัวยึดตำแหน่งสำหรับการประทับเวลาเมื่อเหตุการณ์ถูกทริกเกอร์ NS{{ค่า1}}เป็นตัวยึดสำหรับสถานะประตูจริง ดังนั้น คุณสามารถเล่นกับตัวยึดตำแหน่งเหล่านั้นเพื่อเขียนข้อความของคุณเอง เมื่อเสร็จแล้วให้คลิกที่สร้างการกระทำ

IFTTT สร้างฟิลด์แอ็คชันชุดแอ็คชันชื่อเหตุการณ์แอปเพล็ต

10)ตอนนี้คุณสามารถคลิกที่ดำเนินการต่อ

IFTTT สร้างแอปเพล็ตของคุณ สร้างของคุณเอง

11)คลิกสุดท้ายเสร็จสิ้น

IFTTT สร้างการตรวจสอบแอปเพล็ตของคุณและเสร็จสิ้น

12)คุณจะถูกเปลี่ยนเส้นทางไปยังหน้าที่คล้ายกัน—ดังที่แสดงด้านล่าง

IFTTT สร้างแอปเพล็ตของคุณเชื่อมต่อ

สร้างแอปเพล็ตของคุณสำเร็จแล้ว ทีนี้มาทดสอบกัน

ทดสอบแอปเพล็ตของคุณ

ไปที่ URL นี้: https://ifttt.com/maker_webhooks  และเปิดแท็บ " เอกสารประกอบ "

คุณจะเข้าถึงหน้าเว็บที่คุณสามารถทริกเกอร์เหตุการณ์เพื่อทดสอบและเข้าถึงคีย์ API ของคุณ (เน้นเป็นสีแดง) บันทึกคีย์ API ของคุณไว้ในที่ปลอดภัยเพราะคุณจะต้องใช้ในภายหลัง

IFTTT กำลังทดสอบแอปเพล็ตของคุณ

ตอนนี้ เรามาทริกเกอร์เหตุการณ์เพื่อทดสอบกัน ใน{เหตุการณ์}ตัวยึดตำแหน่ง เขียนเหตุการณ์ที่คุณสร้างไว้ก่อนหน้านี้ ในกรณีของเราก็เป็นdoor_status นอกจากนี้ เพิ่มมูลค่าในมูลค่า1ฟิลด์ เช่นเปิด . จากนั้นคลิกทดสอบปุ่ม

IFTTT กำลังทดสอบแอปเพล็ตของคุณ

คุณควรได้รับข้อความแสดงความสำเร็จว่า "เหตุการณ์ถูกทริกเกอร์" และคุณควรได้รับอีเมลในกล่องจดหมายแจ้งว่ามีการทริกเกอร์เหตุการณ์

IFTTT Applet ทดสอบเรียบร้อยแล้ว

หากคุณได้รับอีเมล แสดงว่าแอปเพล็ตของคุณทำงานได้ตามปกติ คุณสามารถไปยังส่วนถัดไป เราจะตั้งโปรแกรม ESP8266 เพื่อเรียกใช้แอปเพล็ตของคุณเมื่อประตูเปลี่ยนสถานะ

ส่วนรายการ

นี่คือฮาร์ดแวร์ที่คุณต้องใช้เพื่อทำโครงการนี้ให้เสร็จ:

คุณสามารถใช้ลิงก์ก่อนหน้าหรือไปที่MakerAdvisor.com/toolsโดยตรงเพื่อค้นหาชิ้นส่วนทั้งหมดสำหรับโครงการของคุณในราคาที่ดีที่สุด!

แผนผัง – ESP8266 NodeMCU พร้อมสวิตช์กก

เราต่อสายสวิตช์กกไปที่ GPIO 4 (D2) แต่คุณสามารถเชื่อมต่อกับ GPIO ที่เหมาะสมได้

Schematic ESP8266 NodeMCU พร้อมไดอะแกรมวงจรสายไฟ Reed Switch

 

/************

  รุย ซานโตส
  ดูรายละเอียดโครงการได้ที่ https://RandomNerdTutorials.com/door-status-monitor-using-the-esp8266/
  
  อนุญาตให้บุคคลใด ๆ ที่ได้รับสำเนานี้โดยไม่เสียค่าใช้จ่าย
  ของซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง
  
  ประกาศลิขสิทธิ์ข้างต้นและประกาศการอนุญาตนี้จะรวมอยู่ในทั้งหมด
  สำเนาหรือส่วนสำคัญของซอฟต์แวร์
*********/

#รวม <ESP8266WiFi.h>

// ตั้งค่า GPIO สำหรับ LED และ reedswitch
const int reedSwitch = 4;
const int led = 2; //ไม่จำเป็น

// ตรวจจับเมื่อประตูเปลี่ยนสถานะ
บูล changeState = เท็จ;

// ถือสถานะสวิตช์กก (1=เปิด, 0=ปิด)
สถานะบูล;
ประตูสตริงสถานะ;

// ตัวแปรเสริม (จะตรวจจับเฉพาะการเปลี่ยนแปลงที่ห่างกัน 1500 มิลลิวินาที)
ก่อนหน้าMillis แบบยาวที่ไม่ได้ลงนาม = 0; 
const ช่วงยาว = 1500;

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
const char* host = "maker.ifttt.com";
const char* apiKey = "REPLACE_WITH_YOUR_IFTTT_API_KEY";

// ทำงานทุกครั้งที่สวิตช์สวิตช์เปลี่ยนสถานะ
ICACHE_RAM_ATTR โมฆะ changeDoorStatus () {
  Serial.println("สถานะเปลี่ยน");
  changeState = จริง;
}

การตั้งค่าเป็นโมฆะ () {
  // พอร์ตอนุกรมสำหรับการดีบัก
  Serial.begin(115200);

  // อ่านสถานะประตูปัจจุบัน
  โหมดพิน (reedSwitch, INPUT_PULLUP);
  สถานะ = digitalRead (reedSwitch);

  // ตั้งค่าสถานะ LED ให้ตรงกับสถานะประตู
  โหมดพิน (นำ, เอาต์พุต);
  digitalWrite (นำ, สถานะ);
  
  // ตั้งค่าพินสวิตช์สวิตช์เป็นแบบอินเตอร์รัปต์ กำหนดฟังก์ชันอินเตอร์รัปต์ และตั้งค่าโหมด CHANGE
  AttachInterrupt(digitalPinToInterrupt(reedSwitch), changeDoorStatus, CHANGE);

  // เชื่อมต่อกับ Wi-Fi
  WiFi.begin(ssid, รหัสผ่าน);
  ในขณะที่ (WiFi.status () != WL_CONNECTED) {
    ล่าช้า (500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println ("เชื่อมต่อ WiFi");  
}

วงเป็นโมฆะ () {
  ถ้า (เปลี่ยนสถานะ){
    ไม่ได้ลงนามยาว currentMillis = millis();
    if(currentMillis - PreviousMillis >= ช่วง) {
      มิลลิวินาทีก่อนหน้า = ปัจจุบันมิลลิวินาที;
      // หากเกิดสถานะขึ้น ให้กลับสถานะประตูปัจจุบัน   
      รัฐ = !สถานะ;
      ถ้า (สถานะ) {
        doorState = "ปิด";
      }
      อื่น{
        doorState = "เปิด";
      }
      digitalWrite (นำ, สถานะ);
      changeState = เท็จ;
      Serial.println (สถานะ);
      Serial.println (doorState);
        
      //ส่งอีเมล
      Serial.print("กำลังเชื่อมต่อกับ");
      Serial.println (โฮสต์);
      ไคลเอนต์ WiFiClient;
      const int httpPort = 80;
      if (!client.connect(host, httpPort)) {
        Serial.println("การเชื่อมต่อล้มเหลว");
        กลับ;
      }
    
      URL สตริง = "/trigger/door_status/with/key/";
      url += apiKey;
          
      Serial.print("ขอ URL: ");
      Serial.println(url);
      client.print(String("POST ") + url + " HTTP/1.1\r\n" +
                          "โฮสต์: " + โฮสต์ + "\r\n" + 
                          "ประเภทเนื้อหา: application/x-www-form-urlencoded\r\n" + 
                          "เนื้อหา-ความยาว: 13\r\n\r\n" +
                          "value1=" + doorState + "\r\n");
    }  
  }
}

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

ESP8266 ควบคุมเว็ป(NodeMCU ESP8266 เชื่อมต่อ DHT11 เซ็นเซอร์วัดอุณหภูมิและความชื้น แสดงค่าผ่าน wifi web server)