@@ -61,6 +61,18 @@ Adafruit_BME280::Adafruit_BME280(int8_t cspin, int8_t mosipin, int8_t misopin,
61
61
int8_t sckpin)
62
62
: _cs(cspin), _mosi(mosipin), _miso(misopin), _sck(sckpin) {}
63
63
64
+ Adafruit_BME280::~Adafruit_BME280 (void ) {
65
+ if (temp_sensor) {
66
+ delete temp_sensor;
67
+ }
68
+ if (pressure_sensor) {
69
+ delete pressure_sensor;
70
+ }
71
+ if (humidity_sensor) {
72
+ delete humidity_sensor;
73
+ }
74
+ }
75
+
64
76
/* !
65
77
* @brief Initialise sensor with given parameters / settings
66
78
* @param addr the I2C address the device can be found on
@@ -153,7 +165,6 @@ void Adafruit_BME280::setSampling(sensor_mode mode,
153
165
// making sure sensor is in sleep mode before setting configuration
154
166
// as it otherwise may be ignored
155
167
write8 (BME280_REGISTER_CONTROL, MODE_SLEEP);
156
-
157
168
158
169
// you must make sure to also set REGISTER_CONTROL after setting the
159
170
// CONTROLHUMID register, otherwise the values won't be applied (see
@@ -528,3 +539,159 @@ float Adafruit_BME280::seaLevelForAltitude(float altitude, float atmospheric) {
528
539
* @returns Sensor ID 0x60 for BME280, 0x56, 0x57, 0x58 BMP280
529
540
*/
530
541
uint32_t Adafruit_BME280::sensorID (void ) { return _sensorID; }
542
+
543
+ /* !
544
+ @brief Gets an Adafruit Unified Sensor object for the temp sensor component
545
+ @return Adafruit_Sensor pointer to temperature sensor
546
+ */
547
+ Adafruit_Sensor *Adafruit_BME280::getTemperatureSensor (void ) {
548
+ if (!temp_sensor) {
549
+ temp_sensor = new Adafruit_BME280_Temp (this );
550
+ }
551
+
552
+ return temp_sensor;
553
+ }
554
+
555
+ /* !
556
+ @brief Gets an Adafruit Unified Sensor object for the pressure sensor
557
+ component
558
+ @return Adafruit_Sensor pointer to pressure sensor
559
+ */
560
+ Adafruit_Sensor *Adafruit_BME280::getPressureSensor (void ) {
561
+ if (!pressure_sensor) {
562
+ pressure_sensor = new Adafruit_BME280_Pressure (this );
563
+ }
564
+ return pressure_sensor;
565
+ }
566
+
567
+ /* !
568
+ @brief Gets an Adafruit Unified Sensor object for the humidity sensor
569
+ component
570
+ @return Adafruit_Sensor pointer to humidity sensor
571
+ */
572
+ Adafruit_Sensor *Adafruit_BME280::getHumiditySensor (void ) {
573
+ if (!humidity_sensor) {
574
+ humidity_sensor = new Adafruit_BME280_Humidity (this );
575
+ }
576
+ return humidity_sensor;
577
+ }
578
+
579
+ /* *************************************************************************/
580
+ /* !
581
+ @brief Gets the sensor_t data for the BME280's temperature sensor
582
+ */
583
+ /* *************************************************************************/
584
+ void Adafruit_BME280_Temp::getSensor (sensor_t *sensor) {
585
+ /* Clear the sensor_t object */
586
+ memset (sensor, 0 , sizeof (sensor_t ));
587
+
588
+ /* Insert the sensor name in the fixed length char array */
589
+ strncpy (sensor->name , " BME280" , sizeof (sensor->name ) - 1 );
590
+ sensor->name [sizeof (sensor->name ) - 1 ] = 0 ;
591
+ sensor->version = 1 ;
592
+ sensor->sensor_id = _sensorID;
593
+ sensor->type = SENSOR_TYPE_AMBIENT_TEMPERATURE;
594
+ sensor->min_delay = 0 ;
595
+ sensor->min_value = -40.0 ; /* Temperature range -40 ~ +85 C */
596
+ sensor->max_value = +85.0 ;
597
+ sensor->resolution = 0.01 ; /* 0.01 C */
598
+ }
599
+
600
+ /* *************************************************************************/
601
+ /* !
602
+ @brief Gets the temperature as a standard sensor event
603
+ @param event Sensor event object that will be populated
604
+ @returns True
605
+ */
606
+ /* *************************************************************************/
607
+ bool Adafruit_BME280_Temp::getEvent (sensors_event_t *event) {
608
+ /* Clear the event */
609
+ memset (event, 0 , sizeof (sensors_event_t ));
610
+
611
+ event->version = sizeof (sensors_event_t );
612
+ event->sensor_id = _sensorID;
613
+ event->type = SENSOR_TYPE_AMBIENT_TEMPERATURE;
614
+ event->timestamp = millis ();
615
+ event->temperature = _theBME280->readTemperature ();
616
+ return true ;
617
+ }
618
+
619
+ /* *************************************************************************/
620
+ /* !
621
+ @brief Gets the sensor_t data for the BME280's pressure sensor
622
+ */
623
+ /* *************************************************************************/
624
+ void Adafruit_BME280_Pressure::getSensor (sensor_t *sensor) {
625
+ /* Clear the sensor_t object */
626
+ memset (sensor, 0 , sizeof (sensor_t ));
627
+
628
+ /* Insert the sensor name in the fixed length char array */
629
+ strncpy (sensor->name , " BME280" , sizeof (sensor->name ) - 1 );
630
+ sensor->name [sizeof (sensor->name ) - 1 ] = 0 ;
631
+ sensor->version = 1 ;
632
+ sensor->sensor_id = _sensorID;
633
+ sensor->type = SENSOR_TYPE_PRESSURE;
634
+ sensor->min_delay = 0 ;
635
+ sensor->min_value = 300.0 ; /* 300 ~ 1100 hPa */
636
+ sensor->max_value = 1100.0 ;
637
+ sensor->resolution = 0.012 ; /* 0.12 hPa relative */
638
+ }
639
+
640
+ /* *************************************************************************/
641
+ /* !
642
+ @brief Gets the pressure as a standard sensor event
643
+ @param event Sensor event object that will be populated
644
+ @returns True
645
+ */
646
+ /* *************************************************************************/
647
+ bool Adafruit_BME280_Pressure::getEvent (sensors_event_t *event) {
648
+ /* Clear the event */
649
+ memset (event, 0 , sizeof (sensors_event_t ));
650
+
651
+ event->version = sizeof (sensors_event_t );
652
+ event->sensor_id = _sensorID;
653
+ event->type = SENSOR_TYPE_PRESSURE;
654
+ event->timestamp = millis ();
655
+ event->pressure = _theBME280->readPressure () / 100 ; // convert Pa to hPa
656
+ return true ;
657
+ }
658
+
659
+ /* *************************************************************************/
660
+ /* !
661
+ @brief Gets the sensor_t data for the BME280's humidity sensor
662
+ */
663
+ /* *************************************************************************/
664
+ void Adafruit_BME280_Humidity::getSensor (sensor_t *sensor) {
665
+ /* Clear the sensor_t object */
666
+ memset (sensor, 0 , sizeof (sensor_t ));
667
+
668
+ /* Insert the sensor name in the fixed length char array */
669
+ strncpy (sensor->name , " BME280" , sizeof (sensor->name ) - 1 );
670
+ sensor->name [sizeof (sensor->name ) - 1 ] = 0 ;
671
+ sensor->version = 1 ;
672
+ sensor->sensor_id = _sensorID;
673
+ sensor->type = SENSOR_TYPE_RELATIVE_HUMIDITY;
674
+ sensor->min_delay = 0 ;
675
+ sensor->min_value = 0 ;
676
+ sensor->max_value = 100 ; /* 0 - 100 % */
677
+ sensor->resolution = 3 ; /* 3% accuracy */
678
+ }
679
+
680
+ /* *************************************************************************/
681
+ /* !
682
+ @brief Gets the humidity as a standard sensor event
683
+ @param event Sensor event object that will be populated
684
+ @returns True
685
+ */
686
+ /* *************************************************************************/
687
+ bool Adafruit_BME280_Humidity::getEvent (sensors_event_t *event) {
688
+ /* Clear the event */
689
+ memset (event, 0 , sizeof (sensors_event_t ));
690
+
691
+ event->version = sizeof (sensors_event_t );
692
+ event->sensor_id = _sensorID;
693
+ event->type = SENSOR_TYPE_RELATIVE_HUMIDITY;
694
+ event->timestamp = millis ();
695
+ event->relative_humidity = _theBME280->readHumidity ();
696
+ return true ;
697
+ }
0 commit comments