I2C
I2C builtin package that exposes a I2C service to interact with I2C devices.
import { i2c } from "@devicescript/i2c"
const address = 0x..
const register = 0x..
const value = 0x..
await i2c.writeReg(address, register, value)
const readValue = await i2c.readReg(address, register)
Driver
The I2CDriver
and I2CSensorDriver
classes encapsulate storing the address and generally handles a bit of the
low-level I2C protocol. It is not required to use the driver, but it can be useful.
./aht20.ts
import { I2CSensorDriver } from "@devicescript/drivers"
const AHT20_ADDRESS = 0x38
const AHT20_BUSY = 0x80
const AHT20_OK = 0x08
const AHT20_READ_THROTTLE = 500
class AHT20Driver extends I2CSensorDriver<{
humidity: number
temperature: number
}> {
constructor() {
super(AHT20_ADDRESS, { readCacheTime: AHT20_READ_THROTTLE })
}
// ...
override async readData() {
await this.writeBuf(hex`AC3300`)
await this.waitBusy()
const data = await this.readBuf(6)
const h0 = (data[1] << 12) | (data[2] << 4) | (data[3] >> 4)
const humidity = h0 * (100 / 0x100000)
const t0 = ((data[3] & 0xf) << 16) | (data[4] << 8) | data[5]
const temperature = t0 * (200.0 / 0x100000) - 50
return { humidity, temperature }
}
}
You can find implementation examples at https://github.com/microsoft/devicescript/tree/main/packages/drivers/src.