-- Kitt Car Modified by John Longworth December 2017 -- Using pins 3 & 4 to be compatible with ESP001 -- SDA & SDL can be assigned any pin number between 1 - 12 -- Connects to MCP23008 (8-Bit I/O Expander with Serial Interface) id=0 sda = 3 -- GPIO0 Connect to Pin 2 of MCP23008 scl = 4 -- GPIO2 Connect to Pin 1 of MCP23008 i2c.setup(id, sda, scl, i2c.SLOW) -- Initialize I2C device = 0x20 -- I2C bus address of MCP23008 IODIR = 0x00 GPIO = 0x09 function read_reg(dev_addr, reg_addr) i2c.start(id) i2c.address(id, dev_addr ,i2c.TRANSMITTER) i2c.write(id,reg_addr) i2c.stop(id) i2c.start(id) i2c.address(id, dev_addr,i2c.RECEIVER) c=i2c.read(id,1) i2c.stop(id) return c end function write_reg(dev_addr, reg_addr, reg_val) i2c.start(id) i2c.address(id, dev_addr, i2c.TRANSMITTER) i2c.write(id, reg_addr) i2c.write(id, reg_val) i2c.stop(id) end write_reg(device, IODIR, 0x00) -- set Port A to output i = 1 dir = 1 tmr.alarm(0,250,1,function() write_reg(device, GPIO, i) print("I = " .. i) dir = (i == 1) and (dir == -1) and 1 or (i == 128) and (dir == 1) and -1 or dir i = (dir == 1) and i * 2 or i / 2 end) -- Pin Connections on my board -- Pin 18 (VDD) to 3v3 -- Pin 9 (VSS) to GND -- Pin 7 (NC) to GND (Not necessary) -- Pin 1 (SCL) to ESP GPIO2 -- Pin 2 (SDA) to ESP GPIO0 -- Pin 5 (A0) to GND -- Pin 4 (A1) to GND -- Pin 3 (A2) to GND -- Pin 6 (RESET) to 3v3 -- Connect pins to be read to Gnd on Port A (pins 10 - 17)