formatter = logging.Formatter(
        "%(asctime)s - %(name)s - %(levelname)s - %(message)s")
    rainbowHandler.setFormatter(formatter)
    logger.addHandler(rainbowHandler)

    logger.setLevel(logging.DEBUG)

    if True:
        obj = '/dev/ttyAMA0'
        fake = False
    else:
        obj = SerialFake
        fake = True

    serial = Serial()
    serial.connect(obj)

    servo = Servo(serial, fakemode=fake)
    #Servo.init()

    #ServoSeq = Servo_Sequencer(servo)
    #ServoSeq.daemon = True;
    #ServoSeq.start()

    engine = Servo_Engine(servo)
    engine.start()

    SPEED = 1
    CONSIGNE = 170

    def test(index):
Exemple #2
0
<<<<<<< HEAD
if Config.FAKE_MODE:
    obj = SerialFake
else:
    obj = '/dev/ttyAMA0'
=======
if True:
    obj = '/dev/ttyAMA0'
    fake = False
else:
    obj = SerialFake
    fake = True
>>>>>>> e9ffd7ef371450a29e24962357af5942710c8547

serial = Serial()
serial.connect(obj)

<<<<<<< HEAD
servo = Servo(serial, fakemode = Config.FAKE_MODE)
=======
servo = Servo(serial, fakemode = fake)
>>>>>>> e9ffd7ef371450a29e24962357af5942710c8547
servo.init()

#ServoSeq = Servo_Sequencer(servo)
#ServoSeq.daemon = True;
#ServoSeq.start()

#sspeed = Servo_SpeedStep(servo)
sspeed = Servo_SpeedDelay(servo)
sspeed.start()
class BleuettePi(Serial):

    INTA = 26
    INTB = 15
    INTC = 22
    INTD = 12

    STATUS_MAX_CURRENT_REACHED = 0

    MCP_ADDRESS = 0x20

    RESET_PIN = 14

    serial = None
    mcp = None

    Servo = None
    Compass = None
    Accelerometer = None
    GroundSensor = None

    def __init__(self, serialDev):
        self.logger = logging.getLogger('BleuettePi')

        self.serial = Serial()
        self.serial.connect(serialDev)

        self.mcp = MCP230XX(self.MCP_ADDRESS, 16)

        self.Servo = Servo.Servo(self.serial, fakemode = Config.FAKE_MODE)
        self.Servo.init()

        Servo.Servo_Trim.values = Data.Instance().get(['servo', 'trims'])
        Servo.Servo_Limit.values = Data.Instance().get(['servo', 'limits'])

        self.Analog = Analog(self.serial)

        self.Compass = BleuettePi_Compass()
        self.Accelerometer = BleuettePi_Accelerometer()
        self.GroundSensor = BleuettePi_GroundSensor(self.mcp)

        # Init mode
        GPIO.setmode(GPIO.BOARD)

        GPIO.setup(self.INTA, GPIO.IN)
        GPIO.setup(self.INTB, GPIO.IN)
        GPIO.setup(self.INTC, GPIO.IN)
        GPIO.setup(self.INTD, GPIO.IN)

        GPIO.add_event_detect(self.INTA, GPIO.RISING, callback = self.interrupt, bouncetime = 300)
        GPIO.add_event_detect(self.INTB, GPIO.RISING, callback = self.interrupt, bouncetime = 300)
        GPIO.add_event_detect(self.INTC, GPIO.RISING, callback = self.interrupt, bouncetime = 300)
        GPIO.add_event_detect(self.INTD, GPIO.RISING, callback = self.interrupt, bouncetime = 300)

        self.mcp.config(self.RESET_PIN, MCP230XX.OUTPUT)
        #self.mcp.pullup(self.RESET_PIN, True)
        self.mcp.output(self.RESET_PIN, 1)

    def interrupt(self, index):
        if index == self.INTA:
            self.logger.info("Interrupt from GPA")
        elif index == self.INTB:
            self.logger.info("Interrupt from GPB")
        elif index == self.INTC:
            self.logger.info("Interrupt from RTC")
        elif index == self.INTD:
            self.logger.info("Interrupt from PIC")
            self.getStatus()

    '''
    def setCurrentAlarmLevel(self, level):
        print "Level", level

        if level >= 1024:
            raise Exception('Max current alarm level is 1024 !')

        data = struct.pack("@i", level)
        level = [ data[0], data[1] ]

        return self.command(BPi_Cmd.SET_MAX, level)
    '''

    # Hard reset
    def reset(self):
        self.mcp.output(self.RESET_PIN, 0)
        time.sleep(1)
        self.mcp.output(self.RESET_PIN, 1)
        time.sleep(1)
        self.Servo.init()

    def getStatus(self):
        self.serial.write(self.HEADER)
        self.serial.write(BPi_Cmd.STATUS)
        status = self.serial.read(1)

        if ord(status) & (1 << self.STATUS_MAX_CURRENT_REACHED):
            self.logger.warning("Max current reached !")

        return status
Exemple #4
0
class BleuettePi(Serial):

    INTA = 26
    INTB = 15
    INTC = 22
    INTD = 12

    STATUS_MAX_CURRENT_REACHED = 0

    MCP_ADDRESS = 0x20

    RESET_PIN = 14

    serial = None
    mcp = None

    Servo = None
    Compass = None
    Accelerometer = None
    GroundSensor = None

    def __init__(self, serialDev):
        self.logger = logging.getLogger('BleuettePi')

        self.serial = Serial()
        self.serial.connect(serialDev)

        self.mcp = MCP230XX(self.MCP_ADDRESS, 16)

        self.Servo = Servo.Servo(self.serial, fakemode=Config.FAKE_MODE)
        self.Servo.init()

        Servo.Servo_Trim.values = Data.Instance().get(['servo', 'trims'])
        Servo.Servo_Limit.values = Data.Instance().get(['servo', 'limits'])

        self.Analog = Analog(self.serial)

        self.Compass = BleuettePi_Compass()
        self.Accelerometer = BleuettePi_Accelerometer()
        self.GroundSensor = BleuettePi_GroundSensor(self.mcp)

        # Init mode
        GPIO.setmode(GPIO.BOARD)

        GPIO.setup(self.INTA, GPIO.IN)
        GPIO.setup(self.INTB, GPIO.IN)
        GPIO.setup(self.INTC, GPIO.IN)
        GPIO.setup(self.INTD, GPIO.IN)

        GPIO.add_event_detect(self.INTA,
                              GPIO.RISING,
                              callback=self.interrupt,
                              bouncetime=300)
        GPIO.add_event_detect(self.INTB,
                              GPIO.RISING,
                              callback=self.interrupt,
                              bouncetime=300)
        GPIO.add_event_detect(self.INTC,
                              GPIO.RISING,
                              callback=self.interrupt,
                              bouncetime=300)
        GPIO.add_event_detect(self.INTD,
                              GPIO.RISING,
                              callback=self.interrupt,
                              bouncetime=300)

        self.mcp.config(self.RESET_PIN, MCP230XX.OUTPUT)
        #self.mcp.pullup(self.RESET_PIN, True)
        self.mcp.output(self.RESET_PIN, 1)

    def interrupt(self, index):
        if index == self.INTA:
            self.logger.info("Interrupt from GPA")
        elif index == self.INTB:
            self.logger.info("Interrupt from GPB")
        elif index == self.INTC:
            self.logger.info("Interrupt from RTC")
        elif index == self.INTD:
            self.logger.info("Interrupt from PIC")
            self.getStatus()

    '''
    def setCurrentAlarmLevel(self, level):
        print "Level", level

        if level >= 1024:
            raise Exception('Max current alarm level is 1024 !')

        data = struct.pack("@i", level)
        level = [ data[0], data[1] ]

        return self.command(BPi_Cmd.SET_MAX, level)
    '''

    # Hard reset
    def reset(self):
        self.mcp.output(self.RESET_PIN, 0)
        time.sleep(1)
        self.mcp.output(self.RESET_PIN, 1)
        time.sleep(1)
        self.Servo.init()

    def getStatus(self):
        self.serial.write(self.HEADER)
        self.serial.write(BPi_Cmd.STATUS)
        status = self.serial.read(1)

        if ord(status) & (1 << self.STATUS_MAX_CURRENT_REACHED):
            self.logger.warning("Max current reached !")

        return status
Exemple #5
0
from LoggingConfig import LoggingConfig

parser = argparse.ArgumentParser()
parser.add_argument('serial_port')
parser.add_argument('mqtt_host')
args = parser.parse_args()

serial_baud = 9600
message_terminator = "|"

logging_config = LoggingConfig()
logger = logging_config.get_logger()
serial = Serial(args.serial_port, serial_baud, message_terminator, logger)
mqtt = MqttConnection(args.mqtt_host, logger)
multisensor = Multisensor(mqtt, logger)
serial.add_callback(multisensor.process_sensor)
serial.connect()
mqtt.connect()
multisensor.init_discovery()


def exit_handler():
    serial.disconnect()


atexit.register(exit_handler)

while True:
    serial.loop()
    mqtt.loop()
    time.sleep(0.1)
class BleuettePi(Serial):

    INTA = 26
    INTB = 15
    INTC = 22
    INTD = 12

    STATUS_MAX_CURRENT_REACHED = 0

    serial = None
    Compass = None
    Accelerometer = None
    GroundSensor = None

    def __init__(self, mixed):
        self.serial = Serial()
        self.serial.connect(mixed)

        self.Servo = Servo(self.serial, fakemode = Config.FAKE_MODE)
        self.Analog = Analog(self.serial)

        self.Compass = BleuettePi_Compass()
        self.Accelerometer = BleuettePi_Accelerometer()
        self.GroundSensor = BleuettePi_GroundSensor()

        # Init mode
        GPIO.setmode(GPIO.BOARD)

        GPIO.setup(self.INTA, GPIO.IN)
        GPIO.setup(self.INTB, GPIO.IN)
        GPIO.setup(self.INTC, GPIO.IN)
        GPIO.setup(self.INTD, GPIO.IN)

        GPIO.add_event_detect(self.INTA, GPIO.RISING, callback = self.interrupt, bouncetime = 300)
        GPIO.add_event_detect(self.INTB, GPIO.RISING, callback = self.interrupt, bouncetime = 300)
        GPIO.add_event_detect(self.INTC, GPIO.RISING, callback = self.interrupt, bouncetime = 300)
        GPIO.add_event_detect(self.INTD, GPIO.RISING, callback = self.interrupt, bouncetime = 300)

    def interrupt(self, index):
        if index == self.INTA:
            print "Interrupt from GPA"
        elif index == self.INTB:
            print "Interrupt from GPB"
        elif index == self.INTC:
            print "Interrupt from RTC"
        elif index == self.INTD:
            print "Interrupt from PIC !"
            self.getStatus()

    '''
    def setCurrentAlarmLevel(self, level):
        print "Level", level

        if level >= 1024:
            raise Exception('Max current alarm level is 1024 !')

        data = struct.pack("@i", level)
        level = [ data[0], data[1] ]

        return self.command(BPi_Cmd.SET_MAX, level)
    '''

    def getStatus(self):
        self.serial.write(self.HEADER)
        self.serial.write(BPi_Cmd.STATUS)
        status = self.serial.read(1)

        if ord(status) & (1 << self.STATUS_MAX_CURRENT_REACHED):
            print "Max current reached !"

        return status