Example Code for Arduino-Acquire data in passive mode

In this routine, the controller needs to request data from the sensor every time, and then the sensor returns the data. Users will learn how to connect the sensor to Arduino and read gas concentration, gas type, and board temperature in passive mode.

Hardware Preparation

  • DFRuino UNO R3 x1
  • DFR0784 Smart Gas Sensor Terminal x1
  • Gas probe x1
  • Jumper wires

Software Preparation

The initial power-on requires more than 5 minutes of preheating. It is recommended to preheat more than 24 hours if it has not been used for a long time.
After switching the communication mode or changing the I2C address, the system needs to be powered off and on again.

Wiring Diagram

Sample Code

  • Connect the module to the Arduino according to the connection diagram above. Of course, you can also use it with Gravity I/O Expansion Board to build the project prototype more conveniently and quickly.
  • Set the DIP switch SEL on the sensor to 0, and use I2C communication by default.
  • The default I2C address is 0x74. If you need to modify the I2C address,You can configure the hardware I2C address through the DIP switch on the module, or run the code to modify the address group to modify the address. The corresponding relationship between the DIP switch and the I2C address parameter is as follows:
    • ADDRESS_0: 0x74, A0=0, A1=0
    • ADDRESS_1: 0x75, A0=0, A1=1
    • ADDRESS_2: 0x76, A0=1, A1=0
    • ADDRESS_3: 0x77, A0=1, A1=1
  • Download and install the DFRobot_GasSensor Library. (About how to install the library?)
  • Open Arduino IDE and upload the following code to Arduino UNO.
  • Open the serial port monitor of Arduino IDE, adjust the baud rate to 115200, and observe the serial port print result.
/*!
  * @file  initiativereport.ino
  * @brief The sensor actively reports all data
  * @n Experimental method: Connect the sensor communication pin to the main control, then burn codes into it. 
  * @n Communication mode selection, dial switch SEL:0: IIC, 1: UART
@n I2C address selection, the default I2C address is 0x74, A1 and A0 are combined into 4 types of IIC addresses
                | A1 | A0 |
                | 0  | 0  |    0x74
                | 0  | 1  |    0x75
                | 1  | 0  |    0x76
                | 1  | 1  |    0x77   default i2c address
  * @n Experimental phenomenon: Print all data via serial port
*/
#include "DFRobot_MultiGasSensor.h"

//Enabled by default, use IIC communication at this time. Use UART communication when disabled
#define I2C_COMMUNICATION

#ifdef  I2C_COMMUNICATION
#define I2C_ADDRESS    0x74
  DFRobot_GAS_I2C gas(&Wire ,I2C_ADDRESS);
#else
#if (!defined ARDUINO_ESP32_DEV) && (!defined __SAMD21G18A__)
/**
  UNO:pin_2-----RX
      pin_3-----TX
*/
  SoftwareSerial mySerial(2,3);
  DFRobot_GAS_SoftWareUart gas(&mySerial);
#else
/**
  ESP32:IO16-----RX
        IO17-----TX
*/
  DFRobot_GAS_HardWareUart gas(&Serial2); //ESP32HardwareSerial
#endif
#endif

void setup() {

  Serial.begin(115200);

  while(!gas.begin())
  {
    Serial.println("NO Deivces !");
    delay(1000);
  }
  Serial.println("The device is connected successfully!");

  gas.changeAcquireMode(gas.PASSIVITY);
  delay(1000);

  gas.setTempCompensation(gas.OFF);
}

void loop() {
    
  Serial.print("Ambient ");
  Serial.print(gas.queryGasType());
  Serial.print(" concentration is: ");
  Serial.print(gas.readGasConcentrationPPM());
  Serial.println(" %vol");
  //The measurement unit will only be %vol when the sensor is SEN0465
  //Otherwise the unit will be PPM
  Serial.print("The board temperature is: ");
  Serial.print(gas.readTempC());
  Serial.println(" ℃");
  Serial.println();
  delay(1000);
}

Result

Open the serial monitor (baud rate 115200) to get the gas type, concentration, and temperature.

  • The initial power-on requires more than 5 minutes of preheating. It is recommended to preheat more than 24 hours if it has not been used for a long time.
  • After switching the communication mode and changing the I2C address, the system needs to be powered off and on again.
  • In this routine, the controller needs to request data from the sensor every time, and then the sensor returns the data.
  • Default use I2C communication, mask #define I2C_COMMUNICATION in the code, and set the dip switch SEL to 1, the sensor is connected to the corresponding port defined by the controller, if use UNO, the blue line is connected to D3 and the green line is connected to D2, if use ESP32, the blue line is connected to IO17 and the green line is connected to IO16. After re-uploading the code, the whole system will be re-powered and will switch to UART communication.
  • Turn off temperature compensation by default, modify the code gas.setTempCompensation(gas.ON);, turn on temperature compensation after re-uploading the code

Was this article helpful?

TOP