สารบัญ:

สถานีตรวจอากาศที่บ้านของ ESP-Now: 9 ขั้นตอน (พร้อมรูปภาพ)
สถานีตรวจอากาศที่บ้านของ ESP-Now: 9 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: สถานีตรวจอากาศที่บ้านของ ESP-Now: 9 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: สถานีตรวจอากาศที่บ้านของ ESP-Now: 9 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: สร้างบ้านแทบตายโดนพนักงานบุก | The Store is closed 2024, พฤศจิกายน
Anonim
สถานีตรวจอากาศที่บ้านของ ESP-Now
สถานีตรวจอากาศที่บ้านของ ESP-Now

ฉันอยากมีสถานีตรวจอากาศที่บ้านสักระยะหนึ่ง และทุกคนในครอบครัวสามารถตรวจสอบอุณหภูมิและความชื้นได้อย่างง่ายดาย นอกจากการตรวจสอบสภาพภายนอกแล้ว ฉันยังต้องการตรวจสอบห้องเฉพาะในบ้านและโรงจอดรถของฉันด้วย ซึ่งจะทำให้เราทราบเมื่อถึงเวลาที่เหมาะสมที่จะออกอากาศนอกบ้านหรือเปิดเครื่องลดความชื้น (ที่นี่ฝนตกบ่อยในฤดูหนาว) สิ่งที่ฉันสร้างขึ้นคือระบบเซ็นเซอร์ที่ใช้ ESP-Now ซึ่งรายงานไปยังเว็บเซิร์ฟเวอร์ในพื้นที่ที่ทุกคนสามารถตรวจสอบได้จากคอมพิวเตอร์หรือโทรศัพท์ สำหรับโทรศัพท์นั้น ฉันเขียนเป็นแอพ Android ที่เรียบง่ายเพื่อให้ง่ายยิ่งขึ้นไปอีก

ขั้นตอนที่ 1: รายละเอียดการออกแบบ

รายละเอียดการออกแบบ
รายละเอียดการออกแบบ

ฉันต้องการมีสถานีเซ็นเซอร์ต่างๆ ที่ฉันสามารถวางไว้ในตำแหน่งต่างๆ และให้พวกเขารายงานกลับไปยังสถานีหลัก (หรือฮับ) แห่งเดียวที่จะบันทึกข้อมูล หลังจากลองใช้แนวคิดต่างๆ แล้ว ฉันตัดสินใจใช้โปรโตคอล ESP-Now ของ Espressif เนื่องจากอนุญาตให้มีการสื่อสารระหว่างอุปกรณ์โดยตรงอย่างรวดเร็ว คุณสามารถอ่านเล็กน้อยเกี่ยวกับ ESP-Now ที่นี่ และ GitHub repo นี้เป็นส่วนสำคัญของแรงบันดาลใจของฉัน

รูปแรกแสดงการจัดวางระบบ เซ็นเซอร์แต่ละตัวจะรายงานการวัดไปยังอุปกรณ์เกตเวย์ซึ่งจะส่งข้อมูลไปยังเซิร์ฟเวอร์หลักโดยการเชื่อมต่อแบบอนุกรมแบบมีสายแบบแข็ง เหตุผลก็คือ โปรโตคอล ESP-Now ไม่สามารถใช้งานพร้อมกันกับการเชื่อมต่อ WiFi ได้ เพื่อให้ผู้ใช้เข้าถึงหน้าเว็บได้ ต้องเปิด WIFI ตลอดเวลา และทำให้ไม่สามารถใช้การสื่อสาร ESP-Now บนอุปกรณ์เดียวกันได้ แม้ว่าอุปกรณ์เกตเวย์จะต้องเป็นอุปกรณ์ที่ใช้ Espressif (มีความสามารถของ ESP-Now) แต่เซิร์ฟเวอร์หลักอาจเป็นอุปกรณ์ใดๆ ก็ตามที่สามารถเรียกใช้หน้าเว็บได้

สถานีเซ็นเซอร์บางแห่งจะใช้พลังงานจากแบตเตอรี่ (หรือแบตเตอรี่ที่ชาร์จด้วยพลังงานแสงอาทิตย์) และบางสถานีอาจมีแหล่งจ่ายไฟหลัก อย่างไรก็ตาม ฉันต้องการให้ทุกคนใช้พลังงานน้อยที่สุดเท่าที่จะเป็นไปได้ และนั่นคือที่ที่ฟีเจอร์ "deepsleep" ที่มีในอุปกรณ์ ESP8266 และ ESP32 มีประโยชน์อย่างยิ่ง สถานีเซ็นเซอร์จะตื่นขึ้นเป็นระยะ ทำการวัด และส่งไปยังอุปกรณ์เกตเวย์และกลับสู่โหมดสลีปตามระยะเวลาที่กำหนดไว้ล่วงหน้า ระยะเวลาปลุกเพียง 300ms ทุกๆ 5 นาที (ในกรณีของฉัน) ช่วยลดการใช้พลังงานได้อย่างมาก

ขั้นตอนที่ 2: เซ็นเซอร์

เซนเซอร์
เซนเซอร์
เซนเซอร์
เซนเซอร์

มีเซ็นเซอร์ต่างๆ ให้เลือกสำหรับการวัดค่าพารามิเตอร์ด้านสิ่งแวดล้อม ฉันตัดสินใจที่จะใช้เซ็นเซอร์ที่มีความสามารถสื่อสาร I2C เท่านั้น เนื่องจากอนุญาตให้วัดได้อย่างรวดเร็วและจะทำงานบนอุปกรณ์ใดๆ ที่ฉันมี แทนที่จะทำงานกับ IC โดยตรง ฉันค้นหาโมดูลที่พร้อมใช้งานที่มีพินเอาต์เหมือนกันเพื่อทำให้การออกแบบของฉันง่ายขึ้น ฉันเริ่มต้นด้วยเพียงต้องการวัดอุณหภูมิและความชื้น ดังนั้นฉันจึงเลือกโมดูลที่ใช้ SI7021 ต่อมาฉันต้องการเซ็นเซอร์ที่สามารถวัดแรงดันได้เช่นกัน และตัดสินใจลองใช้โมดูลเซ็นเซอร์ที่ใช้ BME280 สำหรับบางสถานที่ ฉันยังต้องการตรวจสอบระดับแสงและโมดูล BH1750 เหมาะอย่างยิ่งสำหรับสิ่งนี้ในฐานะโมดูลเซ็นเซอร์แยกต่างหาก ฉันซื้อโมดูลเซ็นเซอร์จาก eBay และนี่คือโมดูลที่ฉันได้รับ:

  • BME280 (GY-BMP/E280) วัดอุณหภูมิ ความชื้น และความดัน
  • SI7021 (GY-21) วัดอุณหภูมิและความชื้น
  • BH1750 (GY-302) วัดแสง

มีสองรูปแบบของโมดูล PCB GY-BMP/E280 ที่จะพบ ทั้งสองใช้พินเดียวกันสำหรับพิน 1 ถึง 4 หนึ่งโมดูลมีพินเพิ่มเติมสองพิน CSB และ SDO พินทั้งสองนั้นเชื่อมต่อล่วงหน้าในรุ่น 4 พินของโมดูล ระดับของพิน SDO กำหนดที่อยู่ I2C (กราวด์ = ค่าเริ่มต้น 0x76, VCC = 0x77) ขา CSB ต้องเชื่อมต่อกับ VCC เพื่อเลือกอินเทอร์เฟซ I2C ฉันชอบโมดูล 4 พิน เพราะมันพร้อมใช้งานตามวัตถุประสงค์ของฉัน

โดยทั่วไปแล้ว โมดูลเหล่านี้ใช้งานได้สะดวกมาก เนื่องจากมีตัวต้านทานแบบดึงขึ้นติดตั้งอยู่แล้วสำหรับสายการสื่อสาร และทั้งหมดทำงานบน 3.3V ดังนั้นจึงเข้ากันได้กับบอร์ดที่ใช้ ESP8266 โปรดทราบว่าพินบนไอซีเซ็นเซอร์เหล่านี้โดยทั่วไปไม่ทนต่อ 5V ดังนั้นการเชื่อมต่อกับ Arduino Uno โดยตรงอาจทำให้เสียหายอย่างถาวร

ขั้นตอนที่ 3: สถานีเซ็นเซอร์

สถานีเซนเซอร์
สถานีเซนเซอร์

ดังที่กล่าวไว้ สถานีเซ็นเซอร์ทั้งหมดจะเป็นอุปกรณ์ Espressif ที่ใช้โปรโตคอลการสื่อสาร ESP-Now จากโปรเจ็กต์และการทดลองครั้งก่อน ฉันมีอุปกรณ์หลายอย่างที่พร้อมใช้เพื่อทำการทดสอบเบื้องต้นและรวมไว้ในการออกแบบขั้นสุดท้าย ฉันมีอุปกรณ์ต่อไปนี้อยู่ในมือ:

  • โมดูล ESP-01 สองโมดูล
  • บอร์ดพัฒนา Wemos D1 mini สองบอร์ด
  • หนึ่งบอร์ดพัฒนา Lolin ESP8266
  • หนึ่งบอร์ดชุดอุปกรณ์ WIFI แบบอนุกรม ESP12E
  • หนึ่งบอร์ด GOUUU ESP32 (บอร์ดพัฒนา 38 พิน)

ฉันยังมีบอร์ดพัฒนา Wemos D1 R2 ด้วย แต่มีปัญหากับมันที่ไม่อนุญาตให้ตื่นจากโหมดสลีปลึกและเป็นอุปกรณ์เกตเวย์ มันจะหยุดทำงานและไม่สามารถรีสตาร์ทได้อย่างเหมาะสม ฉันซ่อมมันในภายหลังและมันกลายเป็นส่วนหนึ่งของโปรเจ็กต์ที่เปิดประตูโรงรถ เพื่อให้ "deepsleep" ทำงานได้ หมุด RST ของ ESP8266 จะต้องเชื่อมต่อกับพิน GPIO16 ดังนั้นตัวตั้งเวลาปิดเครื่องจึงสามารถปลุกอุปกรณ์ได้ ตามหลักการแล้วการเชื่อมต่อนี้ควรทำด้วยไดโอด Schottky (แคโทดเป็น GPIO16) เพื่อให้การรีเซ็ตด้วยตนเองผ่านการเชื่อมต่อ USB-TLL ระหว่างการเขียนโปรแกรมยังคงใช้งานได้ อย่างไรก็ตาม ตัวต้านทานค่าต่ำ (300-ish Ohm) หรือแม้แต่การต่อสายตรงก็ยังทำได้สำเร็จ

โมดูล ESP-01 ไม่อนุญาตให้เข้าถึงพิน GPIO16 ได้ง่ายและต้องบัดกรีโดยตรงกับ IC นี่ไม่ใช่งานง่ายและฉันจะไม่แนะนำสิ่งนี้สำหรับทุกคน บอร์ดชุดอุปกรณ์ไร้สายแบบอนุกรม ESP12E ของ ESP12E เป็นสินค้าแปลกใหม่และจำเป็นต้องเปลี่ยนแปลงเล็กน้อยเพื่อให้มีประโยชน์สำหรับวัตถุประสงค์ของฉัน บอร์ดที่ใช้งานง่ายที่สุดคือบอร์ด Wemos D1 mini และบอร์ด Lolin อุปกรณ์ ESP32 ไม่ต้องการการปรับเปลี่ยนใดๆ เพื่อให้ Deepsleep ทำงานได้ Andreas Spiess มีคำแนะนำที่ดีเกี่ยวกับเรื่องนี้

ขั้นตอนที่ 4: สถานีเซนเซอร์ ESP-01

สถานีเซนเซอร์ ESP-01
สถานีเซนเซอร์ ESP-01
สถานีเซนเซอร์ ESP-01
สถานีเซนเซอร์ ESP-01
สถานีเซนเซอร์ ESP-01
สถานีเซนเซอร์ ESP-01

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

บอร์ด ESP-01 มีขนาดกะทัดรัดมากและมีพิน IO ดิจิทัลไม่กี่ตัวที่จะใช้งานด้วย แต่ก็เพียงพอสำหรับอินเทอร์เฟซ I2C อย่างไรก็ตาม บอร์ดต้องมีการปรับเปลี่ยนที่ยุ่งยากเพื่อให้ "หลับลึก" ทำงานได้ ในภาพที่แสดง มีการบัดกรีลวดจากหมุดมุม (GPIO16) ไปยังพิน RST ที่ส่วนหัว ลวดที่ฉันใช้คือลวด "ซ่อม" เส้นผ่านศูนย์กลาง 0.1 มม. การเคลือบฉนวนจะละลายออกไปเมื่อได้รับความร้อน จึงสามารถบัดกรีเพื่อซ่อมแซมร่องรอย ฯลฯ ใน PCB และยังคงไม่ต้องกังวลกับการสร้างช็อตที่ลวดสัมผัสกับส่วนประกอบอื่นๆ ขนาดของมันทำให้ใช้งานยาก และฉันบัดกรีลวดนี้เข้าที่โดยใช้กล้องจุลทรรศน์ (แบบนักสะสมแสตมป์/งานอดิเรก) โปรดทราบว่าส่วนหัวทางด้านขวามีระยะห่างระหว่างพิน 0.1" (2.54 มม.) การติดตั้งไดโอด Schottky ที่นี่จะไม่ง่ายเลย ฉันจึงตัดสินใจลองใช้สายไฟเพียงอย่างเดียว และทั้งสองยูนิตทำงานเกินเวลา เดือนโดยไม่มีปัญหาใดๆ

โมดูลถูกติดตั้งบนบอร์ดต้นแบบสองบอร์ดที่ฉันสร้างขึ้น บอร์ดหนึ่ง (#1) คือบอร์ดโปรแกรมเมอร์ที่อนุญาตให้ติดตั้งและทดสอบโมดูล I2C ได้ ในขณะที่อีกบอร์ดหนึ่ง (#2) เป็นบอร์ดพัฒนา/ทดสอบสำหรับอุปกรณ์ I2C สำหรับบอร์ดแรก ฉันได้ประสานตัวเชื่อมต่อ USB ตัวผู้เก่าและ PCB ขนาดเล็กเข้าด้วยกันเพื่อจ่ายไฟให้กับยูนิตโดยตรงจากอะแดปเตอร์ติดผนัง USB อีกหน่วยหนึ่งมีแจ็ค DC ปกติที่ดัดแปลงให้พอดีกับส่วนหัวของขั้วต่อสกรูและใช้พลังงานจากอะแดปเตอร์ติดผนังเช่นกัน

แผนผังแสดงวิธีการเชื่อมต่อและการทำงานของโปรแกรมเมอร์ ฉันไม่มีโมดูล ESP-01 อื่นๆ ดังนั้นฉันจึงไม่ต้องการโปรแกรมเมอร์ในทันที ในอนาคตฉันจะทำ PCB ให้พวกเขา แผงทั้งสองนี้มีโมดูลเซ็นเซอร์ SI7021 ติดตั้งอยู่ เนื่องจากฉันไม่สนใจการวัดความดันในสถานที่เหล่านั้นมากนัก

ขั้นตอนที่ 5: ESP 12E Serial WIFI Kit Sensor Station

ESP 12E Serial WIFI Kit เซนเซอร์ Station
ESP 12E Serial WIFI Kit เซนเซอร์ Station
ESP 12E Serial WIFI Kit เซนเซอร์ Station
ESP 12E Serial WIFI Kit เซนเซอร์ Station

บอร์ด ESP12E Serial WIFI Kit ไม่ได้มีไว้สำหรับการพัฒนามากเท่ากับการจัดแสดงสิ่งที่สามารถทำได้ด้วยอุปกรณ์นี้ ฉันซื้อมันมานานแล้วเพื่อเรียนรู้เล็กน้อยเกี่ยวกับการเขียนโปรแกรม ESP8266 และในที่สุดก็ตัดสินใจใช้งานใหม่ ฉันลบ LED ทั้งหมดที่ติดตั้งสำหรับการสาธิตและเพิ่มส่วนหัวการเขียนโปรแกรม USB รวมถึงส่วนหัว I2C ที่เหมาะสมกับโมดูลที่ฉันใช้ มันมีตัวต้านทานภาพถ่าย CdS ที่เชื่อมต่อกับพินอินพุตแบบอะนาล็อก และฉันตัดสินใจทิ้งมันไว้ที่นั่น หน่วยเฉพาะนี้จะตรวจสอบโรงจอดรถของฉันและเซ็นเซอร์ภาพถ่ายที่มีก็เพียงพอที่จะแจ้งให้ฉันทราบว่าไฟถูกทิ้งไว้โดยไม่ได้ตั้งใจหรือไม่ สำหรับการวัดแสง ฉันปรับค่าการอ่านให้เป็นเปอร์เซ็นต์เพื่อให้ได้ผลลัพธ์เป็นเปอร์เซ็นต์ และค่าใดๆ ที่เกิน "5" ในเวลากลางคืนหมายความว่าเปิดไฟทิ้งไว้หรือประตูบ้านปิดไม่สนิท หมุด RST และ GPIO16 มีการติดฉลากไว้อย่างชัดเจนบน PCB และมีการติดตั้งไดโอด Schottky ที่เชื่อมต่อไว้ที่ด้านล่างของ PCB ใช้พลังงานจากบอร์ดอนุกรม USB ที่เสียบเข้ากับเครื่องชาร์จ USB แบบเสียบผนังโดยตรง ฉันมีบอร์ด USB-serial เพิ่มเติมและไม่ต้องการบอร์ดนี้ในตอนนี้

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

ขั้นตอนที่ 6: D1 Mini Sensor Stations

สถานีเซนเซอร์ขนาดเล็ก D1
สถานีเซนเซอร์ขนาดเล็ก D1
สถานีเซนเซอร์ขนาดเล็ก D1
สถานีเซนเซอร์ขนาดเล็ก D1
สถานีเซนเซอร์ขนาดเล็ก D1
สถานีเซนเซอร์ขนาดเล็ก D1

บอร์ดพัฒนา ESP8266 ประเภท Wemos D1 Mini เป็นบอร์ดที่ฉันชอบใช้ และถ้าฉันต้องทำมากกว่านั้น ฉันจะใช้บอร์ดเหล่านี้ พวกเขามีพิน IO ที่เข้าถึงได้จำนวนมาก สามารถตั้งโปรแกรมได้โดยตรงผ่าน Arduino IDE และยังมีขนาดกะทัดรัดพอสมควร พิน D0 คือ GPIO16 บนบอร์ดเหล่านี้ และการเชื่อมต่อไดโอด Schottky นั้นค่อนข้างง่าย แผนผังแสดงให้เห็นว่าฉันต่อสายบอร์ดเหล่านี้ได้อย่างไร และทั้งคู่ใช้โมดูลเซ็นเซอร์ BME2808

หนึ่งในสองบอร์ดนี้ใช้เพื่อตรวจสอบสภาพอากาศภายนอกและใช้พลังงานจากแบตเตอรี่พลังงานแสงอาทิตย์ แผงโซลาร์เซลล์ขนาด 165 มม. x 135 มม. (6V, 3.5W) เชื่อมต่อกับโมดูลการชาร์จแบตเตอรี่ลิเธียมไอออน TP4056 (ดูแผนภาพการตั้งค่าสถานีเซ็นเซอร์แบตเตอรี่พลังงานแสงอาทิตย์) โมดูลการชาร์จเฉพาะนี้ (03962A) มีวงจรป้องกันแบตเตอรี่ซึ่งจำเป็นหากแบตเตอรี่ (แพ็ค) ไม่มีอยู่ แบตเตอรี่ลิเธียมไอออนถูกนำกลับมาใช้ใหม่จากชุดแบตเตอรี่แล็ปท็อปรุ่นเก่า และยังสามารถเก็บประจุไฟได้เพียงพอสำหรับใช้งานบอร์ด D1 Mini โดยเฉพาะอย่างยิ่งเมื่อเปิดใช้งานโหมด Deep Sleep กระดานถูกวางไว้ในกล่องพลาสติกเพื่อให้ปลอดภัยจากส่วนประกอบต่างๆ อย่างไรก็ตาม เพื่อให้ภายในสามารถสัมผัสกับอุณหภูมิและความชื้นภายนอกได้ เจาะรูขนาดเส้นผ่านศูนย์กลาง 25 มม. สองรูที่ด้านตรงข้ามและปิด (จากด้านใน) ด้วยผ้าแนวนอนสีดำ ผ้าได้รับการออกแบบมาเพื่อให้ความชื้นซึมผ่านได้ ดังนั้นจึงสามารถวัดความชื้นได้ ที่ปลายด้านหนึ่งของตู้มีรูเล็กๆ เจาะและติดตั้งหน้าต่างพลาสติกใส นี่คือตำแหน่งที่วางโมดูลเซ็นเซอร์วัดแสง BH1750 หน่วยทั้งหมดวางกลางแจ้งในที่ร่ม (ไม่ใช่แสงแดดโดยตรง) โดยให้เซ็นเซอร์แสงชี้ไปที่ที่เปิด แบตเตอรี่นี้ใช้พลังงานจากแบตเตอรี่พลังงานแสงอาทิตย์มาเกือบ 4 สัปดาห์แล้วในฤดูหนาวที่มีฝนตก/มีเมฆมากที่นี่

ขั้นตอนที่ 7: เกตเวย์และเว็บเซิร์ฟเวอร์

เกตเวย์และเว็บเซิร์ฟเวอร์
เกตเวย์และเว็บเซิร์ฟเวอร์
เกตเวย์และเว็บเซิร์ฟเวอร์
เกตเวย์และเว็บเซิร์ฟเวอร์
เกตเวย์และเว็บเซิร์ฟเวอร์
เกตเวย์และเว็บเซิร์ฟเวอร์

บอร์ด Lolin NodeMCU V3 (ESP8266) ถูกใช้สำหรับอุปกรณ์ ESP-Now Gateway และใช้บอร์ด ESP32 (GOOUUU) สำหรับเว็บเซิร์ฟเวอร์ เกือบทุกบอร์ด ESP8266 หรือแม้แต่ ESP32 สามารถใช้เป็นอุปกรณ์เกตเวย์ได้ นี่เป็นเพียงบอร์ดที่ฉัน "เหลือ" หลังจากที่ฉันใช้บอร์ดอื่นๆ ทั้งหมดที่ฉันมี

ฉันใช้บอร์ด ESP32 เนื่องจากฉันต้องการบอร์ดที่มีพลังประมวลผลเพิ่มขึ้นอีกเล็กน้อยเพื่อรวบรวมข้อมูล จัดเรียง บันทึกลงในที่จัดเก็บ และเรียกใช้เว็บเซิร์ฟเวอร์ ในอนาคตอาจมีเซ็นเซอร์ของตัวเองและจอแสดงผล (OLED) ในตัว สำหรับการจัดเก็บ มีการใช้การ์ด SD กับอะแดปเตอร์แบบกำหนดเอง ฉันใช้อะแดปเตอร์การ์ด microSD เป็น SD ทั่วไปและบัดกรีส่วนหัว 7 พินตัวผู้ (ระยะพิทช์ 0.1 ) กับหน้าสัมผัสชุบ ฉันทำตามคำแนะนำจาก GitHub นี้เพื่อทำการเชื่อมต่อ

การตั้งค่าการสร้างต้นแบบ (ด้วยสายดูปองท์) ไม่รวมโมดูลเซ็นเซอร์ แต่ PCB ขั้นสุดท้ายที่ฉันออกแบบนั้นอนุญาตให้ใช้กับจอแสดงผล OLED ขนาดเล็กหนึ่งจอได้ รายละเอียดเกี่ยวกับวิธีที่ฉันออกแบบ PCB นั้นเป็นส่วนหนึ่งของ Instructable ที่แตกต่างกัน

ขั้นตอนที่ 8: ซอฟต์แวร์

ซอฟต์แวร์
ซอฟต์แวร์

อุปกรณ์ ESP8266 (ESP-NOW)

ซอฟต์แวร์สำหรับอุปกรณ์ทั้งหมดเขียนขึ้นโดยใช้ Arduino IDE (v1.87) แต่ละสถานีเซ็นเซอร์ทำงานโดยพื้นฐานแล้วรหัสเหมือนกัน ต่างกันแค่พินที่ใช้สำหรับการสื่อสาร I2C และโมดูลเซ็นเซอร์ที่เชื่อมต่ออยู่ สิ่งสำคัญที่สุดคือพวกเขาส่งแพ็กเก็ตข้อมูลการวัดที่เหมือนกันไปยังสถานี ESP-Now Gateway ไม่ว่าจะมีเซ็นเซอร์ตัวเดียวกันหรือไม่ นี่หมายความว่าสถานีเซ็นเซอร์บางแห่งจะเติมค่าจำลองสำหรับการวัดความดันและระดับแสงหากไม่มีเซ็นเซอร์ให้ค่าจริง รหัสสำหรับแต่ละสถานีและเกตเวย์ได้รับการดัดแปลงจากตัวอย่างของ Anthony Elder ใน GitHub นี้

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

ESP32 (เว็บเซิร์ฟเวอร์)

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

เราเตอร์ WIFI ในบ้านถูกตั้งค่าให้จัดสรรที่อยู่ IP คงที่ให้กับเว็บเซิร์ฟเวอร์เมื่อเชื่อมต่อกับ WIFI สำหรับฉันมันคือ 192.168.1.111 การพิมพ์ที่อยู่นั้นในเบราว์เซอร์ใด ๆ จะเชื่อมต่อกับเว็บเซิร์ฟเวอร์สถานีตรวจอากาศ ตราบใดที่ผู้ใช้อยู่ภายในช่วง WIFI ของ (และเชื่อมต่อกับ) เครือข่ายในบ้าน เมื่อผู้ใช้เชื่อมต่อกับหน้าเว็บ เว็บเซิร์ฟเวอร์จะตอบสนองด้วยตารางการวัด และรวมเวลาของการวัดครั้งสุดท้ายของเซ็นเซอร์แต่ละตัว วิธีนี้หากสถานีเซ็นเซอร์ไม่ตอบสนอง เราจะเห็นได้จากตารางหากการอ่านมีอายุมากกว่า 5-6 นาที

ข้อมูลจะถูกบันทึกไว้ในไฟล์ข้อความแต่ละไฟล์ในการ์ด SD และสามารถดาวน์โหลดได้จากหน้าเว็บเช่นกัน สามารถนำเข้าสู่ Excel หรือโปรแกรมอื่น ๆ สำหรับการวางแผนข้อมูล

แอพ Android

เพื่อให้ง่ายต่อการดูข้อมูลสภาพอากาศในท้องถิ่นบนสมาร์ทโฟน ฉันได้สร้างแอป Android โดยใช้ Android Studio มีอยู่ในหน้า GitHub ของฉันที่นี่ ใช้คลาส webview เพื่อโหลดหน้าเว็บจากเซิร์ฟเวอร์และฟังก์ชันการทำงานที่จำกัด ไม่สามารถดาวน์โหลดไฟล์ข้อมูลได้และฉันก็ไม่ต้องการไฟล์เหล่านั้นในโทรศัพท์ของฉันอยู่ดี

ขั้นตอนที่ 9: ผลลัพธ์

ผลลัพธ์
ผลลัพธ์

สุดท้าย นี่คือผลลัพธ์บางส่วนสำหรับจากสถานีตรวจอากาศที่บ้านของฉัน ข้อมูลถูกดาวน์โหลดบนแล็ปท็อปและลงจุดใน Matlab ฉันแนบสคริปต์ Matlab แล้ว และคุณยังสามารถเรียกใช้ใน GNU Octave ได้อีกด้วย เซ็นเซอร์กลางแจ้งทำงานโดยใช้แบตเตอรี่ที่ชาร์จด้วยพลังงานแสงอาทิตย์มาเกือบ 4 สัปดาห์แล้ว และเราแทบไม่มีแสงแดดเลยในช่วงเวลานี้ของปี จนถึงตอนนี้ทุกอย่างทำงานได้ดีและทุกคนในครอบครัวสามารถค้นหาสภาพอากาศด้วยตนเองแทนที่จะถามฉันตอนนี้!

แนะนำ: