mirror of
				https://github.com/KevinMidboe/python-gpiozero.git
				synced 2025-10-29 17:50:37 +00:00 
			
		
		
		
	Rename to gpiozero and tidy up
This commit is contained in:
		
							
								
								
									
										20
									
								
								gpiozero/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								gpiozero/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| from __future__ import absolute_import | ||||
| from RPi import GPIO | ||||
|  | ||||
| GPIO.setmode(GPIO.BCM) | ||||
| GPIO.setwarnings(False) | ||||
|  | ||||
| from .input_devices import ( | ||||
|     InputDeviceError, | ||||
|     InputDevice, | ||||
|     Button, | ||||
|     MotionSensor, | ||||
|     LightSensor, | ||||
|     TemperatureSensor, | ||||
| ) | ||||
| from .output_devices import ( | ||||
|     OutputDevice, | ||||
|     LED, | ||||
|     Buzzer, | ||||
|     Motor, | ||||
| ) | ||||
							
								
								
									
										94
									
								
								gpiozero/input_devices.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								gpiozero/input_devices.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | ||||
| from RPi import GPIO | ||||
| from w1thermsensor import W1ThermSensor | ||||
|  | ||||
|  | ||||
| class InputDevice(object): | ||||
|     def __init__(self, pin=None): | ||||
|         if pin is None: | ||||
|             raise InputDeviceError('No GPIO pin number given') | ||||
|  | ||||
|         self.pin = pin | ||||
|         self._pull = GPIO.PUD_UP | ||||
|         self._edge = GPIO.FALLING | ||||
|         self._active_state = 0 | ||||
|         self._inactive_state = 1 | ||||
|         GPIO.setup(pin, GPIO.IN, self._pull) | ||||
|  | ||||
|     @property | ||||
|     def is_active(self): | ||||
|         return GPIO.input(self.pin) == self._active_state | ||||
|  | ||||
|     def wait_for_input(self): | ||||
|         GPIO.wait_for_edge(self.pin, self._edge) | ||||
|  | ||||
|     def add_callback(self, callback=None, bouncetime=1000): | ||||
|         if callback is None: | ||||
|             raise InputDeviceError('No callback function given') | ||||
|  | ||||
|         GPIO.add_event_detect(self.pin, self._edge, callback, bouncetime) | ||||
|  | ||||
|     def remove_callback(self): | ||||
|         GPIO.remove_event_detect(self.pin) | ||||
|  | ||||
|  | ||||
| class Button(InputDevice): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class MotionSensor(InputDevice): | ||||
|     def _is_active_with_pause(self): | ||||
|         sleep(0.1) | ||||
|         return self.is_active | ||||
|  | ||||
|     @property | ||||
|     def motion_detected(self): | ||||
|         n = 20 | ||||
|         return sum(self._is_active_with_pause() for i in range(n)) > n/2 | ||||
|  | ||||
|  | ||||
| class LightSensor(object): | ||||
|     def __init__(self, pin=None, darkness_level=0.01): | ||||
|         if pin is None: | ||||
|             raise InputDeviceError('No GPIO pin number given') | ||||
|  | ||||
|         self.pin = pin | ||||
|         self.darkness_level = darkness_level | ||||
|  | ||||
|     @property | ||||
|     def value(self): | ||||
|         return self._get_average_light_level(5) | ||||
|  | ||||
|     def _get_light_level(self): | ||||
|         time_taken = self._time_charging_light_capacitor() | ||||
|         value = 100 * time_taken / self.darkness_level | ||||
|         return 100 - value | ||||
|  | ||||
|     def _time_charging_light_capacitor(self): | ||||
|         GPIO.setup(self.pin, GPIO.OUT) | ||||
|         GPIO.output(self.pin, GPIO.LOW) | ||||
|         sleep(0.1) | ||||
|         GPIO.setup(self.pin, GPIO.IN) | ||||
|         start_time = time() | ||||
|         end_time = time() | ||||
|         while ( | ||||
|             GPIO.input(self.pin) == GPIO.LOW and | ||||
|             time() - start_time < self.darkness_level | ||||
|         ): | ||||
|             end_time = time() | ||||
|         time_taken = end_time - start_time | ||||
|         return min(time_taken, self.darkness_level) | ||||
|  | ||||
|     def _get_average_light_level(self, num): | ||||
|         values = [self._get_light_level() for n in range(num)] | ||||
|         average_value = sum(values) / len(values) | ||||
|         return average_value | ||||
|  | ||||
|  | ||||
| class TemperatureSensor(W1ThermSensor): | ||||
|     @property | ||||
|     def value(self): | ||||
|         return self.get_temperature() | ||||
|  | ||||
|  | ||||
| class InputDeviceError(Exception): | ||||
|     pass | ||||
							
								
								
									
										25
									
								
								gpiozero/output_devices.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								gpiozero/output_devices.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| from RPi import GPIO | ||||
|  | ||||
|  | ||||
| class OutputDevice(object): | ||||
|     def __init__(self, pin): | ||||
|         self.pin = pin | ||||
|         GPIO.setup(pin, GPIO.OUT) | ||||
|  | ||||
|     def on(self): | ||||
|         GPIO.output(self.pin, True) | ||||
|  | ||||
|     def off(self): | ||||
|         GPIO.output(self.pin, False) | ||||
|  | ||||
|  | ||||
| class LED(OutputDevice): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class Buzzer(OutputDevice): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class Motor(OutputDevice): | ||||
|     pass | ||||
		Reference in New Issue
	
	Block a user