INFORMACJA: Poniższy post nie wydostał się z Poczekalni :(
Witam, dzisiaj przedstawiam Wam mój pierwszy artykuł na majsterkowo.pl, a jest on poświęcony monitorowi zużycia zasobów komputera. Widżety takie jak np. conky nie są przydatne, gdy mamy otwartych wiele okien. Dlatego postanowiłem zbudować na bazie arduino, urządzenie o nazwie PCMonitor.
Co będzie potrzebne?
- Arduino (każdy model z USB. np.: Leonardo, Uno. Ja posiadam Arduino Leonardo z starter kitu ElektroPrzewodnik) http://botland.com.pl/zestawy-startowe-dla-arduino/1846-arduino-starterkit-electroprzewodnik-z-modulem-arduino-leonardo.html
- Wyświetlacz 16×2(wyświetla ogólne zużycie procesora i wolną pamięć ram) http://botland.com.pl/wyswietlacze-alfanumeryczne/223-wyswietlacz-lcd-2×16-znakow.html bądź 20×4(wyświetla datę, zużycie każdego rdzenia procesora, zużycie pamięci ram oraz ilość uruchomionych procesów) http://botland.com.pl/wyswietlacze-alfanumeryczne/1136-wyswietlacz-lcd-4×20-znakow-zielony.html
- (Opcjonalnie) Konwerter na I2C – pozwala podłączyć wyświetlacz na 4 kablach. Ja taki posiadam, ale program wspiera także wyświetlacze bez konwertera. http://botland.com.pl/konwertery-pozostale/2352-konwerter-i2c-dla-wyswietlacza-lcd-hd44780.html
Instalacja oprogramowania na Arduino i podłączenie wyświetlacza
Najpierw podłączamy wyświetlacz do Arduino. Jeśli posiadamy wyświetlacz bez konwertera, podłączamy go według tego schematu:
W moim przypadku posiadam konwerter I2C, więc podłączam cztery kabelki:
VCC do +5V
GND do GND
SDA do SDA
SCL do SCL
Gdzie w Arduino UNO są porty SDA i SCL?
Porty SDA i SCL są zmostkowane z pinami A4 i A5. Podłączając tam wyświetlacz bądź inne urządzenie działające na magistrali I2C, tracimy możliwość użycia tych pinów do innych celów niż owa magistrala.
A4 – SDA
A5 – SCL
Jak znaleźć adres I2C?
Jeżeli posiadasz wyświetlacz z konwerterem, potrzebujesz znaleźć adres I2C.
Aby to zrobić, wgrywamy na nasze Arduino program i2c_scanner przy podłączonym wyświetlaczu.
// -------------------------------------- // i2c_scanner // // Version 1 // This program (or code that looks like it) // can be found in many places. // For example on the Arduino.cc forum. // The original author is not know. // Version 2, Juni 2012, Using Arduino 1.0.1 // Adapted to be as simple as possible by Arduino.cc user Krodal // Version 3, Feb 26 2013 // V3 by louarnold // Version 4, March 3, 2013, Using Arduino 1.0.3 // by Arduino.cc user Krodal. // Changes by louarnold removed. // Scanning addresses changed from 0...127 to 1...119, // according to the i2c scanner by Nick Gammon // http://www.gammon.com.au/forum/?id=10896 // Version 5, March 28, 2013 // As version 4, but address scans now to 127. // A sensor seems to use address 120. // // // This sketch tests the standard 7-bit addresses // Devices with higher bit address might not be seen properly. // #include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); Serial.println("\nI2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { // The i2c_scanner uses the return value of // the Write.endTransmisstion to see if // a device did acknowledge to the address. Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); // wait 5 seconds for next scan }
Program i2c_scanner nie jest mojego autorstwa! Pochodzi z www.arduino.cc
Po wgraniu programu otwieramy Serial Monitor i czekamy. Po chwili powinien pojawić się taki tekst:
I2C device found at address [adres]
Zapisujemy adres i przechodzimy do następnego kroku.
Pobieranie kodu do Arduino
Pobieramy paczkę zip z mojego github’a i wypakowujemy. https://github.com/fellfreelinux/pcmonitor
UWAGA! Jeśli używasz konwertera I2C, musisz wgrać bibliotekę NewLiquidCrystal. Biblioteka zastępuje orginalną bibliotekę LiquidCrystal i dodaje nowe funkcje. Bibliotekę pobieramy stąd i wypakowyjemy do folderu /librares/ znajdującego się w katalogu z Arduino IDE.
Następnie przechodzimy do wypakowanego folderu. Są tam dwa foldery. Pierwszy – Arduino i drugi – Server. Wchodzimy do Arduino i wgrywamy odpowiedni program na naszą płytkę.
pcmonitor164I2C.ino – Program do wyświetlaczy 16×2 pod magistralę i2C. Wymaga NewLiquidCrystal!
pcmonitor204I2C.ino – Program do wyświetlaczy 20×4 pod magistralę i2C. Wymaga NewLiquidCrystal!
pcmonitor164normal.ino – Program do wyświetlaczy 16×2.
pcmonitor204normal.ino – Program do wyświetlaczy 20×4.
W programach pod magistralę I2C trzeba zmienić adres! Zamień adres przy komentarzu na swój zdobyty przez i2c_scanner.
Jeśli wszystko poszło dobrze, to zabieramy za wgrywanie programu na komputer.
Instalacja PCMonitor Server
Napisałem prosty program na komputer (w python3, pyserial, psutil oraz GTK3) wysyłający dane do Arduino.
Instalacja na Windows.
Na początku pobieramy:
I instalujemy:
Python
Uruchamiamy instalator do momentu, kiedy ukaże się okno “Customize Python 3.4.3”. Wtedy zjeżdzamy na sam dół i klikamy na czerwony X przy “Add python.exe to Path”. Zmieniamy to na “Will be installed on local hard drive” i kontynuujemy instalację.
PsUtil
Tutaj nie ma żadnej filozofii. Postępujemy według instrukcji instalatora.
PySerial
Postępujemy jak z PsUtil.
PyGObject
Tutaj należy uważać, ponieważ potrzebujemy tylko paczkę GTK z PyGObject.
Uruchamiamy instalator. Przy pytaniu “Do you have portable python installation [—]” klikamy “Add Patch” i podajemy ścieżkę do python’a(u mnie C:\Python32\).
Przy następnym oknie (“Choose available GNOME/Freedesktop libraries”) znajdujemy i zaznaczamy “GTK+ 3.14.9” oraz kilkamy na Next.
W reszcie okien zostawiamy domyślne ustawienia i klikamy na Next.
Instalacja Programu PCMonitor Server
Wracamy do wypakowanego archiwum. Wchodzimy do folderu Server i naszym oczom ukażą się dwa pliki:
pcmonitor164GUI – Wersja dla wyświetlacza 16×2
pcmonitor204GUI – Wersja dla wyświetlacza 16×2
Zmieniamy nazwę właściwego pliku do naszego wyświetlacza na “pcmonitor” i ten plik wrzucamy na dysk C.
Następnie tworzymy skrót na pulpicie.
Otworzy się okno, do którego wpisujemy “\pcmonitor.py”
Wpisujemy nazwę, uruchamiamy i mamy działający program! Ustawiamy port COM Arduino i klikamy “Wystartuj Usługę”. Wszystko powinno działać.
Instalacja na Linux.
Dla Ubuntu i pochodnych otwieramy Centrum Oprogramowania i instalujemy:
- python3
- python-gobject
- python-serial
- python-psutil
Bądź instalujemy komendą:
sudo apt-get install python3 python-gobject python-serial python-psutil
Na Arch Linux instalujemy komendą:
sudo pacman -S python python-gobject python-serial python-psutil
Wracamy do wypakowanego archiwum. Wchodzimy do folderu Server i naszym oczom ukażą się dwa pliki:
pcmonitor164GUI.py – Wersja dla wyświetlacza 16×2
pcmonitor204GUI.py – Wersja dla wyświetlacza 16×2
Zmieniamy nazwę pliku właściwego do naszego wyświetlacza na “pcmonitor.py” i ten plik wrzucamy do naszego folderu domowego.
Uruchamiamy terminal i wpisujemy:
python3 ~/pcmonitor.py
…i uruchomił nam się nasz program :D! Ustawiamy port Arduino i klikamy “Wystartuj Usługę”. Wszystko powinno działać.
Teraz powinieneś posiadać działający monitor zużycia zasobów komputera i piękny mały programik do jego obsługi. Mam nadzieję że projekt się spodobał.
INFORMACJA: Poniższy post nie wydostał się z Poczekalni :(
Zabrakło zdjęć z działania monitora. Poza tym “zużycie komputera” brzmi dziwnie, lepiej użyć “użycie zasobów komputera”.
Poprawiłem.
Daje 3 gwiazdy z powodu;
-wszystko mozna zrobic w jednym programie,
-troche chaotycznie rozpisane,
-Praktycznie caly tutorial to instalowanie tych zbednych programow.
Te “programy” nie są zbędne. To w większości biblioteki do pythona. Ta chaotyczna instalacja to tylko na windowsie. Używam linuxa gdzie wszystkie te kroki robi się jedną komędą.
Ale jednak wiekszosc uzywa windowsa. Mogles program napisac np w c# i uzyc biblioteki do seriala.
Dziękuje za opinie. Następnym razem użyję C++
Szkoda że nie dałeś np. temperatur na procesorze i karcie graficznej oraz prędkości wentylatorów zamiast tego użycia zasobów, ale projekt fajny.
Bardzo prosto można przerobić program tak, by wyświetlał temperaturę(psutil.cpu_temperature(True)). Mi potrzebne były chodzące procesy i ram.
Dzięki
Fajne, ale zbędne ;)
Po co kombinować skoro jest dobra implementacja LCD Smartie (Win) i LCD4Linux na Arduino?
Możliwości większe, prostota konfiguracji…
Sam dopiero uczę się programować. Ten programik to fajne ćwiczenie z GTK.
słabe i nie potrzebne