Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <WiFiManager.h> // https://github.com/tzapu/WiFiManager
- #include "DHT.h"
- #include <Wire.h>
- #include <WiFi.h>
- #include <HTTPClient.h>
- #include <TinyGPSPlus.h>
- #include <Adafruit_INA219.h>
- #include "DFRobot_VEML7700.h"
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- // Variables To Send To Google Sheets
- //--------------------------------------------------------------------------------
- String dht22Sensor_Temp_Value = "";
- String dht22Sensor_Hum_Value = "";
- String dustSensor_Value = "";
- String gpsModem_Lat_Value = "";
- String gpsModem_Lon_Value = "";
- String gpsModem_Alt_Value = "";
- String luxSensor_Value = "";
- String ina219Sensor_Voltage_Value = "";
- String ina219Sensor_Current_Value = "";
- String ina219Sensor_Power_Value = "";
- String windSpeedSensor_Value = "";
- String GOOGLE_SCRIPT_ID = "AKfycbz9To4wZ7uxCKOBePFnlfdxYs5zvvyWHuRebSzWNOljgb6fGAul-aNL-IRDO8qkx2ry";
- unsigned long dataMillis = 0;
- unsigned long sendInterval = 10000; // 10000 [milliSecond] = 10 [Seconds]
- //--------------------------------------------------------------------------------
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- // Temperature and Humidity Sensor Connections with ESP32
- // [DHT22 Sensor]
- //--------------------------------------------------------------------------------
- // // DHT22 [+] ----> ESP32 [5V]
- #define DHTPIN 5 // DHT22 [out] ----> ESP32 [D5]
- // // DHT22 [-] ----> ESP32 [GND]
- //--------------------------------------------------------------------------------
- // Dust Sensor Connections with ESP32
- // [Sharp Optical Dust Sensor GP2Y1014AU0F]
- //--------------------------------------------------------------------------------
- #define DustPin 34 // Dust [BLACK] ----> ESP32 [D34]
- #define ledPower 15 // Dust [WHITE] ----> ESP32 [D15]
- // // Dust [RED] ----> ESP32 [5V]
- // // Dust [BLUE] ----> N/C
- // // Dust [YELLOW]----> ESP32 [GND]
- //--------------------------------------------------------------------------------
- // GPS Modem Connections with ESP32
- // [Neo-6M GPS Modem]
- //--------------------------------------------------------------------------------
- // // GPS [VCC] ----> ESP32 [3.3V]
- // // GPS [RX] ----> ESP32 [TX2]
- // // GPS [TX] ----> ESP32 [RX2]
- // // GPS [GND] ----> ESP32 [GND]
- //--------------------------------------------------------------------------------
- // LUX Sensor Connections with ESP32
- // [VEML 7700 LUX Sensor]
- //--------------------------------------------------------------------------------
- // // LUX [VIN] ----> ESP32 [3.3V]
- // // LUX [3Vo] ----> N/C
- // // LUX [GND] ----> ESP32 [GND]
- // // LUX [SCL] ----> ESP32 [D22]
- // // LUX [SDA] ----> ESP32 [D21]
- //--------------------------------------------------------------------------------
- // Power Voltage/Current Sensor Connections with ESP32
- // [INA219 DC Current Monitor Sensor]
- //--------------------------------------------------------------------------------
- // // INA219 [VCC] ----> ESP32 [3.3V]
- // // INA219 [GND] ----> ESP32 [GND]
- // // INA219 [SCL] ----> ESP32 [D22]
- // // INA219 [SDA] ----> ESP32 [D21]
- //--------------------------------------------------------------------------------
- // Wind Speed Sensor Connections with ESP32
- // [PR-3000-FSJT-N01 Wind Speed Sensor]
- //--------------------------------------------------------------------------------
- // // Wind [GND] ----> ESP32 [GND]
- #define RXD2 2 // Wind [RXD] ----> ESP32 [D2]
- #define TXD2 4 // Wind [TXD] ----> ESP32 [D4]
- // // Wind [VCC] ----> ESP32 [VIN]
- //--------------------------------------------------------------------------------
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- // Temperature and Humidity Sensor Variables
- // [DHT22 Sensor]
- //--------------------------------------------------------------------------------
- #define DHTTYPE DHT22
- DHT dht(DHTPIN, DHTTYPE);
- //--------------------------------------------------------------------------------
- // Dust Sensor Variables
- // [Sharp Optical Dust Sensor GP2Y1014AU0F]
- //--------------------------------------------------------------------------------
- int samplingTime = 280;
- int deltaTime = 40;
- int sleepTime = 9680;
- float voMeasured = 0;
- float calcVoltage = 0;
- float dustDensity = 0;
- //--------------------------------------------------------------------------------
- // GPS Modem Variables
- // [Neo-6M GPS Modem]
- //--------------------------------------------------------------------------------
- TinyGPSPlus gps;
- String gpsLat, gpsLon, gpsAlt;
- //--------------------------------------------------------------------------------
- // LUX Sensor Variables
- // [VEML 7700 LUX Sensor]
- //--------------------------------------------------------------------------------
- DFRobot_VEML7700 LUX_Sensor_VEML7700;
- float lux;
- //--------------------------------------------------------------------------------
- // Power Voltage/Current Sensor Variables
- // [INA219 DC Current Monitor Sensor]
- //--------------------------------------------------------------------------------
- Adafruit_INA219 ina219;
- float shuntvoltage = 0;
- float busvoltage = 0;
- float current_mA = 0;
- float loadvoltage = 0;
- float power_mW = 0;
- //--------------------------------------------------------------------------------
- // Wind Speed Sensor Variables
- // [PR-3000-FSJT-N01 Wind Speed Sensor]
- //--------------------------------------------------------------------------------
- byte ByteArray[250];
- int ByteData[20];
- //--------------------------------------------------------------------------------
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- void setup() {
- Serial.begin(9600);
- Connect_To_WiFi();
- dht22Sensor_Setup();
- dustSensor_Setup();
- gps_Setup();
- luxSensor_Setup();
- ina219_Setup();
- windSpeedSensor_Setup();
- //WiFi_Setup();
- }//end of Setup
- void loop() {
- ReConnect_To_WiFi();
- read_dht22Sensor();
- read_dustSensor();
- read_gpsModem();
- read_luxSensor();
- read_ina219Sensor();
- read_windSpeedSensor();
- //-------------------------------------------
- if (millis() - dataMillis > sendInterval) {
- dataMillis = millis();
- Send_Data_To_Google_Sheets();
- }
- //-------------------------------------------
- }//end of LOOP
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- // Temperature and Humidity Sensor Functions
- // [DHT22 Sensor]
- //--------------------------------------------------------------------------------
- void dht22Sensor_Setup() {
- dht.begin();
- }
- void read_dht22Sensor() {
- float h = dht.readHumidity();
- float t = dht.readTemperature();
- float f = dht.readTemperature(true);
- if (isnan(h) || isnan(t) || isnan(f)) {
- Serial.println(F("Failed to read from DHT sensor!"));
- return;
- }
- float hif = dht.computeHeatIndex(f, h);
- float hic = dht.computeHeatIndex(t, h, false);
- Serial.print(F("Humidity: "));
- Serial.print(h);
- Serial.print(F("% Temperature: "));
- Serial.print(t);
- Serial.print(F("°C "));
- Serial.print(f);
- Serial.print(F("°F Heat index: "));
- Serial.print(hic);
- Serial.print(F("°C "));
- Serial.print(hif);
- Serial.println(F("°F"));
- dht22Sensor_Temp_Value = String(t);
- dht22Sensor_Hum_Value = String(h);
- }
- //--------------------------------------------------------------------------------
- // Dust Sensor Functions
- // [Sharp Optical Dust Sensor GP2Y1014AU0F]
- //--------------------------------------------------------------------------------
- void dustSensor_Setup() {
- pinMode(ledPower, OUTPUT);
- }
- void read_dustSensor() {
- digitalWrite(ledPower, LOW); // power on the LED
- delayMicroseconds(samplingTime);
- voMeasured = analogRead(DustPin); // read the dust value
- delayMicroseconds(deltaTime);
- digitalWrite(ledPower, HIGH); // turn the LED off
- delayMicroseconds(sleepTime);
- // 0 - 5V mapped to 0 - 1023 integer values
- // recover voltage
- calcVoltage = voMeasured * (5.0 / 1024.0);
- // linear eqaution taken from http://www.howmuchsnow.com/arduino/airquality/
- // Chris Nafis (c) 2012
- dustDensity = 170 * calcVoltage - 0.1;
- Serial.println(dustDensity); // unit: ug/m3
- dustSensor_Value = String(dustDensity);
- }
- //--------------------------------------------------------------------------------
- // GPS Modem Functions
- // [Neo-6M GPS Modem]
- //--------------------------------------------------------------------------------
- void gps_Setup() {
- Serial.begin(115200);
- Serial2.begin(9600);//Serial Channel for GPS with ESP32 [TX2+RX2]
- }
- void read_gpsModem() {
- if (Serial2.available() > 0) {
- if (gps.encode(Serial2.read())) {
- ///////////////////////////////////////////
- if (gps.location.isValid()) {
- float gpslat_float = gps.location.lat();
- gpsLat = String(gpslat_float, 6);
- Serial.print(F("- latitude: "));
- Serial.println(gpsLat);
- float gpslon_float = gps.location.lng();
- gpsLon = String(gpslon_float, 6);
- Serial.print(F("- longitude: "));
- Serial.println(gpsLon);
- } else {
- Serial.println(F("- location: INVALID"));
- gpsLat = "0.00";
- gpsLon = "0.00";
- }
- Serial.print(F("- speed: "));
- if (gps.altitude.isValid()) {
- float altMeters = gps.altitude.meters();
- gpsAlt = String(altMeters, 2);
- Serial.print(gpsAlt);
- Serial.println(F(" Meter"));
- } else {
- Serial.println(F("INVALID"));
- gpsAlt = "0.00";
- }
- Serial.println();
- gpsModem_Lat_Value = String(gpsLat);
- gpsModem_Lon_Value = String(gpsLon);
- gpsModem_Alt_Value = String(gpsAlt);
- ///////////////////////////////////////////
- }//end encoding
- }
- if (millis() > 5000 && gps.charsProcessed() < 10)
- Serial.println(F("No GPS data received: check wiring"));
- }
- //--------------------------------------------------------------------------------
- // LUX Sensor Functions
- // [VEML 7700 LUX Sensor]
- //--------------------------------------------------------------------------------
- void luxSensor_Setup() {
- LUX_Sensor_VEML7700.begin();
- }
- void read_luxSensor() {
- LUX_Sensor_VEML7700.getALSLux(lux);
- Serial.print("Lux:");
- Serial.print(lux);
- Serial.println(" lx");
- luxSensor_Value = String(lux);
- }
- //--------------------------------------------------------------------------------
- // Power Voltage/Current Sensor Functions
- // [INA219 DC Current Monitor Sensor]
- //--------------------------------------------------------------------------------
- void ina219_Setup() {
- // Initialize the INA219.
- // By default the initialization will use the largest range (32V, 2A).
- if (! ina219.begin()) {
- Serial.println("Failed to find INA219 chip");
- while (1) {
- delay(10);
- }
- }
- }
- void read_ina219Sensor() {
- shuntvoltage = ina219.getShuntVoltage_mV();
- busvoltage = ina219.getBusVoltage_V();
- current_mA = ina219.getCurrent_mA();
- current_mA = current_mA / 1000.00;// convert to Amp
- power_mW = ina219.getPower_mW();
- power_mW = power_mW / 1000.00;// convert to Watt
- loadvoltage = busvoltage + (shuntvoltage / 1000);
- Serial.print("Bus Voltage: "); Serial.print(busvoltage); Serial.println(" V");
- Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV");
- Serial.print("Load Voltage: "); Serial.print(loadvoltage); Serial.println(" V");
- Serial.print("Current: "); Serial.print(current_mA); Serial.println(" A");
- Serial.print("Power: "); Serial.print(power_mW); Serial.println(" W");
- Serial.println("");
- ina219Sensor_Voltage_Value = String(loadvoltage);
- ina219Sensor_Current_Value = String(current_mA);
- ina219Sensor_Power_Value = String(power_mW);
- }
- //--------------------------------------------------------------------------------
- // Wind Speed Sensor Functions
- // [PR-3000-FSJT-N01 Wind Speed Sensor]
- //--------------------------------------------------------------------------------
- void windSpeedSensor_Setup() {
- Serial1.begin(4800, SERIAL_8N1, RXD2, TXD2);
- }
- void read_windSpeedSensor() {
- delay(200);
- byte msgfs[] = { 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x0B };
- int i;
- int len = 8;
- for (i = 0; i < len; i++) {
- Serial1.write(msgfs[i]);
- }
- len = 0;
- int a = 0;
- while (Serial1.available()) {
- ByteArray[a] = Serial1.read();
- a++;
- }
- int b = 0;
- String registros;
- for (b = 0; b < a; b++) {
- registros = String(ByteArray[b], HEX);
- }
- ByteData[0] = ByteArray[3] * 256 + ByteArray[4];
- float winds;
- winds = ByteData[0] * 0.1;
- Serial.print("Wind Speed = ");
- Serial.print(winds);
- Serial.println(" m/s");
- windSpeedSensor_Value = String(winds);
- //delay(50);//200
- }
- //--------------------------------------------------------------------------------
- /*
- void WiFi_Setup() {
- WiFi.mode(WIFI_STA);
- WiFi.begin(ssid, password);
- Serial.print("Connecting to Wi-Fi");
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
- Serial.println("OK");
- }
- */
- /*
- dht22Sensor_Temp_Value
- dht22Sensor_Hum_Value
- dustSensor_Value
- gpsModem_Lat_Value
- gpsModem_Lon_Value
- gpsModem_Alt_Value
- luxSensor_Value
- ina219Sensor_Voltage_Value
- ina219Sensor_Current_Value
- ina219Sensor_Power_Value
- windSpeedSensor_Value
- */
- void Send_Data_To_Google_Sheets() {
- String param;
- param = "dataA=" + dht22Sensor_Temp_Value;
- param += "&dataB=" + dht22Sensor_Hum_Value;
- param += "&dataC=" + dustSensor_Value;
- param += "&dataD=" + gpsModem_Lat_Value;
- param += "&dataE=" + gpsModem_Lon_Value;
- param += "&dataF=" + gpsModem_Alt_Value;
- param += "&dataG=" + luxSensor_Value;
- param += "&dataH=" + ina219Sensor_Voltage_Value;
- param += "&dataJ=" + ina219Sensor_Current_Value;
- param += "&dataK=" + ina219Sensor_Power_Value;
- param += "&dataL=" + windSpeedSensor_Value;
- write_to_google_sheet(param);
- }
- void write_to_google_sheet(String params) {
- HTTPClient http;
- String url = "https://script.google.com/macros/s/" + GOOGLE_SCRIPT_ID + "/exec?" + params;
- //Serial.print(url);
- Serial.println("Postring GPS data to Google Sheet");
- //---------------------------------------------------------------------
- //starts posting data to google sheet
- http.begin(url.c_str());
- http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
- int httpCode = http.GET();
- Serial.print("HTTP Status Code: ");
- Serial.println(httpCode);
- //---------------------------------------------------------------------
- //getting response from google sheet
- String payload;
- if (httpCode > 0) {
- payload = http.getString();
- Serial.println("Payload: " + payload);
- }
- //---------------------------------------------------------------------
- http.end();
- }
- void ReConnect_To_WiFi() {
- while (WiFi.status() != WL_CONNECTED) {
- //delay(500);
- Serial.print(".");
- Connect_To_WiFi();
- }
- }
- void Connect_To_WiFi() {
- WiFiManager wm;
- bool res;
- res = wm.autoConnect("Senior Project [Setup WiFi]"); // password protected ap
- if (!res) {
- Serial.println("Failed to Connect!!");
- // ESP.restart();
- }
- else {
- //if you get here you have connected to the WiFi
- Serial.println("Connected...");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement