From 6105de9f97475626f52319b5028b7b37fc50d312 Mon Sep 17 00:00:00 2001 From: auel Date: Fri, 20 May 2022 17:01:50 +0200 Subject: [PATCH] Temp captor:fixed, Battery measurement:work, solder on esp32, not final version --- include/main.h | 18 +- include/secret.h | 8 +- lib/18650CL-master/LICENSE | 21 +++ lib/18650CL-master/README.md | 2 + .../GetChargeLevel/GetChargeLevel.ino | 28 ++++ lib/18650CL-master/keywords.txt | 18 ++ lib/18650CL-master/library.properties | 9 + .../src/Pangodream_18650_CL.cpp | 154 ++++++++++++++++++ lib/18650CL-master/src/Pangodream_18650_CL.h | 94 +++++++++++ platformio.ini | 4 +- src/main.cpp | 24 ++- 11 files changed, 365 insertions(+), 15 deletions(-) create mode 100644 lib/18650CL-master/LICENSE create mode 100644 lib/18650CL-master/README.md create mode 100644 lib/18650CL-master/examples/GetChargeLevel/GetChargeLevel.ino create mode 100644 lib/18650CL-master/keywords.txt create mode 100644 lib/18650CL-master/library.properties create mode 100644 lib/18650CL-master/src/Pangodream_18650_CL.cpp create mode 100644 lib/18650CL-master/src/Pangodream_18650_CL.h diff --git a/include/main.h b/include/main.h index 719e762..d987af8 100644 --- a/include/main.h +++ b/include/main.h @@ -15,14 +15,16 @@ #include #include -#define TOPIC "test1" -#define MQTT_ADDRESS "192.168.0.242" +#define TOPIC "test-alex" +#define MQTT_ADDRESS "185.233.103.24" #define MQTT_PORT 1883 #define ESPNAME "esp32-bastien" #define CLUSTER "grappe1" #define SENSORS_NUMBER 5 #define DHT22 22 -#define TIME_TO_SLEEP 598 +//comment for the test part this is the good frequency +//#define TIME_TO_SLEEP 598 +#define TIME_TO_SLEEP 8 #define US_TO_S_FACTOR 1000000 #define R2 100 #define R3 10 @@ -33,8 +35,9 @@ #define VOLTAGE_TO_ADC(in) ((ADC_REFERENCE * (in)) / 4096) #define BATTERY_MAX_ADC VOLTAGE_TO_ADC(VOLTAGE_OUT(VOLTAGE_MAX)) #define BATTERY_MIN_ADC VOLTAGE_TO_ADC(VOLTAGE_OUT(VOLTAGE_MIN)) -#define ADC_PIN 34 -#define CONV_FACTOR 2.92 +// Solder apply on all riders behind the ESP32 for the battery voltage captor +#define ADC_PIN 35 +#define CONV_FACTOR 1.7 #define READS 20 void setupMQTT(const char *address, int port); @@ -48,4 +51,9 @@ void writeMsg(char *txt, float *temp, float *hum, int number); //timeClient.getEpochTime().toCharArray(date, 50); = convertir un string en char + +/* +For test the esp32 signal emission without server Working/fixed/updated : +mosquitto_sub -h cohabit-capteurs.aquilenet.fr -u capteurs -P Fablab -t test-alex +*/ #endif \ No newline at end of file diff --git a/include/secret.h b/include/secret.h index 25c9e45..db1b1f1 100644 --- a/include/secret.h +++ b/include/secret.h @@ -1,5 +1,5 @@ -#define MQTT_USER "NomUtilisateurMQTT" -#define MQTT_MDP "MotDePasseMQTT" -#define SSID "NomDuWifi" -#define PWD "MotDePasseWifi" +#define MQTT_USER "capteurs" +#define MQTT_MDP "Fablab" +#define SSID "Thermo-Bibli" +#define PWD "17413278" diff --git a/lib/18650CL-master/LICENSE b/lib/18650CL-master/LICENSE new file mode 100644 index 0000000..6bc87c7 --- /dev/null +++ b/lib/18650CL-master/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Pangodream + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/lib/18650CL-master/README.md b/lib/18650CL-master/README.md new file mode 100644 index 0000000..c33da68 --- /dev/null +++ b/lib/18650CL-master/README.md @@ -0,0 +1,2 @@ +# 18650CL +Library to calculate 18650 charge in Arduino environment diff --git a/lib/18650CL-master/examples/GetChargeLevel/GetChargeLevel.ino b/lib/18650CL-master/examples/GetChargeLevel/GetChargeLevel.ino new file mode 100644 index 0000000..7ba0fd4 --- /dev/null +++ b/lib/18650CL-master/examples/GetChargeLevel/GetChargeLevel.ino @@ -0,0 +1,28 @@ +#include + +//#define ADC_PIN 34 +//#define CONV_FACTOR 1.7 +//#define READS 20 + +Pangodream_18650_CL BL; +/** + * If you need to change default values you can use it as + * Pangodream_18650_CL BL(ADC_PIN, CONV_FACTOR, READS); + */ + +void setup() { + Serial.begin(115200); +} + +void loop() { + Serial.print("Value from pin: "); + Serial.println(analogRead(34)); + Serial.print("Average value from pin: "); + Serial.println(BL.pinRead()); + Serial.print("Volts: "); + Serial.println(BL.getBatteryVolts()); + Serial.print("Charge level: "); + Serial.println(BL.getBatteryChargeLevel()); + Serial.println(""); + delay(1000); +} diff --git a/lib/18650CL-master/keywords.txt b/lib/18650CL-master/keywords.txt new file mode 100644 index 0000000..70cc330 --- /dev/null +++ b/lib/18650CL-master/keywords.txt @@ -0,0 +1,18 @@ +####################################### +# Syntax Coloring Map BH1750FVI +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +Pangodream_18650_CL KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### +getBatteryChargeLevel KEYWORD2 +getBatteryVolts KEYWORD2 +getAnalogPin KEYWORD2 +pinRead KEYWORD2 +getConvFactor KEYWORD2 diff --git a/lib/18650CL-master/library.properties b/lib/18650CL-master/library.properties new file mode 100644 index 0000000..a0d14b7 --- /dev/null +++ b/lib/18650CL-master/library.properties @@ -0,0 +1,9 @@ +name=Pangodream_18650_CL +version=1.0.1 +author=Pangodream +maintainer=Pangodream +sentence=Pangodream Library to calculate 18650 charge +paragraph=Pangodream Library to calculate 18650 Ion-Li battery charge +category=Uncategorized +url=https://github.com/pangodream/18650CL +architectures=esp32 diff --git a/lib/18650CL-master/src/Pangodream_18650_CL.cpp b/lib/18650CL-master/src/Pangodream_18650_CL.cpp new file mode 100644 index 0000000..da153b7 --- /dev/null +++ b/lib/18650CL-master/src/Pangodream_18650_CL.cpp @@ -0,0 +1,154 @@ +/* + MIT License + + Copyright (c) 2019 Pangodream + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ +#include "Arduino.h" +#include "Pangodream_18650_CL.h" + +Pangodream_18650_CL::Pangodream_18650_CL(int addressPin, double convFactor, int reads) +{ + _reads = reads; + _convFactor = convFactor; + _addressPin = addressPin; + _initVoltsArray(); +} + +Pangodream_18650_CL::Pangodream_18650_CL(int addressPin, double convFactor) +{ + _reads = DEF_READS; + _convFactor = convFactor; + _addressPin = addressPin; + _initVoltsArray(); +} + +Pangodream_18650_CL::Pangodream_18650_CL(int addressPin) +{ + _reads = DEF_READS; + _convFactor = DEF_CONV_FACTOR; + _addressPin = addressPin; + _initVoltsArray(); +} + +Pangodream_18650_CL::Pangodream_18650_CL() +{ + _reads = DEF_READS; + _convFactor = DEF_CONV_FACTOR; + _addressPin = DEF_PIN; + _initVoltsArray(); +} + +int Pangodream_18650_CL::getAnalogPin() +{ + return _addressPin; +} +double Pangodream_18650_CL::getConvFactor() +{ + return _convFactor; +} + +/** + * Loads each voltage value in its matching charge element (index) + */ +void Pangodream_18650_CL::_initVoltsArray(){ + _vs[0] = 3.200; + _vs[1] = 3.250; _vs[2] = 3.300; _vs[3] = 3.350; _vs[4] = 3.400; _vs[5] = 3.450; + _vs[6] = 3.500; _vs[7] = 3.550; _vs[8] = 3.600; _vs[9] = 3.650; _vs[10] = 3.700; + _vs[11] = 3.703; _vs[12] = 3.706; _vs[13] = 3.710; _vs[14] = 3.713; _vs[15] = 3.716; + _vs[16] = 3.719; _vs[17] = 3.723; _vs[18] = 3.726; _vs[19] = 3.729; _vs[20] = 3.732; + _vs[21] = 3.735; _vs[22] = 3.739; _vs[23] = 3.742; _vs[24] = 3.745; _vs[25] = 3.748; + _vs[26] = 3.752; _vs[27] = 3.755; _vs[28] = 3.758; _vs[29] = 3.761; _vs[30] = 3.765; + _vs[31] = 3.768; _vs[32] = 3.771; _vs[33] = 3.774; _vs[34] = 3.777; _vs[35] = 3.781; + _vs[36] = 3.784; _vs[37] = 3.787; _vs[38] = 3.790; _vs[39] = 3.794; _vs[40] = 3.797; + _vs[41] = 3.800; _vs[42] = 3.805; _vs[43] = 3.811; _vs[44] = 3.816; _vs[45] = 3.821; + _vs[46] = 3.826; _vs[47] = 3.832; _vs[48] = 3.837; _vs[49] = 3.842; _vs[50] = 3.847; + _vs[51] = 3.853; _vs[52] = 3.858; _vs[53] = 3.863; _vs[54] = 3.868; _vs[55] = 3.874; + _vs[56] = 3.879; _vs[57] = 3.884; _vs[58] = 3.889; _vs[59] = 3.895; _vs[60] = 3.900; + _vs[61] = 3.906; _vs[62] = 3.911; _vs[63] = 3.917; _vs[64] = 3.922; _vs[65] = 3.928; + _vs[66] = 3.933; _vs[67] = 3.939; _vs[68] = 3.944; _vs[69] = 3.950; _vs[70] = 3.956; + _vs[71] = 3.961; _vs[72] = 3.967; _vs[73] = 3.972; _vs[74] = 3.978; _vs[75] = 3.983; + _vs[76] = 3.989; _vs[77] = 3.994; _vs[78] = 4.000; _vs[79] = 4.008; _vs[80] = 4.015; + _vs[81] = 4.023; _vs[82] = 4.031; _vs[83] = 4.038; _vs[84] = 4.046; _vs[85] = 4.054; + _vs[86] = 4.062; _vs[87] = 4.069; _vs[88] = 4.077; _vs[89] = 4.085; _vs[90] = 4.092; + _vs[91] = 4.100; _vs[92] = 4.111; _vs[93] = 4.122; _vs[94] = 4.133; _vs[95] = 4.144; + _vs[96] = 4.156; _vs[97] = 4.167; _vs[98] = 4.178; _vs[99] = 4.189; _vs[100] = 4.200; +} + +int Pangodream_18650_CL::getBatteryChargeLevel() +{ + int readValue = _analogRead(_addressPin); + double volts = _analogReadToVolts(readValue); + int chargeLevel = _getChargeLevel(volts); + return chargeLevel; +} + +int Pangodream_18650_CL::pinRead(){ + return _analogRead(_addressPin); +} + +int Pangodream_18650_CL::_analogRead(int pinNumber){ + int totalValue = 0; + int averageValue = 0; + for(int i = 0; i < _reads; i++){ + totalValue += analogRead(pinNumber); + } + averageValue = totalValue / _reads; + return averageValue; +} +/** + * Performs a binary search to find the index corresponding to a voltage. + * The index of the array is the charge % +*/ +int Pangodream_18650_CL::_getChargeLevel(double volts){ + int idx = 50; + int prev = 0; + int half = 0; + if (volts >= 4.2){ + return 100; + } + if (volts <= 3.2){ + return 0; + } + while(true){ + half = abs(idx - prev) / 2; + prev = idx; + if(volts >= _vs[idx]){ + idx = idx + half; + }else{ + idx = idx - half; + } + if (prev == idx){ + break; + } + } + return idx; +} + +double Pangodream_18650_CL::_analogReadToVolts(int readValue){ + double volts; + volts = readValue * _convFactor / 1000; + return volts; +} + +double Pangodream_18650_CL::getBatteryVolts(){ + int readValue = analogRead(_addressPin); + return _analogReadToVolts(readValue); +} diff --git a/lib/18650CL-master/src/Pangodream_18650_CL.h b/lib/18650CL-master/src/Pangodream_18650_CL.h new file mode 100644 index 0000000..d38b0ed --- /dev/null +++ b/lib/18650CL-master/src/Pangodream_18650_CL.h @@ -0,0 +1,94 @@ +/* + MIT License + + Copyright (c) 2019 Pangodream + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ + +/* + * 18650 Ion-Li battery charge + */ + +#ifndef Pangodream_18650_CL_h +#define Pangodream_18650_CL_h + +#include "Arduino.h" + +#define DEF_PIN 34 +#define DEF_CONV_FACTOR 1.7 +#define DEF_READS 20 + +/* + * 18650 Ion-Li battery charge + * Calculates charge level of an 18650 Ion-Li battery + */ +class Pangodream_18650_CL { + public: + + /* + * Constructor + * @param addressPin, ADC pin number where the voltage divider is connected to + */ + Pangodream_18650_CL(int addressPin); + + /* + * Constructor + * @param addressPin, ADC pin number where the voltage divider is connected to + * @param convFactor, Convertion factor for analog read units to volts + */ + Pangodream_18650_CL(int addressPin, double convFactor); + + /* + * Constructor + * @param addressPin, ADC pin number where the voltage divider is connected to + * @param convFactor, Convertion factor for analog read units to volts + * @param reads, Number of reads of analog pin to calculate an average value + */ + Pangodream_18650_CL(int addressPin, double convFactor, int reads); + /* + * Constructor + */ + Pangodream_18650_CL(); + + /* + * Get the battery charge level (0-100) + * @return The calculated battery charge level + */ + int getBatteryChargeLevel(); + double getBatteryVolts(); + int getAnalogPin(); + int pinRead(); + double getConvFactor(); + + private: + + int _addressPin; //!< ADC pin used, default is GPIO34 - ADC1_6 + int _reads; //Number of reads of ADC pin to calculate an average value + double _convFactor; //!< Convertion factor to translate analog units to volts + double _vs[101]; //Array with voltage - charge definitions + + void _initVoltsArray(); + int _getChargeLevel(double volts); + int _analogRead(int pinNumber); + double _analogReadToVolts(int readValue); + +}; + +#endif \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index fe33c49..efc1123 100644 --- a/platformio.ini +++ b/platformio.ini @@ -8,9 +8,9 @@ ; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html -[env:esp32dev] +[env:esp32 olimex devKit Lipo] platform = espressif32 -board = esp32dev +board = esp32-devkitlipo framework = arduino lib_deps = adafruit/DHT sensor library@^1.4.2 diff --git a/src/main.cpp b/src/main.cpp index 3ab7171..87656dc 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,8 +1,11 @@ #include "main.h" +#include +#include +#include using namespace std; -DHT sensors[SENSORS_NUMBER] = {DHT(23, DHT22), DHT(22, DHT22), DHT(21, DHT22), DHT(17, DHT22), DHT(2, DHT22)}; +DHT sensors[SENSORS_NUMBER] = {DHT(04, DHT22), DHT(18, DHT22), DHT(05, DHT22), DHT(17, DHT22), DHT(16, DHT22)}; float temp[SENSORS_NUMBER]; float hum[SENSORS_NUMBER]; @@ -46,7 +49,7 @@ void reconnect(void) while (!MqttClient.connected()) { Serial.print("."); - if (MqttClient.connect(ESPNAME, MQTT_USER, MQTT_PWD)) + if (MqttClient.connect(ESPNAME, MQTT_USER, MQTT_MDP)) // MQTT_MDP (mot de passe) { Serial.println("Connected."); } @@ -95,11 +98,24 @@ std::tuple getDate() return std::make_tuple(year, month, day); } +// Function that gets current epoch time +unsigned long getTime() { + time_t now; + struct tm timeinfo; + if (!getLocalTime(&timeinfo)) { + //Serial.println("Failed to obtain time"); + return(0); + } + time(&now); + return now; +} //-------------------- Création de trames --------------------// void writeMessage(char *txt, float *temp, float *hum, int number) { int chargelvl = Battery.getBatteryChargeLevel(); + //float homeValue = 3.3 * analogRead(ADC_PIN) / 2048; for test measurement + //float homeValue1 = 1.7 * analogRead(ADC_PIN) / 1000; switch (number) { case 1: @@ -115,7 +131,7 @@ void writeMessage(char *txt, float *temp, float *hum, int number) sprintf(txt, "|%s|%0.2f %0.2f %0.2f %0.2f|%0.2f %0.2f %0.2f %0.2f", CLUSTER, temp[0], temp[1], temp[2], temp[3], hum[0], hum[1], hum[2], hum[3]); break; case 5: - sprintf(txt, "|%s|%0.2f %0.2f %0.2f %0.2f %0.2f|%0.2f %0.2f %0.2f %0.2f %0.2f|%d", CLUSTER, temp[0], temp[1], temp[2], temp[3], temp[4], hum[0], hum[1], hum[2], hum[3], hum[4], chargelvl); + sprintf(txt, "|%s|%0.2f %0.2f %0.2f %0.2f %0.2f|%0.2f %0.2f %0.2f %0.2f %0.2f|%d|%f|%f", CLUSTER, temp[0], temp[1], temp[2], temp[3], temp[4], hum[0], hum[1], hum[2], hum[3], hum[4], chargelvl, homeValue, homeValue1); break; case 6: sprintf(txt, "|%s|%0.2f %0.2f %0.2f %0.2f %0.2f %0.2f|%0.2f %0.2f %0.2f %0.2f %0.2f %0.2f", CLUSTER, temp[0], temp[1], temp[2], temp[3], temp[4], temp[5], hum[0], hum[1], hum[2], hum[3], hum[4], hum[5]); @@ -137,7 +153,7 @@ void setup() TimeClient.begin(); } -//-------------------- Boucle pricipale --------------------// +//-------------------- Boucle principale --------------------// void loop() {