Python Uygulamaları – 3 – NodeMCU ile Sıcaklık İzleme Ekranı Uygulaması

Bu uygulama ile bilgisayarımın işlemci sıcaklık ve fan dönüş hızı değerleri ile ekran kartımın sıcaklık ve fan dönüş hızı değerlerini bilgisayara USB portu üzerinden bağlı olan NodeMCU’ya aktardım. NodeMCU’ya da OLED bir ekran bağlayarak ekran üzerinden bu değerleri izleyebileceğim bir uygulama yaptım.

Bu projede kullandığım parçalar:

  • V3 NodeMcu Ch-340 Wifi Geliştirme Modülü
  • 128×64 1.3 inç OLED Grafik Ekran 6 Pin IS-SPI

Bu uygulamada bilgisayar mikrokontrolcüye veri göndermesi gerektiği için 2 ayrı program yazmam gerekti. Mikrokontrolcü direkt olarak sistem sıcaklık ve fan değerlerine erişemeyeceği için böyle bir yol izledim. İlk aşama olarak python ile sistem sıcaklık ve fan dönüş hızı değerlerini seriport üzerinden mikrokontrolcüye yollamam gerekti. Onun için yazdığım script aşağıdadır. Sistem bilgilerini alabilmek için bu sistem çalışırken arkaplanda OpenHardwareMonitör çalışıyor olmalı.

import wmi
import serial
import time

w = wmi.WMI(namespace="root\OpenHardwareMonitor")


while True:

    sensor_infos = w.Sensor()
    ser = serial.Serial("COM4", 9600)
    for sensor in sensor_infos:
        if sensor.SensorType=='Temperature':
            if sensor.Name == "CPU Package":
                cpu_temp = int(sensor.Value)

            if sensor.Name == "GPU Hot Spot":
                gpu_temp = int(sensor.Value)

    for sensor in sensor_infos:
        if sensor.SensorType=='Fan':
            if sensor.Name == "Fan #1":
                cpu_fan = int(sensor.Value)

            if sensor.Name == "GPU Fan":
                gpu_fan = int(sensor.Value)


    print("Cpu Temp:" , cpu_temp)
    print("Gpu Temp:" , gpu_temp)
    print("Cpu Fan:" , cpu_fan)
    print("Gpu Fan:" ,gpu_fan)
    data = ("=================\n" + "Cpu Temp: " + str(cpu_temp) + "\n" + "Gpu Temp: " + str(gpu_temp) + "\n" + "Cpu Fan: " + str(cpu_fan) + "\n" + "Gpu Fan: " + str(gpu_fan) + "\n" + "=================\n" + "-" + "\n")
    time.sleep(2)
    ser.write(data.encode())
    time.sleep(2)
    ser.close()
    time.sleep(2)

Bu script ile seriport açıp yazdırılacak değerleri mikrokontrolcü tarafına yolladım. Bütün değerleri tek parça halinde yollamamın nedeni ekrana aynı anda sadece tek bir bilgi yazdırabiliyor olmamdı. NodeMCU için yazdığım kod ise aşağıdaki gibidir.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>


#define SCREEN_WIDTH 128 
#define SCREEN_HEIGHT 64 
#define OLED_MOSI  14   
#define OLED_CLK   12   
#define OLED_DC    13
#define OLED_CS    0
#define OLED_RESET 15

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
String readString;

void setup()   {  
                
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC);
  display.display();
  delay(1000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);

}

void loop()  {
 
  while (Serial.available()) {
  
  if (Serial.available() >0)
   
    {
        char c = Serial.read();  
        readString += c; 
        if (splitter == '-')
         {
              delay(2000);
              readString="";
              display.clearDisplay();
              digitalWrite(15,HIGH);
              delay(2500);
         }
        
    }
  

  display.clearDisplay();
  display.setCursor(0,0);
  
  display.print(readString);
  
  display.display();
  delay(100);
  
  }
}

Ekran sürücüsü AdaFruit olduğu için internet sitesinden ekran kütüphaneleri indirdim. Öncelikle kütüphaneleri ekledim ve pin tanımlamalarını yaptım. setup() kısmında font büyüklüğü ve renk ayarlamaları yaptım ve ekranı kullanılabilir hale getirdim. loop içinde de seri haberleşme sağlandığı zaman seriport üzerinden bilgileri karakter olarak alıp bir string içine yazdırdım. Daha sonra bu string formatındaki veriyi de ekrana yazdırdım. Python kodu içinde her veri setini ayırmak için veri seti sonunda “-” karakterini yolladım. NodeMCU kodunda da “-” karakteri geldiği zaman ekran ve veri sıfırlanıyor. Yeni bir verisetinin gelmesine hazır hale gelmiş oluyor.

Ekranın nasıl çalıştığına dair videoyu aşağıdan görebilirsiniz.

Leave a comment

Design a site like this with WordPress.com
Get started