สารบัญ:

เซ็นเซอร์อุณหภูมิเครือข่ายในบ้าน: 7 ขั้นตอน
เซ็นเซอร์อุณหภูมิเครือข่ายในบ้าน: 7 ขั้นตอน

วีดีโอ: เซ็นเซอร์อุณหภูมิเครือข่ายในบ้าน: 7 ขั้นตอน

วีดีโอ: เซ็นเซอร์อุณหภูมิเครือข่ายในบ้าน: 7 ขั้นตอน
วีดีโอ: EP66 อย่าซื้อ Sensor 7 IN 1 ถ้ายังไม่ได้ดูคลิปนี้ 2024, พฤศจิกายน
Anonim
เซ็นเซอร์อุณหภูมิเครือข่ายในบ้าน
เซ็นเซอร์อุณหภูมิเครือข่ายในบ้าน

สิ่งที่คุณต้องรู้เพื่อสร้างโครงการนี้:

คุณจำเป็นต้องรู้เกี่ยวกับ:- ทักษะทางอิเล็กทรอนิกส์บางอย่าง (การบัดกรี)

- ลินุกซ์

- Arduino IDE

(คุณจะต้องอัปเดตบอร์ดเพิ่มเติมใน IDE:

- อัปเดต/ตั้งโปรแกรมบอร์ด ESP ผ่าน Arduino IDE

(มีแบบฝึกหัดดีๆ ให้ชมบนเว็บ)

สามารถทำได้โดยใช้ Arduino Uno หรือใช้ FTDI (usb to serial adapter)

ฉันใช้ Uno เพราะฉันไม่มีพอร์ตซีเรียลบนพีซีหรือไม่มี FTDI

ขั้นตอนที่ 1: ไปช้อปปิ้ง

ไปซื้อของ
ไปซื้อของ

คุณจะต้องทำอะไรเพื่อให้สิ่งนี้เกิดขึ้น

สำหรับเซนเซอร์วัดอุณหภูมิและความชื้นแบบดิจิตอล:

- ไม่ว่าจะเป็นเขียงหั่นขนมหรือทางเลือกอื่นเช่น pcb ต้นแบบ, บัดกรี, หัวแร้ง …

- สายบาง

- จัมเปอร์สองตัว

- ตัวต้านทาน 10k โอห์ม

- ESP12F (รุ่นอื่นๆ อาจใช้ได้เช่นกัน…)

- DHT22 (แพงกว่า DHT11 เล็กน้อย แต่แม่นยำกว่า)

- ถ่านชาร์จ AA 3 ก้อนและที่ใส่แบตเตอรี่

- กล่องพลาสติกเล็กๆ สำหรับใส่โปรเจกต์ของคุณ

- ในระยะหลังฉันวางแผนที่จะเพิ่ม HT7333 ที่มีตัวเก็บประจุ 10uF สองตัวระหว่างก้อนแบตเตอรี่และ ESP

เพื่อรักษาเสถียรภาพของแรงดันไฟฟ้าขาเข้า (VCC) ให้เป็น 3.3V ที่แนะนำ แต่ยังเพื่อป้องกัน ESP จากแรงดันไฟเกิน

สำหรับส่วนเครือข่าย:

- เครือข่าย WiFi ที่บ้านของคุณ

สำหรับส่วนเซิร์ฟเวอร์:

- ระบบที่ใช้ Linux (เปิดตลอดเวลา!)

ฉันใช้ Raspberry Pi (ซึ่งฉันใช้เป็นเซิร์ฟเวอร์สำหรับกล้อง IP กลางแจ้งของฉันด้วย)

- คอมไพเลอร์ gcc เพื่อรวบรวมรหัสเซิร์ฟเวอร์ของคุณ

- แพ็คเกจ rrdtool เพื่อเก็บข้อมูลและสร้างกราฟ

- apache (หรือเว็บเซิร์ฟเวอร์อื่น)

พีซีหรือแล็ปท็อปเครื่องโปรดของคุณที่มี Arduino IDE

ขั้นตอนที่ 2: ตั้งค่าและพื้นหลัง

การตั้งค่าและพื้นหลัง
การตั้งค่าและพื้นหลัง

ในเวอร์ชันของการเชื่อมต่อ WiFi นี้ - ไม่ต้องพูดถึง IOT - เซ็นเซอร์อุณหภูมิและความชื้น ฉันใช้ ESP12F, DHT22 และที่ใส่แบตเตอรี่ AA 3 ก้อนพร้อมแบตเตอรี่แบบชาร์จไฟได้

ทุกๆ 20 นาที ESP จะทำการวัดจาก DHT22 และส่งไปยังเซิร์ฟเวอร์ (Raspberry Pi) ผ่าน UDP บนเครือข่าย WiFi ที่บ้านของฉัน หลังจากส่งการวัดแล้ว ESP จะเข้าสู่โหมดสลีป ซึ่งหมายความว่ามีเพียงนาฬิกาเรียลไทม์ของโมดูลเท่านั้นที่ยังคงใช้พลังงาน ส่งผลให้ประหยัดพลังงานได้อย่างไม่น่าเชื่อ ประมาณ 5 วินาที โมดูลต้องการประมาณ 100mA จากนั้นในช่วง 20 นาที deepsleep เท่านั้น 150uA

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

บนเซิร์ฟเวอร์ (Raspbian Pi ที่ใช้ Raspbian) ฉันได้เขียนตัวฟัง UDP (เซิร์ฟเวอร์) อย่างง่ายซึ่งเก็บค่าไว้ใน RRD อย่างง่าย (ฐานข้อมูล Round Robin โดยใช้ RRDtool โดย Tobias Oetiker)

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

เซิร์ฟเวอร์ของฉันสร้างกราฟเป็นระยะๆ และแสดงทุกอย่างในหน้า http ที่ง่ายมาก ฉันสามารถศึกษาการอ่านของฉันด้วยเบราว์เซอร์ทั่วไปโดยเชื่อมต่อกับเว็บเซิร์ฟเวอร์ Apache2 บน Raspberry Pi!

สุดท้าย ฉันไม่มี FTDI (USB to Serial) ดังนั้นฉันจึงใช้ Arduino UNO ของฉัน คุณต้องเชื่อมต่อ TX และ RX และ GND ของ ESP และ UNO (ฉันรู้ สัญชาตญาณของคุณอาจบอกคุณให้ข้าม RX และ TX… ลองแล้วไม่ได้ผล)

ฉันไม่ได้ทำการแปลงระดับ (UNO: สูง = 5V แต่โดยพื้นฐานแล้ว ESP เป็นอุปกรณ์ 3.3V… มี FTDI ดีๆ ในตลาดที่คุณสามารถเลือกระดับสูงสุดเป็น 5 หรือ 3.3V ได้

วงจรของฉันใช้พลังงานจากแบตเตอรี่แบบรีชาร์จ AA 3 ก้อน ดังนั้นอันที่จริงแล้ว 3 X 1.2V ในระยะต่อมา ฉันตั้งใจจะใส่ HT7333 ระหว่างก้อนแบตเตอรี่กับวงจรเพื่อความปลอดภัย แบตเตอรี่ที่ชาร์จใหม่อาจมีมากกว่า 1.2V และ ESP ควรใช้พลังงานขั้นต่ำ 3V และสูงสุด 3.6V. นอกจากนี้ ถ้าฉันตัดสินใจ - ในช่วงเวลาที่อ่อนแอ - ให้ใส่แบตเตอรี่อัลคาไลน์ (3 X 1.5V = 4.5V) ESP ของฉันจะไม่ถูกทอดทิ้ง!

ฉันยังพิจารณาใช้แผงโซลาร์เซลล์ขนาด 10 ซม. x 10 ซม. แต่ก็ไม่คุ้มกับความยุ่งยาก ด้วยการวัด 3 ครั้งต่อชั่วโมง (โดยทั่วไป 3x 5 วินาทีที่ 100mA สูงสุด และเวลาที่เหลือ @100uA) ฉันหวังว่าจะเพิ่มพลังงานให้กับวงจรของฉันเป็นเวลา 1 ปีด้วยแบตเตอรี่แบบชาร์จซ้ำได้เดียวกัน

ขั้นตอนที่ 3: Arduino - ESP12 Part

Arduino - ESP12 Part
Arduino - ESP12 Part
Arduino - ESP12 Part
Arduino - ESP12 Part

ฉันทำโครงการนี้ในขั้นตอนต่างๆ

มีลิงค์หลายลิงค์ที่ช่วยคุณนำเข้า ESP12 (aka. ESP8266) ลงใน Arduino IDE (ฉันต้องใช้เวอร์ชัน 2.3.0 แทนเวอร์ชันล่าสุดเนื่องจากข้อบกพร่องที่อาจได้รับการแก้ไขในขณะเดียวกัน…)

ฉันเริ่มต้นด้วยการเชื่อมต่อ ESP ผ่าน Arduino UNO ของฉัน (ใช้เป็นสะพานเชื่อมระหว่างพีซีของฉันผ่าน USB กับซีเรียลเท่านั้น) ไปยังอินเทอร์เฟซอนุกรม ESP มี Instructables แยกต่างหากที่อธิบายสิ่งนี้

ในโครงการที่เสร็จแล้วของฉัน ฉันทิ้งสายไฟไว้เพื่อเชื่อมต่อกับ Serial ในกรณีที่ฉันต้องแก้ไขปัญหา RX

จากนั้นคุณต้องต่อสาย ESP12 ของคุณดังนี้:

หมุด ESP…

GND UNO GND

RX UNO RX

TX UNO TX

EN VCC

GPIO15 GND

ตอนแรกฉันพยายามเปิดเครื่อง ESP จาก 3.3V บน UNO แต่ฉันรีบย้ายไปเปิดเครื่อง ESP ด้วยพาวเวอร์ซัพพลายแบบตั้งโต๊ะ แต่คุณสามารถใช้ก้อนแบตเตอรี่ได้เช่นกัน

GPIO0 ฉันเชื่อมต่อจัมเปอร์กับ GND เพื่อเปิดใช้งานการกระพริบ (= การเขียนโปรแกรม) ESP

การทดสอบครั้งแรก: เปิดจัมเปอร์ทิ้งไว้และเริ่มมอนิเตอร์แบบอนุกรมใน Arduino IDE (ที่ 115200 baud !)

เปิดเครื่อง ESP คุณควรเห็นอักขระขยะและข้อความเช่น:

Ai-Thinker Technology Co. Ltd. พร้อมแล้ว

ในโหมดนี้ ESP จะทำหน้าที่เหมือนโมเด็มสมัยก่อนเล็กน้อย คุณต้องใช้คำสั่ง AT

ลองใช้คำสั่งต่อไปนี้:

AT+RST

และสองคำสั่งต่อไปนี้

AT+CWMODE=3

ตกลง

AT+CWLAP

สิ่งนี้จะให้รายชื่อเครือข่าย WiFi ทั้งหมดในพื้นที่แก่คุณ

หากวิธีนี้ใช้ได้ผล คุณก็พร้อมสำหรับขั้นตอนต่อไป

ขั้นตอนที่ 4: ทดสอบ ESP เป็นไคลเอนต์ Network Time Protocol (NTP)

การทดสอบ ESP เป็นไคลเอนต์ Network Time Protocol (NTP)
การทดสอบ ESP เป็นไคลเอนต์ Network Time Protocol (NTP)
การทดสอบ ESP เป็นไคลเอนต์ Network Time Protocol (NTP)
การทดสอบ ESP เป็นไคลเอนต์ Network Time Protocol (NTP)

ใน Arduino IDE ภายใต้ File, Examples, ESP8266WiFi ให้โหลด NTPClient

จำเป็นต้องมีการปรับแต่งเล็กน้อยเพื่อให้ใช้งานได้ คุณต้องใส่ SSID และรหัสผ่านของเครือข่าย WiFi ของคุณ

ตอนนี้วางจัมเปอร์โดยย่อ GPIO0 ถึง GND

เปิดเครื่อง ESP และอัปโหลดภาพร่างไปยัง ESP

หลังจากการคอมไพล์แล้ว การอัปโหลดไปยัง ESP ควรเริ่มต้นขึ้น ไฟ LED สีฟ้าบน ESP จะกะพริบอย่างรวดเร็วขณะกำลังดาวน์โหลดโค้ด

ฉันสังเกตว่าฉันต้องลองเล่นสักหน่อยด้วยการรีสตาร์ท IDE รีสตาร์ท ESP ก่อนที่การอัปโหลดจะทำงาน

ก่อนที่คุณจะเริ่มการคอมไพล์/อัพโหลดสเก็ตช์ ให้ปิดคอนโซลซีเรียล (=serial monitor) เพราะจะป้องกันไม่ให้คุณทำการอัพโหลด

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

เยี่ยมมาก คุณได้ตั้งโปรแกรม ESP ของคุณ เชื่อมต่อกับ WiFi และรับเวลาจากอินเทอร์เน็ตแล้ว

ขั้นตอนต่อไป เราจะทดสอบ DHT22

ขั้นตอนที่ 5: การทดสอบเซ็นเซอร์ DHT22

การทดสอบเซ็นเซอร์ DHT22
การทดสอบเซ็นเซอร์ DHT22

ตอนนี้จำเป็นต้องมีการเดินสายเพิ่มเติม

พิน DHT…เชื่อมต่อพิน 1 (ทางด้านซ้าย) ของเซ็นเซอร์กับ VCC (3.3V)

เชื่อมต่อพิน 2 ESP GPIO5 (DHTPIN ในแบบร่าง)

ต่อพิน 4 (ด้านขวา) ของเซ็นเซอร์กับ GROUND

เชื่อมต่อตัวต้านทาน 10K จากพิน 2 (ข้อมูล) กับพิน 1 (กำลัง) ของเซ็นเซอร์

คล้ายกับการทดสอบ NTP ให้ไปหาร่าง DHTtester และปรับแต่งด้วยวิธีต่อไปนี้:

#define DHTPIN 5 // เราเลือก GPIO5 เพื่อเชื่อมต่อกับเซ็นเซอร์#define DHTTYPE DHT22 // เนื่องจากเราใช้ DHT22 แต่รหัส/ไลบรารีนี้เหมาะสำหรับ DHT11 ด้วย

อีกครั้ง ปิดจอภาพอนุกรม เปิดเครื่อง ESP และคอมไพล์และแฟลช ESP

หากทุกอย่างเป็นไปด้วยดี คุณจะเห็นค่าที่วัดได้ปรากฏขึ้นในมอนิเตอร์แบบอนุกรม

คุณสามารถเล่นกับเซ็นเซอร์ได้เล็กน้อย ถ้าคุณหายใจเข้าไป คุณจะเห็นความชื้นเพิ่มขึ้น

หากคุณมีโคมไฟตั้งโต๊ะ (ไม่ใช่ LED) คุณสามารถฉายแสงบนเซ็นเซอร์เพื่อทำให้ร้อนขึ้นเล็กน้อย

ยอดเยี่ยม! เซ็นเซอร์ขนาดใหญ่สองส่วนกำลังทำงานอยู่

ในขั้นตอนต่อไปฉันจะแสดงความคิดเห็นเกี่ยวกับรหัสสุดท้าย

ขั้นตอนที่ 6: นำมันมารวมกัน…

เอามารวมกัน…
เอามารวมกัน…

การเดินสายเพิ่มเติมอีกครั้ง… นี่คือการทำให้ DeepSleep เป็นไปได้

โปรดจำไว้ว่า DeepSleep เป็นฟังก์ชันที่เหลือเชื่อสำหรับอุปกรณ์ IoT

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

GPIO16-RST

ใช่ ต้องเป็น GPIO16 เพราะนั่นคือ GPIO ที่เดินสายเพื่อปลุกอุปกรณ์เมื่อนาฬิกาเรียลไทม์ดับลงหลังจาก DeepSleep!

ขณะที่คุณกำลังทดสอบ คุณสามารถตัดสินใจทำ DeepSleep 15 วินาทีได้

เมื่อฉันกำลังแก้ไขจุดบกพร่อง ฉันจะย้ายจัมเปอร์ไปที่ GPIO0 เพื่อที่ฉันจะได้แฟลชโปรแกรมของฉัน

เมื่อดาวน์โหลดเสร็จแล้ว ฉันจะย้ายจัมเปอร์ไปที่ GPIO16 เพื่อให้ DeepSleep ทำงานได้

รหัสสำหรับ ESP เรียกว่า TnHclient.c

คุณต้องเปลี่ยน SSID, รหัสผ่าน และที่อยู่ IP ของเซิร์ฟเวอร์ของคุณ

มีโค้ดพิเศษอีกหลายบรรทัดที่คุณสามารถใช้เพื่อแก้ไขปัญหาหรือทดสอบการตั้งค่าของคุณ

ขั้นตอนที่ 7: ฝั่งเซิร์ฟเวอร์ของสิ่งต่าง ๆ

ด้านเซิร์ฟเวอร์ของสิ่งต่างๆ
ด้านเซิร์ฟเวอร์ของสิ่งต่างๆ
ด้านเซิร์ฟเวอร์ของสิ่งต่างๆ
ด้านเซิร์ฟเวอร์ของสิ่งต่างๆ

เป็นความเข้าใจผิดทั่วไปที่ UDP ไม่น่าเชื่อถือและ TCP คือ…

นั่นก็โง่พอๆ กับการพูดว่าค้อนมีประโยชน์มากกว่าไขควง พวกเขาเป็นเครื่องมือที่มีประโยชน์มากที่แตกต่างกันและทั้งคู่ก็มีการใช้งาน

อย่างไรก็ตาม ถ้าไม่มี UDP อินเทอร์เน็ตจะไม่ทำงาน… DNS นั้นใช้ UDP

ดังนั้นฉันจึงเลือก UDP เพราะมันเบามาก ง่าย และรวดเร็วมาก

ฉันมักจะคิดว่า WiFi ของฉันน่าเชื่อถือมาก ดังนั้นไคลเอนต์จะส่งแพ็กเก็ต UDP ไม่เกิน 3 แพ็กเก็ตหากการตอบรับ "ตกลง!" ไม่ได้รับ

รหัส C สำหรับ TnHserver อยู่ในไฟล์ TnHServer.c

มีความคิดเห็นหลายประการในรหัสที่อธิบาย

เราต้องการเครื่องมือพิเศษบนเซิร์ฟเวอร์: rrdtool, apache และ tcpdump

ในการติดตั้ง rrdtool บน Raspbian คุณสามารถติดตั้งแพ็คเกจดังนี้: apt-get install rrdtool

หากคุณต้องการดีบักการรับส่งข้อมูลเครือข่าย tcpdump มีประโยชน์ apt-get install tcpdump

ฉันต้องการเว็บเซิร์ฟเวอร์เพื่อใช้เบราว์เซอร์เพื่อดูกราฟ: apt-get install apache2

ฉันใช้เครื่องมือนี้: https://rrdwizard.appspot.com/index.php เพื่อรับคำสั่งเพื่อสร้างฐานข้อมูล Round Robin คุณต้องเรียกใช้สิ่งนี้เพียงครั้งเดียว (หากคุณทำให้ถูกต้องในครั้งแรก)

rrdtool สร้าง TnHdatabase.rrd --start now-10s

--ขั้นตอน '1200'

'DS:อุณหภูมิ:GAUGE:1200:-20.5:45.5'

'DS:ความชื้น:มาตรวัด:1200:0:100.0'

'RRA:AVERAGE:0.5:1:720'

'RRA:เฉลี่ย:0.5:3:960'

'RRA:เฉลี่ย:0.5:18:1600'

สุดท้าย ฉันใช้รายการ crontab เพื่อรีสตาร์ท TnHserver ทุกวันตอนเที่ยงคืน ฉันเรียกใช้ TnHserver ในฐานะผู้ใช้ปกติ (เช่น ไม่ใช่ root) เพื่อเป็นการรักษาความปลอดภัย

0 0 * * * /usr/bin/pkill TnHserver; /home/user/bin/TnHserver >/dev/null 2>&1

คุณสามารถตรวจสอบว่า TnHserver ทำงานอยู่โดยทำ

$ ps -elf | grep TnHserver

และคุณสามารถตรวจสอบได้ว่ากำลังฟังแพ็กเก็ตบนพอร์ต 7777 โดยทำ

$ netstat -anu

การเชื่อมต่ออินเทอร์เน็ตที่ใช้งาน (เซิร์ฟเวอร์และที่จัดตั้งขึ้น)

Proto Recv-Q Send-Q ที่อยู่ในท้องถิ่น ที่อยู่ต่างประเทศ State

udp 0 0 0.0.0.0:7777 0.0.0.0:*

สุดท้าย CreateTnH_Graphs.sh.txt เป็นสคริปต์ตัวอย่างในการสร้างกราฟ (ฉันสร้างสคริปต์เป็นรูท คุณอาจไม่ต้องการทำเช่นนี้)

คุณสามารถดูกราฟจากเบราว์เซอร์ใดก็ได้ในเครือข่ายในบ้านโดยใช้หน้าเว็บที่เรียบง่าย

แนะนำ: