def __init__(self): """ Big init routine as the whole board is brought up. """ self.BOOTTIME = const(time.time()) self.data_cache = {} self.filenumbers = {} self.vlowbatt = 6.0 self.send_buff = memoryview(SEND_BUFF) self.debug = True self.micro = microcontroller self.hardware = { 'IMU': False, 'Radio1': False, 'Radio2': False, 'SDcard': False, 'GPS': False, 'WDT': False, 'USB': False, 'PWR': False } # Define burn wires: self._relayA = digitalio.DigitalInOut(board.RELAY_A) self._relayA.switch_to_output( drive_mode=digitalio.DriveMode.OPEN_DRAIN) self._resetReg = digitalio.DigitalInOut(board.VBUS_RST) self._resetReg.switch_to_output( drive_mode=digitalio.DriveMode.OPEN_DRAIN) # Define battery voltage self._vbatt = AnalogIn(board.BATTERY) # Define MPPT charge current measurement self._ichrg = AnalogIn(board.L1PROG) self._chrg = digitalio.DigitalInOut(board.CHRG) self._chrg.switch_to_input() # Define SPI,I2C,UART self.i2c1 = busio.I2C(board.SCL, board.SDA) self.spi = board.SPI() self.uart = busio.UART(board.TX, board.RX) # Define GPS self.en_gps = digitalio.DigitalInOut(board.EN_GPS) self.en_gps.switch_to_output() # Define filesystem stuff self.logfile = "/log.txt" # Define radio _rf_cs1 = digitalio.DigitalInOut(board.RF1_CS) _rf_rst1 = digitalio.DigitalInOut(board.RF1_RST) self.enable_rf = digitalio.DigitalInOut(board.EN_RF) self.radio1_DIO0 = digitalio.DigitalInOut(board.RF1_IO0) # self.enable_rf.switch_to_output(value=False) # if U21 self.enable_rf.switch_to_output(value=True) # if U7 _rf_cs1.switch_to_output(value=True) _rf_rst1.switch_to_output(value=True) self.radio1_DIO0.switch_to_input() # Initialize SD card (always init SD before anything else on spi bus) try: # Baud rate depends on the card, 4MHz should be safe _sd = sdcardio.SDCard(self.spi, board.SD_CS, baudrate=4000000) _vfs = VfsFat(_sd) mount(_vfs, "/sd") self.fs = _vfs sys.path.append("/sd") self.hardware['SDcard'] = True self.logfile = "/sd/log.txt" except Exception as e: if self.debug: print('[ERROR][SD Card]', e) # Initialize Neopixel try: self.neopixel = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness=0.2, pixel_order=neopixel.GRB) self.neopixel[0] = (0, 0, 0) self.hardware['Neopixel'] = True except Exception as e: if self.debug: print('[WARNING][Neopixel]', e) # Initialize USB charger try: self.usb = bq25883.BQ25883(self.i2c1) self.usb.charging = False self.usb.wdt = False self.usb.led = False self.usb.charging_current = 8 #400mA self.usb_charging = False self.hardware['USB'] = True except Exception as e: if self.debug: print('[ERROR][USB Charger]', e) # Initialize Power Monitor try: self.pwr = adm1176.ADM1176(self.i2c1) self.pwr.sense_resistor = 1 self.hardware['PWR'] = True except Exception as e: if self.debug: print('[ERROR][Power Monitor]', e) # Initialize IMU try: self.IMU = bmx160.BMX160_I2C(self.i2c1) self.hardware['IMU'] = True except Exception as e: if self.debug: print('[ERROR][IMU]', e) # # Initialize GPS # try: # self.gps = GPS(self.uart,debug=False) # still powered off! # self.gps.timeout_handler=self.timeout_handler # self.hardware['GPS'] = True # except Exception as e: # if self.debug: print('[ERROR][GPS]',e) # Initialize radio #1 - UHF try: self.radio1 = pycubed_rfm9x.RFM9x(self.spi, _rf_cs1, _rf_rst1, 433.0, code_rate=8, baudrate=1320000) # Default LoRa Modulation Settings # Frequency: 433 MHz, SF7, BW125kHz, CR4/8, Preamble=8, CRC=True self.radio1.dio0 = self.radio1_DIO0 self.radio1.enable_crc = True self.radio1.ack_delay = 0.2 self.radio1.sleep() self.hardware['Radio1'] = True except Exception as e: if self.debug: print('[ERROR][RADIO 1]', e) # set PyCubed power mode self.power_mode = 'normal'
def __init__(self): """ Big init routine as the whole board is brought up. """ self.hardware = { 'IMU': False, 'Radio1': False, 'Radio2': False, 'SDcard': False, 'GPS': False, 'MRAM': False, 'WDT': False, 'USB': False, 'PWR': False, } # Define burn wires: self._relayA = digitalio.DigitalInOut(board.RELAY_A) self._relayA.switch_to_output( drive_mode=digitalio.DriveMode.OPEN_DRAIN) self._deployA = False # Define battery voltage self._vbatt = analogio.AnalogIn(board.BATTERY) # Define MPPT charge current measurement self._ichrg = analogio.AnalogIn(board.L1PROG) # Define SPI,I2C,UART self.i2c = busio.I2C(board.SCL, board.SDA) self.spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) self.uart = busio.UART(board.TX, board.RX, baudrate=9600, timeout=10) # Define GPS self.en_gps = digitalio.DigitalInOut(board.EN_GPS) self.en_gps.switch_to_output() # Define sdcard self._sdcs = digitalio.DigitalInOut(board.xSDCS) self._sdcs.switch_to_output(value=True) # Define radio self._rf_cs1 = digitalio.DigitalInOut(board.RF1_CS) self._rf_rst1 = digitalio.DigitalInOut(board.RF1_RST) self._rf_cs1.switch_to_output(value=True) self._rf_rst1.switch_to_output(value=True) self._rf_cs2 = digitalio.DigitalInOut(board.RF2_CS) self._rf_rst2 = digitalio.DigitalInOut(board.RF2_RST) self._rf_cs2.switch_to_output(value=True) self._rf_rst2.switch_to_output(value=True) # Define MRAM (manual-mode) # self._mram_cs = digitalio.DigitalInOut(microcontroller.pin.PB11) # self._mram_cs.switch_to_output(value=True) # Initialize Neopixel try: self.neopixel = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness=0.2, pixel_order=neopixel.GRBW) self.neopixel[0] = (0, 0, 0) self.hardware['Neopixel'] = True except Exception as e: print('[WARNING][Neopixel]', e) # Initialize USB charger try: self.usb = bq25883.BQ25883(self.i2c) self.usb.charging = False self.usb.wdt = False self.usb.led = False self.usb_charging = False self.hardware['USB'] = True except Exception as e: print('[ERROR][USB Charger]', e) # Initialize sdcard try: self._sd = adafruit_sdcard.SDCard(self.spi, self._sdcs) self._vfs = storage.VfsFat(self._sd) storage.mount(self._vfs, "/sd") sys.path.append("/sd") self.hardware['SDcard'] = True except Exception as e: print('[ERROR][SD Card]', e) # Initialize Power Monitor try: self.pwr = adm1176.ADM1176(self.i2c) self.pwr.sense_resistor = 1 self.hardware['PWR'] = True except Exception as e: print('[ERROR][Power Monitor]', e) # Initialize IMU try: self.IMU = bmx160.BMX160_I2C(self.i2c) self.hardware['IMU'] = True except Exception as e: print('[ERROR]', e) # Initialize radio(s) try: self.radio1 = adafruit_rfm9x.RFM9x(self.spi, self._rf_cs1, self._rf_rst1, 433.0) self.hardware['Radio1'] = True except Exception as e: print('[ERROR][RADIO 1]', e) try: self.radio2 = adafruit_rfm9x.RFM9x(self.spi, self._rf_cs2, self._rf_rst2, 433.0) self.hardware['Radio2'] = True except Exception as e: print('[ERROR][RADIO 2]', e)