{"id":2795,"date":"2025-07-16T15:06:53","date_gmt":"2025-07-16T14:06:53","guid":{"rendered":"https:\/\/theroamingworkshop.cloud\/b\/?p=2795"},"modified":"2025-07-16T15:37:24","modified_gmt":"2025-07-16T14:37:24","slug":"configuracion-de-ventilador-con-indicador-de-estado-para-raspberry-pi-5-con-ubuntu","status":"publish","type":"post","link":"https:\/\/theroamingworkshop.cloud\/b\/2795\/configuracion-de-ventilador-con-indicador-de-estado-para-raspberry-pi-5-con-ubuntu\/","title":{"rendered":"Configuraci\u00f3n de ventilador con indicador de estado para Raspberry Pi 5 con Ubuntu"},"content":{"rendered":"\n<p>El calor ha llegado de nuevo y notaba mi Raspberry Pi demasiado caliente teniendo en cuenta que tiene el ventilador oficial incrustado, con temperaturas que f\u00e1cilemnte superaban los 60\u00baC.<\/p>\n\n\n\n<p>Desde que le instal\u00e9 <strong>Ubuntu<\/strong>, el ventilador no parec\u00eda funcionar bien, pero parece que es algo que se ha resuelto con las versiones m\u00e1s recientes del kernel.<\/p>\n\n\n\n<p>As\u00ed que aqu\u00ed os traigo una configuraci\u00f3n del ventilador para <strong>Ubuntu<\/strong> y una visualizaci\u00f3n de su estado.<\/p>\n\n\n\n<div id=\"menu\" style=\"padding:20px 20px 20px 20px; border-left:2px solid darkgrey;\">\n<p style=\"font-weight:bold;\">Contenido<\/p>\n<\/div>\n<script>\nvar text;\nvar element;\n\nfunction fillmenu(){\n\nfor (let i=0; i<window.document.getElementsByTagName(\"h2\").length; i++){\nelement = window.document.getElementsByTagName(\"h2\")[i];\ntext = \"\u25b9 \"+element.innerHTML;\nvar newelement = document.createElement(\"a\");\nnewelement.innerHTML=text;\nvar postid=window.document.getElementsByTagName(\"article\")[0].id;\nvar url = \"https:\/\/theroamingworkshop.cloud\/b\/?p=\"+postid.substr(5,postid.length)+\"#\"+element.id;\nnewelement.setAttribute(\"href\", url);\nnewelement.appendChild(document.createElement(\"br\"));\nwindow.document.getElementById(\"menu\").appendChild(newelement);\n}\n}\n\nif(window.location.href.includes(\"tag\")){\n\n}else{\nwindow.setTimeout(fillmenu,2000);\n}\n\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\">Comprobaci\u00f3n del ventilador<\/h2>\n\n\n\n<p>Primero comprobemos que el ventilador funciona correctamente accion\u00e1ndolo manualmente.<\/p>\n\n\n\n<p><strong>Actualiza tu sistema operativo<\/strong> para contar con los \u00faltimos parches que arreglan el funcionamiento del ventilador. Mi \u00faltima versi\u00f3n es <strong>Ubuntu Linux 24.04.2<\/strong>.<\/p>\n\n\n\n<p>Ahora deber\u00edas ser capaz de encender el ventilador manualmente introduciendo el siguiente comando en la terminal:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo 4 | sudo tee \/sys\/class\/thermal\/cooling_device0\/cur_state<\/code><\/pre>\n\n\n\n<p>Un valor de <kbd>4<\/kbd> encender\u00e1 el ventilador a sus m\u00e1ximas revoluciones. Puedes cambiar este valor entre 0 y 4.<\/p>\n\n\n\n<p>Si lo anterior funcion\u00f3 correctamente oir\u00e1s bastante ruido del ventilador. Ahora puedes apagarlo cambiando el valor del comando anterior a 0:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo 0 | sudo tee \/sys\/class\/thermal\/cooling_device0\/cur_state<\/code><\/pre>\n\n\n\n<p>Ver\u00e1s que cambiando el valor del archivo <kbd>cur_sate<\/kbd> manualmente se cambia la velocidad del ventilador. Eso es exactamente lo que ahce el demonio autom\u00e1ticamente con el ventilador, una vez configurado. As\u00ed que monitorizaremos este valor m\u00e1s tarde para averiguar si el ventilador est\u00e1 funcionando (valor devuelto != 0):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat \/sys\/class\/thermal\/cooling_device0\/cur_state<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Configuraci\u00f3n del ventilador<\/h2>\n\n\n\n<p>El ventilador no viene preconfigurado en las versiones anteriores del kernel de Ubuntu para Raspberry Pi y no s\u00e9 si lo hace ahora por defecto.<\/p>\n\n\n\n<p>Comprob\u00e9moslo editando el archivo <kbd><strong>config.txt<\/strong><\/kbd> ubicado en <kbd><strong>\/boot\/firmware<\/strong><\/kbd> buscando unas l\u00edneas similares a las siguientes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dtparam=fan_temp0=58000\ndtparam=fan_temp0_hyst=10000\ndtparam=fan_temp0_speed=200<\/code><\/pre>\n\n\n\n<p>Si no las encuentras, a\u00f1\u00e1delas justo al final del archivo.<\/p>\n\n\n\n<p>Si quieres puedes editar los valores libremente teniendo en cuenta que:<\/p>\n\n\n\n<p><kbd>fan_temp0=58000<\/kbd> indica la temperatura de activaci\u00f3n que enciende el ventilador<\/p>\n\n\n\n<p><kbd>fan_temp0_hyst<\/kbd> se refiere a la reducci\u00f3n de temperatura que apaga el ventilador respecto a la de activaci\u00f3n (10000 por debajo de 58000 = 48000)<\/p>\n\n\n\n<p><kbd>fan_temp0_speed<\/kbd> indica la velocidad del ventilador de 0 a 255<\/p>\n\n\n\n<p>As\u00ed que dejamos nuestro ventilador configurado para encenderse a 200rpm si la temperatura supera 58\u00baC y apagarse cuando baje 10\u00baC (~48\u00baC).<\/p>\n\n\n\n<p>Ahora para aplicar estos cambios debemos <strong>reiniciar el sistema<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Monitorizar el ventilador<\/h2>\n\n\n\n<p>Ya monitorizaba ciertas variables de mi Raspberry Pi 5 usando una pantalla OLED, como explicaba en este post:<\/p>\n\n\n\n<p><a href=\"https:\/\/theroamingworkshop.cloud\/b\/2683\/carcasa-pantalla-oled-con-panel-de-estado-para-raspberry-pi\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/theroamingworkshop.cloud\/b\/2683\/carcasa-pantalla-oled-con-panel-de-estado-para-raspberry-pi<\/a><\/p>\n\n\n\n<p>Ahora vamos a a\u00f1adir un indicador del estado del ventilador!<\/p>\n\n\n\n<p>He a\u00f1adido un par de l\u00edneas al script de python para obtener el estado del ventilador usando el comando que vimos anteriormente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#Fan ON\/OFF\ncmd = \"cat \/sys\/class\/thermal\/cooling_device0\/cur_state\"\nFan = subprocess.check_output(cmd, shell=True).decode(\"utf-8\")<\/code><\/pre>\n\n\n\n<p>Un poco m\u00e1s abajo leo una imagen .png para dibujar el ventilador:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fan_img=Image.open(\"~\/Documents\/OLED\/fan-icon.png\")\nfan_img = fan_img.resize((30, 30), Image.BICUBIC)<\/code><\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"50\" height=\"50\" src=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2025\/07\/fan-icon.png\" alt=\"\" class=\"wp-image-2771\" style=\"width:108px;height:auto\"\/><figcaption class=\"wp-element-caption\">fan-icon.png<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Y justo a la hora de mostrar todo en pantalla, a\u00f1ado el icono del ventilador si detectamos que est\u00e1 encendido (distinto de 0):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if int(Fan)!=0:\n    bg.paste(fan_img,(90,55))<\/code><\/pre>\n\n\n\n<p>Todos estos cambios est\u00e1n actualizados en el repositorio de Github repository:<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/TheRoam\/RaspberryPi-SSD1351-OLED\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/TheRoam\/RaspberryPi-SSD1351-OLED<\/a><\/p>\n\n\n\n<p>Y ese es un indicador bastante chulo para tu Raspberry!<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a5c592ee77ca&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a5c592ee77ca\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"384\" height=\"288\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"2790\" src=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2025\/07\/FANon-1.gif\" alt=\"\" class=\"wp-image-2790\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Agrandar\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a5c592ee7c00&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a5c592ee7c00\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"384\" height=\"288\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"2791\" src=\"https:\/\/theroamingworkshop.cloud\/b\/wp-content\/uploads\/2025\/07\/FANoff-1.gif\" alt=\"\" class=\"wp-image-2791\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Agrandar\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/figure>\n\n\n\n<p>Nos vemos! \ud83d\udc4b<\/p>\n\n\n\n<p>\ud83d\udc26 <code><a rel=\"noreferrer noopener\" href=\"https:\/\/twitter.com\/roamingworkshop\" target=\"_blank\">@RoamingWorkshop<\/a><\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>El calor ha llegado de nuevo y notaba mi Raspberry Pi demasiado caliente teniendo en cuenta que tiene el ventilador oficial incrustado, con temperaturas que f\u00e1cilemnte superaban los 60\u00baC. Desde que le instal\u00e9 Ubuntu, el ventilador no parec\u00eda funcionar bien, pero parece que es algo que se ha resuelto con las versiones m\u00e1s recientes del [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2791,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[66,28],"tags":[787,417,419,865,789,785,797,777,779,714,773,775,781,467],"class_list":["post-2795","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-electronica","category-raspi-es","tag-adafruit","tag-electronica-es","tag-electronics-es","tag-fan-es","tag-panel","tag-pantalla","tag-pcb","tag-pi-5","tag-pi5","tag-python-es","tag-raspberry","tag-raspberry-pi","tag-raspberry-pi-5","tag-ubuntu-es","post-preview"],"_links":{"self":[{"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/posts\/2795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/comments?post=2795"}],"version-history":[{"count":6,"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/posts\/2795\/revisions"}],"predecessor-version":[{"id":2809,"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/posts\/2795\/revisions\/2809"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/media\/2791"}],"wp:attachment":[{"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/media?parent=2795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/categories?post=2795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/theroamingworkshop.cloud\/b\/wp-json\/wp\/v2\/tags?post=2795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}