สารบัญ:

SilverLight: การตรวจสอบสิ่งแวดล้อมจาก Arduino สำหรับห้องเซิร์ฟเวอร์: 3 ขั้นตอน (พร้อมรูปภาพ)
SilverLight: การตรวจสอบสิ่งแวดล้อมจาก Arduino สำหรับห้องเซิร์ฟเวอร์: 3 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: SilverLight: การตรวจสอบสิ่งแวดล้อมจาก Arduino สำหรับห้องเซิร์ฟเวอร์: 3 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: SilverLight: การตรวจสอบสิ่งแวดล้อมจาก Arduino สำหรับห้องเซิร์ฟเวอร์: 3 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: สัมมนา : ระบบเครือข่ายเซ็นเซอร์ไร้สายสำหรับการตรวจสอบด้านสิ่งแวดล้อม 2024, กรกฎาคม
Anonim
SilverLight: การตรวจสอบสิ่งแวดล้อมจาก Arduino สำหรับห้องเซิร์ฟเวอร์
SilverLight: การตรวจสอบสิ่งแวดล้อมจาก Arduino สำหรับห้องเซิร์ฟเวอร์
SilverLight: การตรวจสอบสิ่งแวดล้อมจาก Arduino สำหรับห้องเซิร์ฟเวอร์
SilverLight: การตรวจสอบสิ่งแวดล้อมจาก Arduino สำหรับห้องเซิร์ฟเวอร์
SilverLight: การตรวจสอบสิ่งแวดล้อมจาก Arduino สำหรับห้องเซิร์ฟเวอร์
SilverLight: การตรวจสอบสิ่งแวดล้อมจาก Arduino สำหรับห้องเซิร์ฟเวอร์
SilverLight: การตรวจสอบสิ่งแวดล้อมจาก Arduino สำหรับห้องเซิร์ฟเวอร์
SilverLight: การตรวจสอบสิ่งแวดล้อมจาก Arduino สำหรับห้องเซิร์ฟเวอร์

เมื่อฉันได้รับมอบหมายให้ค้นหาโพรบด้านสิ่งแวดล้อมเพื่อตรวจสอบอุณหภูมิในห้องเซิร์ฟเวอร์ของบริษัทของฉัน ความคิดแรกของฉันคือ: ทำไมไม่เพียงแค่ใช้ Raspberry PI และเซ็นเซอร์ DHT เท่านั้น สามารถติดตั้งได้ภายในเวลาไม่ถึงชั่วโมงรวมถึงการติดตั้งระบบปฏิบัติการ สำหรับสิ่งนี้ ฉันได้รับการตอบสนองอย่างเย็นชาจากคนเจ้ากี้เจ้าการที่ปิดตาว่าเราจะไม่ทำอย่างนั้นเพราะจะใช้เวลาในการตั้งค่ามากกว่าการซื้ออุปกรณ์ การต้องยอมรับคนใจแคบแบบนี้มาช่วงหนึ่งในชีวิตเป็นสิ่งหนึ่ง และฉันสั่งขยะ EATON ระดับองค์กรจากอีเบย์และเรียกมันว่า แต่ในขณะนั้นฉันตัดสินใจแล้วว่าสำหรับห้องเซิร์ฟเวอร์ของฉันเอง ฉันจะสร้าง Arduino แบบโอเพ่นซอร์สอย่างสมบูรณ์ อุปกรณ์พื้นฐานซึ่งจะดีกว่าที่ฉันเพิ่งสั่งไปมาก

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

ขั้นตอนที่ 1: การออกแบบฮาร์ดแวร์

การออกแบบฮาร์ดแวร์
การออกแบบฮาร์ดแวร์
การออกแบบฮาร์ดแวร์
การออกแบบฮาร์ดแวร์
การออกแบบฮาร์ดแวร์
การออกแบบฮาร์ดแวร์

ภาพรวมฮาร์ดแวร์เชิงพาณิชย์

ตกลง ฉันไม่ได้เริ่มด้วยซ้ำว่าใครมีความคิดที่ดีที่จะติดตั้งการตรวจสอบสภาพแวดล้อมในอัพ แต่เห็นได้ชัดว่ามีตลาดสำหรับมัน ดังนั้นเรามาดูกันว่าสิ่งเหล่านี้สามารถทำอะไรได้บ้าง:

ความเข้ากันได้ของอุปกรณ์ตรวจสอบสิ่งแวดล้อม

เครือข่าย 10/100Mb-MS, PXGUPS, PXGPDP และ PXGMS

10/100Mb ConnectUPS-X, ConnectUPS-BD และ ConnectUPS-E พร้อม FW V3.01 ขึ้นไป ขนาด (LXWXH)

น้ำหนัก 2.26 x 1.48 x 1.15 (นิ้ว) 57.6 x 37.6 x 29.3 (มม.)

1.19 ออนซ์ (34 กรัม)

นั่นเป็นข้อมูลที่มีประโยชน์มากใช่มั้ย? ไม่ต้องกังวลเพราะไม่สามารถทำอะไรได้มาก ในการเริ่มต้น UPS ของคุณจะต้องมีการ์ดเสริมราคาแพงอีกอันสำหรับสิ่งนี้ ซึ่งเชื่อมต่อกับเซ็นเซอร์สภาพแวดล้อมที่คุณซื้อแยกต่างหาก โดยปกติแล้วจะใช้สายเคเบิล CAT5 มาตรฐาน (อย่าพยายามเสียบสิ่งใด ๆ เข้ากับพอร์ตนั้นเพราะไม่มีมาตรฐาน เกี่ยวกับมัน). พวกเขาอ้างว่าอุปกรณ์ต้องใช้เวลา 10 นาทีในการ "อุ่นเครื่อง" ซึ่งในความเป็นจริงใช้เวลาหลายชั่วโมง และเมื่อใช้งานได้แล้ว อุปกรณ์จะแสดงขึ้นในอินเทอร์เฟซ Java ที่อัปเดตอย่างช้าๆ และเรามีอุณหภูมิและความชื้น การตั้งค่าเงื่อนไขตามการแจ้งเตือนนั้นง่ายจากจุดนี้ แต่ใครจะสนล่ะ เรามาสร้างสิ่งที่ดีกว่ากัน

โปรเจ็กต์นี้เป็นการรวมหลายโปรเจ็กต์ของฉัน: สถานีตรวจอากาศ Natalia, Shadow of phoenix กล่องสามารถตรวจสอบข้อจำกัดด้านสิ่งแวดล้อมต่อไปนี้:

  • อุณหภูมิ/ความชื้น/ดัชนีความร้อน
  • ความเข้มข้นของ LPG, ควัน, แอลกอฮอล์, โพรเพน, ไฮโดรเจน, มีเทนและคาร์บอนมอนอกไซด์ในอากาศ (MQ2)
  • ความไวแสงจากแสงอาทิตย์ (ไฟในห้องเซิร์ฟเวอร์เปิดอยู่หรือไม่)
  • เซ็นเซอร์ตรวจจับความเคลื่อนไหว PIR (คุณสามารถเปิด/ปิดไฟอัตโนมัติได้ตั้งแต่ตอนนี้ด้วยเซ็นเซอร์ตรวจจับความเคลื่อนไหวเมื่อมีคนเข้ามาในห้อง)

ข้อมูลทั้งหมดนี้แสดงอย่างสวยงามบนหน้าจอ LCD ในขณะที่ยังส่งต่อไปยังคอมพิวเตอร์ (Orange PI Zero) เพื่อการประมวลผลและการแจ้งเตือนเพิ่มเติม แม้ว่าจะเป็นไปได้ที่จะเชื่อมต่อเซ็นเซอร์ดิจิทัล เช่น DHT และหมุดดิจิทัลของ MQ2 กับ OrangePI โดยตรง แต่ฉันมักชอบใช้ไมโครเฉพาะสำหรับงานเหล่านี้ และเมื่อคุณต้องการอัปเดต LCD ด้วย และทำระดับต่ำอื่นๆ สิ่งที่ Arduino นั้นเหนือชั้นและสามารถทำงานได้อย่างไม่หยุดนิ่งเป็นเวลาหลายปี OrangePI ที่มีข้อบกพร่อง (สมมติว่าเป็นคอมพิวเตอร์ราคา 10 เหรียญ) เช่นใช้ไม่ได้สำหรับภาระงานหนัก ไม่รองรับ bsd wifi ในตัวจะบวม ฯลฯ สามารถจัดการปริมาณงานขนาดเล็กได้อย่างง่ายดาย เช่น การอ่านเซ็นเซอร์ผ่านซีเรียล (USB) และประมวลผล

นี่เป็นฮาร์ดแวร์โปรเจ็กต์ที่เรียบง่ายซึ่งต้องการส่วนประกอบต่อไปนี้:

  • Arduino PRO Micro
  • หน้าจอ LCD 2x16 ตัวอักษร RGB
  • AC-DC โมดูลแยกสวิตช์ไฟ 220V ถึง 5V HLK-5M05 (ซึ่งดีมากสำหรับโครงการ Arduino/ESP) นี่คือรุ่น 5V/5W!
  • ตัวต้านทาน 2x300ohm
  • 2xleds (แดง/เขียว)
  • เซ็นเซอร์ตรวจจับความเคลื่อนไหว PIR
  • เซ็นเซอร์ MQ2
  • DHT22
  • LDR
  • ตัวต้านทาน 2X10Kohm
  • Buzzer
  • ส้ม PI Zero
  • สายดาต้ามินิ USB

ฉันไม่ได้รำคาญกับการทำ PCB สำหรับสิ่งนี้เพียงแค่ใช้เขียงหั่นขนมธรรมดาเพราะส่วนประกอบสามารถเชื่อมต่อกับ Arduino ได้อย่างง่ายดาย (ดูรูปที่แนบมา):

-DHT22 จะต้องดึง 10K ไปที่ VCC (ดิจิทัล)

-LDR จะต้องมีการดึงลง 10K เป็น GND (แอนะล็อก)

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

-PIR สามารถเชื่อมต่อโดยตรงกับพินใดๆ (ดิจิตอล)

-LCD: สามารถขับเคลื่อนด้วย 4 พิน, สามารถเชื่อมต่อกับพินใด ๆ (ดิจิตอล) จะต้อง +2 RS/E (ดิจิตอล)

-Buzzer: สามารถเชื่อมต่อโดยตรงกับพิน Arduino (ดิจิตอล)

pinout ที่ฉันใช้สามารถเห็นได้ในรหัส การเชื่อมต่อทุกอย่างเข้าด้วยกันหลังจากนี้ค่อนข้างตรงไปตรงมา คุณสามารถทำทีละตัวได้ ตรวจสอบให้แน่ใจว่าเซ็นเซอร์ 1 ตัวทำงานได้อย่างสมบูรณ์จากนั้นดำเนินการต่อไป สิ่งที่คุณอาจผิดพลาดได้คือการต่อสายไฟผิดที่ (เช่น สลับ vcc /gnd สำหรับเซ็นเซอร์ จนถึงตอนนี้มันไม่เคยฆ่าอุปกรณ์ของฉันเลย) สิ่งที่ฉันจะสังเกตในที่นี้ว่ามี VCC และ GND ซ้อนกันมากเกินไปสำหรับฉัน ฉันไม่สามารถบีบพวกมันผ่านแถบเทอร์มินัลดังนั้นฉันจึงบัดกรีมันทั้งหมด

อย่าลืมเกี่ยวกับ DHT จากโครงการอื่น ๆ ของฉัน: หากคุณใส่ไลบรารี DHT ในรหัสของคุณและเซ็นเซอร์ DHT ไม่ได้เชื่อมต่อหรือเชื่อมต่อ DHT ผิด (เช่น 11 ที่กำหนดไว้ในรหัสคุณกำลังใช้ 22) ที่อาจนำไปสู่โปรแกรม ที่จะแขวนตลอดไปเมื่อเริ่มต้น

เกี่ยวกับเซ็นเซอร์ตรวจจับการเคลื่อนไหว PIR ดังที่คุณเห็นในภาพของฉัน มีของปลอมจำนวนมาก ที่จริงแล้วฉันพบว่ามันยากที่จะซื้อของแท้จากอีเบย์ ของปลอมก็ใช้งานได้ดีเช่นกัน แม้ในระยะยาว แต่พวกมันมีวงจรมิเรอร์ซึ่งทำให้หมุด + และ - กลับด้าน ซึ่งง่ายต่อการจดจำ: มาพร้อมกับ pcb สีน้ำเงิน ไม่ใช่สีเขียวปกติ ฉลากหายไป พอตเตอร์ ฉันโชคดีที่พบของแท้ในกล่องของฉัน ไม่เช่นนั้นการเปลี่ยนตำแหน่งจะครอบคลุมไฟ LED 2 ดวงสำหรับฉัน ฉันพบว่าหม้อทั้งสองหมุนไปตรงกลางนั้นได้ผลสำหรับฉัน สิ่งนี้จะช่วยให้คุณมีช่วงการตรวจจับที่ยาวเพียงพอ เมื่อมีการเคลื่อนไหว ขาดิจิตอลจะถูกเก็บไว้ในตำแหน่งสูงประมาณหนึ่งนาที ดังนั้นคุณจึงไม่ต้องเขียนโค้ดสำหรับสิ่งนี้ ของปลอมนั้นง่ายต่อการระบุด้านที่เป็น - และ + เพียงแค่ดูที่ขาที่สอดคล้องกันสำหรับแคปอิเล็กโทรไลต์ที่เชื่อมต่อกับหมุด

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

ขั้นตอนที่ 2: การออกแบบซอฟต์แวร์

การออกแบบซอฟต์แวร์
การออกแบบซอฟต์แวร์
การออกแบบซอฟต์แวร์
การออกแบบซอฟต์แวร์

โค้ด Arduino นั้นเรียบง่ายเช่นกัน โดยพื้นฐานแล้วจะดึงการอ่านเซ็นเซอร์ทั้งหมดที่จุดเริ่มต้นของทุกลูป เปิดไฟ LED หากมีการเคลื่อนไหวหรือควันและยังส่งเสียงเตือนบน Buzzer หากมีควัน (นี่เป็นรหัสบล็อกเดียวที่ฉันทำให้มันสั้น) จากนั้นแสดงข้อมูลบน LCD และส่งผ่านพีซีในที่สุด ด้วยระยะเวลาพัก 10 วินาที ไม่ให้ท่วมพอร์ต

โครงการนี้ใช้การสื่อสารทางเดียวจาก Arduino->OrangePI ไม่มีคำสั่งใด ๆ ที่นำมาใช้ แม้ว่าสิ่งนี้จะเป็นไปได้อย่างสมบูรณ์ที่จะทำเช่นเดียวกับที่ฉันทำในโครงการอื่นของฉันที่คอมพิวเตอร์สามารถส่ง LCD_PRINT1 หรือ LCD_PRINT2 เพื่อเขียนทับหน้าจอ LCD หนึ่งบรรทัดด้วยข้อความของตัวเอง (เช่นที่อยู่ IP, เวลาทำงาน, วันที่ระบบ, การใช้ซีพียู) พื้นที่หน้าจอเล็กมากสำหรับการแสดงข้อมูลจากเซ็นเซอร์ 3 ตัวที่ฉันไม่สนใจ ค่า SOL และ SMK สามารถเพิ่มขึ้นได้ถึง 4 หลัก 0000-1023 โดยใช้อักขระที่มีค่า 8 ตัวบนหน้าจอแล้ว

ด้วยจอ LCD คุณจะสังเกตเห็นเคล็ดลับเล็กๆ น้อยๆ ในโค้ดที่ว่าหลังจากแต่ละค่าที่วัดได้ ระบบจะใช้การพิมพ์ช่องว่าง (" ") จากนั้นฉันจะเลื่อนเคอร์เซอร์ไปยังตำแหน่งคงที่เพื่อวางไอคอนและข้อมูลใหม่ สิ่งเหล่านี้มีอยู่เพราะ LCD ไม่ได้ฉลาดนักที่จะเข้าใจตัวเลข มันแค่ดึงสิ่งที่ได้รับ ตัวอย่างเช่น หากคุณมีค่าสุริยะเท่ากับ 525 ซึ่งจู่ๆ ลดลงเหลือ 3 ก็จะแสดง 325 ทิ้งขยะเก่าไว้บนหน้าจอ ที่นั่น.

รหัสควบคุม C ที่ทำงานบน OrangePI และบันทึกข้อมูลสิ่งแวดล้อมและส่งการแจ้งเตือนทางอีเมลเมื่อจำเป็น

OrangePI กำลังเรียกใช้ Armbian (ซึ่งในขณะที่เขียนตาม Debian Stretch) ฉันจะรวมสิ่งนี้ไว้ในส่วนซอฟต์แวร์เกี่ยวกับปัญหาที่แก้ไขได้ นี่คือการระบายพลังงานเฉลี่ยของอุปกรณ์:

0.17 A - Arduino เท่านั้น + เซ็นเซอร์

0.5-0.62 A - การบูต OrangePI

0.31 A - PI สีส้มเมื่อไม่ได้ใช้งาน

0.29 A - Orange PI ปิดอยู่ (ปิดไม่ได้จริงๆ ไม่มี ACPI หรืออะไรทำนองนั้น)

0.60 A - ทดสอบความเครียด 100% การใช้งาน CPU บน 4 คอร์

ฉันมี OrangePI นี้ในกล่องมานานแล้ว ด้วยเคอร์เนลเก่า อุปกรณ์ระบายกระแสมาก (ตามที่มิเตอร์บอกว่าสูงสุดประมาณ 0.63 A) สิ่งที่ PSU ของเขาอาจไม่สามารถให้ได้ว่ามันไม่สามารถบู๊ตได้ กระบวนการบู๊ตค้าง และฉันได้รับไฟ LED อีเธอร์เน็ต 2 ดวงที่สว่างขึ้น อย่างต่อเนื่องและไม่ทำอะไรเลย

ตอนนี้เป็นเรื่องที่น่ารำคาญเพราะ HLK-5M05 อ้างว่าสามารถทำได้ 5W ใน 5V ทำให้สามารถให้ 1 แอมป์ แต่ด้วยอุปกรณ์เหล่านี้ที่ออกมาจากจีนคุณไม่มีทางรู้เลย 0.63 A peak นั้นต่ำกว่าค่าสูงสุดที่กำหนด ค่า. ดังนั้นฉันจึงใช้การทดสอบการรีบูตอย่างง่าย ๆ จากการรีบูต 10 ครั้ง OrangePI จะบูตได้สำเร็จสองครั้งเท่านั้นซึ่งเกือบจะทำให้ฉันโยนมันออกจากโครงการเพราะฉันไม่ชอบพฤติกรรมที่ไม่สอดคล้องกันของบั๊กกี้ในวงจร ดังนั้นฉันจึงเริ่ม googling ไปรอบ ๆ อาจมีวิธีลดการใช้พลังงานในขณะบู๊ตจากซอฟต์แวร์ (เนื่องจากเป็นเพียงปัญหาในตอนนั้น) และพบบทความบางบทความที่พูดถึงการปรับแต่ง script.bin แต่สำหรับ Orange PI PC และ ไฟล์หายไปจากที่เก็บข้อมูล ดังนั้นไม่ว่าทางเลือกสุดท้ายที่ฉันทำคือ "อัปเกรดฉลาด" เพื่ออัปเกรดเฟิร์มแวร์ เคอร์เนล และทุกอย่างอื่น โดยหวังว่ามันจะระบายน้อยลงและอุปกรณ์สามารถบู๊ตได้ และ:

Linux silverlight 4.14.18-sunxi #24 SMP ศุกร์ 9 ก.พ. 16:24:32 CET 2018 armv7l GNU/Linux

Linux silverlight 4.19.62-sunxi #5.92 SMP พุธ 31 ก.ค. 22:07:23 CEST 2019 armv7l GNU/Linux

มันได้ผล! การโยนปัญหาฮาร์ดแวร์ให้กับซอฟต์แวร์มักจะเป็นนักพัฒนา Java ที่ขี้เกียจ แต่ในกรณีนี้เราได้แก้ไขปัญหาฮาร์ดแวร์ด้วยซอฟต์แวร์ซึ่งประสบความสำเร็จอย่างมาก ฉันได้ทำการทดสอบการรีบูตอีก 20 ครั้งว่าอุปกรณ์นั้นบูททุกกรณี ฉันจะยังคงทราบว่าไฟกระชากจากการเปิด Opi (การเชื่อมต่อ / ตัดการเชื่อมต่อ) นั้นใหญ่มากจนจะรีเซ็ต Arduino ได้ตลอดเวลา (การรีบูตอย่างง่ายจะทำให้ LCD สั่น แต่ไม่มีปัญหาเพิ่มเติม) แต่ปัญหานี้ยังคงอยู่ ซ่อนไว้เพราะ 2 อันจะบูทพร้อมกัน

ฉันได้ดูโมดูลเคอร์เนลด้วย:

usb_f_acm u_serial g_serial libcomposite xradio_wlan mac80211 lima sun8i_codec_analog snd_soc_simple_card gpu_sched sun8i_adda_pr_regmap sun4i_i2s snd_soc_simple_card_utils ttm sun4i_gpadc_iio snd_soc_core cfg80211 snd_pcm_dmaengine industrialio snd_pcm snd_timer snd sun8i_ths soundcore cpufreq_dt uio_pdrv_genirq UIO thermal_sys pwrseq_simple

เราต้องการอะไรจากสิ่งเหล่านี้จริงๆ? ตกลง pwr และความร้อนอาจมีประโยชน์ แต่เสียง พอร์ตอนุกรม wifi (เสียแล้ว) เราไม่ต้องการสิ่งเหล่านี้ทั้งหมดสามารถขึ้นบัญชีดำได้ ฉันจะสร้างเคอร์เนลที่กำหนดเองด้วยเฉพาะโมดูลที่จำเป็นในภายหลัง

สิ่งที่เราต้องการและไม่ได้โหลดโดยค่าเริ่มต้นคือ CDC ACM เพื่อสื่อสารกับ Arduino เปิดใช้งานด้วย:

echo "cdc-acm" >> /etc/modules

หลังจากนี้คุณสามารถทดสอบการเชื่อมต่อกับ:

หน้าจอ /dev/ttyACM0 9600

คุณควรเห็นข้อมูลสถานะถูกส่งทุกๆ 10 วินาที

การแจ้งเตือนและการตรวจสอบ

จากการแจ้งเตือนฉันเพิ่งใส่การเรียก system() ในรหัสควบคุม C ซึ่งรับข้อมูลจากซีเรียลดังนั้นจึงไม่จำเป็นต้องใช้เครื่องมือภายนอก ตัวอย่างการแจ้งเตือนบางส่วน:

- อุณหภูมิเกิน 30 C

- ความชื้นมากกว่า 70% (ไม่ดีต่อสุขภาพสำหรับเซิร์ฟเวอร์)

- ตรวจพบการเคลื่อนไหวในห้อง (อาจสร้างความรำคาญได้หากคุณไปต่อในห้องเซิร์ฟเวอร์ของคุณ)

- ตรวจพบควันหรือก๊าซ (การแจ้งเตือนเกิน 100 อย่างจริงจัง ฉันได้เล่นกับเซ็นเซอร์นี้และเปิดสำหรับสิ่งต่างๆมากมายเช่นการสร้างควันถัดจากเซ็นเซอร์ด้วยหัวแร้งทำให้ได้ 50 เล็กน้อยในขณะที่สูบบุหรี่ต่อไป o พุ่งถึง 500 แม้กระทั่งตรวจจับก๊าซจากยาดับกลิ่นปกติจากที่ไกลๆ)

สำหรับการเก็บข้อมูลในอดีต ฉันไม่ได้สนใจที่จะพัฒนาเครื่องมือเพราะเหตุใดจึงต้องสร้างวงล้อขึ้นใหม่เมื่อเรามีเฟรมเวิร์กการตรวจสอบที่ยอดเยี่ยม ฉันจะแสดงตัวอย่างวิธีการรวมสิ่งนี้เข้ากับ Zabbix ที่ชื่นชอบส่วนตัวของฉัน:

apt-get ติดตั้ง zabbix-agent

เพิ่มต่อท้าย: /etc/zabbix/zabbix_agentd.conf

UserParameter=silverlight.hum หัว -1 /dev/shm/silverlight-zbx.log | awk -F", " '{ พิมพ์ $1 }'

UserParameter=silverlight.tmp หัว -1 /dev/shm/silverlight-zbx.log | awk -F", " '{ พิมพ์ $2 }' UserParameter=silverlight.sol, head -1 /dev/shm/silverlight-zbx.log | awk -F", " '{ พิมพ์ $4 }' UserParameter=silverlight.mot, head -1 /dev/shm/silverlight-zbx.log | awk -F", " '{ พิมพ์ $5 }' UserParameter=silverlight.smk, head -1 /dev/shm/silverlight-zbx.log | awk -F", " '{ พิมพ์ $6 }'

การรัน zabbix_agentd -p ควรคืนค่าที่เหมาะสมในตอนนี้:

silverlight.hum [t|41]

silverlight.tmp [t|23] silverlight.sol [t|144] silverlight.mot [t|0] silverlight.smk [t|19]

ฉันรวบรวมดัชนีความร้อน แต่ไม่เห็นการใช้งานจริงใด ๆ เลยจึงถูกบันทึกไว้ ในโค้ดควบคุม C ฉันได้ใช้ฟังก์ชันการบันทึก 2 อย่าง ฟังก์ชันแรกจะบันทึกข้อมูลทั้งหมดในรูปแบบที่เป็นมิตรกับผู้ใช้:

[SILVERLIGHT] ได้รับข้อมูลเมื่อ 2019-09-10 23:36:08 => ความชื้น: 44 อุณหภูมิ: 22 สูง: 25 พลังงานแสงอาทิตย์: 0, เคลื่อนไหว: 0, ควัน: 21

[SILVERLIGHT] ได้รับข้อมูลเมื่อ 2019-09-10 23:36:18 => ความชื้น: 44, Temp: 22, Hi: 25, Solar: 0, Motion: 0, Smoke: 21 [SILVERLIGHT] ได้รับข้อมูลเมื่อ 2019-09 -10 23:36:29 => ความชื้น: 44, Temp: 22, Hi: 25, Solar: 0, Motion: 0, Smoke: 22 [SILVERLIGHT] ได้รับข้อมูลเมื่อ 2019-09-10 23:36:39 => ความชื้น: 44, อุณหภูมิ: 22, สูง: 25, พลังงานแสงอาทิตย์: 0, การเคลื่อนไหว: 0, ควัน: 21

คนที่สอง:

โมฆะ logger2 (ถ่าน * ข้อความ) {

ไฟล์ *f = fopen("/dev/shm/silverlight-zbx.log", "w"); if (f == NULL) { printf ("เกิดข้อผิดพลาดในการเปิดไฟล์บันทึกหน่วยความจำ!\n"); กลับ; } fprintf(f, "%s", ข้อความ); fclose(ฉ); กลับ; }

สิ่งนี้จะทำให้หน่วยความจำเข้าสู่ระบบ 1 ซับ (กำจัดการดำเนินการ rw ที่ไม่จำเป็นใน sdcard) ซึ่งจะถูกเขียนทับในครั้งต่อไปเสมอ บันทึกนี้จะประกอบด้วยคอลัมน์ข้อมูล 6 คอลัมน์เท่านั้นและไม่มีการประทับเวลา Zabbix สามารถอ่านได้ง่าย

เป็นโบนัสสุดท้าย: วิธีตั้งโปรแกรม Arduino โดยตรงจาก OrangePI เพื่อให้คุณไม่ต้องเดินขึ้นไปที่อุปกรณ์ทุกครั้งและเสียบแล็ปท็อปของคุณ

มี 2 วิธี:

- วิธีง่ายๆ: ติดตั้ง Arduino IDE เต็มรูปแบบและไลบรารี่ใช้เดสก์ท็อประยะไกลเช่น X11 พร้อมการส่งต่อ, Xrdp, Xvnc, Nxserver เป็นต้น

- วิธีที่ยาก: ติดตั้ง Arduino IDE และใช้บรรทัดคำสั่ง

เราจะพยายามอย่างหนักในครั้งนี้เพราะฉันไม่ชอบติดตั้ง X11 บนเซิร์ฟเวอร์ สำหรับสิ่งนี้คุณจะต้องมี 6 องค์ประกอบ:

1, Arduino IDE สำหรับ ARM 32 บิต ->

2, Python serial -> apt-get ติดตั้ง python-serial

3 โครงการ Arduino Makefile -> git clone

4 ห้องสมุด DHT

5, คำจำกัดความของกระดาน Sparkfun

6, SilverLight.ino, รหัสหลัก

เพื่อให้ง่ายขึ้น ฉันได้รวมไฟล์ที่จำเป็นสำหรับ 4 คะแนนสุดท้าย (sketchbook.tgz) ดังนั้นคุณจะต้องใช้เพียง 2 ไฟล์แรกเท่านั้น

อันดับแรก เป็นการดีที่สุดที่จะสร้างผู้ใช้ทั่วไปที่สามารถเข้าถึงพอร์ต USB ได้:

adduser เงิน

usermod -a -G dialout สีเงิน

SCP Sketchbook.tgz ไปที่อุปกรณ์ในโฮมไดเร็กตอรี่ของผู้ใช้ที่สร้างขึ้นใหม่และแตกไฟล์ที่นั่น:

cd /home/silver

tar xvzf sketchbook.tgz

เพื่อทำความเข้าใจเล็กน้อยว่าเกิดอะไรขึ้นภายใต้ประทุนเมื่อคุณใช้ IDE แบบกราฟิก:

เวิร์กโฟลว์การสร้างของการสร้างร่าง Arduino เมื่อใช้ Arduino IDE มีการอธิบายไว้บนเว็บไซต์ Arduino https://www.arduino.cc/en/Hacking/BuildProcess และรายละเอียดเพิ่มเติมที่นี่: https://www.arduino.cc/ th/แฮ็ค/BuildProcess

โดยทั่วไป กระบวนการสร้าง Arduino มาตรฐานคือ:

รวมไฟล์.ino ไว้ในไฟล์สเก็ตช์หลัก การแปลงไฟล์ร่างหลัก: เพิ่มคำสั่ง #include; สร้างการประกาศฟังก์ชัน (ต้นแบบ) ของฟังก์ชันทั้งหมดในไฟล์ร่างหลัก ผนวกเนื้อหาของไฟล์ main.cxx ของเป้าหมายเข้ากับไฟล์สเก็ตช์หลัก รวบรวมรหัสไปยังไฟล์วัตถุ เชื่อมโยงไฟล์อ็อบเจ็กต์เพื่อสร้างไฟล์.hex ที่พร้อมสำหรับการอัปโหลดไปยัง Arduino

มีความแตกต่างเล็กน้อยระหว่างกระบวนการสร้างมาตรฐาน Arduino และกระบวนการสร้างโดยใช้ Arduino-Makefile:

รองรับไฟล์.ino เพียงไฟล์เดียว การประกาศฟังก์ชันจะไม่ถูกสร้างขึ้นโดยอัตโนมัติในไฟล์.ino ผู้ใช้ต้องดูแลการสร้างการประกาศฟังก์ชันที่ถูกต้อง

หัวใจของกระบวนการสร้างคือ Makefile ไม่ต้องกังวล ทุกอย่างเตรียมไว้สำหรับคุณแล้ว การคอมไพล์ด้วยวิธีนี้จะซับซ้อนกว่าเล็กน้อยสำหรับบอร์ดที่ไม่ได้มาตรฐาน เช่น ซีรี่ส์ SparkFun

BOARD_TAG = โปรไมโคร

ALTERNATE_CORE = SparkFun BOARD_SUB = 16MHzatmega32U4 ARDUINO_PORT = /dev/ttyACM0 USER_LIB_PATH = /home/silver/sketchbook/libraries ARDUINO_DIR = /opt/arduino-1.8.9 รวม /home/silver/sketchbook/Arduino-Makefile/Arduino.

และสิ่งที่คุณต้องพิมพ์คือ a: make upload (ซึ่งจะสร้างไฟล์.hex ก่อนจากนั้นจึงใช้ avrdude เพื่ออัปโหลด) มันจะจบลงด้วยบางสิ่งเช่น:

mkdir -p build-promicro-16MHzatmega32U4

ทำการรีเซ็ต make[1]: เข้าสู่ไดเร็กทอรี '/home/silver/sketchbook' /home/silver/sketchbook/Arduino-Makefile/bin/ard-reset-arduino --caterina /dev/ttyACM0 make[1]: ออกจากไดเรกทอรี ' /home/silver/sketchbook' make do_upload make[1]: เข้าสู่ไดเร็กทอรี '/home/silver/sketchbook' /opt/arduino-1.8.9/hardware/tools/avr/bin/avrdude -q -V -p atmega32u4 - C /opt/arduino-1.8.9/hardware/tools/avr/etc/avrdude.conf -D -c avr109 -b 57600 -P /dev/ttyACM0 / -U flash:w:build-promicro-16MHzatmega32U4/sketchbook. hex:i กำลังเชื่อมต่อกับโปรแกรมเมอร์:. พบโปรแกรมเมอร์: Id = "CATERIN"; type = S เวอร์ชันซอฟต์แวร์ = 1.0; ไม่ได้ระบุเวอร์ชันฮาร์ดแวร์ โปรแกรมเมอร์สนับสนุนการเพิ่มอัตโนมัติ โปรแกรมเมอร์รองรับการเข้าถึงหน่วยความจำบัฟเฟอร์ด้วยบัฟเฟอร์ขนาด = 128 ไบต์ โปรแกรมเมอร์รองรับอุปกรณ์ต่อไปนี้: รหัสอุปกรณ์: 0x44 avrdude: อุปกรณ์ AVR เริ่มต้นและพร้อมที่จะยอมรับคำแนะนำ avrdude: ลายเซ็นอุปกรณ์ = 0x1e9587 (อาจเป็น m32u4) avrdude: กำลังอ่านไฟล์อินพุต "build-promicro-16MHzatmega32U4/sketchbook.hex" avrdude: กำลังเขียนแฟลช (11580 ไบต์): avrdude: 11580 ไบต์ของแฟลชที่เขียน avrdude: safemode: ฟิวส์ OK (E:CB, H:D8, L:FF) เสร็จแล้ว ขอขอบคุณ.

ขอบคุณ avrdude และตอนนี้ Arduino ของเราได้รับการรีเซ็ตและตั้งโปรแกรมด้วยโค้ดใหม่ สิ่งที่คุณสามารถแก้ไขได้ด้วย vi หรือโปรแกรมแก้ไขที่คุณโปรดปรานในเครื่อง ไม่จำเป็นต้องใช้ IDE ใดๆ ฉันจะทราบว่าคุณควรปิดทั้งโปรแกรมควบคุม C หน้าจอหรืออย่างอื่นที่เข้าถึง Arduino ขณะอัปโหลด มิฉะนั้นพอร์ตจะกลับมาเป็น /dev/ttyACM1 หลังจากรีเซ็ต

ขั้นตอนที่ 3: ปิดและรายการสิ่งที่ต้องทำ

ปิดและรายการสิ่งที่ต้องทำ
ปิดและรายการสิ่งที่ต้องทำ
ปิดและรายการสิ่งที่ต้องทำ
ปิดและรายการสิ่งที่ต้องทำ
ปิดและรายการสิ่งที่ต้องทำ
ปิดและรายการสิ่งที่ต้องทำ

แม้ว่าฉันจะสร้างกล่องเซ็นเซอร์สภาพแวดล้อมนี้สำหรับห้องเซิร์ฟเวอร์ แต่คุณสามารถใช้มันสำหรับห้องปฏิบัติการเคมี/อิเล็กทรอนิกส์ โกดัง ห้องปกติ และอื่นๆ ได้ และใช่ เนื่องจากมันใช้ TCP/IP ซึ่งเป็นอุปกรณ์ IoT ดังนั้น G ฉันจึงควรใส่สิ่งนั้นลงในชื่อด้วยเพื่อให้มีความกล้าได้กล้าเสียมากขึ้น:)

คุณสามารถปรับเปลี่ยนทั้งฮาร์ดแวร์และซอฟต์แวร์ได้อย่างง่ายดายเพื่อให้สามารถเปิดไฟในห้องได้โดยอัตโนมัติ ลองดูโครงการอื่นของฉัน: Shadow of phoenix ทำงานอย่างไรสำหรับการควบคุมแสง คุณมีฮาร์ดแวร์ทั้งหมดอยู่ในมือเพื่อทำสิ่งเดียวกัน (ใช้ตัวจับเวลาพักเพื่อให้ไฟเปิดตราบเท่าที่มีการตรวจจับการเคลื่อนไหวภายใน a ช่วงเวลาหากมีการเคลื่อนไหวอีกครั้งตัวจับเวลาจะชนกัน)

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

แนะนำ: