[TUTORIAL] STANDALONE ENVIRONMENT MONITORING SYSTEM

In this experiment, we will be learning to make a wireless temperature and humidity monitoring system using the Witty Fox ESP 32 Dev Board and Witty Fox Si7021 Breakout board. The Si7021 I2C Humidity and Temperature Sensor is a monolithic CMOS IC integrating humidity and temperature sensor elements, an analog-to-digital converter, signal processing, calibration data and an I2C Interface. The Si7021 breakout is directly compatible with the WittyFox ESP 32 Dev Board through the dedicated I2C ports P9 or P10.

This experiment requires certain prerequisites on creating a Thingspeak account and channel. You also need to know how to program the Witty Fox ESP 32 Dev Board. Please refer to the following links to learn more about the same.

To learn about creating a thingspeak channel and uploading data on the cloud using ESP32, refer the following link:

https://www.robocraze.com/blog/post/tutorial-ds18b20-waterproof-sensor-all-you-need-to-know

 

To learn about programming the Witty Fox ESP 32 Dev Board using Witty Fox programmer (or any generic USB to TTL converter), please refer to the following link:

https://www.robocraze.com/blog/post/witty-fox-esp-programmer

 

The code for this experiment is given below. Link for the libraries required is given below:

Adafruit Si7021 library:

https://github.com/adafruit/Adafruit_Si7021

 

Thingspeak library:

https://github.com/mathworks/thingspeak-arduino

 

Upload the following code to an ESP32 module after making appropriate changes. Login to your thingspeak account and you can monitor live temperature and humidity data of the sensor's environment.

Code:

/*

  WittyFox Si7021 Thingspeak experiment

  Demonstrates the capabilities of the WittyFox ESP 32 Dev Board.

  This sketch gets Temperature and Humidity readings from Si7021 I2C based sensor and uploads the same data to thingspeak.

*/

#include <ThingSpeak.h>

#include <WiFi.h>

#include "Adafruit_Si7021.h"

Adafruit_Si7021 sensor = Adafruit_Si7021();

#define NETWORK_SSID "MySSID"  // replace MySSID with your WiFi network name

#define NETWORK_PASS "MyPassword" // replace MyPassword with your WiFi password

#define CH_ID_Temp 000000 // replace 0000000 with your channel number corresponding to Temperature

#define CH_ID_Humidity 000000 // replace 0000000 with your channel number corresponding to Humidity

#define WRITE_APIKEY_TEMP "XYZ" // replace XYZ with your channel write API Key

#define WRITE_APIKEY_HUMIDITY "XYZ" // replace XYZ with your channel write API Key

int keyIndex = 0;          // your network key Index number (needed only for WEP)

WiFiClient client;

voidsetup()

{

  Serial.begin(115200); //Initialize serial

  sensor.begin();       //Initialize the sensor

  WiFi.mode(WIFI_STA);

  ThingSpeak.begin(client); // Initialize ThingSpeak

  Serial.println("Si7021 test!");

  if (!sensor.begin()) {    //TO check if the sensor is connected properly

    Serial.println("Did not find Si7021 sensor!");

    while (true);

  }

}

voidloop()

{

  // Connect or reconnect to WiFi

  if (WiFi.status() != WL_CONNECTED)

  {

    Serial.print("Attempting to connect to SSID: ");

    Serial.println(NETWORK_SSID);

    while (WiFi.status() != WL_CONNECTED)

    {

      //todo : change to defined here

      WiFi.begin(NETWORK_SSID, NETWORK_PASS); // Connect to WPA/WPA2 network. Change this line if using open or WEP network

      Serial.print(".");

      delay(5000);

    }

    Serial.println("\nConnected.");

  }

  ThingSpeak.writeField(CH_ID_Temp, 1, sensor.readTemperature(), WRITE_APIKEY_TEMP);      //Updates the specified channel with current temperature using the WriteAPIkey

  ThingSpeak.writeField(CH_ID_Humidity, 1, sensor.readHumidity(), WRITE_APIKEY_HUMIDITY); //Updates the specified channel with current humidity using the WriteAPIkey

  Serial.print("Humidity: ");

  Serial.print(sensor.readHumidity());

  Serial.print("\tTemperature: ");

  Serial.println(sensor.readTemperature());

  delay(10000); // Wait 10 seconds to update the channel again

}

Leave a comment

Please note, comments must be approved before they are published