Skocz do zawartości

KubekSzklany

Użytkownicy
  • Zawartość

    3
  • Rejestracja

  • Ostatnio

Reputacja

9 Neutralna

O KubekSzklany

  • Ranga
    1/10

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Zależy co kto lubi. Ja w swoim życiu pisałem w c++, c#, javie, i kilku innych (główne webowych) i najlepiej mi się pracuje w c#, moim zdaniem jest to prostszy język niż np. c++, więcej rzeczy już jest, np w c++ musisz dodać #include <string> a w c# już to jest, w c# możesz też bez problemu np. dodawać stringi ze sobą. W tym przypadku akurat użyłem też pakietu nuget, aby pobrać bibliotekę OpenHardwareMonitor. A jeżeli chodzi o komunikację to albo serial tak jak w tym wypadku, albo jeżeli bezprzewodowo to używam pakietów udp, też wystarczy zaledwie kilka linijek kodu aby taki pakiet wysłać / odebrać. Nie jestem ci w stanie odpowiedzieć na pytanie czy blisko mu do c++, bo w c nie robiłem nigdy aplikacji, która by gdzieś dane wysyłała.
  2. Witam. Chciałbym przedstawić mój projekt, mianowicie monitor zasobów (coś jak zakładka wydajność w menadżerze zadań) wyświetlany na wyświetlaczu Arduino. Potrzebne Rzeczy: Jest to bardzo prosty projekt do którego budowy potrzebujemy zaledwie 2 rzeczy: Arduino Uno (można też użyć np. Arduino Uno WiFi aby połączyć się przez wifi lub Arduino Mega gdyby brakowało nam pinów) Wyświetlacz dotykowy. Ja użyłem nakładki tzw. shielda na arduino, jednak jeżeli chcemy ograniczyć liczbę używanych pinów można użyć dowolnego wyświetlacza, przykładowo takiego, ja użyłem ekranu o rozdzielczości 240x320 pikseli. No i wiadomo kabel do połączenia z komputerem. Tak wygląda mój zestaw: Cel Działania: Celem tego wyświetlacza jest pokazywanie aktualnego obciążenia systemu, bez ciągłego patrzenia na menadżer zadań i konieczności jego ciągłego działania. Możemy np. podczas gry w jakąś wymagająca grę patrzeć, czy czasem nie palimy karty graficznej Tutaj screen podczas gry w gta v, jak widać moja karta graficzna chodzi na pełnych obrotach: Działanie: Program uruchamiany na komputerze wysyła dane do arduino, które następnie wyświetla odpowiednią ilość kwadratów. Tak to mniej więcej działa: Tutaj widać porównanie menadżera zadań windows i arduino - jest lekkie opóźnienie ok. 1s, prawdopodobnie wynikające z tego, że program wysyła dane w innym czasie niż menedżer zadań, jednak myślę że ta jedna sekunda nic nie zmienia. A z kolei tutaj widać odpowiednio - zużycie procesora podczas kopania btc, dane, które przechodzą przez sieć i zużycie dysku podczas przenoszenia dużych plików. Program: Jeżeli chodzi o program na arduino to wszystko zależy od tego jak ktoś zaplanuje wygląd i zależy też dużo od sterownika wyświetlacza. Przyjmowanie danych to odczytywanie kolejnych wartości serial'u, zaczynając od procesora, a kończąc na internecie. Natomiast żeby arduino znało zużycie poszczególnych podzespołów należy uruchomić program na komputerze. W tym celu trzeba stworzyć aplikację działającą w tle (ja wybrałem aplikację konsolową c#) i utworzyć skrót do aplikacji w menu start. Tym sposobem program uruchomi się nam przy starcie systemu. A co zawiera program? Na początku otwarcie serial'u: SerialPort Serial = new SerialPort("COM6", 9600); Serial.Open(); COM6 oznacza numer portu (ten sam co w programie arduino), 9600 to bitrate. Aby wysłać dane do arduino wystarczy: while(true) { // Wysyłanie zużycia procesora w skali 1-10: PerformanceCounter ProcessorUsage = new PerformanceCounter("Processor", "% Processor Time", "_Total"); Serial.Write(Math.Floor(ProcessorUsage.NextValue() * 0.1)); // Wysyłanie zuzycia karty graficznej w skali 1-10: Computer = new Computer() { GPUEnabled = true }; Computer.Open(); foreach (var HardwareItem in Computer.Hardware) { if (HardwareItem.HardwareType == HardwareType.GpuNvidia) { HardwareItem.Update(); foreach (var SubHardware in HardwareItem.SubHardware) { SubHardware.Update(); } double Numbers = 0; int Number = 0; foreach (var Sensor in HardwareItem.Sensors) { if (Sensor.SensorType == SensorType.Load) { Numbers = Numbers + Sensor.Value.Value; Number++; } } Serial.Write(Math.Floor((Numbers / Number) * 0.1)); } } // Wysyłanie użycia sieci w Mb/s: NetworkInterface[] NetInterfaces = NetworkInterface.GetAllNetworkInterfaces(); long BytesDown = NetInterfaces[0].GetIPv4Statistics().BytesReceived; long BytesSend = NetInterfaces[0].GetIPv4Statistics().BytesSent; } Jak widać zużycie procesora (a także pamięci czy dysku) możemy pobrać za pomocą performance counter. Dla innych podzespołów wystarczy zmienić nazwy w cudzysłowach. Karta graficzna jest trochę bardziej skomplikowana i trzeba obliczyć średnią dla różnych elementów, tzn. zużycie procesora graficznego, zużycie pamięci graficznej itd. Uwaga: Tutaj potrzebna będzie zewnętrzna biblioteka, tzn. OpenHardwareMonitor. Można ją pobrać np. menadżerem pakietów NuGet. A ostatnie 3 linie to wysłane i odebrane bajty. Jednak trzeba wziąć pod uwagę że jest to naliczane od startu komputera, więc trzeba sobie co sekundę sprawdzić o ile zwiększyła się ta liczba. Na Zakończenie: Tutaj taki krótki film z działania wyświetlacza.
×
×
  • Utwórz nowe...