Will Apache #NuttX OS talk I2C with Bosch BME280 Sensor? (Temperature + Humidity + Air Pressure) ... Let's find out!
Verify with Bus Pirate that our BME280 works OK ... Despite my horrid soldering 😂
https://github.com/lupyuen/bme280-nuttx#test-with-bus-pirate
Enable the I2C Port and I2C Character Driver on Apache #NuttX OS ... So it will talk with BME280
Apache #NuttX OS doesn't have a BME280 Driver ... Let's test the BMP280 Driver instead (Air Pressure only)
We patch the I2C Address and Device ID in the #NuttX BMP280 Driver ... So it will work with BME280
https://github.com/lupyuen/bme280-nuttx#change-i2c-address-and-device-id
Here's how we connected our Logic Analyser to PineCone #BL602 ... For testing the #NuttX BMP280 Driver
https://github.com/lupyuen/bme280-nuttx/blob/main/README.md#invalid-register-id
#BL602 has a peculiar I2C Port ... We need to send the I2C Sub Address (Register ID) separately from the I2C Data ... This might cause the BMP280 Driver to fail
Here's how we patch the #NuttX BMP280 Driver to send the Register ID as I2C Sub Address (instead of I2C Data)
#NuttX BMP280 Driver loads OK on #BL602 ... After setting the Register ID as I2C Sub Address! 🎉
https://github.com/lupyuen/bme280-nuttx#bmp280-driver-loads-ok
#NuttX BMP280 Driver appears as "/dev/sensor/baro0" ... Let's read the device
https://github.com/lupyuen/bme280-nuttx#bmp280-driver-loads-ok
We enable the #NuttX Sensor Test App ... To test the BMP280 Driver
#NuttX BMP280 Driver says it's 29 °C with air pressure 1,006 millibars ... Yep looks right for Sunny Singapore by the Seaside 👍
#NuttX BMP280 Driver works OK with our BME280 Sensor ... But we're missing one thing: Humidity ... Can we port the BME280 Driver from Zephyr OS? 🤔
https://github.com/lupyuen/bme280-nuttx#port-bme280-driver-from-zephyr-os
Zephyr BME280 Driver looks similar to #NuttX BMP280 Driver ... So porting Zephyr BME280 Driver to NuttX might not be so hard 🤔
https://github.com/lupyuen/bme280-nuttx#port-bme280-driver-from-zephyr-os
Zephyr BME280 Driver builds OK on #NuttX (with a few tweaks) 🎉 ... Now we wrap the Zephyr Driver as a NuttX Driver
https://github.com/lupyuen/bme280-nuttx#wrap-zephyr-driver-as-nuttx-driver
Our #NuttX Driver Wrapper wraps around the Zephyr BME280 Driver ... So it works like a NuttX Driver
https://github.com/lupyuen/bme280-nuttx#wrap-zephyr-driver-as-nuttx-driver
Our #NuttX BME280 Driver reads the Sensor Data from Zephyr Driver in two steps: 1️⃣ Fetch the sensor sample 2️⃣ Get the channel data
https://github.com/lupyuen/bme280-nuttx#read-sensor-data-from-zephyr-driver
Power Management works a little differently in #NuttX vs Zephyr ... Here's how our NuttX BME280 Driver calls the Zephyr Driver to do Power Management
BME280 Standby Duration is static in Zephyr but configured at runtime in #NuttX ... So we set it in our NuttX BME280 Driver
Zephyr BME280 Driver ported to Apache #NuttX OS ... Works great on NuttX! 🎉
We made minimal changes to Zephyr BME280 Driver while porting to #NuttX OS
https://github.com/lupyuen/bme280-nuttx#zephyr-driver-modified-for-nuttx
Logic Analyser shows that #BL602 sent the wrong Register ID to BME280 ... Let's fix this 🤔
https://github.com/lupyuen/bme280-nuttx#invalid-register-id