สารบัญ:

PC Hardware Monitor: 6 ขั้นตอน (พร้อมรูปภาพ)
PC Hardware Monitor: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: PC Hardware Monitor: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: PC Hardware Monitor: 6 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: วิธีดูเฟรมเรทคอม เช็ค FPS อุณหภูมิซีพียู การ์ดจอ ผ่าน Afterburner และ HWmonitor 2024, กรกฎาคม
Anonim
จอภาพฮาร์ดแวร์พีซี
จอภาพฮาร์ดแวร์พีซี
จอภาพฮาร์ดแวร์พีซี
จอภาพฮาร์ดแวร์พีซี
จอภาพฮาร์ดแวร์พีซี
จอภาพฮาร์ดแวร์พีซี

สวัสดีทุกคน. ฉันเริ่มโปรเจ็กต์นี้ด้วยเหตุผลสองประการ: ฉันเพิ่งสร้างวงจรการระบายความร้อนด้วยน้ำในพีซีของฉัน และต้องการบางสิ่งเพื่อเติมเต็มช่องว่างในเคสด้วยสายตา และฉันต้องการให้อุณหภูมิและสถิติอื่นๆ ตรวจสอบได้ด้วยการดูอย่างรวดเร็วโดยไม่ต้องใช้ OSD shenanigans มุมของหน้าจอ แน่นอนว่ามีโซลูชั่นสำเร็จรูปสำหรับเรื่องนั้น แต่ส่วนใหญ่ก็ไม่เหมาะกับฮวงจุ้ยของฉัน ดังนั้น แทนที่จะวางจอแสดงผล HDMI 7 ไว้ในเคสของฉันโดยมีสายเคเบิลยื่นออกมาจากเคสและทาสก์บาร์ของ Windows เปิดอยู่เสมอ ฉันตัดสินใจสร้างของเล่นของตัวเอง

เนื่องจากฉันไม่ใช่วิศวกรหรือโปรแกรมเมอร์ แต่เป็นเพียงผู้ชายที่มีหัวแร้งและความรู้ที่เรียนรู้ด้วยตนเอง นี่จะไม่ใช่แค่คำแนะนำทีละขั้นตอน ฉันจะพยายามเน้นที่ปัญหาด้วย การแก้ปัญหาและการวิจัยที่นำฉันไปสู่งานสร้างนี้

การปฏิเสธความรับผิด: งานทั้งหมดของฉันได้รับการแบ่งปันเป็นแอตทริบิวต์ร่วมเชิงสร้างสรรค์ - แบ่งปันแบบ 4.0 ฉันได้รับแรงบันดาลใจจากตัวอย่างมากมายทั่วอินเทอร์เน็ต หากคุณรับรู้บางส่วนของงานนี้เป็นของคุณ โปรดติดต่อฉันเพื่อขอข้อมูล ไม่มีเจตนาละเมิดใดๆ ฉันยินดีที่จะแก้ไขข้อผิดพลาดใดๆ ขอบคุณ

ข้อจำกัดความรับผิดชอบที่สอง: งานของฉันได้รับการแบ่งปันตามที่เป็นอยู่ ฉันไม่รับผิดชอบต่อความเสียหายใด ๆ ที่เกิดจากการใช้รหัสหรือคำแนะนำของฉัน

เสบียง

  • Arduino Nano (หรือ UNO ถ้าคุณต้องการ)
  • จอแสดงผลแบบ TFT ในกรณีของฉันคือจอแสดงผล 3.5 นิ้วที่เข้ากันได้กับ ILI9486 / ILI9488L
  • เซ็นเซอร์อุณหภูมิ ในกรณี mu เซ็นเซอร์อุณหภูมิแบบอะนาล็อก TMP36
  • สายเคเบิล สายไฟ ขั้วต่อดูปองท์ (เพิ่มเติมในภายหลัง)
  • (ไม่บังคับ) Breadboard สำหรับการทดสอบ
  • (ไม่บังคับ แต่แนะนำ) กระดานโต้คลื่นขนาดเล็ก

ขั้นตอนที่ 1: การศึกษาความเป็นไปได้ (sorta Of)

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

  1. อย่าไปสนใจหน้า 3 หรือ 4 ของการค้นหาใด ๆ มันเกือบจะเสียเวลา แทนที่
  2. เปลี่ยนคำค้นหา เพียงแค่ใช้ถ้อยคำใหม่คำถามจากมุมมองอื่น (เช่น:"arduino temperature sensor" -> "read temperature with arduino")

จริงๆ แล้ว มันเต็มไปด้วยโครงการดีๆ ที่นั่น และฉันยอมรับว่าในช่วงวันแรกๆ ที่ฉันศึกษาโครงการเหล่านี้ส่วนใหญ่ แต่ไม่มีใครพร้อมที่จะไปหาฉัน เพราะฉันต้องการสิ่งที่เหมาะสมกับความต้องการของฉัน

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

ฉันต้องการบางอย่างที่อิงจาก Arduino เพราะฉันมีมันอยู่แล้ว มีเอกสารบันทึกไว้อย่างดี และชุมชนก็เฟื่องฟู ไม่มีปัญหาที่นี่อย่างที่ฉันได้กล่าวไว้ก่อนหน้านี้ว่ามีข้อมูลมากมาย

ฉันต้องการจอแสดงผลที่ใหญ่พอที่จะมองเห็นได้ชัดเจนจากระยะสองสามเมตร และนั่นก็พอดีกับรูปลักษณ์ของงานสร้างของฉัน ซึ่งไม่รวมจอแสดงผลที่เป็นตัวอักษรของ Nokia และ LCD OLED ก็ไม่มีปัญหาเช่นกันเนื่องจากมีขนาดเล็ก ดังนั้นฉันจึงเลือกใช้จอสีแบบ TFT ไม่ต้องใช้หน้าจอสัมผัสเพราะจะอยู่ภายในพีซี ฉันพบอัน 3.5 ที่ออกแบบมาสำหรับ Arduino แล้ว ในราคาประมาณ 15 ยูโรใน Amazon ดีพอแล้ว

หลังจากระบุฮาร์ดแวร์แล้ว ฉันก็มุ่งไปที่ซอฟต์แวร์

โครงการเกือบทั้งหมด ฝั่ง Arduino ค่อนข้างคล้ายกัน ฉันแค่ต้องปรับโค้ดสำหรับการแสดงผลและสำหรับโปรโตคอลการสื่อสารเพื่อรวบรวมข้อมูลจากแอปเซิร์ฟเวอร์ ฝั่งคอมพิวเตอร์ โปรเจ็กต์ส่วนใหญ่ใช้ C, C++, C#, python และโปรเจ็กต์ส่วนใหญ่เสนอเพียงอินเทอร์เฟซ CLI หรือเซิร์ฟเวอร์ที่เหมือนบริการของ Windows ฉันต้องการ GUI แทน ฉันไม่เคยใช้ภาษา C-like ใน Windows เลย ปล่อยให้เป็นการสร้าง GUI เพียงอย่างเดียว แต่ฉันได้เรียนรู้เกี่ยวกับ Visual Basic เมื่อ 15 ปีที่แล้ว ดังนั้นฉันจึงลองใช้งานและดาวน์โหลด Visual Studio เวอร์ชันฟรีจาก Microsoft

หลังจากศึกษาโครงการที่คล้ายคลึงกันมากมาย ฉันตัดสินใจใช้ OpenHardwareMonitor เพื่อรับข้อมูลฮาร์ดแวร์ทั้งหมดและ RivaTuner สำหรับ FPS เพราะสิ่งเหล่านี้ฟรีและมีเอกสารเพียงพอ

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

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

ก่อนที่จะเปิดหัวแร้งและซ่อมแซมส่วนประกอบอิเล็กทรอนิกส์ใดๆ ในเวลาและพื้นที่ตลอดไป แนวทางปฏิบัติที่ดีในการสร้างต้นแบบการทดสอบ (เคล็ดลับข้อที่สอง) โชคดีที่ไม่ใช่ปี 1995 อีกต่อไป ทุกวันนี้การจัดเรียงต้นแบบที่ค่อนข้างซับซ้อนค่อนข้างง่ายแม้บนเขียงหั่นขนมขนาดเล็ก ในกรณีของฉัน จอแสดงผล TFT มีพินเอาต์สำหรับ Arduino Uno ลดลง ดังนั้นฉันจึงวางมันลงบน Arduino uno และเริ่มเล่นกับไลบรารีตัวอย่างและอ่านคู่มืออ้างอิงเพื่อทำความเข้าใจหลักการทำงานและข้อจำกัด

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

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

มีตัวอย่างมากมายสำหรับ TMP36 ฉันเพิ่งคัดลอกหนึ่งในฟังก์ชันเหล่านี้ TMP35 มี 3 พิน Vin ไปที่ 5V GND ไปที่กราวด์และออกไปที่พิน A5 ฉันวางตัวเก็บประจุเซรามิก 0.1uF ระหว่าง Vin และ GND พวกเขาบอกว่ามันจำเป็น อาจจะไม่มีประโยชน์ในกรณีนี้ แต่… ฉันยังตั้งค่าแรงดันอ้างอิงอนาล็อก Arduino เป็นพิน 3.3v เพื่อการอ่านอุณหภูมิที่ดีขึ้น ยังคงไร้ประโยชน์ในกรณีนี้ แต่…

ขั้นตอนที่ 3: รหัส Arduino

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

คุณจะต้องใช้ MCUFRIEND_kbv และไลบรารี Adafruit GFX อย่างแน่นอน สามารถติดตั้งได้ง่ายจาก Arduino IDE

โปรแกรมสามารถแบ่งออกเป็นส่วนต่างๆดังนี้:

  1. กำหนดและประกาศตัวแปรส่วนกลางทั้งหมดและสิ่งที่จำเป็นอื่น ๆ
  2. เริ่มต้นการแสดงผล ตั้งค่าการอ้างอิงภายนอก และวาด UI (ทั้งหมดนี้อยู่ในฟังก์ชัน setup() เนื่องจากต้องทำงานเพียงครั้งเดียว)
  3. อ่านข้อมูลจากการเชื่อมต่อแบบอนุกรมและจัดสรรในฟังก์ชันอาร์เรย์ (loop())
  4. อ่านข้อมูลเซ็นเซอร์อุณหภูมิภายนอก (ฟังก์ชัน readExtTemp ())
  5. พิมพ์ข้อมูลบนจอแสดงผล (ฟังก์ชัน printData())
  6. กลับมาที่วง

ส่วนที่ 1: คำประกาศและคำจำกัดความ

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

ส่วนที่ 2: การตั้งค่า () ส่วนใหญ่เป็นการวาด UI

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

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

ดังที่คุณเห็นในโค้ด ฉันตัดสินใจหลีกเลี่ยงการใช้รูปภาพในการ์ด SD เนื่องจากโหลดช้ามาก ฉันตัดสินใจที่จะรวมไอคอนทั้งหมดในหน่วยความจำ PROGMEM และวาดเส้นด้วยคำสั่ง drawLine() เฉพาะ สิ่งนี้ยังมีประโยชน์สำหรับการแก้ไข UI เล็กน้อย

ในความพยายามที่อ่อนแอเพื่อให้ UI มีความลึก ฉันวาดทุกอย่างสองอย่าง (เส้น สี่เหลี่ยมผืนผ้า รูปภาพ) ด้วยสีที่ต่างกันและออฟเซ็ตเล็กน้อย น่าเศร้าที่มันไม่ใช่ผลลัพธ์ที่ฉันหวังไว้ แต่มันจะได้ผล

บรรทัดสุดท้ายของฟังก์ชันนี้ใช้สำหรับพิมพ์ตัวยึดตำแหน่งบน TFT จนกว่า Arduino จะได้รับข้อมูล

ส่วน 3: ลูปหลัก () การดึงข้อมูลและการจัดรูปแบบ

ความมหัศจรรย์เกิดขึ้นที่นี่: ข้อมูลได้รับผ่านซีเรียล กำหนดให้กับตัวแปรที่ถูกต้องแล้วพิมพ์ออกมา เพื่อให้บรรลุทั้งหมดนี้ในจำนวนบรรทัดที่น้อยที่สุด ฉันใช้คำสั่ง switch case และ a for cycle

โปรโตคอลการสื่อสารที่ฉันมานั้นแบ่งออกเป็นสองส่วน: การดำเนินการครั้งแรกเมื่อจับมือกันและส่วนข้อมูลจริง

จำเป็นต้องมีการจับมือกันเพื่อใช้คุณสมบัติการเชื่อมต่ออัตโนมัติเมื่อโปรแกรมพีซีเริ่มทำงาน มันไปเช่นนี้:

  • PC ส่งสตริงการจับมือ (ในกรณีนี้เป็นเพียง "*****;")
  • Arduino ส่งการตอบสนองกลับมา

ง่ายๆ.

ส่วนข้อมูลมีลักษณะดังนี้: "i:xxx, yyy, zzz, aaa,;" ความหมายคือ:

"i" คือดัชนี ฉันเรียกมันว่า componentSelector ในโค้ด ค่า "i" คือ:

  • ผม=0 - ชื่อ. ค่าต่อไปนี้คือชื่อที่แสดงในแถวแรกบนจอแสดงผล สิ่งนี้จะถูกส่งและพิมพ์บนจอแสดงผลเพียงครั้งเดียว ณ วันนี้ค่อนข้างยากที่จะสลับ CPU และ GPU…
  • i=1 - 1st COLUMN DATA - ค่าต่อไปนี้จะแสดงในครึ่งซ้ายของหน้าจอจากบนลงล่าง ในกรณีของฉัน: อุณหภูมิ CPU, โหลด CPU, การใช้ RAM, อุณหภูมิของเมนบอร์ด
  • i=2 - 2nd COLUMN DATA - ดังข้างบน แต่สำหรับครึ่งขวาของหน้าจอ
  • i=3 - พิมพ์คำสั่ง ในกรณีนี้ สตริงซีเรียลดิบจะเป็นเพียง "3:;" เนื่องจากไม่ต้องการข้อมูลอื่น

"xxx, yyy, zzz, aaa" เป็นค่าจริง สิ่งเหล่านี้อ่านเป็นสตริงโดย Arduino และการจัดรูปแบบทั้งหมดนั้นทำโดยโปรแกรมพีซี สำหรับ i=0 ค่าเหล่านี้คือ 14 อักขระแต่ละตัวสำหรับชื่อฮาร์ดแวร์ สำหรับ i=1 หรือ 2 อักขระแต่ละตัวจะมีอักขระเพียง 3 ตัว ซึ่งเพียงพอสำหรับแสดงอุณหภูมิและเฟรมต่อวินาที แน่นอน ":", ", " และ ";" อักขระต้องห้ามในช่องเหล่านี้

":" เป็นตัวคั่นระหว่าง componentSelector และค่า "," คือตัวคั่นค่าและ ";" เป็นจุดสิ้นสุดของบรรทัด

เมื่อได้รับข้อมูล Arduino จะบันทึกเป็นสตริงจนกระทั่ง ";" ได้รับสัญลักษณ์ จากนั้นจะมองหาสัญลักษณ์ ":" และจะใช้เพื่อรับค่า componentSelecor ซึ่งจะใช้สำหรับฟังก์ชันเคสสวิตช์เพื่อเลือกขั้นตอนที่ถูกต้องที่จะปฏิบัติตาม นอกจากนี้ยังใช้เพื่อเลือกดัชนีที่ถูกต้องในอาร์เรย์ allData

หลังจากนี้ Arduino จะมองหาสัญลักษณ์ ", " และจะดำเนินการใส่ค่าในอาร์เรย์ allData

ถ้า componentSelector เป็น 0 แฟล็ก printName จะถูกตั้งค่าเป็น true ถ้า componentSelector เป็น 3 ฟังก์ชัน readExtTemp() และ printData() จะถูกเรียก

ส่วนที่ 4: ฟังก์ชัน readExtTemp()

ไม่มีอะไรจะพูดมากในที่นี้ มันอ่าน 32 ครั้งจากพิน A5 และส่งออกค่าอุณหภูมิเป็นสตริง ฉันอยู่กับพวกกบฏ ฉันเลยใช้เซลเซียส สิ่งใดก็ตามที่มากกว่า 100°C ไม่ถูกต้อง ดังนั้นมันจะแสดงเป็น "---" บนจอแสดงผล สำหรับสิ่งที่น้อยกว่า 100°C จะถูกจัดรูปแบบให้มีช่องว่างเพียงพอเพื่อให้ครอบคลุมพื้นที่ 3 ตัวอักษรบนจอแสดงผล สามารถถอดและใส่เซนเซอร์กลับเข้าไปใหม่ได้ และจะไม่มีการแสดงค่าแปลก ๆ

ส่วนที่ 5: ฟังก์ชัน printData()

เช่นเคย ฉันใช้วงจรเพื่อพิมพ์สิ่งต่างๆ บนจอแสดงผลตามลำดับ หากแฟล็ก printNames เป็นจริง จะพิมพ์ชื่อ ตั้งค่าแฟล็กเป็น false และดำเนินการต่อ

ตอนที่ 6: กลับไปที่ลูป

ตัวเองอธิบายพอฉันจะบอกว่า …

ไฟล์ pics.h

ที่นี่ฉันเก็บไอคอนทั้งหมดสำหรับ UI เป็นไปได้ที่จะใช้เครื่องอ่านการ์ด SD ที่รวมอยู่ในจอแสดงผล แต่ฉันมีหน่วยความจำเหลือเพียงพอใน Arduino สำหรับไอคอนขาวดำของฉัน

ฉันออกแบบมันด้วย Junior Icon Editor เพราะมันฟรีและค่อนข้างดีสำหรับการวาดภาพพิกเซลไอคอนขนาดเล็ก ฉันต้องแปลงไฟล์ไอคอน (บันทึกเป็น PNG) ด้วยเครื่องมือออนไลน์ของ SKAARHOJ

ขั้นตอนที่ 4: รหัส Visual Basic

รหัส Visual Basic
รหัส Visual Basic

นี่คือรหัส VB

ประกาศ: นี่เป็นครั้งแรกที่ฉันแชร์โปรเจ็กต์ Visual Studio ฉันเพิ่งคัดลอกโฟลเดอร์โครงการและซิปไว้ หากไม่ได้ผล โปรดแจ้งให้เราทราบถึงวิธีที่ดีกว่าในการแชร์โครงการประเภทนี้ ขอขอบคุณ

อย่างที่ฉันพูดไปก่อนหน้านี้ ฉันไม่สามารถสร้าง GUI ใน C# หรือภาษาอื่น ๆ ได้ แต่ฉันมีประสบการณ์บางอย่างใน Visual Basic เมื่อนานมาแล้ว ฉันดาวน์โหลด Visual Studio Community edition (ฟรีแน่นอน) ด้วยสภาพแวดล้อม Visual Basic ฉันต้องคิดหลายๆ อย่าง เพราะครั้งสุดท้ายที่ฉันใช้ VB เป็นเวอร์ชันปี 2005 หรือแบบนั้น… แต่อินเทอร์เน็ตก็เต็มไปด้วยคำแนะนำดีๆ ตามปกติ

หลังจากค้นหาส่วนต่อประสานบางอย่างแล้วเวอร์ชันที่ใหม่กว่านั้นง่ายกว่าและยืดหยุ่นกว่ารุ่นเก่า

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

โปรแกรม "สุดท้าย" เป็นเพียงไอคอนถาดที่มีเมนูป๊อปอัปที่แสดงการควบคุมต่างๆ และรูปแบบหลักที่มีกล่องรายการสองกล่องที่แสดงข้อมูลที่ส่งไปยัง Arduino

ฉันใช้ฟังก์ชันเชื่อมต่ออัตโนมัติและฟังก์ชัน "เริ่มต้นเมื่อบูต" เพิ่มเติมในภายหลัง

โปรแกรมหลักเป็นเพียงการดัดแปลงตัวอย่างและตัวอย่างโค้ดต่างๆ โดยใช้ไลบรารี OpenHardwareMonitor และไลบรารี RivaTuner Shared Memory

โปรแกรมไปเช่นนี้:

  • รับข้อมูลจากไลบรารี OpenHardwareMonitor และ RTSSSm
  • จัดเตรียมและจัดรูปแบบข้อมูลทั้งหมดสำหรับโปรโตคอลการสื่อสาร
  • ส่งข้อมูลไปยัง Arduino
  • ล้างแล้วทำซ้ำ

แน่นอนว่าชื่อฮาร์ดแวร์จะอ่านเมื่อเริ่มต้นและส่งเพียงครั้งเดียว

ตัวนับ FPS จะเปิดใช้งานก็ต่อเมื่อใช้แอปที่เข้ากันได้ (เช่น เกม โปรแกรมสร้างแบบจำลอง 3 มิติ และอื่นๆ) มิฉะนั้น ตัวยึดตำแหน่ง "---" จะถูกส่งไปยังจอแสดงผล

ฉันจะไม่อธิบายอย่างละเอียดถึงวิธีการรับค่าจากไลบรารี่ เพราะมันได้รับการจัดทำเป็นเอกสารไว้อย่างดีบนอินเทอร์เน็ตและค่อนข้างเข้าใจได้จากโค้ด แค่อยากจะบอกปัญหาในการทำให้อุณหภูมิของเมนบอร์ดแสดงผ่านไลบรารี OpenHardwareMonitor (จากนี้ไปบน OHMonitor เพราะอายุการใช้งานสั้นเกินไป) ฉันมี Asus Maximus VIII Gene MoBo ซึ่งติดตั้งเซ็นเซอร์อุณหภูมิ fu**ton บนเมนบอร์ด แต่ OHMonitor ตั้งชื่อพวกมันเป็นเซ็นเซอร์อุณหภูมิ #1, #2 … #n และไม่ได้ระบุตำแหน่งอุณหภูมิไว้ ดังนั้นฉันจึงต้องติดตั้งซอฟต์แวร์ Asus AI suite ที่น่ากลัว โดยที่เซ็นเซอร์มี NAMES เป็นอย่างน้อย และเปรียบเทียบอุณหภูมิต่างๆ ระหว่างสองโปรแกรม ดูเหมือนว่าเซ็นเซอร์อุณหภูมิทั่วไปบนเมนบอร์ดของฉันคือ #2 สำหรับ OHMonitor ดังนั้นอย่างที่คุณเห็นใน Timer1_tick ย่อยภายใต้สิ่งที่ MoBo ฉันต้องค้นหาชื่อเซ็นเซอร์ที่มีสตริง "#2" เพื่อให้อ่านค่าได้ถูกต้อง

TL;DR: คุณจะต้องดูแลเซ็นเซอร์อุณหภูมิเมนบอร์ดที่ถูกต้องสำหรับตัวคุณเอง ที่เหลือน่าจะไปได้ดี

อย่างไรก็ตาม นี่เป็นเพียงเวอร์ชัน 1 เท่านั้น ฉันวางแผนที่จะติดตั้งแกดเจ็ตนี้ในพีซีเครื่องอื่นของฉัน ดังนั้นฉันอาจจะใช้วิธีในการเลือกเซ็นเซอร์และอาจออกแบบอินเทอร์เฟซบน Arduino ใหม่ในขณะเดินทาง

ฟังก์ชันเชื่อมต่ออัตโนมัติ

ฟังก์ชันนี้เรียบง่ายจริง ๆ หากพีซีไม่ได้เชื่อมต่อกับ Arduino ฟังก์ชันนี้จะถูกเรียกทุก ๆ x มิลลิวินาที (ขึ้นอยู่กับตัวจับเวลา) จะพยายามเชื่อมต่อกับพอร์ต COM ทุกพอร์ตบนพีซี หากสำเร็จ ระบบจะส่งสตริงการจับมือ "*****;" หากคำตอบคือ "R" แสดงว่าเชื่อมต่ออุปกรณ์ที่ถูกต้องและปฏิบัติตามขั้นตอนปกติ มิฉะนั้น จะลองใช้พอร์ต COM ถัดไป

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

ฟังก์ชัน Start At Boot

ฉันต้องการให้โปรแกรมเริ่มทำงานตอนบูต ค่อนข้างง่ายคุณพูด ใส่ลิงค์ในโฟลเดอร์ที่เหมาะสมคุณพูด แต่ไม่มี. เนื่องจากไลบรารี OHMonitor และ RTSS เราจำเป็นต้องมีระดับการดำเนินการของผู้ดูแลระบบเพื่อรวบรวมข้อมูล ซึ่งหมายความว่าหน้าจอ UAC ที่น่ารำคาญที่สุดทุกครั้งที่เปิดแอปนี้ ไม่มีทาง. ดังนั้นฉันจึงปรับสคริปต์ที่สร้างโดย Matthew Wai (ลิงก์ที่นี่) เพื่อให้เริ่มต้นแบบเงียบเมื่อบูต ฉันเพิ่งคัดลอกสคริปต์ในไฟล์ Resources1 แยกออกเป็นหลายส่วน จากนั้นจึงใช้งานรูทีนย่อยที่สร้าง (หรือลบ) ไฟล์งาน windows ปรับแต่งด้วยตำแหน่งปฏิบัติการของโปรแกรมปัจจุบันและสิ่งต่างๆ เหล่านี้

ไอคอนถาดระบบ

ขอบคุณออบเจ็กต์ NotifyIcon และ ContextMenu ทำให้ฉันสามารถใช้วิธีที่ง่ายและอ้วนในการควบคุมแอปได้ เพียงคลิกขวาที่ไอคอนถาดและเมนูจะปรากฏขึ้น มี oprions เหล่านี้:

  • เริ่มต้นเมื่อบูต: คุณสามารถตรวจสอบและยกเลิกการเลือกเพื่อเปิดใช้งานหรือปิดใช้งานฟังก์ชันเริ่มต้นเมื่อบูตได้
  • เชื่อมต่ออัตโนมัติ: เหมือนกับด้านบน แต่จัดการฟังก์ชันการเชื่อมต่ออัตโนมัติ
  • เชื่อมต่อ/ยกเลิกการเชื่อมต่อ: จัดการการเชื่อมต่อ ไม่ทำงานกับการเชื่อมต่ออัตโนมัติที่เปิดใช้งาน
  • เวลารีเฟรช: ให้เมนูย่อยแบบเลื่อนลงคุณสามารถเลือกเวลารีเฟรชได้ตั้งแต่ 1 ถึงสิบวินาที
  • ขยายใหญ่สุด: เปิดหน้าต่างหลัก เหมือนกับการดับเบิลคลิกที่ไอคอน
  • ทางออก: อธิบายตัวเอง

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

ในการคอมไพล์ซอฟต์แวร์ คุณอาจต้องดาวน์โหลดและเพิ่มการอ้างอิงไปยังไลบรารี่ที่ไม่ได้รวมอยู่ในโค้ด

คุณสามารถค้นหาไลบรารี OpenHardwareMonitor ได้ที่นี่ คุณต้องดาวน์โหลดซอฟต์แวร์ เปิดไฟล์ zip และคัดลอกไฟล์ OpenHardwareMonitorLib. DLL ในโฟลเดอร์โครงการ

นี่คือลิงค์สำหรับไลบรารี RTSSharedMemoryNET คุณต้องดาวน์โหลดและคอมไพล์สำหรับสถาปัตยกรรมของคุณ จากนั้นคัดลอก RTSS[TL;DR]moryNET. DLL ในโฟลเดอร์โครงการของคุณ

ตอนนี้คุณต้องเพิ่มข้อมูลอ้างอิงในรหัสของคุณ คำแนะนำที่นี่

เพียงให้แน่ใจว่าได้รวบรวมทั้งโครงการเซิร์ฟเวอร์ RTSS[TL;DR]moryNET และ PCHwMon สำหรับสถาปัตยกรรมเดียวกัน

ฉันได้รวมโปรแกรมติดตั้งสำเร็จรูปไว้ด้วย เพื่อให้คุณสามารถติดตั้งได้ทั้งหมดโดยไม่ต้องใช้ Visual Basic มันถูกคอมไพล์สำหรับ x86 จะทำงานได้ทั้งบนสถาปัตยกรรม x86 และ x64 มันต้องการให้. NET framework 4.7.2 ทำงาน

ไม่ว่าในกรณีใด คุณจะต้องติดตั้ง RivaTuner คุณสามารถค้นหาได้ที่นี่เป็นแอปแบบสแตนด์อโลน หรือคุณสามารถติดตั้ง Msi Afterburner ซึ่งควรมี RTServer

ขั้นตอนที่ 5: การติดตั้งฮาร์ดแวร์ขั้นสุดท้าย

แนะนำ: