สารบัญ:
- ขั้นตอนที่ 1: ข้อจำกัดความรับผิดชอบ
- ขั้นตอนที่ 2: ตั้งค่าบัญชี IFTTT ฟรี
- ขั้นตอนที่ 3: สร้าง IFTTT Applet
- ขั้นตอนที่ 4: กำหนดค่าส่วน "นี้" ของแอปเพล็ตของคุณ
- ขั้นตอนที่ 5: เพิ่มบริการ WebHooks ลงในแอปเพล็ตของคุณ
- ขั้นตอนที่ 6: ตั้งค่าทริกเกอร์รับคำขอเว็บ
- ขั้นตอนที่ 7: ระบุชื่อกิจกรรม
- ขั้นตอนที่ 8: กำหนดค่าส่วน "ที่" ของแอปเพล็ตของคุณ
- ขั้นตอนที่ 9: ตั้งค่า Action Service
- ขั้นตอนที่ 10: เชื่อมต่อกับ Google ชีต
- ขั้นตอนที่ 11: เลือกการดำเนินการ
- ขั้นตอนที่ 12: ตั้งค่า Action
- ขั้นตอนที่ 13: ตรวจสอบและสรุปแอปเพล็ตของคุณ
- ขั้นตอนที่ 14: ดึงข้อมูลการกำหนดค่าที่จำเป็นในภายหลัง
- ขั้นตอนที่ 15: ดำเนินการตามเอกสารประกอบ Webhooks สำหรับคีย์ API
- ขั้นตอนที่ 16: บันทึกคีย์ API
- ขั้นตอนที่ 17: รวบรวมส่วนประกอบ
- ขั้นตอนที่ 18: ประกอบส่วนประกอบ
- ขั้นตอนที่ 19: เขียนโค้ด Arduino
- ขั้นตอนที่ 20: ผลลัพธ์
- ขั้นตอนที่ 21: เครดิต
วีดีโอ: โครงการบันทึกสถานะประตูและอุณหภูมิ: 21 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
คำแนะนำนี้จะแสดงวิธีการสร้างตัวบันทึกสถานะประตูและอุณหภูมิอย่างง่ายในราคาต่ำกว่า $10.00 โดยใช้ ESP8266 NodeMCU, เซ็นเซอร์อุณหภูมิและความชื้น DHT11, สวิตช์กกประตู/หน้าต่าง, ตัวต้านทาน 10K ohm และสายเชื่อมต่อบางส่วน
จุดเริ่มต้นของโครงการนี้มาจากความปรารถนาของฉันที่จะทำระบบอัตโนมัติภายในบ้านมากขึ้นด้วยบอร์ด Arduino เนื่องจากฉันได้อ่านเกี่ยวกับ EPS8266 NodeMCU ที่เข้ากันได้กับ Arduino มามาก ฉันจึงตัดสินใจว่าบอร์ดนี้จะเป็นบอร์ดต้นทุนต่ำที่สมบูรณ์แบบเพื่อทำการทดลอง หลังจากค้นหาโครงการระบบอัตโนมัติภายในบ้านโดยใช้บอร์ด ESP8266 ทางอินเทอร์เน็ต ฉันตัดสินใจรวมตัวบันทึกอุณหภูมิและสถานะประตูสำหรับความพยายามครั้งแรกของฉัน ในที่สุด โปรเจ็กต์นี้จะรวมกับเซอร์โว เซ็นเซอร์วัดความชื้น และอุปกรณ์อิเล็กทรอนิกส์อื่นๆ เพื่อทำให้บ้านสีเขียวขนาดเล็กที่คุณปู่ของฉันออกแบบและสร้างขึ้นเมื่อ 50 ปีก่อนเป็นอัตโนมัติ เซ็นเซอร์อุณหภูมิจะถูกนำมาใช้เพื่อกำหนดว่าควรเปิดหรือปิดระบบทำความร้อน รวมทั้งส่งสัญญาณให้เซอร์โวเปิดและปิดระบบระบายอากาศเมื่อจำเป็น สถานะของระบบระบายอากาศจะถูกตรวจสอบโดยการใช้สวิตช์กกแม่เหล็ก สุดท้าย เซ็นเซอร์ความชื้นจะถูกใช้เพื่อทำให้ระบบรดน้ำอัตโนมัติ
ขั้นตอนที่ 1: ข้อจำกัดความรับผิดชอบ
เป็นเพียงข้อจำกัดความรับผิดชอบอย่างรวดเร็วเพื่อระบุว่าเราไม่รับผิดชอบต่อสิ่งที่เกิดขึ้นอันเป็นผลมาจากการปฏิบัติตามคำแนะนำนี้ เป็นการดีที่สุดที่จะปฏิบัติตามคำแนะนำของผู้ผลิตและเอกสารความปลอดภัยเมื่อสร้างสิ่งใด ดังนั้นโปรดศึกษาเอกสารเหล่านั้นสำหรับชิ้นส่วนและเครื่องมือใดๆ ที่คุณใช้ในการสร้างของคุณเอง เราเพียงแค่ให้ข้อมูลเกี่ยวกับขั้นตอนที่เราเคยสร้างของเรา เราไม่ใช่มืออาชีพ ตามจริงแล้ว 2 ใน 3 ของบุคคลที่เข้าร่วมในงานสร้างนี้เป็นเด็ก
ขั้นตอนที่ 2: ตั้งค่าบัญชี IFTTT ฟรี
หากคุณยังไม่มี ตอนนี้เป็นเวลาตั้งค่าบัญชี IFTTT ฟรีโดยไปที่หน้าแรกของพวกเขา.. IFTTT ย่อมาจาก If This Then That และเป็นแพลตฟอร์มฟรีที่ให้คุณเชื่อมต่อบริการบนอินเทอร์เน็ตได้ด้วยวิธีใหม่ๆ ช่วยให้คุณสามารถใช้ประโยชน์จากบริการเหล่านั้นในรูปแบบใหม่ สำหรับโครงการนี้ เราจะใช้ IFTTT เพื่อให้ ESP8266 บันทึกสถานะของประตูผ่านสวิตช์กก อุณหภูมิและความชื้นผ่านเซ็นเซอร์ DHT11 ในเอกสาร Google ชีต
ขั้นตอนที่ 3: สร้าง IFTTT Applet
ขณะที่ยังอยู่ใน IFTTT ให้ไปที่ส่วน "แอปเพล็ตของฉัน" และสร้างแอปเพล็ตใหม่โดยคลิกปุ่ม "แอปเพล็ตใหม่"
ขั้นตอนที่ 4: กำหนดค่าส่วน "นี้" ของแอปเพล็ตของคุณ
คลิกที่คำว่า "นี่" ที่เป็นสีน้ำเงิน ดังที่ไฮไลท์ไว้ในภาพด้านบน
ขั้นตอนที่ 5: เพิ่มบริการ WebHooks ลงในแอปเพล็ตของคุณ
ในแถบค้นหา ค้นหาบริการ "Webhooks" และเลือกไอคอน Webhooks
เมื่อคุณพบบริการ "Webhooks" แล้ว ให้คลิกที่บริการนั้น
ขั้นตอนที่ 6: ตั้งค่าทริกเกอร์รับคำขอเว็บ
เลือกทริกเกอร์ "รับคำขอเว็บ"
ขั้นตอนที่ 7: ระบุชื่อกิจกรรม
ในกล่องข้อความให้ระบุแอปเพล็ตใหม่ของคุณด้วยชื่อเหตุการณ์ ฉันเลือก "เครื่องบันทึกข้อมูล" แต่คุณสามารถเลือกสิ่งที่คุณต้องการได้
ขั้นตอนที่ 8: กำหนดค่าส่วน "ที่" ของแอปเพล็ตของคุณ
คลิกที่คำว่า "นั่น" ที่เป็นสีน้ำเงิน ดังที่ไฮไลต์ในภาพด้านบน
ขั้นตอนที่ 9: ตั้งค่า Action Service
ในช่องค้นหา ให้ค้นหาบริการ "Google ชีต" แล้วคลิกไอคอน Google ชีต
ขั้นตอนที่ 10: เชื่อมต่อกับ Google ชีต
หากยังไม่ได้ดำเนินการ คุณจะต้องเชื่อมต่อบัญชี IFTTT กับ Google ชีต กดปุ่มเชื่อมต่อที่แสดงด้านบนและทำตามคำแนะนำบนหน้าจอ
ขั้นตอนที่ 11: เลือกการดำเนินการ
คลิกที่ "เพิ่มแถวในสเปรดชีต"
ขั้นตอนที่ 12: ตั้งค่า Action
ระบุชื่อในกล่องข้อความ "ชื่อสเปรดชีต" ฉันเลือกใช้ "Data_Logger" เพื่อความสม่ำเสมอ ปล่อยให้การตั้งค่าที่เหลืออยู่คนเดียว (คุณสามารถทดลองกับการตั้งค่าเหล่านั้นในบางครั้ง) จากนั้นกดปุ่ม "สร้างการดำเนินการ" ที่ด้านล่างของหน้าจอ
ขั้นตอนที่ 13: ตรวจสอบและสรุปแอปเพล็ตของคุณ
เมื่อพอใจกับการกำหนดค่าแอปเพล็ตแล้ว ให้กดปุ่ม "เสร็จสิ้น"
ขั้นตอนที่ 14: ดึงข้อมูลการกำหนดค่าที่จำเป็นในภายหลัง
คลิกที่ "Webhooks" ตามที่ไฮไลต์ด้านบน
ขั้นตอนที่ 15: ดำเนินการตามเอกสารประกอบ Webhooks สำหรับคีย์ API
อาจดูแปลกแต่คลิกลิงก์เอกสารที่มุมขวาบนเพื่อไปยังหน้าด้วยคีย์ API เฉพาะของคุณ
ขั้นตอนที่ 16: บันทึกคีย์ API
บรรทัดแรกของหน้าจอเอกสารจะแสดงคีย์ API เฉพาะของคุณ คัดลอกและบันทึกคีย์นี้เพื่อใช้ในภายหลัง
เป็นความคิดที่ดีที่จะทดสอบแอปเพล็ตที่นี่ อย่าลืมเปลี่ยน {event} เป็น Data_Logger หรืออะไรก็ตามที่คุณตั้งชื่อกิจกรรมของคุณ และเพิ่มข้อมูลบางส่วนลงในค่าว่าง 3 ค่า จากนั้นคลิกปุ่ม "ทดสอบ" ที่ด้านล่างของหน้า คุณควรเห็นข้อความสีเขียวว่า “เหตุการณ์ถูกทริกเกอร์” ถ้าใช่ ให้ไปที่ Google Docs และยืนยันว่าข้อมูลที่คุณป้อนในหน้าทดสอบแสดงขึ้นในเอกสาร Google ชีต
ขั้นตอนที่ 17: รวบรวมส่วนประกอบ
คุณจะต้องการบางส่วนเท่านั้น
1) ESP8266 คณะกรรมการพัฒนา NodeMcu
2) DHT11 เซ็นเซอร์อุณหภูมิ/ความชื้น
3) สวิตช์กกประตู/หน้าต่าง
4) ตัวต้านทาน 10k โอห์ม
5) สายเชื่อมต่อ
ขั้นตอนที่ 18: ประกอบส่วนประกอบ
1) เชื่อมต่อหนึ่งในพิน 3v3 บน ESP8266 กับพิน vcc บน DHT11
2) เชื่อมต่อหมุดกราวด์ตัวใดตัวหนึ่งบน ESP8266 กับพินกราวด์บน DHT11
3) เชื่อมต่อพิน D4 (a.k.a. pin 2 ใน IDE) บน ESP8266 กับดาต้าพินบน DHT11
4) ต่อพิน 3v3 อีกอันบน ESP8266 เข้ากับด้านหนึ่งของสวิตช์กกประตู/หน้าต่าง
5) เชื่อมต่อพิน D5 (หรือที่รู้จักว่าพิน 14 ใน IDE) บน ESP8266 กับอีกด้านหนึ่งของสวิตช์กกประตู/หน้าต่าง และเชื่อมต่อกับตัวต้านทาน 10k ohm ด้านใดด้านหนึ่ง
6) เชื่อมต่ออีกด้านหนึ่งของตัวต้านทาน 10k ohm กับพินกราวด์อีกอันบน ESP8266
สำหรับการเลือกพินของ ESP8266 โปรดดูไดอะแกรมที่เป็นประโยชน์นี้หรือวิดีโอที่เป็นประโยชน์มาก
ขั้นตอนที่ 19: เขียนโค้ด Arduino
คัดลอกและวางโค้ดด้านล่างลงใน Arduino IDE ของคุณ
#รวม #รวม #รวม "DHT.h"
#define DHTPIN 2 // พินดิจิทัลใดที่เราเชื่อมต่อกับ
#define DOORPIN 14 // สวิตซ์ประตูเปิดอยู่ด้วยพินดิจิตอลอะไร
#define DHTTYPE DHT11 // DHT 11
DHT dht (DHTPIN, DHTTYPE);
จำนวน int = 1;
const ถ่าน* ssid = "some_ssid"; // เปลี่ยนสิ่งนี้เพื่อใช้ ssid const char* password = "some_password"; // เปลี่ยนสิ่งนี้เพื่อใช้รหัสผ่านของคุณ int sleepTime = 100;
// Maker Webhooks IFTTT
เซิร์ฟเวอร์ const char* = "maker.ifttt.com";
// ทรัพยากร URL IFTTT
const char* ทรัพยากร = "/trigger/SOME_SERVICE_NAME/with/key/SOME_API_KEY"; //ตรวจสอบให้แน่ใจว่าใช้ชื่อบริการและรหัส API ของคุณ
String doorStatus = "ปิด";
สถานะบูลผันผวนเปลี่ยน = เท็จ;
// หากนอนเป็นชั่วโมง ให้ตั้งช่วงเวลาเป็น ชม. * 60 นาที * 60 วินาที * 1,000 มิลลิวินาที
const ช่วงยาว = 1.0 * 60 * 60 * 1,000; // 1 ชั่วโมงก่อนหน้ามิลลิวินาทีที่ไม่ได้ลงนามนาน = 0 - (ช่วง 2 *);
การตั้งค่าเป็นโมฆะ () {
Serial.begin(115200); AttachInterrupt(digitalPinToInterrupt(DOORPIN), eventTriggered, CHANGE); โหมดพิน (DOORPIN, INPUT); //เซ็นเซอร์ประตู dht.begin(); WiFi.begin(ssid, รหัสผ่าน);
Serial.print("\nกำลังเชื่อมต่อ..");
ในขณะที่ (WiFi.status () != WL_CONNECTED) { ล่าช้า (1000); Serial.print("."); } Serial.print("\n"); }
โมฆะ eventTriggered(){
stateChanged = จริง; Serial.println("กำลังตรวจสอบประตู!"); if (digitalRead(DOORPIN)==HIGH) // ตรวจสอบว่าประตูเปิดอยู่หรือไม่ { Serial.println("Door is closed!"); doorStatus = "ปิด"; } อื่น { Serial.println ("ประตูเปิดอยู่!"); doorStatus = "เปิด"; } }
ถือเป็นโมฆะ checkStatus(){
if (WiFi.status () == WL_CONNECTED) { // ตรวจสอบสถานะการเชื่อมต่อ WiFi // อุณหภูมิในการอ่านหรือความชื้นใช้เวลาประมาณ 250 มิลลิวินาที! // ค่าที่อ่านได้จากเซนเซอร์อาจถึง 2 วินาที 'เก่า' (ซึ่งเป็นเซ็นเซอร์ที่ช้ามาก) float h = dht.readHumidity(); // อ่านอุณหภูมิเป็นเซลเซียส (ค่าเริ่มต้น) float t = dht.readTemperature(); // อ่านอุณหภูมิเป็นฟาเรนไฮต์ (isFahrenheit = true) float f = dht.readTemperature(true); // ตรวจสอบว่าการอ่านล้มเหลวและออกก่อนกำหนดหรือไม่ (เพื่อลองอีกครั้ง) ถ้า (isnan (h) || isnan (t) || isnan (f)) { Serial.println ("ไม่สามารถอ่านจากเซ็นเซอร์ DHT!"); //Serial.print("."); // ไม่สามารถอ่านจากเซ็นเซอร์ DHT! กลับ; } // คำนวณดัชนีความร้อนในฟาเรนไฮต์ (ค่าเริ่มต้น) float hif = dht.computeHeatIndex(f, h); // คำนวณดัชนีความร้อนในเซลเซียส (isFahreheit = false) float hic = dht.computeHeatIndex(t, h, false);
Serial.print("\n");
Serial.print("อุณหภูมิ:"); Serial.print(f); Serial.print(" *F ("); Serial.print(t); Serial.print(" *C)"); Serial.print(" *F ("); Serial.print(t); Serial.print(" *C)"); Serial.print("\t"); Serial.print("ดัชนีความร้อน:"); Serial.print(hif); Serial.print(" *F ("); Serial.print(hic); Serial.print(" *C)%"); Serial.print("\t"); Serial.print("ความชื้น: "); Serial.println(ซ);
if (digitalRead(DOORPIN)==HIGH) // ตรวจสอบว่าประตูเปิดอยู่หรือไม่
{ Serial.println("ประตูถูกปิด!"); doorStatus = "ปิด"; } อื่น { Serial.println ("ประตูเปิดอยู่!"); doorStatus = "เปิด"; } String jsonObject = String("{"value1\":\"") + f +"*F (" + t + "*C) / "+ hif +"*F (" + hic + "*C) " + "\", \"value2\":\"" + h + "\", \"value3\":\"" + doorStatus + " \"}"; HTTPClient http; สตริง completeUrl = "https://maker.ifttt.com/trigger/bme280_readings/with/key/cZFasEvy5_3JlrUSVAxQK9"; http.begin(completeUrl); // http.begin(เซิร์ฟเวอร์); http.addHeader("Content-Type", "application/json"); http. POST(jsonObject); http.writeToStream(&อนุกรม); http.end(); //ปิดการเชื่อมต่อ
stateChanged = เท็จ;
int sleepTimeInMinutes = ช่วงเวลา / 1000 / 60; Serial.print("\n\nเข้าสู่โหมดสลีปสำหรับ "); Serial.print (sleepTimeInMinutes); Serial.println(" นาที …"); } }
วงเป็นโมฆะ () {
ไม่ได้ลงนามยาว currentMillis = millis(); ล่าช้า(4000); //ถ้าเกินเวลาที่ผ่านไป ให้บังคับตรวจสอบประตูและอุณหภูมิ if(currentMillis - PreviousMillis >= ช่วง) { stateChanged = true; มิลลิวินาทีก่อนหน้า = ปัจจุบันมิลลิวินาที; Serial.print(นับ++); Serial.println(") กำลังตรวจสอบเนื่องจากเวลาที่ผ่านไป!"); } มิฉะนั้น if (stateChanged) { Serial.print (นับ ++); Serial.println(") กำลังตรวจสอบเนื่องจากการเปลี่ยนแปลงสถานะ!"); }
//ถ้าสถานะเปลี่ยน ให้ตรวจสอบประตูและอุณหภูมิ
ถ้า(stateChanged){ checkStatus(); }
ล่าช้า (sleepTime);
}
ขั้นตอนที่ 20: ผลลัพธ์
เมื่อคุณอัปโหลดซอร์สโค้ดในขั้นตอนก่อนหน้า คุณควรได้ผลลัพธ์ดังตัวอย่างที่แสดงด้านบน
ขั้นตอนที่ 21: เครดิต
ฉันพบคำแนะนำและเคล็ดลับที่เป็นประโยชน์มากมายจาก Random Nerd Tutorials และขอขอบคุณสำหรับความช่วยเหลือทั้งหมดของพวกเขา โดยเฉพาะอย่างยิ่งบทช่วยสอนที่ยอดเยี่ยมของพวกเขาเกี่ยวกับ ESP32 ESP8266 เผยแพร่การอ่านเซ็นเซอร์ไปยัง Google ชีตซึ่งส่วนสำคัญของคำแนะนำนี้ยึดตาม
นอกจากนี้ DHT11 Instructable จาก TheCircuit ยังช่วยให้ฉันเข้าใจวิธีใช้เซ็นเซอร์ตัวเล็กราคาไม่แพงมากแต่น่าสนใจนี้
นอกจากนี้ยังมีบทช่วยสอนมากมายเกี่ยวกับการตรวจสอบประตูของคุณ เช่น Garage Door Monitor และอีกบทหนึ่งจาก Random Nerd Tutorials ฉันใช้บิตและชิ้นส่วนเหล่านี้เพื่อช่วยให้ฉันเข้าใจวิธีทำให้สวิตช์กกทำงานอย่างถูกต้อง
สุดท้ายนี้ ด้วยข้อมูลนี้และรายละเอียดอื่นๆ ที่ฉันพบในอินเทอร์เน็ต ฉันจึงสามารถสร้างระบบที่ตรงกับความต้องการของฉันได้ ฉันหวังว่าคุณจะพบว่าคำแนะนำนี้มีประโยชน์และสร้างของคุณเอง
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
เครื่อง Rube Goldberg 11 ขั้นตอน: 8 ขั้นตอน
เครื่อง 11 Step Rube Goldberg: โครงการนี้เป็นเครื่อง 11 Step Rube Goldberg ซึ่งออกแบบมาเพื่อสร้างงานง่ายๆ ในรูปแบบที่ซับซ้อน งานของโครงการนี้คือการจับสบู่ก้อนหนึ่ง