class RunLoop: SLEEP_MS_DEFAULT = 20 LED_TOGGLE_DEFAULT = 500 def __init__(self, config, verbose=0): self.verbose = verbose # ------------------------------------------------------------------------------------------------------------ # self.exit = False self.config = config # ------------------------------------------------------------------------------------------------------------ # self.sleep_ms = self.SLEEP_MS_DEFAULT # ------------------------------------------------------------------------------------------------------------ # # Initialise required services # ------------------------------------------------------------------------------------------------------------ # if self.config['pinout']['led'] is None: from led import MockLed self.led = MockLed() else: from led import Led self.led = Led(self.config['pinout']['led']['pin'], self.config['pinout']['led']['on_level']) # ------------------------------------------------------------------------------------------------------------ # if self.config['pinout']['button'] is None: from button import MockButton self.button = MockButton() else: from button import Button self.button = Button(self.config['pinout']['button']['pin'], self.config['pinout']['button']['on_level']) # ------------------------------------------------------------------------------------------------------------ # if self.config['pinout']['relay'] is None: from relay import MockRelay self.relay = MockRelay() else: from relay import Relay self.relay = Relay(self.config['pinout']['relay']['pin'], self.config['pinout']['relay']['on_level']) # ------------------------------------------------------------------------------------------------------------ # self.wifi = WiFi(self.config) # , verbose=self.verbose) self.device_id = self.wifi.device_id() self.messaging = Messaging(self.config, self.device_id) # ------------------------------------------------------------------------------------------------------------ # # Application ready feedback --------------------------------------------------------------------------------- # self.led.on(poll=True) sleep(2) self.led.off(poll=True) # ------------------------------------------------------------------------------------------------------------ # if self.wifi.connected(): self.on_wifi_connected(be_verbose=False) # ------------------------------------------------------------------------------------------------------------ # if self.verbose: print('<{} with id {}>'.format(self.config['device']['type'], self.device_id)) print(self.led) print(self.button) print(self.relay) print(self.wifi) print(self.messaging) def on_wifi_connected(self, be_verbose=True): if be_verbose and self.verbose: print(self.wifi) self.led.toggle(self.LED_TOGGLE_DEFAULT) if not self.messaging.connected(): self.messaging.connect() def run(self): if self.verbose: print('Run loop ' 'started') while not self.exit: # ======================================================================================================== # self.led.poll() self.button.poll() # -------------------------------------------------------------------------------------------------------- # if self.relay.state( ) == self.relay.STATE_OFF and self.button.pressed( ) == self.button.SHORT_PRESS: if self.verbose: print('<Button: SHORT_PRESS ' '0' '>') self.messaging.publish({ 'state': '<Button: SHORT_PRESS ' 'relay state: ' 'on' '>' }) self.relay.on() self.button.clear() elif self.relay.state( ) == self.relay.STATE_ON and self.button.pressed( ) > self.button.NOT_PRESSED: if self.verbose: print('<Button: SHORT_PRESS ' '1' '>') self.messaging.publish({ 'state': '<Button: SHORT_PRESS ' 'relay state: ' 'off' '>' }) self.relay.off() self.button.clear() elif self.led.enabled() is True and self.button.pressed( ) == self.button.LONG_PRESS: if self.verbose: print('<Button: LONG_PRESS ' '0' '>') self.messaging.publish({ 'state': '<Button: LONG_PRESS ' 'led enabled: ' 'off' '>' }) self.led.enable(False) self.led.off() self.button.clear() elif self.led.enabled() is False and self.button.pressed( ) > self.button.NOT_PRESSED: if self.verbose: print('<Button: LONG_PRESS ' '2' '>') self.messaging.publish( {'state': '<Button: LONG_PRESS ' 'led enabled: ' 'on' '>'}) self.led.enable(True) self.led.toggle(self.LED_TOGGLE_DEFAULT) self.button.clear() # -------------------------------------------------------------------------------------------------------- # if self.wifi.connected(): if self.messaging.connected() is False: self.on_wifi_connected() if self.messaging.poll(): if 'action' in self.messaging.msg: if self.messaging.msg['action'] == 'on': if self.verbose: print('<Relay: ' 'on' '>') self.relay.on() elif self.messaging.msg['action'] == 'off': if self.verbose: print('<Relay: ' 'off' '>') self.relay.off() elif self.messaging.msg['action'] == 'exit': if self.verbose: print('<Application: ' 'exit' '>') self.exit = True self.messaging.completed() elif self.wifi.connected() is False: if self.wifi.connecting() is False: self.led.toggle(250) self.led.on(poll=True, save_state=True) if self.wifi.connect() is True: self.led.off(poll=True, restore_state=True) # ======================================================================================================== # sleep_ms(self.sleep_ms) # Reduce the tightness of the run loop # ======================================================================================================== # if self.verbose: print('Run loop ' 'exited') def close(self): self.exit = True if self.led: self.led.close() if self.button: self.button.close() if self.relay: self.relay.close() if self.messaging: self.messaging.disconnect() # if self.wifi: # self.wifi.disconnect() # Don't do this, you will loose connection to the REPL if self.verbose: print('Run loop ' 'closed')
import sys sys.path.append('../src') from led import Led import json import time myled = Led(21) fname = './web/led.json' try: while True: try: f = open(fname, 'r') json_dict = json.load(f) if json_dict['status'] == 'on': myled.on() else: myled.off() except ValueError: print('ValueError') time.sleep(0.2) except KeyboardInterrupt: pass
# Scan for access points logger.out(logger.INFO, "AP scan started.") nets = scanner.get() logger.out(logger.INFO, "AP scan finished. " + str(len(nets)) + " network(s) found.") # Check for stationary or moving prevNets = scanner.readStore() diff = scanner.netDiff(nets, prevNets) logger.out(logger.INFO, "Difference between scans: " + str(diff)) # Save scan result in non-volatile RAM scanner.writeStore() logger.out(logger.INFO, "LoRa join started.") led.on(led.RED, 10) # ABP join #lora = Transceiver(dev_addr = dev_addr, nwk_swkey = nwk_swkey, app_swkey = app_swkey, dataRate = 0, adr = True, useSavedState = useSavedState) # OTAA join lora = Transceiver(app_eui=app_eui, app_key=app_key, dataRate=0, adr=True, useSavedState=True) led.off() logger.out(logger.INFO, "LoRa join finished. Dev EUI: " + lora.getMac()) # Create an empty LoRa message sMessage = bytearray() # Add type to the LoRa message sMessage.append(0x00)
sys.path.append('/storage/.kodi/addons/python.RPi.GPIO/lib/') import time import RPi.GPIO as GPIO from led import Led GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) redled = Led(18, "RED", 5) yellowled = Led(8, "YELLOW", 2) greenled = Led(20, "GREEN", 0) whiteled = Led(17, "WHITE", 3) flashled = Led(27, "FLASH", 0) redled.on() redled.off() greenled.on() whiteled.on() whiteled.off() flashled.flash() greenled.off() yellowled.on() yellowled.off() flashled.off() redled.on() redled.off()
start = time.time() current = start myled1 = Led(21) myled2 = Led(20) switch1 = False switch2 = False t1 = 0.0 t2 = 0.0 myled1.off() myled2.off() while (current - start) < 5: current = time.time() if (current - start - t1) > 1.0: t1 = t1 + 1.0 if switch1: myled1.off() else: myled1.on() switch1 = not switch1 if (current - start - t2) > 0.4: t2 = t2 + 0.4 if switch2: myled2.off() else: myled2.on() switch2 = not switch2 #GPIO.cleanup()
def test(): print("*** Testing: LED ***") led = Led() print("Red 100%") led.on(led.RED, 100) sleep(0.5) print("Red 75%") led.on(led.RED, 75) sleep(0.5) print("Red 50%") led.on(led.RED, 50) sleep(0.5) print("Red 25%") led.on(led.RED, 25) sleep(0.5) print("White 100%") led.on(led.WHITE, 100) sleep(0.5) print("White 75%") led.on(led.WHITE, 75) sleep(0.5) print("White 50%") led.on(led.WHITE, 50) sleep(0.5) print("White 25%") led.on(led.WHITE, 25) sleep(0.5) led.off() print("*** Testing: WiFi scanner ***") # Initialize the scanner scanner = Scanner() scanner.get(True, None) messageStr = bytearr2string(scanner.createMessage()) print("Test scanning (no networks) => len = {}, message = {}".format( scanner.netsCnt, messageStr)) nets = [] nets.append( scanner.net(ssid='ssid', bssid=b'\xA1\xA2\xA3\xA4\xA5\xA6', sec=0, channel=13, rssi=-100)) scanner.get(True, nets) messageStr = bytearr2string(scanner.createMessage()) print("Test scanning (one network) => len = {}, message = {}".format( scanner.netsCnt, messageStr)) nets = [] nets.append( scanner.net(ssid='ssid', bssid=b'\xA1\xA2\xA3\xA4\xA5\xA6', sec=0, channel=13, rssi=-100)) nets.append( scanner.net(ssid='ssid', bssid=b'\xB1\xB2\xB3\xB4\xB5\xB6', sec=0, channel=13, rssi=-100)) scanner.get(True, nets) messageStr = bytearr2string(scanner.createMessage()) print("Test scanning (two networks) => len = {}, message = {}".format( scanner.netsCnt, messageStr)) nets = [] nets.append( scanner.net(ssid='ssid', bssid=b'\xA1\xA2\xA3\xA4\xA5\xA6', sec=0, channel=13, rssi=-100)) nets.append( scanner.net(ssid='ssid', bssid=b'\xB1\xB2\xB3\xB4\xB5\xB6', sec=0, channel=13, rssi=-100)) nets.append( scanner.net(ssid='ssid', bssid=b'\xC1\xC2\xC3\xC4\xC5\xC6', sec=0, channel=13, rssi=-100)) scanner.get(True, nets) messageStr = bytearr2string(scanner.createMessage()) print("Test scanning (three networks) => len = {}, message = {}".format( scanner.netsCnt, messageStr)) nets = [] nets.append( scanner.net(ssid='ssid', bssid=b'\xA1\xA2\xA3\xA4\xA5\xA6', sec=0, channel=13, rssi=-100)) nets.append( scanner.net(ssid='ssid', bssid=b'\xB1\xB2\xB3\xB4\xB5\xB6', sec=0, channel=13, rssi=-100)) nets.append( scanner.net(ssid='ssid', bssid=b'\xC1\xC2\xC3\xC4\xC5\xC6', sec=0, channel=13, rssi=-100)) nets.append( scanner.net(ssid='ssid', bssid=b'\xD1\xD2\xD3\xD4\xD5\xD6', sec=0, channel=13, rssi=-100)) scanner.get(True, nets) messageStr = bytearr2string(scanner.createMessage()) print("Test scanning (four networks) => len = {}, message = {}".format( scanner.netsCnt, messageStr)) nets = [] nets.append( scanner.net(ssid='ssid', bssid=b'\xA1\xA2\xA3\xA4\xA5\xA6', sec=0, channel=13, rssi=-100)) nets.append( scanner.net(ssid='ssid', bssid=b'\xB1\xB2\xB3\xB4\xB5\xB6', sec=0, channel=13, rssi=-100)) nets.append( scanner.net(ssid='ssid', bssid=b'\xC1\xC2\xC3\xC4\xC5\xC6', sec=0, channel=13, rssi=-100)) nets.append( scanner.net(ssid='ssid', bssid=b'\xD1\xD2\xD3\xD4\xD5\xD6', sec=0, channel=13, rssi=-100)) nets.append( scanner.net(ssid='ssid', bssid=b'\xE1\xE2\xE3\xE4\xE5\xE6', sec=0, channel=13, rssi=-100)) nets.append( scanner.net(ssid='ssid', bssid=b'\xF1\xF2\xF3\xF4\xF5\xF6', sec=0, channel=13, rssi=-100)) nets.append( scanner.net(ssid='ssid', bssid=b'\xC1\xC2\xC3\xC4\xC5\xC6', sec=0, channel=13, rssi=-100)) nets.append( scanner.net(ssid='ssid', bssid=b'\x01\x02\x03\x04\x05\x06', sec=0, channel=13, rssi=-100)) nets.append( scanner.net(ssid='ssid', bssid=b'\x11\x12\x13\x14\x15\x16', sec=0, channel=13, rssi=-100)) nets.append( scanner.net(ssid='ssid', bssid=b'\x21\x22\x23\x24\x25\x26', sec=0, channel=13, rssi=-100)) scanner.get(True, nets) messageStr = bytearr2string(scanner.createMessage()) print("Test scanning (ten networks) => len = {}, message = {}".format( scanner.netsCnt, messageStr)) print("*** Finish unit testing ***") return
#!/usr/bin/python3 from led import Led from buzzer import Buzzer import RPi.GPIO as GPIO import time red = Led(37) green = Led(33) blue = Led(35) yellow = Led(31) try: while True: red.off() green.on() blue.off() yellow.off() Buzzer.success() time.sleep(2) red.on() green.off() blue.off() yellow.off() Buzzer.error() time.sleep(2) except KeyboardInterrupt: GPIO.cleanup()
# set it all up like usual GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) # create leds timingLed = Led(PIN1) # keeps a steady pace notifyingLed = Led(PIN2) # will change based on how close we are to the end counter = TIME #set the counter to be the same as the seconds third = math.floor(TIME / 3) twothirds = third * 2 half = math.floor(TIME / 2) while (counter > 0): counter -= 1 #step backwards by one time.sleep(1) timingLed.toggle() #put the led in the opposite state it was in before # first third if (counter > half and counter < twothirds): notifyingLed.on() # halfway if (counter <= half and counter > third): notifyingLed.toggle() # last third if (counter <= third): notifyingLed.blink(2, .05)
# Macro Button #1 btn_mac1 = Button(board.GP14) btn_mac1.setOnPressCallback(macro1) # Macro Button #2 btn_mac2 = Button(board.GP12) btn_mac1.setOnPressCallback(macro1) # Macro Button #3 btn_mac3 = Button(board.GP10) btn_mac1.setOnPressCallback(macro1) # ------------ Status LED ------------ led = Led(board.LED) led.on() while True: # Track Control Buttons btn_prev.onClick() btn_plpa.onClick() btn_next.onClick() # Extra Function Keys btn_mac1.onClick() btn_mac2.onClick() btn_mac3.onClick() # Volume Control vol_encoder.onRotate() vol_encoder.onClick() led.off()