Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- v@1.0.4
- • Wifi Hotspot No Hardcoded
- */
- #include <WiFiManager.h> // https://github.com/tzapu/WiFiManager
- #include <otadrive_esp.h>
- #include <WiFi.h>
- #include "WiFiClientSecure.h"
- #include "Adafruit_MQTT.h"
- #include "Adafruit_MQTT_Client.h"
- #include <OneWire.h>
- #include <DallasTemperature.h>
- #define code_version "v@1.0.4"
- /************************* WiFi Access Point *********************************/
- //#define WLAN_SSID "OBESEGAS"
- //#define WLAN_PASS "12345@ABCDE"
- /************************* Adafruit.io Setup *********************************/
- #define AIO_SERVER "io.adafruit.com"
- // Using port 8883 for MQTTS
- #define AIO_SERVERPORT 8883
- // Adafruit IO Account Configuration
- // (to obtain these values, visit https://io.adafruit.com and click on Active Key)
- #define AIO_USERNAME "GJeddah12233"
- #define AIO_KEY "aio_oqRs03If7NMF8uSFRQ35jCnev3tX"
- /************ Global State (you don't need to change this!) ******************/
- // WiFiFlientSecure for SSL/TLS support
- WiFiClientSecure clientmqtt;
- // Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
- Adafruit_MQTT_Client mqtt(&clientmqtt, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
- // io.adafruit.com root CA
- const char* adafruitio_root_ca = \
- "-----BEGIN CERTIFICATE-----\n"
- "MIIEjTCCA3WgAwIBAgIQDQd4KhM/xvmlcpbhMf/ReTANBgkqhkiG9w0BAQsFADBh\n"
- "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
- "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n"
- "MjAeFw0xNzExMDIxMjIzMzdaFw0yNzExMDIxMjIzMzdaMGAxCzAJBgNVBAYTAlVT\n"
- "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
- "b20xHzAdBgNVBAMTFkdlb1RydXN0IFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3\n"
- "DQEBAQUAA4IBDwAwggEKAoIBAQC+F+jsvikKy/65LWEx/TMkCDIuWegh1Ngwvm4Q\n"
- "yISgP7oU5d79eoySG3vOhC3w/3jEMuipoH1fBtp7m0tTpsYbAhch4XA7rfuD6whU\n"
- "gajeErLVxoiWMPkC/DnUvbgi74BJmdBiuGHQSd7LwsuXpTEGG9fYXcbTVN5SATYq\n"
- "DfbexbYxTMwVJWoVb6lrBEgM3gBBqiiAiy800xu1Nq07JdCIQkBsNpFtZbIZhsDS\n"
- "fzlGWP4wEmBQ3O67c+ZXkFr2DcrXBEtHam80Gp2SNhou2U5U7UesDL/xgLK6/0d7\n"
- "6TnEVMSUVJkZ8VeZr+IUIlvoLrtjLbqugb0T3OYXW+CQU0kBAgMBAAGjggFAMIIB\n"
- "PDAdBgNVHQ4EFgQUlE/UXYvkpOKmgP792PkA76O+AlcwHwYDVR0jBBgwFoAUTiJU\n"
- "IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG\n"
- "AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB\n"
- "BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud\n"
- "HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds\n"
- "b2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEW\n"
- "HGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwDQYJKoZIhvcNAQELBQADggEB\n"
- "AIIcBDqC6cWpyGUSXAjjAcYwsK4iiGF7KweG97i1RJz1kwZhRoo6orU1JtBYnjzB\n"
- "c4+/sXmnHJk3mlPyL1xuIAt9sMeC7+vreRIF5wFBC0MCN5sbHwhNN1JzKbifNeP5\n"
- "ozpZdQFmkCo+neBiKR6HqIA+LMTMCMMuv2khGGuPHmtDze4GmEGZtYLyF8EQpa5Y\n"
- "jPuV6k2Cr/N3XxFpT3hRpt/3usU/Zb9wfKPtWpoznZ4/44c1p9rzFcZYrWkj3A+7\n"
- "TNBJE0GmP2fhXhP1D/XVfIW/h0yCJGEiV9Glm/uGOa3DXHlmbAcxSyCRraG+ZBkA\n"
- "7h4SeM6Y8l/7MBRpPCz6l8Y=\n"
- "-----END CERTIFICATE-----\n";
- /****************************** Feeds ***************************************/
- Adafruit_MQTT_Publish Pressure_Publish = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Pressure");
- Adafruit_MQTT_Publish Temperature_Inside_Publish = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Temperature_Inside");
- Adafruit_MQTT_Publish Temperature_Outside_Publish = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Temperature_Outside");
- Adafruit_MQTT_Publish MQ135_CO2_Publish = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/MQ135_CO2");
- Adafruit_MQTT_Publish MQ4_Methane_Publish = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/MQ4_Methane");
- /************************* I/O Pin Definitions *****************************/
- #define Pressure_pin 32
- #define MQ135_pin 34 // CO2 Gas Sensor
- #define MQ4_pin 35 // Methane Gas Sensor
- #define ONE_WIRE_BUS 4 // Temperature Sensors
- /********************** Global Variables and Objects ***********************/
- unsigned long previousMillis1 = 0;
- unsigned long previousMillis2 = 0;
- float pressureZero = 409.5; //analog reading of pressure transducer at (0 psi)
- float pressureMax = 3685.5; //analog reading of pressure transducer at (100 psi)
- float pressureValue = 0;
- float Temp_Inside = 0;
- float Temp_Outside = 0;
- float Pressure_RAW_Reading = 0;
- int MQ135_gas_RAW_Reading_CO2 = 0;
- int MQ4_gas_RAW_Reading_Methane = 0;
- OneWire oneWire(ONE_WIRE_BUS);
- DallasTemperature sensors(&oneWire);
- DeviceAddress insideThermometer = { 0x28, 0xB5, 0x27, 0x94, 0x97, 0x04, 0x03, 0x3F };//[Tank/Inside]
- DeviceAddress outsideThermometer = { 0x28, 0x30, 0x16, 0x94, 0x97, 0x0A, 0x03, 0xAB };//[Box/Outside]
- /*************************** Sketch Code ************************************/
- void setup() {
- Serial.begin(115200);
- Initialize_Sensors();
- Connect_To_WiFi();
- Connect_To_WiFi_And_MQTT_Server();
- OTADRIVE.setInfo("397b2ca6-458a-438e-8f24-29506888c9ce", code_version);
- Serial.print("Code Version: ");
- Serial.println(code_version);
- }
- void loop() {
- ReConnect_To_WiFi();
- ota();
- MQTT_connect();
- Read_Sensor_Data();
- if (millis() - previousMillis1 >= 1000) {
- previousMillis1 = millis();
- Show_Sensor_Data_on_Serial_Monitor();
- Serial.println("Show Data Every 1 Second");
- Serial.println("-----------------------------");
- }
- if (millis() - previousMillis2 >= 12000) {
- previousMillis2 = millis();
- Publish_Sensor_Data();
- Serial.println("*************************************************");
- Serial.println("Data Published to IOT Cloud Every 12 Seconds");
- Serial.println("*************************************************");
- }
- }
- /*************************** Functions ************************************/
- void Initialize_Sensors() {
- pinMode(Pressure_pin, INPUT);
- pinMode(MQ135_pin, INPUT);
- pinMode(MQ4_pin, INPUT);
- sensors.begin();
- sensors.setResolution(insideThermometer, 9);
- sensors.setResolution(outsideThermometer, 9);
- }
- float GetTemperature(DeviceAddress deviceAddress) {
- float tempC = sensors.getTempC(deviceAddress);
- return tempC;
- }
- void Read_Sensor_Data() {
- sensors.requestTemperatures();
- pressureValue = analogRead(Pressure_pin);
- pressureValue = map(pressureValue, pressureZero, pressureMax, 0, 100); // 0 psi to 100 psi
- Temp_Inside = sensors.getTempC(insideThermometer);//GetTemperature(insideThermometer); // -10°C to +85°C
- Temp_Outside = sensors.getTempC(outsideThermometer);//GetTemperature(outsideThermometer); // -10°C to +85°C
- MQ135_gas_RAW_Reading_CO2 = analogRead(MQ135_pin); // 0 to 4096
- MQ4_gas_RAW_Reading_Methane = analogRead(MQ4_pin); // 0 to 4096
- }
- void Show_Sensor_Data_on_Serial_Monitor() {
- Serial.print("Pressure: ");
- Serial.print(pressureValue, 1);
- Serial.println(" [psi]");
- Serial.print("Temperature[Tank/Inside]: ");
- Serial.print(Temp_Inside);
- Serial.println(" [°C]");
- Serial.print("Temperature[Box/Outside]: ");
- Serial.print(Temp_Outside);
- Serial.println(" [°C]");
- Serial.print("Gas CO2: ");
- Serial.print(MQ135_gas_RAW_Reading_CO2);
- Serial.println(" [VoltageLevel]");
- Serial.print("Gas Methane: ");
- Serial.print(MQ4_gas_RAW_Reading_Methane);
- Serial.println(" [VoltageLevel]");
- Serial.println("-----------------------------");
- }
- void Publish_Sensor_Data() {
- MQTT_connect();
- Pressure_Publish.publish(pressureValue);
- Temperature_Inside_Publish.publish(Temp_Inside);
- Temperature_Outside_Publish.publish(Temp_Outside);
- MQ135_CO2_Publish.publish(MQ135_gas_RAW_Reading_CO2);
- MQ4_Methane_Publish.publish(MQ4_gas_RAW_Reading_Methane);
- }
- void MQTT_connect() {
- int8_t ret;
- // Stop if already connected.
- if (mqtt.connected()) {
- return;
- }
- Serial.print("Connecting to MQTT... ");
- uint8_t retries = 2500;
- while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
- Serial.println(mqtt.connectErrorString(ret));
- Serial.println("Retrying MQTT connection in 5 seconds...");
- mqtt.disconnect();
- delay(5000); // wait 5 seconds
- retries--;
- //if (retries == 0) {
- // basically die and wait for WDT to reset me
- //while (1);
- //}
- }
- Serial.println("MQTT Connected!");
- }
- void Connect_To_WiFi_And_MQTT_Server() {
- delay(10);
- Serial.println(F("Adafruit IO MQTTS (SSL/TLS) Example"));
- /*
- // Connect to WiFi access point.
- Serial.println();
- Serial.println();
- Serial.print("Connecting to ");
- Serial.println(WLAN_SSID);
- delay(1000);
- WiFi.begin(WLAN_SSID, WLAN_PASS);
- delay(2000);
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
- Serial.println();
- Serial.println("WiFi connected");
- Serial.println("IP address: ");
- Serial.println(WiFi.localIP());
- */
- // Set Adafruit IO's root CA
- clientmqtt.setCACert(adafruitio_root_ca);
- }
- void ota()
- {
- if (OTADRIVE.timeTick(30))
- {
- OTADRIVE.updateFirmware();
- }
- }
- 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("Composting IOT 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