งานที่ 16
ESP8266 ตัวตรวจสอบสถานะประตู NodeMCU พร้อมการแจ้งเตือนทางอีเมล (IFTTT)
ในโครงการนี้ คุณจะต้องตรวจสอบสถานะของประตูโดยใช้บอร์ด ESP8266 NodeMCU และสวิตช์กกแม่เหล็ก คุณจะได้รับอีเมลแจ้งเตือนทุกครั้งที่ประตูเปลี่ยนสถานะ: เปิดหรือปิด การแจ้งเตือนทางอีเมลจะถูกส่งโดยใช้ IFTTT และบอร์ด ESP8266 จะถูกตั้งโปรแกรมโดยใช้ 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 แอพเพล็ตเชื่อมต่อแอพหรืออุปกรณ์ตั้งแต่สองตัวขึ้นไปเข้าด้วยกัน (เช่น ESP8266 และส่งอีเมล)
แอปเพล็ตประกอบด้วยทริกเกอร์และการกระทำ:
- ทริกเกอร์บอกให้แอปเพล็ตเริ่มทำงาน ESP8266 จะส่งคำขอ (webhooks) ที่จะเรียกใช้แอปเพล็ต
- การดำเนินการคือผลลัพธ์สุดท้ายของการรันแอปเพล็ต ในกรณีของเราส่งอีเมล
ทำตามคำแนะนำถัดไปเพื่อสร้างแอปเพล็ตของคุณ
1) คลิกที่ลิงค์นี้เพื่อเริ่มต้นการสร้าง Applet
2)คลิกที่ปุ่มเพิ่ม

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

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

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

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

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

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

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

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

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

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

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

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

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

หากคุณได้รับอีเมล แสดงว่าแอปเพล็ตของคุณทำงานได้ตามปกติ คุณสามารถไปยังส่วนถัดไป เราจะตั้งโปรแกรม ESP8266 เพื่อเรียกใช้แอปเพล็ตของคุณเมื่อประตูเปลี่ยนสถานะ
ส่วนรายการ
นี่คือฮาร์ดแวร์ที่คุณต้องใช้เพื่อทำโครงการนี้ให้เสร็จ:
- ESP8266 – อ่านBest ESP8266 Wi-Fi Development Boards
- 1× สวิตช์กกแม่เหล็ก
- ตัวต้านทาน 1 × 10kΩ
- 1× เขียงหั่นขนม
- สายจัมเปอร์
คุณสามารถใช้ลิงก์ก่อนหน้าหรือไปที่MakerAdvisor.com/toolsโดยตรงเพื่อค้นหาชิ้นส่วนทั้งหมดสำหรับโครงการของคุณในราคาที่ดีที่สุด!
แผนผัง – ESP8266 NodeMCU พร้อมสวิตช์กก
เราต่อสายสวิตช์กกไปที่ GPIO 4 (D2) แต่คุณสามารถเชื่อมต่อกับ GPIO ที่เหมาะสมได้

/************
รุย ซานโตส ดูรายละเอียดโครงการได้ที่ 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"); } } }
ความคิดเห็น
แสดงความคิดเห็น