Commit Graph

43 Commits

Author SHA1 Message Date
Nick Dunklee
59cee5c8a0 feat: Integrate BME680 Bosch BSEC support for RAK4631
This is a consolidation of my changes for BME680 on RAK4631 nodes.
I will close my other PRs related to this and link back to this one.

*Background on change:*

This change replaces the Adafruit BME680 driver on RAK4631 with the
Bosch BSEC library. Other boards continue to use the existing
Adafruit path via ENV_INCLUDE_BME680.

This makes the IAQ portion of the sensor functional, and more accurate.
It also contains the math and/or CayenneLPP fixes from my other PRs.
The Bosch code also appears to handle calibrating sensor aging as well,
whereas the Adafruit code is just looking at blind values that can drift
with time. Pretty cool to see this shooting out useful data!

RAK4631 platform.io is set to override to ENV_INCLUDE_BME680_BSEC while
leaving the Adafruit code for other node types. (If this becomes applicable
for other node types in future, awesome! I just don't have hardware
to test against.)

Using the BSEC library introduces IAQ sensor calibration, and saves
the calibration state periodically so it does not have to calibrate
again later.

At startup the IAQ sensor takes 30 minutes to heat and to hit a baseline,
then starts calibrating. Once calibrated, it will save those settings
and will only write settings again if calibration falls back and restores
back to state 3.

This fix also has the gas resistance math fix that was in
[pull 2146](https://github.com/meshcore-dev/MeshCore/pull/2146) so
the adafruit path also can at least show accurate values instead
of looping negative.

Also includes the fix from [pull 2149](https://github.com/meshcore-dev/MeshCore/pull/2149) so the pressure output isn't truncated to 1hPa steps.

*Fixes/Changes:*
- Add bsec_config_iaq[] with the 3.3V/3s-LP/28d calibration profile
- BSEC init applies setConfig() for voltage-correct heater targeting
- IAQ, heat-compensated temperature/humidity, pressure, and altitude
  reported over CayenneLPP
- IAQ accuracy reported as analog input over CayenneLPP (0,1,2,3)
- Calibration state persisted to /bsec_state.bin on nRF52 internal
  flash; written only when iaqAccuracy improves to >= 2, should
  keep write frequency well within flash endurance over device lifetime
- Fix non-BSEC query_bme680: float pressure division, addGenericSensor
  for gas resistance (was addAnalogInput, overflows at > 327 Ohm)
- loop() correctly gated for both GPS and BSEC-only builds
- Add fix_bsec_lib.py extra_script to resolve nRF52840 hard-float ABI
  mismatch in Bosch's PlatformIO packaging, silly Bosch

One general note outside of this code change: I noticed while BME680
_functions_ in companion nodes, since companion nodes run Bluetooth,
BLE preempts the CPU, and can do so mid-I2C-transaction.

This can cause the BME680 to see an anomaly and drop calibration and
start a recalibrate. This is behavior that will exist (and has existed)
regardless of using the Adafruit or Bosch paths.

This particular companion behavior does not seem to occur in sensor
or repeater nodes since their BLE is off. Probably affects other
I2C devices as well.

*Tests:*

- RAK19003
- RAK19007
- RAK19001
- repeater, sensor, companion
2026-05-27 15:33:48 -06:00
KPrivitt
27f732653b Added RAK12035 Soil Moisture and Temperature Sensor (#2223) 2026-04-03 22:54:24 +13:00
João Brázio
75895895f0 Add USE_SX1262 flag to multiple platformio.ini configurations 2026-03-16 09:34:12 +00:00
João Brázio
9a95e25ef2 Remove unused RX boosted gain mode functions and related preprocessor directives across multiple variants 2026-03-05 18:38:57 +00:00
João Brázio
71136671bd Implement remote lna toggle cli cmd 2026-02-10 15:02:23 +00:00
agessaman
0fb570338f fix(kiss): periodic noise floor calibration and AGC reset
- Trigger noise floor calibration every 2s and AGC reset every 30s in main loop.
- Reorder loop to match Dispatcher: calibrate + radio.loop() before AGC reset
  and recvRaw() so RSSI is never sampled right after startReceive().
- Update protocol doc with calibration intervals and typical noise floor range.
- Variant platformio.ini updates (heltec_v3, rak4631).
2026-02-03 20:58:39 -08:00
entr0p1
1f59e52880 nRF52840 Power Management - Phase 1 - Boot Low VBAT Voltage Lockout
Added NRF52840 power management core functionality:
- Boot‑voltage lockout
- Initial support for shutdown/reset reason storage and capture (via RESETREAS/GPREGRET2)
- LPCOMP wake (for voltage-driven shutdowns)
- VBUS wake (for voltage-driven shutdowns)
- Per-board shutdown handler for board-specific tasks
- Exposed CLI queries for power‑management status in CommonCLI.cpp
- Added documentation in docs/nrf52_power_management.md.
- Enabled power management support in Xiao nRF52840, RAK4631, Heltec T114 boards
2026-01-23 17:18:41 +11:00
João Brázio
f56172738d Bridge: Fix RAK4631 serial2 GPS conflict 2025-12-02 10:30:45 +00:00
João Brázio
baedddb25d Rename RS232 bridge environments and update build flags for Serial1 and Serial2 2025-11-25 16:19:28 +00:00
João Brázio
eafbd85d17 Add RAK4631 support for rs232 bridge 2025-11-25 11:53:21 +00:00
liquidraver
b0ce00652f Fix RAK4631 GPS UART pin macros 2025-11-11 13:00:27 +01:00
recrof
a5070077ba equalize RAK with all other nrf52 variants and use newer platform with all important fixes 2025-10-19 00:02:38 +02:00
liamcottle
0307b6119e increase MAX_NEIGHBOURS from 8 to 50 2025-09-28 16:11:58 +13:00
João Brázio
510472bfa0 Normalize repeater target names 2025-09-10 23:56:07 +01:00
taco
e8314c9c8c new ldscript for extrafs nrf companion envs 2025-09-09 16:55:46 +10:00
taco
accd1e0a97 nrf52 targets: increase limits for contacts and channels 2025-09-06 14:15:40 +10:00
recrof
d145d5936d fix RAK build errors 2025-08-18 12:53:44 +02:00
Scott Powell
fe376e8c35 * RAK_4631: ui-new 2025-08-17 16:49:08 +10:00
recrof
6861b0702f create sensor template in platformio.ini, update heltec v3 and rak4631 to use new template 2025-08-02 21:40:56 +02:00
Martin Kudlacek
822850b4d5 Support for Sensirion SHT4x 2025-07-28 10:02:31 +02:00
Martin Kudlacek
a96d1022a0 Added support for TI INA260 2025-07-28 09:41:06 +02:00
recrof
f88ebad604 enable all sensors on RAK4631 2025-07-21 15:30:14 +02:00
cod3doomy
6b4592bfe2 Cleanup and fixes
-Added RAK_4631 define back
-Added includes for common RAK sensors that are currently supported in ESM
-Set global variables to static
-Reduced delay time within the RAK gps init sequence
2025-07-17 10:42:18 -07:00
cod3doomy
660ab0692f RAK4631 ESM Migration
Changes to migrate sensor code to the ESM.

Added a separate GPS init sequence for the RAK that scans I2C and Serial1 on the various sockets of the various base boards to find the RAK12500. (and soon the RAK12501)

Removed the GPS specific envs from platformio.ini and enabled GPS for all envs.

Verified working with RAK12500 on RAK19007 sockets A and D, as well as RAK19003.
2025-07-16 19:04:50 -07:00
recrof
854a8dfe2f move rak to nrf52_core, remove nrf52840_core 2025-07-12 20:06:56 +02:00
Rob Loranger
9d0dd7947f move rak4631 specific files into variant folder 2025-07-09 10:21:24 -07:00
Rob Loranger
ad2e015a5b move rak usr btn to companions
repeaters do not typically have user buttons and
there is only one analog pin available on most, if
not all, base boards. so this allows repeaters to
add custom peripherals or alternate battery signals
2025-07-02 10:24:45 -07:00
cod3doomy
001b996a24 RAK4631: BME680 add and GPS cleanup
- Added the BME680 environment sensor functionality
- Added the GPS Repeater env for those wanting it
- Cleaned up the GPS and other RAK4631SensorManager code

Verified build and functionality on normal and GPS repeater and companion envs.

IAQ readout is still a work in progress, but a placeholder can be seen on Channel 2 of the app telemetry.
2025-06-24 17:46:01 -07:00
Scott Powell
7dd7b715cd * enabling _PRIVATE_KEY import/export for ALL companions. 2025-06-07 14:20:59 +10:00
Scott Powell
4b16cda03a * RAK4632 targets, now requiring ENV_INCLUDE_GPS to enable GPS 2025-05-28 23:31:31 +10:00
cod3doomy
0e8b807a8b RAK4631: Add RAK12500 GPS support
Added RAK12500 GPS support
Added socket scan capability to determine which socket the GPS is connected to

T-beam supreme: added conditional to displaying location data to only when gps is active
2025-05-25 22:48:04 -07:00
Adam Mealings
009173ab9e added missing variable defs and pinmode 2025-05-20 15:16:56 +01:00
liamcottle
6c0d94aa2d increase offline queue size from 16 to 256 for all companion ble firmwares 2025-05-14 23:02:49 +12:00
recrof
76639e2a68 raise current limit to max for sx126x and sx127x 2025-05-12 10:19:33 +02:00
liamcottle
d04eda9f16 enable neighbours feature for all repeater variants 2025-05-07 20:26:15 +12:00
recrof
eaea26267b disable debug flags that were not commented out after debugging 2025-05-05 22:48:21 +02:00
Florent
f9bc3a1ebb Merge branch 'dev' into t114-display 2025-04-15 07:46:45 +02:00
liamcottle
e825e4474f fix rak4631 builds after addition of xio nrf52 board 2025-04-13 13:36:39 +12:00
Florent
cf3d55201f ui : manage colors and ensure fw using ssd1306 still compile 2025-04-11 22:23:47 +02:00
taco
9b3e7e5a21 FIX: define OLED pins for RAK 2025-04-09 18:07:01 +10:00
recrof
04ad06b8be set repeater/room server Lat & Lon to 0.0 as default 2025-04-03 14:59:20 +02:00
Scott Powell
bfb4b1c496 * BIG refactor: 'board' and 'radio' objects now defined in 'target.h/.cpp'
* mesh::RTCClock class moved to MeshCore.h
2025-03-21 18:57:12 +11:00
Scott Powell
38667dabb1 * refactored platformio.ini, breaking up into variants/*.ini files 2025-03-18 23:57:04 +11:00