Salut,
Ca y est le dev de Kintaro a sorti sa nouvelle version du script pour leur boitier qui prend en charge le ventilateur via hysterisis. on le trouve ici :
https://github.com/MichaelKirsch/Kintaro-Recalbox
il y a du grand changement dans le script :
| |
| |
| |
| try: |
| import time |
| import os |
| import RPi.GPIO as GPIO |
| import subprocess |
| except ImportError: |
| raise ImportError('spidev or gpio not installed') |
| |
| class SNES: |
| |
| def __init__(self): |
| |
| |
| |
| self.led_pin=7 |
| self.fan_pin=8 |
| self.reset_pin=3 |
| self.power_pin=5 |
| self.check_pin=10 |
| |
| |
| |
| self.fan_hysteresis = 5 |
| self.fan_starttemp = 60 |
| self.debounce_time = 0.1 |
| |
| |
| |
| self.temp_command = 'vcgencmd measure_temp' |
| |
| |
| |
| GPIO.setmode(GPIO.BOARD) |
| GPIO.setwarnings(False) |
| GPIO.setup(self.led_pin, GPIO.OUT) |
| GPIO.setup(self.fan_pin, GPIO.OUT) |
| GPIO.setup(self.power_pin, GPIO.IN) |
| GPIO.setup(self.reset_pin, GPIO.IN, |
| pull_up_down=GPIO.PUD_UP) |
| GPIO.setup(self.check_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) |
| |
| def power_interrupt(self, channel): |
| time.sleep(self.debounce_time) |
| if GPIO.input(self.power_pin) == GPIO.HIGH and GPIO.input( |
| self.check_pin) == GPIO.LOW: |
| self.led(0) |
| self.fan(0) |
| os.system("shutdown -h now") |
| |
| def reset_interrupt(self, channel): |
| if GPIO.input(self.reset_pin) == GPIO.LOW: |
| time.sleep(self.debounce_time) |
| while GPIO.input(self.reset_pin) == GPIO.LOW: |
| self.blink(15, 0.1) |
| os.system("reboot") |
| |
| def pcb_interrupt(self, channel): |
| GPIO.cleanup() |
| |
| def temp(self): |
| res = os.popen(self.temp_command).readline() |
| return float((res.replace("temp=", "").replace("'C\n", ""))) |
| |
| def led(self,status): |
| if status == 0: |
| GPIO.output(self.led_pin, GPIO.LOW) |
| if status == 1: |
| GPIO.output(self.led_pin, GPIO.HIGH) |
| |
| def blink(self,amount,interval): |
| for x in range(amount): |
| self.led(1) |
| time.sleep(interval) |
| self.led(0) |
| time.sleep(interval) |
| |
| def fan(self,status): |
| if status == 1: |
| GPIO.output(self.fan_pin, GPIO.HIGH) |
| if status == 0: |
| GPIO.output(self.fan_pin, GPIO.LOW) |
| |
| def fancontrol(self,hysteresis,starttemp): |
| if self.temp() > starttemp: |
| self.fan(1) |
| if self.temp() < starttemp-hysteresis: |
| self.fan(0) |
| |
| def check_fan(self): |
| self.fancontrol(self.fan_hysteresis,self.fan_starttemp) |
| |
| def attach_interrupts(self): |
| if GPIO.input(self.check_pin) == GPIO.LOW: |
| GPIO.add_event_detect(self.check_pin, GPIO.RISING,callback=self.pcb_interrupt) |
| if GPIO.input(self.power_pin) == GPIO.HIGH: |
| os.system("shutdown -h now") |
| else: |
| self.led(1) |
| GPIO.add_event_detect(self.reset_pin, GPIO.FALLING, callback=self.reset_interrupt) |
| GPIO.add_event_detect(self.power_pin, GPIO.RISING, callback=self.power_interrupt) |
| else: |
| GPIO.cleanup() |
| exit() |
| |
| snes = SNES() |
| |
| snes.attach_interrupts() |
| |
| while True: |
| time.sleep(5) |
| snes.led(1) |
| snes.check_fan() |
| |