Hace un tiempo conecte la pantalla Oled I2C con la librería "lemur", tenéis toda la información en la entrada 'Raspberry Pi 2 con Oled 128x64 I2C'.
Ahora lo quiero aplicar a la Raspberry Pi 3 y añadirlo al ventilador pwm que ya instalamos anteriormente así que aprovecho para darle una actualización a la entrada anteriormente enlazada y añadir algunos pasos más.
La librería que usamos anteriormente está descontinuada ahora la información ahora la información esta en la propia web de Adafruit. Los cambios son mínimos ya que solo instalando la librería y cambiando las lineas de configuración todo vuelve a funcionar como antes. Veamos como instalar las librerías que relacionadas adafruit-circuitpython-ssd1306.
sudo apt-get install python3-pip
pip3 install adafruit-circuitpython-ssd1306
sudo apt-get install python3-pil
sudo apt-get install python3-numpy
Para usar pantalla Oled 128x64 I2C hay que importar la librería de la siguiente manera:
import board
import adafruit_ssd1306
from PIL import Image, ImageDraw, ImageFont
# Use for I2C.
i2c = board.I2C() # uses board.SCL and board.SDA
try:
disp = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C, reset=RST)
print("\nAdafruit SSD1306 ok")
except Exception as errors:
print("\nError Adafruit SSD1306:",str(errors), "\nPlease check Raspi-config\n")
exit()
Una vez que tenemos la pantalla funcionando estos son los datos que vamos a mostrar:,
- IP de la red
- Uso del CPU
- Temperatura del procesador
- Uso de Ram
- Velocidad del ventilador (PWM)
- Tiempo que lleva encendido el sistema
- Sistema operativo
- psutil
- subprocess
- sys
La ip la podemos obtener con subprocess:
## Obtiene la ip del equipo
# @ return String "0.0.0.0"
def GetIP():
return str(subprocess.check_output(['hostname', '-I'])).split(' ')[0].replace("b'", "")
Obtenemos la carga de CPU con psutil:
## Obtiene la carga de la CPU
# @ return float
def GetCPU():
return psutil.cpu_percent(1)
La temperatura de la CPU con subprocess:
## Obtiene la temperatura de la CPU
# @ return float
def GetTemp():
output = subprocess.run(['vcgencmd', 'measure_temp'], capture_output= True)
temp_str = output.stdout.decode()
try:
return float(temp_str.split('=')[1].split('\'')[0])
except (IndexError, ValueError):
raise RuntimeError('no se puede obtener temperatura')
La RAM en uso mediante psutil:
## Obtiene la cantidad de RAM en uso
# @ return float
def GetRAM():
return psutil.virtual_memory()[2]
El PWM que aplicamos al pin viene nos lo devuelve la clase healt_pwm_class.py:
## Obtiene la velocidad del ventilador
# @ hpc: healt_pwm_class.System_PWM_Fan
# @ type_ int: 0=Proporcional, 1=Por pasos de temperatura
# @ return int: valor de pwm aplicado en el pin
def GetFanPWM(sef, hpc, type_):
if type_ == 0:
return hpc.Proportional()
else:
return hpc.Stepped()
El sistema operativo lo obtenemos gracias a sys:
## Función que devuelve el SO en uso
# @ return String
def getOS():
platforms = {
'linux1' : 'linux',
'linux2' : 'linux',
'darwin' : 'mac',
'win32' : 'win32'
}
if sys.platform not in platforms:
return sys.platform
return platforms[sys.platform]
Y por último el tiempo que lleva encendida la maquina con psutil:
## Obtiene el tiempo que lleva la maquina encendida
# @ return String "0d 00h 00m 00s"
def GetUpTime():
boot_time_timestamp = psutil.boot_time()
current_time_timestamp = time.time()
uptime_seconds = current_time_timestamp - boot_time_timestamp
uptime_minutes = uptime_seconds // 60
uptime_hours = uptime_minutes // 60
uptime_days = uptime_hours // 24
uptime_str = f"{int(uptime_days)}d {int(uptime_hours % 24)}h {int(uptime_minutes % 60)}m {int(uptime_seconds % 60)}s"
# print("Uptime: " + uptime_str)
return uptime_str
# Importamos la clase
from system_functions_class import *
sfc = System_Functions()
# Retorna la IP del equipo
ip = sfc.GetIP()
# Retorna la temperatura de la CPU
cpu_temp =.sfc.GetTemp()
# Imprime los resultados de ip y cpu_temp
print("IP: {}, CPU temp: {}".format(ip, cpu_temp))
¿Como usamos el programa?
Clonamos el repositorio rpi3_healt_system desde GitHub. Vamos a nuestra carpeta de proyectos y escribimos:
https://github.com/Peyutron/python-Warehouse/tree/main/Raspberry_Python/rpi3_healt_system
Con el programa en nuestro equipo, el ejecutable principal se llama "main_rpi_healt.py y lo ejecutamos con
python3 -m main_rpi_healt
Si todo ha ido bien con la instalación en el terminal recibiremos el siguiente mensaje:
Adafruit ssd1306 ok
y en la pantalla se dibujara lo siguiente:
Los datos que se muestran se guardan en un archivo JSON. Esto nos servirá en un futuro para enviar los datos a otros equipos o como consulta de la última vez que se ejecuto el programa. La información se guarda en un archivo llamado healt_datas.json y este es su contenido:
{
"filename": "healt_datas.json",
"ip": "192.168.1.39",
"m0_cpuf": 39,
"m0_cpul": 0.0,
"m0_cput": 45.6,
"m0_os": "linux",
"m0_raml": 18.5,
"m0_ut": "0d 4h 48m 55s"
}
Aquí tienes otros enlaces de este blog relacionados con Raspberry Pi:
Programa de ejemplo de este articulo en GitHub
Información desde la web oficial de Adafruit
Un saludo a todos!!
No hay comentarios :
Publicar un comentario