import usocket as socket import esp32 import network import utime as time from machine import SPI,Pin #define user variables ssid='your ssid' pwd='your password' client_ip='your host computer IP' client_port=10000 #MCP register addresses DEV_ADD = 0x40 MCP_READ = 0x01 MCP_WRITE = 0x00 STATUSCOM = 0x18 CHAN_0 = 0x00 CHAN_1 = 0x02 CHAN_2 = 0x04 CHAN_3 = 0x06 GAIN = 0x16 CON0 = 0x1A CON1 = 0x1C GAIN_1 = 0x00000000 GAIN_2 = 0x00000249 GAIN_4 = 0x00000492 GAIN_8 = 0x000006CB GAIN_16 = 0x00000924 GAIN_32 = 0x00000B6D r_gain=bytearray(1) w_gain=bytearray(1) r_statcom=bytearray(1) w_statcom=bytearray(1) r_con0=bytearray(1) w_con0=bytearray(1) r_con1=bytearray(1) w_con1=bytearray(1) r_0=bytearray(1) r_1=bytearray(1) r_2=bytearray(1) r_3=bytearray(1) r_gain[0]= DEV_ADD | GAIN | MCP_READ w_gain[0]= DEV_ADD | GAIN | MCP_WRITE r_statcom[0]=DEV_ADD | STATUSCOM | MCP_READ w_statcom[0]=DEV_ADD | STATUSCOM | MCP_WRITE r_con0[0]= DEV_ADD | CON0 | MCP_READ w_con0[0]= DEV_ADD | CON0 | MCP_WRITE r_con1[0]= DEV_ADD | CON1 | MCP_READ w_con1[0]= DEV_ADD | CON1 | MCP_WRITE r_0[0]=DEV_ADD | CHAN_0 | MCP_READ r_1[0]=DEV_ADD | CHAN_1 | MCP_READ r_2[0]=DEV_ADD | CHAN_2 | MCP_READ r_3[0]=DEV_ADD | CHAN_3 | MCP_READ def do_connect(): wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print('connecting to network...') wlan.connect(ssid, pwd) while not wlan.isconnected(): pass print('network config:', wlan.ifconfig()) def init_MCP(): MCP_SS.value(0) MCP_SPI.write(w_gain) MCP_SPI.write(b'\x00') #gain MSB MCP_SPI.write(b'\x02') MCP_SPI.write(b'\x49') MCP_SPI.write(b'\xB9') #statcom MSB MCP_SPI.write(b'\x00') MCP_SPI.write(b'\x0F') MCP_SPI.write(b'\xBC') #config0 MSB offcal_en??? MCP_SPI.write(b'\xE0') MCP_SPI.write(b'\x50') MCP_SPI.write(b'\x0F') #config1 MSB MCP_SPI.write(b'\x00') MCP_SPI.write(b'\x00') MCP_SPI.write(b'\x8F') #offcal_ch0 MSB MCP_SPI.write(b'\xFF') MCP_SPI.write(b'\xFF') MCP_SPI.write(b'\x00') #gaincal_ch0 MSB MCP_SPI.write(b'\x00') MCP_SPI.write(b'\x00') MCP_SPI.write(b'\x8F') #offcal_ch1 MSB MCP_SPI.write(b'\xFF') MCP_SPI.write(b'\xFF') MCP_SPI.write(b'\x00') #gaincal_ch1 MSB MCP_SPI.write(b'\x00') MCP_SPI.write(b'\x00') MCP_SPI.write(b'\x8F') #offcal_ch2 MSB MCP_SPI.write(b'\xFF') MCP_SPI.write(b'\xFF') MCP_SPI.write(b'\x00') #gaincal_ch2 MSB MCP_SPI.write(b'\x00') MCP_SPI.write(b'\x00') MCP_SPI.write(b'\x8F') #offcal_ch3 MSB MCP_SPI.write(b'\xFF') MCP_SPI.write(b'\xFF') MCP_SPI.write(b'\x00') #gaincal_ch3 MSB MCP_SPI.write(b'\x00') MCP_SPI.write(b'\x00') MCP_SS.value(1) print('MCP initialized') #enable ADCs MCP_SS.value(0) MCP_SPI.write(w_con1) #register address you want to write to MCP_SPI.write(b'\x00') #data to write MSB MCP_SPI.write(b'\x00') #data to write MCP_SPI.write(b'\x00') #data to write MCP_SS.value(1) print('ADCs enabled') MCP_SS.value(0) MCP_SPI.write(w_con0) #still figuring this out but it seems like initializing the MCP with offset calibration enabled then disabling the offset cal is a more stable startup routine MCP_SPI.write(b'\x3C') MCP_SPI.write(b'\xE0') MCP_SPI.write(b'\x50') MCP_SS.value(1) MCP_SPI=SPI(1, 10000000, sck=Pin(14), mosi=Pin(13), miso=Pin(12)) MCP_SPI.init() MCP_SS=Pin(27,Pin.OUT) MCP_DRDY=Pin(26,Pin.IN) DRDY=False def callback(p): global DRDY DRDY=True MCP_DRDY.irq(trigger=Pin.IRQ_FALLING, handler=callback) do_connect() init_MCP() s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM) buf=bytearray(60) tmp=bytearray(3) while True: point=0 while point<20: if DRDY: MCP_SS.value(0) MCP_SPI.write(r_3) MCP_SPI.readinto(tmp) MCP_SS.value(1) buf[point*3:(1+point)*3]=tmp point+=1 DRDY=0 s.sendto(buf, (client_ip, client_port))