สารบัญ:
- ขั้นตอนที่ 1: ไปช้อปปิ้ง
- ขั้นตอนที่ 2: ตั้งค่าและพื้นหลัง
- ขั้นตอนที่ 3: Arduino - ESP12 Part
- ขั้นตอนที่ 4: ทดสอบ ESP เป็นไคลเอนต์ Network Time Protocol (NTP)
- ขั้นตอนที่ 5: การทดสอบเซ็นเซอร์ DHT22
- ขั้นตอนที่ 6: นำมันมารวมกัน…
- ขั้นตอนที่ 7: ฝั่งเซิร์ฟเวอร์ของสิ่งต่าง ๆ
วีดีโอ: เซ็นเซอร์อุณหภูมิเครือข่ายในบ้าน: 7 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
สิ่งที่คุณต้องรู้เพื่อสร้างโครงการนี้:
คุณจำเป็นต้องรู้เกี่ยวกับ:- ทักษะทางอิเล็กทรอนิกส์บางอย่าง (การบัดกรี)
- ลินุกซ์
- 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
ฉันทำโครงการนี้ในขั้นตอนต่างๆ
มีลิงค์หลายลิงค์ที่ช่วยคุณนำเข้า 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)
ใน 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
ตอนนี้จำเป็นต้องมีการเดินสายเพิ่มเติม
พิน 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 เป็นสคริปต์ตัวอย่างในการสร้างกราฟ (ฉันสร้างสคริปต์เป็นรูท คุณอาจไม่ต้องการทำเช่นนี้)
คุณสามารถดูกราฟจากเบราว์เซอร์ใดก็ได้ในเครือข่ายในบ้านโดยใช้หน้าเว็บที่เรียบง่าย
แนะนำ:
การออกแบบเกมในการสะบัดใน 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 ซึ่งออกแบบมาเพื่อสร้างงานง่ายๆ ในรูปแบบที่ซับซ้อน งานของโครงการนี้คือการจับสบู่ก้อนหนึ่ง