kopia lustrzana https://github.com/GuyCarver/MicroPython
Updated
rodzic
54babcede8
commit
2ce8c348bd
|
@ -0,0 +1,76 @@
|
|||
from pyb import UART, udelay
|
||||
|
||||
#AT commands for the ESP8266
|
||||
#For comprehensive instructions visit http://www.electrodragon.com/w/Wi07c
|
||||
#AT command strings must end with "\r\n" to trigger command processing.
|
||||
#Any commands takin ssid or passwords must have id or password surrounded by quotes.
|
||||
#AT - return "ok" if connection works.
|
||||
#AT+RST - reset. Will write back a bunch of gibberish then "ready"
|
||||
#AT+GMR - firmware version.
|
||||
#AT+CIOBAUD? or AT+CIOBAUD=? - return baud rate, AT+CIOBAUD=xxx - set baud rate.
|
||||
#AT+CWMODE or CWMODE? 1=Sta, 2=AP, 3=both. AP for devices STA for router.
|
||||
#AT+CWJAP=ssid,pwd or CWJAP? Join or report AP.
|
||||
#AT+CWLAP - list APs.
|
||||
#AT+CWQAP - Quit AP.
|
||||
#AT+CWSAP=ssid,pwd,chnl,encryption or CWSAP? = Set AP params.
|
||||
#AT+CWLIF - Check join devices.
|
||||
#AT+CIPSTATUS - Get connection status.
|
||||
#AT+CIPSTART
|
||||
#AT+CIPMODE=mode - 0 no data mode, 1 data mode, CIPMODE? reports mode.
|
||||
#AT+CIPSEND=lengh - send data.
|
||||
#AT+CIPCLOSE - Close TCP/UDP connection.
|
||||
#AT+CIFSR - Get IP addresses
|
||||
#AT+CIPMUX=mode or CIPMUX? - set/get multiple connection mode.
|
||||
#AT+CIPSERVER=mode,port - Set as server.
|
||||
#AT+CIPSTO=timout or CIPSTO? - Set/get server timout.
|
||||
#AT+IPD - Receive data
|
||||
#AT+CSYSWDTENABLE or DISABLE - enable/disable restart on error watchdog.
|
||||
|
||||
class WIFI:
|
||||
"""docstring for wifi"""
|
||||
|
||||
def __init__(self, uart, baudrate = 115200):
|
||||
""" uart = uart #1-6, baudrate must match what is set on the ESP8266. """
|
||||
self._uart = UART(uart, baudrate)
|
||||
|
||||
def write( self, aMsg ) :
|
||||
self._uart.write(aMsg)
|
||||
res = self._uart.readall()
|
||||
if res:
|
||||
print(res.decode("utf-8"))
|
||||
|
||||
def read( self ) : return self._uart.readall().decode("utf-8")
|
||||
|
||||
def _cmd( self, cmd ) :
|
||||
""" Send AT command, wait a bit then return results. """
|
||||
self._uart.write("AT+" + cmd + "\r\n")
|
||||
udelay(500)
|
||||
return self.read()
|
||||
|
||||
@property
|
||||
def IP(self): return self._cmd("CIFSR")
|
||||
|
||||
@property
|
||||
def networks( self ) : return self._cmd("CWLAP")
|
||||
|
||||
@property
|
||||
def baudrate(self): return self._cmd("CIOBAUD?")
|
||||
|
||||
@baudrate.setter
|
||||
def baudrate(self, value): return self._cmd("CIOBAUD=" + str(value))
|
||||
|
||||
@property
|
||||
def mode(self): return self._cmd("CWMODE?")
|
||||
|
||||
@mode.setter
|
||||
def mode(self, value): self._cmd("CWMODE=" + str(value))
|
||||
|
||||
def connect( self, ssid, password = "" ) :
|
||||
""" Connect to the given network ssid with the given password """
|
||||
constr = "CWJAP=\"" + ssid + "\",\"" + password + "\""
|
||||
return self._cmd(constr)
|
||||
|
||||
def disconnect( self ) : return self._cmd("CWQAP")
|
||||
|
||||
def reset( self ) : return self._cmd("RST")
|
||||
|
|
@ -0,0 +1,561 @@
|
|||
#driver for GY-521 Accelerometer
|
||||
#Translated by Guy Carver from the MPU6050 sample code.
|
||||
|
||||
import pyb
|
||||
|
||||
ADDRESS_LOW = 0x68 #address pin low (GND), default for InvenSense evaluation board
|
||||
ADDRESS_HIGH = 0x69 #address pin high (VCC)
|
||||
|
||||
RA_XG_OFFS_TC = 0x00 //[7] PWR_MODE, [6:1] XG_OFFS_TC, [0] OTP_BNK_VLD
|
||||
RA_YG_OFFS_TC = 0x01 //[7] PWR_MODE, [6:1] YG_OFFS_TC, [0] OTP_BNK_VLD
|
||||
RA_ZG_OFFS_TC = 0x02 //[7] PWR_MODE, [6:1] ZG_OFFS_TC, [0] OTP_BNK_VLD
|
||||
RA_X_FINE_GAIN = 0x03 //[7:0] X_FINE_GAIN
|
||||
RA_Y_FINE_GAIN = 0x04 //[7:0] Y_FINE_GAIN
|
||||
RA_Z_FINE_GAIN = 0x05 //[7:0] Z_FINE_GAIN
|
||||
RA_XA_OFFS_H = 0x06 //[15:0] XA_OFFS
|
||||
RA_XA_OFFS_L_TC = 0x07
|
||||
RA_YA_OFFS_H = 0x08 //[15:0] YA_OFFS
|
||||
RA_YA_OFFS_L_TC = 0x09
|
||||
RA_ZA_OFFS_H = 0x0A //[15:0] ZA_OFFS
|
||||
RA_ZA_OFFS_L_TC = 0x0B
|
||||
RA_XG_OFFS_USRH = 0x13 //[15:0] XG_OFFS_USR
|
||||
RA_XG_OFFS_USRL = 0x14
|
||||
RA_YG_OFFS_USRH = 0x15 //[15:0] YG_OFFS_USR
|
||||
RA_YG_OFFS_USRL = 0x16
|
||||
RA_ZG_OFFS_USRH = 0x17 //[15:0] ZG_OFFS_USR
|
||||
RA_ZG_OFFS_USRL = 0x18
|
||||
RA_SMPLRT_DIV = 0x19
|
||||
RA_CONFIG = 0x1A
|
||||
RA_GYRO_CONFIG = 0x1B
|
||||
RA_ACCEL_CONFIG = 0x1C
|
||||
RA_FF_THR = 0x1D
|
||||
RA_FF_DUR = 0x1E
|
||||
RA_MOT_THR = 0x1F
|
||||
RA_MOT_DUR = 0x20
|
||||
RA_ZRMOT_THR = 0x21
|
||||
RA_ZRMOT_DUR = 0x22
|
||||
RA_FIFO_EN = 0x23
|
||||
RA_I2C_MST_CTRL = 0x24
|
||||
RA_I2C_SLV0_ADDR = 0x25
|
||||
RA_I2C_SLV0_REG = 0x26
|
||||
RA_I2C_SLV0_CTRL = 0x27
|
||||
RA_I2C_SLV1_ADDR = 0x28
|
||||
RA_I2C_SLV1_REG = 0x29
|
||||
RA_I2C_SLV1_CTRL = 0x2A
|
||||
RA_I2C_SLV2_ADDR = 0x2B
|
||||
RA_I2C_SLV2_REG = 0x2C
|
||||
RA_I2C_SLV2_CTRL = 0x2D
|
||||
RA_I2C_SLV3_ADDR = 0x2E
|
||||
RA_I2C_SLV3_REG = 0x2F
|
||||
RA_I2C_SLV3_CTRL = 0x30
|
||||
RA_I2C_SLV4_ADDR = 0x31
|
||||
RA_I2C_SLV4_REG = 0x32
|
||||
RA_I2C_SLV4_DO = 0x33
|
||||
RA_I2C_SLV4_CTRL = 0x34
|
||||
RA_I2C_SLV4_DI = 0x35
|
||||
RA_I2C_MST_STATUS = 0x36
|
||||
RA_INT_PIN_CFG = 0x37
|
||||
RA_INT_ENABLE = 0x38
|
||||
RA_DMP_INT_STATUS = 0x39
|
||||
RA_INT_STATUS = 0x3A
|
||||
RA_ACCEL_XOUT_H = 0x3B
|
||||
RA_ACCEL_XOUT_L = 0x3C
|
||||
RA_ACCEL_YOUT_H = 0x3D
|
||||
RA_ACCEL_YOUT_L = 0x3E
|
||||
RA_ACCEL_ZOUT_H = 0x3F
|
||||
RA_ACCEL_ZOUT_L = 0x40
|
||||
RA_TEMP_OUT_H = 0x41
|
||||
RA_TEMP_OUT_L = 0x42
|
||||
RA_GYRO_XOUT_H = 0x43
|
||||
RA_GYRO_XOUT_L = 0x44
|
||||
RA_GYRO_YOUT_H = 0x45
|
||||
RA_GYRO_YOUT_L = 0x46
|
||||
RA_GYRO_ZOUT_H = 0x47
|
||||
RA_GYRO_ZOUT_L = 0x48
|
||||
RA_EXT_SENS_DATA_00 = 0x49
|
||||
RA_EXT_SENS_DATA_01 = 0x4A
|
||||
RA_EXT_SENS_DATA_02 = 0x4B
|
||||
RA_EXT_SENS_DATA_03 = 0x4C
|
||||
RA_EXT_SENS_DATA_04 = 0x4D
|
||||
RA_EXT_SENS_DATA_05 = 0x4E
|
||||
RA_EXT_SENS_DATA_06 = 0x4F
|
||||
RA_EXT_SENS_DATA_07 = 0x50
|
||||
RA_EXT_SENS_DATA_08 = 0x51
|
||||
RA_EXT_SENS_DATA_09 = 0x52
|
||||
RA_EXT_SENS_DATA_10 = 0x53
|
||||
RA_EXT_SENS_DATA_11 = 0x54
|
||||
RA_EXT_SENS_DATA_12 = 0x55
|
||||
RA_EXT_SENS_DATA_13 = 0x56
|
||||
RA_EXT_SENS_DATA_14 = 0x57
|
||||
RA_EXT_SENS_DATA_15 = 0x58
|
||||
RA_EXT_SENS_DATA_16 = 0x59
|
||||
RA_EXT_SENS_DATA_17 = 0x5A
|
||||
RA_EXT_SENS_DATA_18 = 0x5B
|
||||
RA_EXT_SENS_DATA_19 = 0x5C
|
||||
RA_EXT_SENS_DATA_20 = 0x5D
|
||||
RA_EXT_SENS_DATA_21 = 0x5E
|
||||
RA_EXT_SENS_DATA_22 = 0x5F
|
||||
RA_EXT_SENS_DATA_23 = 0x60
|
||||
RA_MOT_DETECT_STATUS = 0x61
|
||||
RA_I2C_SLV0_DO = 0x63
|
||||
RA_I2C_SLV1_DO = 0x64
|
||||
RA_I2C_SLV2_DO = 0x65
|
||||
RA_I2C_SLV3_DO = 0x66
|
||||
RA_I2C_MST_DELAY_CTRL = 0x67
|
||||
RA_SIGNAL_PATH_RESET = 0x68
|
||||
RA_MOT_DETECT_CTRL = 0x69
|
||||
RA_USER_CTRL = 0x6A
|
||||
RA_PWR_MGMT_1 = 0x6B
|
||||
RA_PWR_MGMT_2 = 0x6C
|
||||
RA_BANK_SEL = 0x6D
|
||||
RA_MEM_START_ADDR = 0x6E
|
||||
RA_MEM_R_W = 0x6F
|
||||
RA_DMP_CFG_1 = 0x70
|
||||
RA_DMP_CFG_2 = 0x71
|
||||
RA_FIFO_COUNTH = 0x72
|
||||
RA_FIFO_COUNTL = 0x73
|
||||
RA_FIFO_R_W = 0x74
|
||||
RA_WHO_AM_I = 0x75
|
||||
|
||||
TC_PWR_MODE_BIT = 7
|
||||
TC_OFFSET_BIT = 6
|
||||
TC_OFFSET_LENGTH = 6
|
||||
TC_OTP_BNK_VLD_BIT = 0
|
||||
|
||||
VDDIO_LEVEL_VLOGIC = 0
|
||||
VDDIO_LEVEL_VDD = 1
|
||||
|
||||
CFG_EXT_SYNC_SET_BIT = 5
|
||||
CFG_EXT_SYNC_SET_LENGTH = 3
|
||||
CFG_DLPF_CFG_BIT = 2
|
||||
CFG_DLPF_CFG_LENGTH = 3
|
||||
|
||||
EXT_SYNC_DISABLED = 0x0
|
||||
EXT_SYNC_TEMP_OUT_L = 0x1
|
||||
EXT_SYNC_GYRO_XOUT_L = 0x2
|
||||
EXT_SYNC_GYRO_YOUT_L = 0x3
|
||||
EXT_SYNC_GYRO_ZOUT_L = 0x4
|
||||
EXT_SYNC_ACCEL_XOUT_L = 0x5
|
||||
EXT_SYNC_ACCEL_YOUT_L = 0x6
|
||||
EXT_SYNC_ACCEL_ZOUT_L = 0x7
|
||||
|
||||
DLPF_BW_256 = 0x00
|
||||
DLPF_BW_188 = 0x01
|
||||
DLPF_BW_98 = 0x02
|
||||
DLPF_BW_42 = 0x03
|
||||
DLPF_BW_20 = 0x04
|
||||
DLPF_BW_10 = 0x05
|
||||
DLPF_BW_5 = 0x06
|
||||
|
||||
GCONFIG_FS_SEL_BIT = 4
|
||||
GCONFIG_FS_SEL_LENGTH = 2
|
||||
|
||||
GYRO_FS_250 = 0x00
|
||||
GYRO_FS_500 = 0x01
|
||||
GYRO_FS_1000 = 0x02
|
||||
GYRO_FS_2000 = 0x03
|
||||
|
||||
ACONFIG_XA_ST_BIT = 7
|
||||
ACONFIG_YA_ST_BIT = 6
|
||||
ACONFIG_ZA_ST_BIT = 5
|
||||
ACONFIG_AFS_SEL_BIT = 4
|
||||
ACONFIG_AFS_SEL_LENGTH = 2
|
||||
ACONFIG_ACCEL_HPF_BIT = 2
|
||||
ACONFIG_ACCEL_HPF_LENGTH = 3
|
||||
|
||||
ACCEL_FS_2 = 0x00
|
||||
ACCEL_FS_4 = 0x01
|
||||
ACCEL_FS_8 = 0x02
|
||||
ACCEL_FS_16 = 0x03
|
||||
|
||||
DHPF_RESET = 0x00
|
||||
DHPF_5 = 0x01
|
||||
DHPF_2P5 = 0x02
|
||||
DHPF_1P25 = 0x03
|
||||
DHPF_0P63 = 0x04
|
||||
DHPF_HOLD = 0x07
|
||||
|
||||
TEMP_FIFO_EN_BIT = 7
|
||||
XG_FIFO_EN_BIT = 6
|
||||
YG_FIFO_EN_BIT = 5
|
||||
ZG_FIFO_EN_BIT = 4
|
||||
ACCEL_FIFO_EN_BIT = 3
|
||||
SLV2_FIFO_EN_BIT = 2
|
||||
SLV1_FIFO_EN_BIT = 1
|
||||
SLV0_FIFO_EN_BIT = 0
|
||||
|
||||
MULT_MST_EN_BIT = 7
|
||||
WAIT_FOR_ES_BIT = 6
|
||||
SLV_3_FIFO_EN_BIT = 5
|
||||
I2C_MST_P_NSR_BIT = 4
|
||||
I2C_MST_CLK_BIT = 3
|
||||
I2C_MST_CLK_LENGTH = 4
|
||||
|
||||
CLOCK_DIV_348 = 0x0
|
||||
CLOCK_DIV_333 = 0x1
|
||||
CLOCK_DIV_320 = 0x2
|
||||
CLOCK_DIV_308 = 0x3
|
||||
CLOCK_DIV_296 = 0x4
|
||||
CLOCK_DIV_286 = 0x5
|
||||
CLOCK_DIV_276 = 0x6
|
||||
CLOCK_DIV_267 = 0x7
|
||||
CLOCK_DIV_258 = 0x8
|
||||
CLOCK_DIV_500 = 0x9
|
||||
CLOCK_DIV_471 = 0xA
|
||||
CLOCK_DIV_444 = 0xB
|
||||
CLOCK_DIV_421 = 0xC
|
||||
CLOCK_DIV_400 = 0xD
|
||||
CLOCK_DIV_381 = 0xE
|
||||
CLOCK_DIV_364 = 0xF
|
||||
|
||||
I2C_SLV_RW_BIT = 7
|
||||
I2C_SLV_ADDR_BIT = 6
|
||||
I2C_SLV_ADDR_LENGTH = 7
|
||||
I2C_SLV_EN_BIT = 7
|
||||
I2C_SLV_BYTE_SW_BIT = 6
|
||||
I2C_SLV_REG_DIS_BIT = 5
|
||||
I2C_SLV_GRP_BIT = 4
|
||||
I2C_SLV_LEN_BIT = 3
|
||||
I2C_SLV_LEN_LENGTH = 4
|
||||
|
||||
I2C_SLV4_RW_BIT = 7
|
||||
I2C_SLV4_ADDR_BIT = 6
|
||||
I2C_SLV4_ADDR_LENGTH = 7
|
||||
I2C_SLV4_EN_BIT = 7
|
||||
I2C_SLV4_INT_EN_BIT = 6
|
||||
I2C_SLV4_REG_DIS_BIT = 5
|
||||
I2C_SLV4_MST_DLY_BIT = 4
|
||||
I2C_SLV4_MST_DLY_LENGTH = 5
|
||||
|
||||
MST_PASS_THROUGH_BIT = 7
|
||||
MST_I2C_SLV4_DONE_BIT = 6
|
||||
MST_I2C_LOST_ARB_BIT = 5
|
||||
MST_I2C_SLV4_NACK_BIT = 4
|
||||
MST_I2C_SLV3_NACK_BIT = 3
|
||||
MST_I2C_SLV2_NACK_BIT = 2
|
||||
MST_I2C_SLV1_NACK_BIT = 1
|
||||
MST_I2C_SLV0_NACK_BIT = 0
|
||||
|
||||
INTCFG_INT_LEVEL_BIT = 7
|
||||
INTCFG_INT_OPEN_BIT = 6
|
||||
INTCFG_LATCH_INT_EN_BIT = 5
|
||||
INTCFG_INT_RD_CLEAR_BIT = 4
|
||||
INTCFG_FSYNC_INT_LEVEL_BIT = 3
|
||||
INTCFG_FSYNC_INT_EN_BIT = 2
|
||||
INTCFG_I2C_BYPASS_EN_BIT = 1
|
||||
INTCFG_CLKOUT_EN_BIT = 0
|
||||
|
||||
INTMODE_ACTIVEHIGH = 0x00
|
||||
INTMODE_ACTIVELOW = 0x01
|
||||
|
||||
INTDRV_PUSHPULL = 0x00
|
||||
INTDRV_OPENDRAIN = 0x01
|
||||
|
||||
INTLATCH_50USPULSE = 0x00
|
||||
INTLATCH_WAITCLEAR = 0x01
|
||||
|
||||
INTCLEAR_STATUSREAD = 0x00
|
||||
INTCLEAR_ANYREAD = 0x01
|
||||
|
||||
INTERRUPT_FF_BIT = 7
|
||||
INTERRUPT_MOT_BIT = 6
|
||||
INTERRUPT_ZMOT_BIT = 5
|
||||
INTERRUPT_FIFO_OFLOW_BIT = 4
|
||||
INTERRUPT_I2C_MST_INT_BIT = 3
|
||||
INTERRUPT_PLL_RDY_INT_BIT = 2
|
||||
INTERRUPT_DMP_INT_BIT = 1
|
||||
INTERRUPT_DATA_RDY_BIT = 0
|
||||
|
||||
# TODO: figure out what these actually do
|
||||
# UMPL source code is not very obivous
|
||||
DMPINT_5_BIT = 5
|
||||
DMPINT_4_BIT = 4
|
||||
DMPINT_3_BIT = 3
|
||||
DMPINT_2_BIT = 2
|
||||
DMPINT_1_BIT = 1
|
||||
DMPINT_0_BIT = 0
|
||||
|
||||
MOTION_MOT_XNEG_BIT = 7
|
||||
MOTION_MOT_XPOS_BIT = 6
|
||||
MOTION_MOT_YNEG_BIT = 5
|
||||
MOTION_MOT_YPOS_BIT = 4
|
||||
MOTION_MOT_ZNEG_BIT = 3
|
||||
MOTION_MOT_ZPOS_BIT = 2
|
||||
MOTION_MOT_ZRMOT_BIT = 0
|
||||
|
||||
DELAYCTRL_DELAY_ES_SHADOW_BIT = 7
|
||||
DELAYCTRL_I2C_SLV4_DLY_EN_BIT = 4
|
||||
DELAYCTRL_I2C_SLV3_DLY_EN_BIT = 3
|
||||
DELAYCTRL_I2C_SLV2_DLY_EN_BIT = 2
|
||||
DELAYCTRL_I2C_SLV1_DLY_EN_BIT = 1
|
||||
DELAYCTRL_I2C_SLV0_DLY_EN_BIT = 0
|
||||
|
||||
PATHRESET_GYRO_RESET_BIT = 2
|
||||
PATHRESET_ACCEL_RESET_BIT = 1
|
||||
PATHRESET_TEMP_RESET_BIT = 0
|
||||
|
||||
DETECT_ACCEL_ON_DELAY_BIT = 5
|
||||
DETECT_ACCEL_ON_DELAY_LENGTH = 2
|
||||
DETECT_FF_COUNT_BIT = 3
|
||||
DETECT_FF_COUNT_LENGTH = 2
|
||||
DETECT_MOT_COUNT_BIT = 1
|
||||
DETECT_MOT_COUNT_LENGTH = 2
|
||||
|
||||
DETECT_DECREMENT_RESET = 0x0
|
||||
DETECT_DECREMENT_1 = 0x1
|
||||
DETECT_DECREMENT_2 = 0x2
|
||||
DETECT_DECREMENT_4 = 0x3
|
||||
|
||||
USERCTRL_DMP_EN_BIT = 7
|
||||
USERCTRL_FIFO_EN_BIT = 6
|
||||
USERCTRL_I2C_MST_EN_BIT = 5
|
||||
USERCTRL_I2C_IF_DIS_BIT = 4
|
||||
USERCTRL_DMP_RESET_BIT = 3
|
||||
USERCTRL_FIFO_RESET_BIT = 2
|
||||
USERCTRL_I2C_MST_RESET_BIT = 1
|
||||
USERCTRL_SIG_COND_RESET_BIT = 0
|
||||
|
||||
PWR1_DEVICE_RESET_BIT = 7
|
||||
PWR1_SLEEP_BIT = 6
|
||||
PWR1_CYCLE_BIT = 5
|
||||
PWR1_TEMP_DIS_BIT = 3
|
||||
PWR1_CLKSEL_BIT = 2
|
||||
PWR1_CLKSEL_LENGTH = 3
|
||||
|
||||
CLOCK_INTERNAL = 0x00
|
||||
CLOCK_PLL_XGYRO = 0x01
|
||||
CLOCK_PLL_YGYRO = 0x02
|
||||
CLOCK_PLL_ZGYRO = 0x03
|
||||
CLOCK_PLL_EXT32K = 0x04
|
||||
CLOCK_PLL_EXT19M = 0x05
|
||||
CLOCK_KEEP_RESET = 0x07
|
||||
|
||||
PWR2_LP_WAKE_CTRL_BIT = 7
|
||||
PWR2_LP_WAKE_CTRL_LENGTH = 2
|
||||
PWR2_STBY_XA_BIT = 5
|
||||
PWR2_STBY_YA_BIT = 4
|
||||
PWR2_STBY_ZA_BIT = 3
|
||||
PWR2_STBY_XG_BIT = 2
|
||||
PWR2_STBY_YG_BIT = 1
|
||||
PWR2_STBY_ZG_BIT = 0
|
||||
|
||||
WAKE_FREQ_1P25 = 0x0
|
||||
WAKE_FREQ_2P5 = 0x1
|
||||
WAKE_FREQ_5 = 0x2
|
||||
WAKE_FREQ_10 = 0x3
|
||||
|
||||
BANKSEL_PRFTCH_EN_BIT = 6
|
||||
BANKSEL_CFG_USER_BANK_BIT = 5
|
||||
BANKSEL_MEM_SEL_BIT = 4
|
||||
BANKSEL_MEM_SEL_LENGTH = 5
|
||||
|
||||
WHO_AM_I_BIT = 6
|
||||
WHO_AM_I_LENGTH = 6
|
||||
|
||||
DMP_MEMORY_BANKS = 8
|
||||
DMP_MEMORY_BANK_SIZE = 256
|
||||
DMP_MEMORY_CHUNK_SIZE = 16
|
||||
|
||||
class Accel(object) :
|
||||
"""GY-521 Accelerometer."""
|
||||
|
||||
@staticmethod
|
||||
def color( aR, aG, aB ) :
|
||||
'''Create a 565 rgb TFTColor value'''
|
||||
return TFTColor(aR, aG, aB)
|
||||
|
||||
def __init__( self, aLoc, aAddress = ADDRESS_LOW ) :
|
||||
"""aLoc I2C pin location is either 1 for 'X' or 2 for 'Y'.
|
||||
aAddress is either ADDRESS_LOW or ADDRESS_HIGH."""
|
||||
|
||||
if 1 > aLoc > 2 :
|
||||
raise Exception("aLoc must be 1 or 2.")
|
||||
|
||||
self._data = bytearray(1)
|
||||
self._data6 = bytearray(6)
|
||||
self._data14 = bytearray(14)
|
||||
self._address = aAddress
|
||||
self._i2c = pyb.I2C(aLoc, pyb.I2C.MASTER, baudrate = 400000)
|
||||
|
||||
self.setclocksource(CLOCK_PLL_XGYRO)
|
||||
self.setfullscalegyrorange(GYRO_FS_250)
|
||||
self.setfulscaleaccelrange(ACCEL_FS_2)
|
||||
self.setsleepenabled(False)
|
||||
|
||||
def getrate( self ) :
|
||||
self._readdata(RA_SMPLRT_DIV, self._data)
|
||||
return self._data[0]
|
||||
|
||||
def setrate( self, aRate ) :
|
||||
self._writedata(RA_SMPLRT_DIV, aRate)
|
||||
|
||||
def getDLPF( self ) :
|
||||
return self._readbits(RA_CONFIG, CFG_DLPF_CFG_BIT, CFG_DLPF_CFG_LENGTH)
|
||||
|
||||
def setDLPF( self, aMode ) :
|
||||
self._writebits(RA_CONFIG, CFG_DLPF_CFG_BIT, CFG_DLPF_CFG_LENGTH, aMode)
|
||||
|
||||
def setclocksource( self, aSource ) :
|
||||
self._writebits(RA_PWR_MGMT_1, PWR1_CLKSEL_BIT, PWR1_CLKSEL_LENGTH, aSource)
|
||||
|
||||
def getfullscalegyrorange( self ) :
|
||||
return self._readbits(RA_GYRO_CONFIG, GCONFIG_FS_SEL_BIT, GCONFIG_FS_SEL_LENGTH)
|
||||
|
||||
def setfullscalegyrorange( self, aRange ) :
|
||||
self._writebits(RA_GYRO_CONFIG, GCONFIG_FS_SEL_BIT, GCONFIG_FS_SEL_LENGTH, aRange)
|
||||
|
||||
def getfullscaleaccelrange( self ) :
|
||||
self._readbits(RA_ACCEL_CONFIG, ACONFIG_AFS_SEL_BIT, ACONFIG_AFS_SEL_LENGTH)
|
||||
|
||||
def setfullscaleaccelrange( self, aRange ) :
|
||||
self._writebits(RA_ACCEL_CONFIG, ACONFIG_AFS_SEL_BIT, ACONFIG_AFS_SEL_LENGTH, aRange)
|
||||
|
||||
def getsleepenabled( self ) :
|
||||
self._readbits(RA_PWR_MGMT_1, PWR1_SLEEP_BIT, 1)
|
||||
|
||||
def setsleepenabled( self, aTF ) :
|
||||
self._writebits(RA_PWR_MGMT_1, PWR1_SLEEP_BIT, 1, aTF)
|
||||
|
||||
def getfreefalldetectionthreshold( self ) :
|
||||
self._readdata(RA_FF_THR, self._data)
|
||||
return self._data[0]
|
||||
|
||||
def setfreefalldetectionthreshold( self, aValue ) :
|
||||
self._writedata(RA_FF_THR, aValue)
|
||||
|
||||
def getfreefalldetectionduration( self ) :
|
||||
self._readdata(RA_FF_DUR, self._data)
|
||||
return self._data[0]
|
||||
|
||||
def setfreefalldetectionduration( self, aValue ) :
|
||||
self._writedata(RA_FF_DUR, aValue)
|
||||
|
||||
def getmotiondetectionthreshold( self ) :
|
||||
self._readdata(RA_MOT_THR, self._data)
|
||||
return self._data[0]
|
||||
|
||||
def setmotiondetectionthreshold( self, aValue ) :
|
||||
self._writedata(RA_MOT_THR, aValue)
|
||||
|
||||
def getmotiondetectionduration( self ) :
|
||||
self._readdata(RA_MOT_DUR, self._data)
|
||||
return self._data[0]
|
||||
|
||||
def setmotiondetectionduration( self, aValue ) :
|
||||
self._writedata(RA_MOT_DUR, aValue)
|
||||
|
||||
def getzeromotiondetectionthreshold( self ) :
|
||||
self._readdata(RA_ZRMOT_THR, self._data)
|
||||
return self._data[0]
|
||||
|
||||
def setzeromotiondetectionthreshold( self, aValue ) :
|
||||
self._writedata(RA_ZRMOT_THR, aValue)
|
||||
|
||||
def getzeromotiondetectionduration( self ) :
|
||||
self._readdata(RA_ZRMOT_DUR, self._data)
|
||||
return self._data[0]
|
||||
|
||||
def setzeromotiondetectionduration( self, aValue ) :
|
||||
self._writedata(RA_ZRMOT_DUR, aValue)
|
||||
|
||||
def getFIFOenabled( self ) :
|
||||
return self._readbits(RA_USER_CTRL, USERCTRL_FIFO_EN_BIT, 1)
|
||||
|
||||
def setFIFFOenabled( self, aTF ) :
|
||||
self._writebits(RA_USER_CTRL, USERCTRL_FIFO_EN_BIT, 1, aTF)
|
||||
|
||||
def gettempFIFOenabled( self ) :
|
||||
return self._readbits(RA_FIFO_EN, TEMP_FIFO_EN_BIT, 1)
|
||||
|
||||
def settempFIFFOenabled( self, aTF ) :
|
||||
self._writebits(RA_FIFO_EN, TEMP_FIFO_EN_BIT, 1, aTF)
|
||||
|
||||
def getxgyroFIFOenabled( self ) :
|
||||
return self._readbits(RA_FIFO_EN, XG_FIFO_EN_BIT, 1)
|
||||
|
||||
def setxgyroFIFOenabled( self, aTF ) :
|
||||
self._writebits(RA_FIFO_EN, XG_FIFO_EN_BIT, 1, aTF)
|
||||
|
||||
def getygyroFIFOenabled( self ) :
|
||||
return self._readbits(RA_FIFO_EN, YG_FIFO_EN_BIT, 1)
|
||||
|
||||
def setygyroFIFOenabled( self, aTF ) :
|
||||
self._writebits(RA_FIFO_EN, YG_FIFO_EN_BIT, 1, aTF)
|
||||
|
||||
def getzgyroFIFOenabled( self ) :
|
||||
return self._readbits(RA_FIFO_EN, ZG_FIFO_EN_BIT, 1)
|
||||
|
||||
def setzgyroFIFOenabled( self, aTF ) :
|
||||
self._writebits(RA_FIFO_EN, ZG_FIFO_EN_BIT, 1, aTF)
|
||||
|
||||
def getaccelFIFOenabled( self ) :
|
||||
return self._readbits(RA_FIFO_EN, ACCEL_FIFO_EN_BIT, 1)
|
||||
|
||||
def setaccelFIFOenabled( self, aTF ) :
|
||||
self._writebits(RA_FIFO_EN, ACCEL_FIFO_EN_BIT, 1, aTF)
|
||||
|
||||
def getmasterclockspeed( self ) :
|
||||
return self._readbits(RA_I2C_MST_CTRL, I2C_MST_CLK_BIT, I2C_MST_CLK_LENGTH)
|
||||
|
||||
def setmasterclockspeed( self, aValue ) :
|
||||
self._writebits(RA_I2C_MST_CTRL, I2C_MST_CLK_BIT, I2C_MST_CLK_LENGTH, aValue)
|
||||
|
||||
def getinterruptmode( self ) :
|
||||
return self._readbits(RA_INT_PIN_CFG, INTCFG_INT_LEVEL_BIT, 1)
|
||||
|
||||
def setinterruptmode( self, aValue ) :
|
||||
self._writebits(RA_INT_PIN_CFG, INTCFG_INT_LEVEL_BIT, 1, aValue)
|
||||
|
||||
def getinterruptdrive( self ) :
|
||||
return self._readbits(RA_INT_PIN_CFG, INTCFG_INT_OPEN_BIT, 1)
|
||||
|
||||
def setinterruptdrive( self, aValue ) :
|
||||
self._writebits(RA_INT_PIN_CFG, INTCFG_INT_OPEN_BIT, 1, aValue)
|
||||
|
||||
def getinterruptlatch( self ) :
|
||||
return self._readbits(RA_INT_PIN_CFG, INTCFG_LATCH_INT_EN_BIT, 1)
|
||||
|
||||
def setinterruptlatch( self, aValue ) :
|
||||
self._writebits(RA_INT_PIN_CFG, INTCFG_LATCH_INT_EN_BIT, 1, aValue)
|
||||
|
||||
def getinterruptlatchclear( self ) :
|
||||
return self._readbits(RA_INT_PIN_CFG, INTCFG_INT_RD_CLEAR_BIT, 1)
|
||||
|
||||
def setinterruptlatchclear( self, aValue ) :
|
||||
self._writebits(RA_INT_PIN_CFG, INTCFG_INT_RD_CLEAR_BIT, 1, aValue)
|
||||
|
||||
def getacceltemprot( self ) :
|
||||
self._readdata(RA_ACCEL_XOUT_H, self._data14)
|
||||
return [(self._data14[i] << 8) | self._data14[i + 1] for i in range(0, len(self._data14), 2)]
|
||||
|
||||
def getacceleration( self ) :
|
||||
self._readdata(RA_ACCEL_XOUT_H, self._data6)
|
||||
return [(self._data6[i] << 8) | self._data6[i + 1] for i in range(0, len(self._data6), 2)]
|
||||
|
||||
def getrotation( self ) :
|
||||
self._readdata(RA_GYRO_XOUT_H, self.data6)
|
||||
return [(self._data6[i] << 8) | self._data6[i + 1] for i in range(0, len(self._data6), 2)]
|
||||
|
||||
def reset( self ) :
|
||||
self._writebits(RA_PWR_MGMT_1, PWR1_DEVICE_RESET_BIT, 1, True)
|
||||
|
||||
def _writedata( self, aAddress, aData ) :
|
||||
self._i2c.mem_write(aData, self._address, aAddress)
|
||||
|
||||
def _readdata( self, aAddress, aData ) :
|
||||
self._i2c.mem_read(aData, self._address, aAddress)
|
||||
|
||||
# @micropython.native
|
||||
def _readbits( self, aAddress, aStart, aLen ) :
|
||||
self._readdata(aAddress, self._data)
|
||||
b = (self._data[0] >> (aStart - aLen + 1)) & ((1 << aLen) - 1)
|
||||
|
||||
# @micropython.native
|
||||
def _writebits( self, aAddress, aStart, aLen, aValue ) :
|
||||
self._readdata(aAddress, self._data)
|
||||
mask = ((1 << aLen) - 1) << (aStart - aLen + 1)
|
||||
aValue = (buffer[0] << (aStart - aLen + 1)) & mask #shift data into correct position
|
||||
val &= ~mask
|
||||
self._data[0] |= aValue
|
||||
self._writedata(aAddress, self._data)
|
||||
|
Plik binarny nie jest wyświetlany.
28
main.py
28
main.py
|
@ -67,9 +67,27 @@ else:
|
|||
|
||||
# Bluetooth board ----------------------------------------
|
||||
|
||||
from JYMCU import JYMCU
|
||||
# from JYMCU import JYMCU
|
||||
|
||||
u = JYMCU(6, 57600)
|
||||
u.write("Testing.")
|
||||
u.readline()
|
||||
u.setrepl()
|
||||
# u = JYMCU(6, 57600)
|
||||
# u.write("Testing.")
|
||||
# u.readline()
|
||||
# u.setrepl()
|
||||
|
||||
# from pyb import ExtInt
|
||||
|
||||
# x = 0
|
||||
# def cb(line):
|
||||
# global x
|
||||
# x += 1
|
||||
# print(x)
|
||||
|
||||
# f = ExtInt("Y2", ExtInt.IRQ_RISING, pyb.Pin.PULL_UP, cb)
|
||||
|
||||
from ESP8266 import WIFI
|
||||
|
||||
v = WIFI(6)
|
||||
|
||||
from pyb import Pin
|
||||
p = Pin("X11", Pin.IN, Pin.PULL_DOWN)
|
||||
def v(): return p.value()
|
||||
|
|
Ładowanie…
Reference in New Issue