diff --git a/PSL/Peripherals.py b/PSL/Peripherals.py index 35c18330..3533b717 100644 --- a/PSL/Peripherals.py +++ b/PSL/Peripherals.py @@ -427,7 +427,6 @@ def __captureStart__(self,address,location,sample_length,total_samples,tg): def __retrievebuffer__(self): ''' Fetch data acquired by the I2C scope. refer to :func:`__captureStart__` - ''' total_int_samples = self.total_bytes/2 DATA_SPLITTING = 500 @@ -440,7 +439,7 @@ def __retrievebuffer__(self): self.H.__sendInt__(DATA_SPLITTING) self.H.__sendInt__(i*DATA_SPLITTING) rem = DATA_SPLITTING*2+1 - for a in range(200): + for _ in range(200): partial = self.H.fd.read(rem) #reading int by int sometimes causes a communication error. this works better. rem -=len(partial) data+=partial @@ -457,7 +456,7 @@ def __retrievebuffer__(self): self.H.__sendInt__(total_int_samples%DATA_SPLITTING) self.H.__sendInt__(total_int_samples-total_int_samples%DATA_SPLITTING) rem = 2*(total_int_samples%DATA_SPLITTING)+1 - for a in range(20): + for _ in range(20): partial = self.H.fd.read(rem) #reading int by int sometimes causes a communication error. this works better. rem -=len(partial) data+=partial @@ -825,6 +824,13 @@ def send16_burst(self, value): except Exception as ex: self.raiseException(ex, "Communication Error , Function : " + inspect.currentframe().f_code.co_name) + def xfer(self,chan,data): + self.start(chan) + reply=[] + for a in data: + reply.append(self.send8(a)) + self.stop(chan) + return reply class DACCHAN: def __init__(self, name, span, channum, **kwargs): diff --git a/PSL/SENSORS/BH1750.py b/PSL/SENSORS/BH1750.py index d7a0ac24..2d14a748 100644 --- a/PSL/SENSORS/BH1750.py +++ b/PSL/SENSORS/BH1750.py @@ -1,5 +1,4 @@ from __future__ import print_function -from numpy import int16 def connect(route, **args): diff --git a/PSL/SENSORS/HMC5883L.py b/PSL/SENSORS/HMC5883L.py index 212cfee1..8128a8c8 100644 --- a/PSL/SENSORS/HMC5883L.py +++ b/PSL/SENSORS/HMC5883L.py @@ -77,8 +77,8 @@ def setGain(self, gain): self.gainValue = self.gain_choices.index(gain) self.__writeCONFB__() - def getVals(self, addr, bytes): - vals = self.I2C.readBulk(self.ADDRESS, addr, bytes) + def getVals(self, addr, numbytes): + vals = self.I2C.readBulk(self.ADDRESS, addr, numbytes) return vals def getRaw(self): diff --git a/PSL/SENSORS/MLX90614.py b/PSL/SENSORS/MLX90614.py index 725eab78..ce26342c 100644 --- a/PSL/SENSORS/MLX90614.py +++ b/PSL/SENSORS/MLX90614.py @@ -1,5 +1,4 @@ from __future__ import print_function -from numpy import int16 def connect(route, **args): @@ -27,8 +26,8 @@ def __init__(self, I2C, **args): try: print('switching baud to 100k') self.I2C.configI2C(100e3) - except: - print('FAILED TO CHANGE BAUD RATE') + except Exception as e: + print('FAILED TO CHANGE BAUD RATE',e.message) def select_source(self, source): if source == 'object temperature': @@ -40,8 +39,8 @@ def readReg(self, addr): x = self.getVals(addr, 2) print(hex(addr), hex(x[0] | (x[1] << 8))) - def getVals(self, addr, bytes): - vals = self.I2C.readBulk(self.ADDRESS, addr, bytes) + def getVals(self, addr, numbytes): + vals = self.I2C.readBulk(self.ADDRESS, addr, numbytes) return vals def getRaw(self): diff --git a/PSL/SENSORS/MPU6050.py b/PSL/SENSORS/MPU6050.py index 7e87c877..c2f56578 100644 --- a/PSL/SENSORS/MPU6050.py +++ b/PSL/SENSORS/MPU6050.py @@ -37,12 +37,6 @@ def __init__(self, I2C, **args): 'KalmanFilter': {'dataType':'double','min':0,'max':1000,'prefix':'value: '} } self.setGyroRange(2000) self.setAccelRange(16) - ''' - try: - self.I2C.configI2C(400e3) - except: - pass - ''' self.powerUp() self.K = None @@ -60,8 +54,8 @@ def KalmanFilter(self, opt): sd = std(noise[a]) self.K[a] = KalmanFilter(1. / opt, sd ** 2) - def getVals(self, addr, bytes): - vals = self.I2C.readBulk(self.ADDRESS, addr, bytes) + def getVals(self, addr, numbytes): + vals = self.I2C.readBulk(self.ADDRESS, addr, numbytes) return vals def powerUp(self): diff --git a/PSL/SENSORS/MPU925x.py b/PSL/SENSORS/MPU925x.py index 1322c435..7996a624 100644 --- a/PSL/SENSORS/MPU925x.py +++ b/PSL/SENSORS/MPU925x.py @@ -37,17 +37,9 @@ def __init__(self,I2C,**args): self.params={'powerUp':None,'setGyroRange':[250,500,1000,2000],'setAccelRange':[2,4,8,16],'KalmanFilter':[.01,.1,1,10,100,1000,10000,'OFF']} self.setGyroRange(2000) self.setAccelRange(16) - ''' - try: - self.I2C.configI2C(400e3) - except: - pass - ''' self.powerUp() self.K=None - - def KalmanFilter(self,opt): if opt=='OFF': self.K=None @@ -62,9 +54,8 @@ def KalmanFilter(self,opt): sd = std(noise[a]) self.K[a] = KalmanFilter(1./opt, sd**2) - def getVals(self,addr,bytes): - vals = self.I2C.readBulk(self.ADDRESS,addr,bytes) - return vals + def getVals(self,addr,numbytes): + return self.I2C.readBulk(self.ADDRESS,addr,numbytes) def powerUp(self): self.I2C.writeBulk(self.ADDRESS,[0x6B,0]) @@ -79,8 +70,7 @@ def setAccelRange(self,rs): def getRaw(self): ''' - This method must be defined if you want GUIs to use this class to generate - plots on the fly. + This method must be defined if you want GUIs to use this class to generate plots on the fly. It must return a set of different values read from the sensor. such as X,Y,Z acceleration. The length of this list must not change, and must be defined in the variable NUMPLOTS. @@ -151,8 +141,8 @@ def getMag(self): def WhoAmI(self): ''' - Returns the ID . - It is 71 for MPU9250 . + Returns the ID. + It is 71 for MPU9250. ''' v = self.I2C.readBulk(self.ADDRESS,0x75,1)[0] if v not in [0x71,0x73]:return 'Error %s'%hex(v) @@ -164,8 +154,8 @@ def WhoAmI(self): def WhoAmI_AK8963(self): ''' - Returns the ID fo magnetometer AK8963 if found. - It should be 0x48. + Returns the ID fo magnetometer AK8963 if found. + It should be 0x48. ''' self.initMagnetometer() v= self.I2C.readBulk(self.AK8963_ADDRESS,0,1) [0] @@ -175,10 +165,9 @@ def WhoAmI_AK8963(self): def initMagnetometer(self): ''' For MPU925x with integrated magnetometer. - It's called a 10 DoF sensor, but technically speaking , - the 3-axis Accel , 3-Axis Gyro, temperature sensor are integrated in one IC, and the 3-axis magnetometer is implemented in a + It's called a 10 DoF sensor, but technically speaking , + the 3-axis Accel , 3-Axis Gyro, temperature sensor are integrated in one IC, and the 3-axis magnetometer is implemented in a separate IC which can be accessed via an I2C passthrough. - Therefore , in order to detect the magnetometer via an I2C scan, the passthrough must first be enabled on IC#1 (Accel,gyro,temp) ''' self.I2C.writeBulk(self.ADDRESS,[self.INT_PIN_CFG,0x22]) #I2C passthrough @@ -190,8 +179,8 @@ def initMagnetometer(self): if __name__ == "__main__": from PSL import sciencelab I = sciencelab.connect() - A = connect(I.I2C) - t,x,y,z = I.I2C.capture(A.ADDRESS,0x43,6,5000,1000,'int') + A = connect(I.I2C) + t,x,y,z = I.I2C.capture(A.ADDRESS,0x43,6,5000,1000,'int') #print (t,x,y,z) from pylab import * plot(t,x) diff --git a/PSL/SENSORS/SHT21.py b/PSL/SENSORS/SHT21.py index c86f60db..76285c8b 100644 --- a/PSL/SENSORS/SHT21.py +++ b/PSL/SENSORS/SHT21.py @@ -1,5 +1,4 @@ from __future__ import print_function -from numpy import int16 import time @@ -9,6 +8,27 @@ def connect(route, **args): ''' return SHT21(route, **args) +def rawToTemp( vals): + if vals: + if len(vals): + v = (vals[0] << 8) | (vals[1] & 0xFC) # make integer & remove status bits + v *= 175.72 + v /= (1 << 16) + v -= 46.85 + return [v] + return False + +def rawToRH( vals): + if vals: + if len(vals): + v = (vals[0] << 8) | (vals[1] & 0xFC) # make integer & remove status bits + v *= 125. + v /= (1 << 16) + v -= 6 + return [v] + return False + + class SHT21(): RESET = 0xFE @@ -38,25 +58,6 @@ def init(self): self.I2C.writeBulk(self.ADDRESS, [self.RESET]) # soft reset time.sleep(0.1) - def rawToTemp(self, vals): - if vals: - if len(vals): - v = (vals[0] << 8) | (vals[1] & 0xFC) # make integer & remove status bits - v *= 175.72 - v /= (1 << 16) - v -= 46.85 - return [v] - return False - - def rawToRH(self, vals): - if vals: - if len(vals): - v = (vals[0] << 8) | (vals[1] & 0xFC) # make integer & remove status bits - v *= 125. - v /= (1 << 16) - v -= 6 - return [v] - return False @staticmethod def _calculate_checksum(data, number_of_bytes): @@ -69,7 +70,7 @@ def _calculate_checksum(data, number_of_bytes): # calculates 8-Bit checksum with given polynomial for byteCtr in range(number_of_bytes): crc ^= (data[byteCtr]) - for bit in range(8, 0, -1): + for _ in range(8, 0, -1): if crc & 0x80: crc = (crc << 1) ^ POLYNOMIAL else: @@ -95,6 +96,6 @@ def getRaw(self): print(vals) return False if self.selected == self.TEMP_ADDRESS: - return self.rawToTemp(vals) + return rawToTemp(vals) elif self.selected == self.HUMIDITY_ADDRESS: - return self.rawToRH(vals) + return rawToRH(vals) diff --git a/PSL/SENSORS/Sx1276.py b/PSL/SENSORS/Sx1276.py new file mode 100644 index 00000000..022a3c76 --- /dev/null +++ b/PSL/SENSORS/Sx1276.py @@ -0,0 +1,331 @@ +#Registers adapted from sample code for SEMTECH SX1276 +import time + +def connect(SPI,frq,**kwargs): + return SX1276(SPI,frq,**kwargs) + + +class SX1276(): + name = 'SX1276' + #registers + REG_FIFO = 0x00 + REG_OP_MODE = 0x01 + REG_FRF_MSB = 0x06 + REG_FRF_MID = 0x07 + REG_FRF_LSB = 0x08 + REG_PA_CONFIG = 0x09 + REG_LNA = 0x0c + REG_FIFO_ADDR_PTR = 0x0d + REG_FIFO_TX_BASE_ADDR = 0x0e + REG_FIFO_RX_BASE_ADDR = 0x0f + REG_FIFO_RX_CURRENT_ADDR = 0x10 + REG_IRQ_FLAGS = 0x12 + REG_RX_NB_BYTES = 0x13 + REG_PKT_RSSI_VALUE = 0x1a + REG_PKT_SNR_VALUE = 0x1b + REG_MODEM_CONFIG_1 = 0x1d + REG_MODEM_CONFIG_2 = 0x1e + REG_PREAMBLE_MSB = 0x20 + REG_PREAMBLE_LSB = 0x21 + REG_PAYLOAD_LENGTH = 0x22 + REG_MODEM_CONFIG_3 = 0x26 + REG_RSSI_WIDEBAND = 0x2c + REG_DETECTION_OPTIMIZE = 0x31 + REG_DETECTION_THRESHOLD = 0x37 + REG_SYNC_WORD = 0x39 + REG_DIO_MAPPING_1 = 0x40 + REG_VERSION = 0x42 + REG_PA_DAC = 0x4D + #modes + MODE_LONG_RANGE_MODE = 0x80 + MODE_SLEEP = 0x00 + MODE_STDBY = 0x01 + MODE_TX = 0x03 + MODE_RX_CONTINUOUS = 0x05 + MODE_RX_SINGLE = 0x06 + + #PA config + PA_BOOST = 0x80 + + #IRQ masks + IRQ_TX_DONE_MASK = 0x08 + IRQ_PAYLOAD_CRC_ERROR_MASK = 0x20 + IRQ_RX_DONE_MASK = 0x40 + + MAX_PKT_LENGTH = 255 + + PA_OUTPUT_RFO_PIN =0 + PA_OUTPUT_PA_BOOST_PIN =1 + _onReceive = 0 + _frequency = 10 + _packetIndex = 0 + packetLength =0 + + def __init__(self,SPI,frq,**kwargs): + self.SPI = SPI + self.SPI.set_parameters(2,6,1,0) + self.name = 'SX1276' + self.frequency = frq + + self.reset() + self.version = self.SPIRead(self.REG_VERSION,1)[0] + if self.version!=0x12: + print 'version error',self.version + self.sleep() + self.setFrequency(self.frequency) + + #set base address + self.SPIWrite(self.REG_FIFO_TX_BASE_ADDR,[0]) + self.SPIWrite(self.REG_FIFO_RX_BASE_ADDR,[0]) + + #set LNA boost + self.SPIWrite(self.REG_LNA,[self.SPIRead(self.REG_LNA)[0]|0x03]) + + #set auto ADC + self.SPIWrite(self.REG_MODEM_CONFIG_3,[0x04]) + + #output power 17dbm + self.setTxPower(kwargs.get('power',17),self.PA_OUTPUT_PA_BOOST_PIN if kwargs.get('boost',True) else self.PA_OUTPUT_RFO_PIN) + self.idle() + + #set bandwidth + self.setSignalBandwidth(kwargs.get('BW',125e3)) + self.setSpreadingFactor(kwargs.get('SF',12)) + self.setCodingRate4(kwargs.get('CF',5)) + + def beginPacket(self,implicitHeader=False): + self.idle() + if implicitHeader: + self.implicitHeaderMode() + else: + self.explicitHeaderMode() + + #reset FIFO & payload length + self.SPIWrite(self.REG_FIFO_ADDR_PTR,[0]) + self.SPIWrite(self.REG_PAYLOAD_LENGTH,[0]) + + def endPacket(self): + #put in TX mode + self.SPIWrite(self.REG_OP_MODE,[self.MODE_LONG_RANGE_MODE|self.MODE_TX]) + while 1: #Wait for TX done + if self.SPIRead(self.REG_IRQ_FLAGS,1)[0] & self.IRQ_TX_DONE_MASK: break + else: + print ('wait...') + time.sleep(0.1) + self.SPIWrite(self.REG_IRQ_FLAGS,[self.IRQ_TX_DONE_MASK]) + + def parsePacket(self,size=0): + self.packetLength = 0 + irqFlags = self.SPIRead(self.REG_IRQ_FLAGS,1)[0] + if size>0: + self.implicitHeaderMode() + self.SPIWrite(self.REG_PAYLOAD_LENGTH,[size&0xFF]) + else: + self.explicitHeaderMode() + self.SPIWrite(self.REG_IRQ_FLAGS,[irqFlags]) + if (irqFlags & self.IRQ_RX_DONE_MASK) and (irqFlags & self.IRQ_PAYLOAD_CRC_ERROR_MASK)==0 : + self._packetIndex = 0 + if self._implicitHeaderMode: + self.packetLength = self.SPIRead(self.REG_PAYLOAD_LENGTH,1)[0] + else: + self.packetLength = self.SPIRead(self.REG_RX_NB_BYTES,1)[0] + self.SPIWrite(self.REG_FIFO_ADDR_PTR,self.SPIRead(self.REG_FIFO_RX_CURRENT_ADDR,1)) + self.idle() + elif self.SPIRead(self.REG_OP_MODE)[0] != (self.MODE_LONG_RANGE_MODE|self.MODE_RX_SINGLE): + self.SPIWrite(self.REG_FIFO_ADDR_PTR,[0]) + self.SPIWrite(self.REG_OP_MODE,[self.MODE_LONG_RANGE_MODE|self.MODE_RX_SINGLE]) + return self.packetLength + + def packetRssi(self): + return self.SPIRead(self.REG_PKT_RSSI_VALUE)[0] - (164 if self._frequency<868e6 else 157) + def packetSnr(self): + return self.SPIRead(self.REG_PKT_SNR_VALUE)[0]*0.25 + + def write(self,byteArray): + size = len(byteArray) + currentLength = self.SPIRead(self.REG_PAYLOAD_LENGTH)[0] + if (currentLength+size) > self.MAX_PKT_LENGTH: + size = self.MAX_PKT_LENGTH - currentLength + self.SPIWrite(self.REG_FIFO,byteArray[:size]) + self.SPIWrite(self.REG_PAYLOAD_LENGTH,[currentLength+size]) + return size + def available(self): + return self.SPIRead(self.REG_RX_NB_BYTES)[0] - self._packetIndex + + def checkRx(self): + irqFlags = self.SPIRead(self.REG_IRQ_FLAGS,1)[0] + if (irqFlags & self.IRQ_RX_DONE_MASK) and (irqFlags & self.IRQ_PAYLOAD_CRC_ERROR_MASK)==0 : + return 1 + return 0; + + + def read(self): + if not self.available():return -1 + self._packetIndex+=1 + return self.SPIRead(self.REG_FIFO)[0] + + def readAll(self): + p=[] + while self.available(): + p.append(self.read()) + return p + + def peek(self): + if not self.available():return -1 + self.currentAddress = self.SPIRead(self.REG_FIFO_ADDR_PTR) + val = self.SPIRead(self.REG_FIFO)[0] + self.SPIWrite(self.REG_FIFO_ADDR_PTR,self.currentAddress) + return val + def flush(self): + pass + + + def receive(self,size): + if size>0: + self.implicitHeaderMode() + self.SPIWrite(self.REG_PAYLOAD_LENGTH,[size&0xFF]) + else: + self.explicitHeaderMode() + + self.SPIWrite(self.REG_OP_MODE,[self.MODE_LONG_RANGE_MODE|self.MODE_RX_SINGLE]) + + + def reset(self): + pass + + + def idle(self): + self.SPIWrite(self.REG_OP_MODE,[self.MODE_LONG_RANGE_MODE|self.MODE_STDBY]) + + def sleep(self): + self.SPIWrite(self.REG_OP_MODE,[self.MODE_LONG_RANGE_MODE|self.MODE_SLEEP]) + + def setTxPower(self,level,pin): + if pin == self.PA_OUTPUT_RFO_PIN: + if level<0: level=0 + elif level>14: level = 14 + self.SPIWrite(self.REG_PA_CONFIG,[0x70|level]) + else: + if level<2: level=2 + elif level>17: + level = 17 + if level==17: + print ('max power output') + self.SPIWrite(self.REG_PA_DAC,[0x87]) + else: + self.SPIWrite(self.REG_PA_DAC,[0x84]) + self.SPIWrite(self.REG_PA_CONFIG,[self.PA_BOOST|0x70|(level-2)]) + + print 'power',hex(self.SPIRead(self.REG_PA_CONFIG)[0]) + + def setFrequency(self,frq): + self._frequency = frq + frf = (int(frq)<<19)/32000000 + print ('frf',frf) + print ('freq',(frf>>16)&0xFF,(frf>>8)&0xFF,(frf)&0xFF) + self.SPIWrite(self.REG_FRF_MSB,[(frf>>16)&0xFF]) + self.SPIWrite(self.REG_FRF_MID,[(frf>>8)&0xFF]) + self.SPIWrite(self.REG_FRF_LSB,[frf&0xFF]) + + def setSpreadingFactor(self,sf): + if sf<6:sf=6 + elif sf>12:sf=12 + + if sf==6: + self.SPIWrite(self.REG_DETECTION_OPTIMIZE,[0xc5]) + self.SPIWrite(self.REG_DETECTION_THRESHOLD,[0x0c]) + else: + self.SPIWrite(self.REG_DETECTION_OPTIMIZE,[0xc3]) + self.SPIWrite(self.REG_DETECTION_THRESHOLD,[0x0a]) + self.SPIWrite(self.REG_MODEM_CONFIG_2,[(self.SPIRead(self.REG_MODEM_CONFIG_2)[0]&0x0F)|((sf<<4)&0xF0)]) + + def setSignalBandwidth(self,sbw): + bw=9 + num=0 + for a in [7.8e3,10.4e3,15.6e3,20.8e3,31.25e3,41.7e3,62.5e3,125e3,250e3]: + if sbw<=a: + bw = num + break + num+=1 + print ('bandwidth: ',bw) + self.SPIWrite(self.REG_MODEM_CONFIG_1,[(self.SPIRead(self.REG_MODEM_CONFIG_1)[0]&0x0F)|(bw<<4)]) + + def setCodingRate4(self,denominator): + if denominator<5:denominator = 5 + elif denominator>8:denominator = 8 + self.SPIWrite(self.REG_MODEM_CONFIG_1,[(self.SPIRead(self.REG_MODEM_CONFIG_1)[0]&0xF1)|((denominator-4)<<4)]) + + def setPreambleLength(self,length): + self.SPIWrite(self.REG_PREAMBLE_MSB,[(length>>8)&0xFF]) + self.SPIWrite(self.REG_PREAMBLE_LSB,[length&0xFF]) + + def setSyncWord(self,sw): + self.SPIWrite(self.REG_SYNC_WORD,[sw]) + + def crc(self): + self.SPIWrite(self.REG_MODEM_CONFIG_2,[self.SPIRead(self.REG_MODEM_CONFIG_2)[0]|0x04]) + def noCrc(self): + self.SPIWrite(self.REG_MODEM_CONFIG_2,[self.SPIRead(self.REG_MODEM_CONFIG_2)[0]&0xFB]) + def random(self): + return self.SPIRead(self.REG_RSSI_WIDEBAND)[0] + + def explicitHeaderMode(self): + self._implicitHeaderMode=0 + self.SPIWrite(self.REG_MODEM_CONFIG_1,[self.SPIRead(self.REG_MODEM_CONFIG_1)[0]&0xFE]) + + def implicitHeaderMode(self): + self._implicitHeaderMode=1 + self.SPIWrite(self.REG_MODEM_CONFIG_1,[self.SPIRead(self.REG_MODEM_CONFIG_1)[0]|0x01]) + + def handleDio0Rise(self): + irqFlags = self.SPIRead(self.REG_IRQ_FLAGS,1)[0] + self.SPIWrite(self.REG_IRQ_FLAGS,[irqFlags]) + + if (irqFlags & self.IRQ_PAYLOAD_CRC_ERROR_MASK)==0 : + self._packetIndex = 0 + if self._implicitHeaderMode: + self.packetLength = self.SPIRead(self.REG_PAYLOAD_LENGTH,1)[0] + else: + self.packetLength = self.SPIRead(self.REG_RX_NB_BYTES,1)[0] + + self.SPIWrite(self.REG_FIFO_ADDR_PTR,self.SPIRead(self.REG_FIFO_RX_CURRENT_ADDR,1)) + if self._onReceive: + print self.packetLength + #self._onReceive(self.packetLength) + + self.SPIWrite(self.REG_FIFO_ADDR_PTR,[0]) + + def SPIWrite(self,adr,byteArray): + return self.SPI.xfer('CS1',[0x80|adr]+byteArray)[1:] + + def SPIRead(self,adr,total_bytes=1): + return self.SPI.xfer('CS1',[adr]+[0]*total_bytes)[1:] + + def getRaw(self): + val = self.SPIRead(0x02,1) + return val + +if __name__ == "__main__": + RX = 0; TX=1 + mode = RX + from PSL import sciencelab + I= sciencelab.connect() + lora = SX1276(I.SPI,434e6,boost=True,power=17,BW=125e3,SF=12,CR=5) #settings for maximum range + lora.crc() + cntr=0 + while 1: + time.sleep(0.01) + if mode==TX: + lora.beginPacket() + lora.write([cntr]) + #lora.write([ord(a) for a in ":"]+[cntr]) + print (time.ctime(),[ord(a) for a in ":"]+[cntr], hex(lora.SPIRead(lora.REG_OP_MODE)[0])) + lora.endPacket() + cntr+=1 + if cntr==255:cntr=0 + elif mode==RX: + packet_size = lora.parsePacket() + if packet_size: + print 'data',lora.readAll() + print ('Rssi',lora.packetRssi(),lora.packetSnr()) + diff --git a/PSL/sciencelab.py b/PSL/sciencelab.py index 7a56d36e..031fa198 100644 --- a/PSL/sciencelab.py +++ b/PSL/sciencelab.py @@ -4143,12 +4143,15 @@ def raiseException(self, ex, msg): if __name__ == "__main__": - print("""this is not an executable file + print("""this is not an executable file from PSL import sciencelab I=sciencelab.connect() eg. I.get_average_voltage('CH1') """) -# I=connect(verbose = True) -# for a in range(20):print (I.get_capacitance()) -# I=connect(verbose=True,load_calibration=False) + I=connect(verbose = True) + t = time.time() + for a in range(100): + s = I.read_flash(3,a) + #print(s.replace('\n','.'),len(s)) + print (time.time()-t) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy