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 register the BMP280 Driver at #NuttX Startup
https://github.com/lupyuen/bme280-nuttx#register-bmp280-driver
#NuttX BMP280 Driver fails because the detected Device ID is 0 ... Let's find out why 🤔
Logic Analyser shows that #BL602 sent the wrong Register ID to BME280 ... Let's fix this 🤔
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
#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
#NuttX doesn't have a Sensor Type that supports BME280 Temperature + Humidity + Pressure ... So our NuttX BME280 Driver combines 2 Sensor Types: 1️⃣ Barometer Sensor (Pressure + Temperature) 2️⃣ Humidity Sensor
https://github.com/lupyuen/bme280-nuttx#combined-barometer-and-humidity-sensor
Each #NuttX Sensor defines its operations for 1️⃣ Activating the sensor 2️⃣ Fetching sensor data 3️⃣ Setting the standby interval
https://github.com/lupyuen/bme280-nuttx#combined-barometer-and-humidity-sensor
At #NuttX Startup we register both BME280 sensors: Barometer Sensor and Humidity Sensor
https://github.com/lupyuen/bme280-nuttx#combined-barometer-and-humidity-sensor
Our #NuttX BME280 Driver appears as 2 sensors: 1️⃣ "/dev/sensor/baro0" (Barometer Sensor) 2️⃣ "/dev/sensor/humi0" (Humidity Sensor) ... Here's how we read the Air Pressure, Temperature and Humidity
https://github.com/lupyuen/bme280-nuttx#combined-barometer-and-humidity-sensor
Here's how we patch the #NuttX BMP280 Driver to send the Register ID as I2C Sub Address (instead of I2C Data)
https://github.com/lupyuen/bme280-nuttx#set-i2c-sub-address