본문 바로가기
Embedded

[Connected Car & AWS] IOManager로 LED, 피에조 부저 조작

by seoyamin 2024. 4. 20.

1. Vehicle.py

import json

from random import randint
from datetime import datetime

class Vehicle:
    def __init__(self):
        self.vin = "1HGBH41JXMN109186"
        self.date = datetime.now().strftime("%Y/%m/%d, %H:%M:%S")
        self.vehiclespeed = randint(0,160)
        self.fuelstatus = randint(0,100)
        .       
        .
        .
        .
        self.airbags = {"driverairbag": "active", "passengerairbag": "active", "sideairbags": "active"}
        self.doors = {
           "frontright": {
                     "locked": True,
                     "opened": False
                },
            .
            .
            .
                },
            "rearleft": {
                     "locked": True,
                     "opened": False
                },
            "trunk": {
                "locked": True,
                "opened": False
                }   
        }
        
        self.lights = {
              "headlight": False,
              "taillight": False,
              "foglight": False,
              "signallight": False,
              "hazardlight": False,
              "parking": False,
              "braking": False
            }
        
        
    def to_json(self):
        vehicle_dict = {
            "vin": self.vin,
            "date": self.date,
            "vehiclespeed": self.vehiclespeed,
            "fuelstatus": self.fuelstatus,
            .
            .
            .
            .
            "airbags": self.airbags,
            "doors": self.doors,
            "lights": self.lights
        }

        vehicle_json = json.dumps(vehicle_dict)
        return vehicle_json

 

 

2. IOManager.py

from gpiozero import LED
from time import sleep

import RPi.GPIO as GPIO

class IOManager:	
	def __init__(self):
		self.led = LED(17)
		self.led.off()
		
		self.trigger_pin = 23
		self.buzzer_int = 440
		GPIO.setmode(GPIO.BCM)
		GPIO.setup(self.trigger_pin, GPIO.OUT)
		self.pin_buzzer = GPIO.PWM(self.trigger_pin, self.buzzer_int)
		
		return
	
	def toggle_led(self,on):
		self.led.on() if on else self.led.off()
		return
	
	def buzzer_sound(self):
		try:
			self.pin_buzzer.ChangeFrequency(340)
			self.pin_buzzer.start(1)
			sleep(0.4)
			self.pin_buzzer.ChangeFrequency(898)
			self.pin_buzzer.start(1)
			sleep(0.7)
			self.pin_buzzer.ChangeFrequency(687)
			self.pin_buzzer.start(1)
			sleep(0.3)
		finally:
			self.pin_buzzer.stop()
		return

 

 

3. 실행파일.py

from vehicle import Vehicle
from iomanager import IOManager
from time import sleep

def main():
    my_vehicle = Vehicle()
    
    io_manager = IOManager()
    io_manager.buzzer_sound()
    
    while True:
        io_manager.toggle_led(True)
        sleep(1)
        
        io_manager.toggle_led(False)
        sleep(1)
    
    return

if __name__ == "__main__":
    main()

 

부저에서 소리도 잘 나고, LED도 잘 들어온다

 

(너무나 재밌다ㅋㅋ)