Skip to content

Instantly share code, notes, and snippets.

@bboyho
Last active August 18, 2022 20:30
Show Gist options
  • Save bboyho/a120681bb854ceb40b0f21a16cb27283 to your computer and use it in GitHub Desktop.
Save bboyho/a120681bb854ceb40b0f21a16cb27283 to your computer and use it in GitHub Desktop.
// // CCS811 Address (0x5B = 91)
//
// // HARDWARE_ID register [0x20 = 32], read value [0x81 = 129]
//
// // HARDWARE_VERSION register [0x21 = 33], read value [0x12 = 18]
//
// // CCS811_STATUS register [0x00 = 0]
//
// ////////// read value [17 = 0001 0001]
//
// ////////// read value [152 = 1001 1000]<= DATA READY TO BE READ, SHOULD BE THIS
//
// ////////// read value [144 = 1001 0000]<= NOT ready...
//
// //
//
// // ERROR_ID register [0xE0 = 224]
//
// ////////// read value => 0x03 = CCS811 received an i2c read request that is invalid,
//
// ///////////////////////////////////////////// CCS811 received an i2c write request that is invalid
//
// ////////// read value => 0x00 = 0, <= SHOULD BE THIS
//
// //
//
// // SW_Reset register [0xFF = 255]
//
// ////////// write => {0x11, 0xE5, 0x72, 0x8A },
//
// ////////// or {4581, 29322 | 300249738 } Big-Endian,
//
// ////////// or {58641, 35442 | 2322785553 } Little-Endian
//
// //
//
// // APP_START [0xF4 = 244]
//
// ////////// MEAS_MODE register [0x01= 1]
//
// ////////// write value => 0x10 = 0001 0000, 1 for every second
//
// //
//
// // ====================
//
// //
//
// // BME280 Address (0x77 = 119)
//
// ////////// 0x60= 96
serial.redirectToUSB()
gatorEnvironment.beginEnvironment()
basic.pause(1000)
serial.writeLine("")
serial.writeLine("")
serial.writeString("CHECK HW ID (Register [0X20 = 32] , Value [0x81 = 129]) = ")
pins.i2cWriteNumber(
91,
32,
NumberFormat.UInt8BE,
false
)
serial.writeString("" + (pins.i2cReadNumber(91, NumberFormat.UInt8BE, false)))
serial.writeLine("")
serial.writeString("CHECK ERROR_ID (Register [0XE0 = 224], Value =[0x00 = 0]) = ")
pins.i2cWriteNumber(
91,
224,
NumberFormat.UInt8BE,
false
)
serial.writeString("" + (pins.i2cReadNumber(91, NumberFormat.UInt8BE, false)))
serial.writeLine("")
basic.pause(3000)
serial.writeString("CCS811 SW_RESET (0xFF | 255), {0x11, 0xE5, 0x72, 0x8A} ")
basic.pause(100)
let bufr = pins.createBuffer(5)
let val = 255
bufr.setNumber(NumberFormat.UInt8BE, 0, val)
val = 17
bufr.setNumber(NumberFormat.UInt8BE, 1, val)
val = 229
bufr.setNumber(NumberFormat.UInt8BE, 2, val)
val = 114
bufr.setNumber(NumberFormat.UInt8BE, 3, val)
val = 138
bufr.setNumber(NumberFormat.UInt8BE, 4, val)
pins.i2cWriteBuffer(
91,
bufr,
false
)
basic.pause(3000)
serial.writeLine("")
serial.writeString("CHECK CCS811 STATUS (Register [0x00 = 0], Value [152 = 1001 1000]) = ")
pins.i2cWriteNumber(
91,
0,
NumberFormat.UInt8BE,
false
)
serial.writeString("" + (pins.i2cReadNumber(91, NumberFormat.UInt8BE, false)))
serial.writeLine("")
serial.writeString("CHECK ERROR_ID (Register [0XE0 = 224], Value =[0x00 = 0]) = ")
pins.i2cWriteNumber(
91,
224,
NumberFormat.UInt8BE,
false
)
serial.writeString("" + (pins.i2cReadNumber(91, NumberFormat.UInt8BE, false)))
serial.writeLine("")
basic.pause(5000)
serial.writeString("APP_START (0xF4 | 244)")
pins.i2cWriteNumber(
91,
244,
NumberFormat.UInt8BE,
false
)
serial.writeLine("")
basic.pause(100)
serial.writeString("CHECK CCS811 STATUS (Register [0x00 = 0], Value [152 = 1001 1000]) = ")
pins.i2cWriteNumber(
91,
0,
NumberFormat.UInt8BE,
false
)
serial.writeString("" + (pins.i2cReadNumber(91, NumberFormat.UInt8BE, false)))
serial.writeLine("")
serial.writeString("CHECK ERROR_ID (Register [0XE0 = 224], Value =[0x00 = 0]) = ")
pins.i2cWriteNumber(
91,
224,
NumberFormat.UInt8BE,
false
)
serial.writeString("" + (pins.i2cReadNumber(91, NumberFormat.UInt8BE, false)))
serial.writeLine("")
basic.pause(1000)
serial.writeString("SET MEAS_MODE (0x01 | 1), MEASURE 1 SECOND (0x10 | 16)")
basic.pause(100)
let bufr2 = pins.createBuffer(2)
let val2 = 1
bufr2.setNumber(NumberFormat.UInt8BE, 0, val2)
val2 = 16
bufr2.setNumber(NumberFormat.UInt8BE, 1, val2)
pins.i2cWriteBuffer(
91,
bufr2,
false
)
serial.writeLine("")
basic.pause(1000)
serial.writeString("CHECK CCS811 STATUS (Register [0x00 = 0], Value [152 = 1001 1000]) = ")
pins.i2cWriteNumber(
91,
0,
NumberFormat.UInt8BE,
false
)
serial.writeString("" + (pins.i2cReadNumber(91, NumberFormat.UInt8BE, false)))
serial.writeLine("")
serial.writeString("CHECK ERROR_ID (Register [0XE0 = 224], Value =[0x00 = 0]) = ")
pins.i2cWriteNumber(
91,
224,
NumberFormat.UInt8BE,
false
)
serial.writeString("" + (pins.i2cReadNumber(91, NumberFormat.UInt8BE, false)))
serial.writeLine("")
serial.writeString("CHECK MEAS_MODE (Register [0x01 = 1], Value [0x10 | 16]) = ")
pins.i2cWriteNumber(
91,
1,
NumberFormat.UInt8BE,
false
)
basic.pause(100)
serial.writeString("" + (pins.i2cReadNumber(91, NumberFormat.UInt8BE, false)))
serial.writeLine("")
serial.writeString("CHECK CCS811 STATUS (Register [0x00 = 0], Value [152 = 1001 1000]) = ")
pins.i2cWriteNumber(
91,
0,
NumberFormat.UInt8BE,
false
)
serial.writeString("" + (pins.i2cReadNumber(91, NumberFormat.UInt8BE, false)))
serial.writeLine("")
serial.writeString("CHECK ERROR_ID (Register [0XE0 = 224], Value =[0x00 = 0]) = ")
pins.i2cWriteNumber(
91,
224,
NumberFormat.UInt8BE,
false
)
serial.writeString("" + (pins.i2cReadNumber(91, NumberFormat.UInt8BE, false)))
serial.writeLine("")
basic.pause(1000)
serial.writeLine("MEASURING")
basic.pause(1000)
serial.writeLine(".")
basic.pause(1000)
serial.writeLine(".")
basic.pause(1000)
serial.writeLine(".")
basic.forever(function () {
serial.writeString("CHECK CCS811 STATUS (Register [0x00 = 0], Value [152 = 1001 1000]) = ")
pins.i2cWriteNumber(
91,
0,
NumberFormat.UInt8BE,
false
)
serial.writeString("" + (pins.i2cReadNumber(91, NumberFormat.UInt8BE, false)))
serial.writeLine("")
basic.pause(1000)
serial.writeString("CHECK ERROR_ID (Register [0XE0 = 224], Value =[0x00 = 0]) = ")
pins.i2cWriteNumber(
91,
224,
NumberFormat.UInt8BE,
false
)
serial.writeString("" + (pins.i2cReadNumber(91, NumberFormat.UInt8BE, false)))
serial.writeLine("")
basic.pause(1000)
serial.writeString("READ SENSOR DATA = ")
pins.i2cWriteNumber(
91,
2,
NumberFormat.UInt8BE,
false
)
serial.writeString("" + (pins.i2cReadNumber(91, NumberFormat.UInt32BE, false)))
serial.writeLine("")
basic.pause(1000)
serial.writeString("CHECK CCS811 STATUS (Register [0x00 = 0], Value [152 = 1001 1000]) = ")
pins.i2cWriteNumber(
91,
0,
NumberFormat.UInt8BE,
false
)
serial.writeString("" + (pins.i2cReadNumber(91, NumberFormat.UInt8BE, false)))
serial.writeLine("")
serial.writeString("" + (gatorEnvironment.getMeasurement(measurementType.eCO2)))
serial.writeString(",")
serial.writeString("" + (gatorEnvironment.getMeasurement(measurementType.TVOC)))
serial.writeLine("")
basic.pause(2000)
})
@bboyho
Copy link
Author

bboyho commented Aug 18, 2022

There's some sort of I2C read/write issue when the updated MakeCode V2 with CODAL in the gator:environment when it starts up possibly due to a timing issue or the way the values are handled with the CCS811 registers for micro:bit V2 development board.

A hack and workaround using the extension is to manually execute I2C read/write to the CCS811 registers. MakeCode code block for I2C is limiting so variables and buffers through MakeCode's Javascript is used to write multiple values to their respective registers.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment