init
This commit is contained in:
		
						commit
						7612cd4666
					
				|  | @ -0,0 +1 @@ | |||
| .pio | ||||
|  | @ -0,0 +1,39 @@ | |||
| 
 | ||||
| This directory is intended for project header files. | ||||
| 
 | ||||
| A header file is a file containing C declarations and macro definitions | ||||
| to be shared between several project source files. You request the use of a | ||||
| header file in your project source file (C, C++, etc) located in `src` folder | ||||
| by including it, with the C preprocessing directive `#include'. | ||||
| 
 | ||||
| ```src/main.c | ||||
| 
 | ||||
| #include "header.h" | ||||
| 
 | ||||
| int main (void) | ||||
| { | ||||
|  ... | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| Including a header file produces the same results as copying the header file | ||||
| into each source file that needs it. Such copying would be time-consuming | ||||
| and error-prone. With a header file, the related declarations appear | ||||
| in only one place. If they need to be changed, they can be changed in one | ||||
| place, and programs that include the header file will automatically use the | ||||
| new version when next recompiled. The header file eliminates the labor of | ||||
| finding and changing all the copies as well as the risk that a failure to | ||||
| find one copy will result in inconsistencies within a program. | ||||
| 
 | ||||
| In C, the usual convention is to give header files names that end with `.h'. | ||||
| It is most portable to use only letters, digits, dashes, and underscores in | ||||
| header file names, and at most one dot. | ||||
| 
 | ||||
| Read more about using header files in official GCC documentation: | ||||
| 
 | ||||
| * Include Syntax | ||||
| * Include Operation | ||||
| * Once-Only Headers | ||||
| * Computed Includes | ||||
| 
 | ||||
| https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html | ||||
|  | @ -0,0 +1,46 @@ | |||
| 
 | ||||
| This directory is intended for project specific (private) libraries. | ||||
| PlatformIO will compile them to static libraries and link into executable file. | ||||
| 
 | ||||
| The source code of each library should be placed in a an own separate directory | ||||
| ("lib/your_library_name/[here are source files]"). | ||||
| 
 | ||||
| For example, see a structure of the following two libraries `Foo` and `Bar`: | ||||
| 
 | ||||
| |--lib | ||||
| |  | | ||||
| |  |--Bar | ||||
| |  |  |--docs | ||||
| |  |  |--examples | ||||
| |  |  |--src | ||||
| |  |     |- Bar.c | ||||
| |  |     |- Bar.h | ||||
| |  |  |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html | ||||
| |  | | ||||
| |  |--Foo | ||||
| |  |  |- Foo.c | ||||
| |  |  |- Foo.h | ||||
| |  | | ||||
| |  |- README --> THIS FILE | ||||
| | | ||||
| |- platformio.ini | ||||
| |--src | ||||
|    |- main.c | ||||
| 
 | ||||
| and a contents of `src/main.c`: | ||||
| ``` | ||||
| #include <Foo.h> | ||||
| #include <Bar.h> | ||||
| 
 | ||||
| int main (void) | ||||
| { | ||||
|   ... | ||||
| } | ||||
| 
 | ||||
| ``` | ||||
| 
 | ||||
| PlatformIO Library Dependency Finder will find automatically dependent | ||||
| libraries scanning project source files. | ||||
| 
 | ||||
| More information about PlatformIO Library Dependency Finder | ||||
| - https://docs.platformio.org/page/librarymanager/ldf.html | ||||
|  | @ -0,0 +1,15 @@ | |||
| ; PlatformIO Project Configuration File | ||||
| ; | ||||
| ;   Build options: build flags, source filter | ||||
| ;   Upload options: custom upload port, speed and extra flags | ||||
| ;   Library options: dependencies, extra library storages | ||||
| ;   Advanced options: extra scripting | ||||
| ; | ||||
| ; Please visit documentation for the other options and examples | ||||
| ; https://docs.platformio.org/page/projectconf.html | ||||
| 
 | ||||
| [env:esp32dev] | ||||
| platform = espressif32 | ||||
| board = esp32dev | ||||
| framework = arduino | ||||
| lib_deps = knolleary/PubSubClient@^2.8 | ||||
|  | @ -0,0 +1,147 @@ | |||
| #include "Arduino.h" | ||||
| #include <WiFiMulti.h> | ||||
| #include <Wire.h> //Import the required libraries | ||||
| #include <PubSubClient.h> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #define DISCHARGE_PIN 23 | ||||
| #define CHARGE_PIN 5 | ||||
| #define MEASURING_PIN 36 | ||||
| #define RESISTOR_VALUE 1e6 | ||||
| #define DEVICE "ESP32" | ||||
| #define WIFI_SSID "SSID_HERE"         // Network Name
 | ||||
| #define WIFI_PASSWORD "PASSWORD_HERE" // Network Password
 | ||||
| #define MQTT_SERVER "test.mosquitto.org" | ||||
| #define MQTT_PORT 1883 | ||||
| #define MQTT_SUBSCRIBE_PUMP "plant/1/pump" | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| WiFiMulti wifiMulti; | ||||
| WiFiClient espClient; | ||||
| PubSubClient client(espClient); | ||||
| 
 | ||||
| void setup() | ||||
| { | ||||
|   // initialize LED digital pin as an output.
 | ||||
|   Serial.begin(9600); | ||||
| 
 | ||||
|   pinMode(CHARGE_PIN, OUTPUT); | ||||
|   digitalWrite(CHARGE_PIN, LOW); | ||||
| 
 | ||||
|   setup_wifi(); | ||||
|   setup_mqtt(); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| // =============== LOOP ============ 
 | ||||
| void loop() | ||||
| { | ||||
|   float cap; | ||||
|     setup_wifi(); | ||||
|     setup_mqtt(); | ||||
| 
 | ||||
| 
 | ||||
|   cap = capacitance(DISCHARGE_PIN, CHARGE_PIN, MEASURING_PIN); | ||||
| 
 | ||||
| } | ||||
| // =============== LOOP END ============ 
 | ||||
| 
 | ||||
| 
 | ||||
| float capacitance(int discharge_pin, int charge_pin, int measuring_pin) { | ||||
|   unsigned int start_time, elapsed_time; | ||||
|   float nanoFarads; | ||||
| 
 | ||||
|   // discharge:
 | ||||
|   digitalWrite(charge_pin, LOW); | ||||
|   pinMode(discharge_pin, OUTPUT); | ||||
|   digitalWrite(discharge_pin, LOW); | ||||
|   // wait until the capacitor is fully discharged
 | ||||
|   while(analogRead(measuring_pin) > 0) { | ||||
|     //Serial.println(analogRead(measuring_pin));
 | ||||
|     //Serial.print("discharging\n");
 | ||||
|   }; | ||||
|   // stop discharging
 | ||||
|   pinMode(discharge_pin, INPUT); | ||||
| 
 | ||||
|   // Start charging
 | ||||
|   digitalWrite(charge_pin, HIGH); | ||||
|   start_time = millis(); | ||||
|   while(analogRead(measuring_pin) < 2588){// 2588 is 63.2% of 4096, which corresponds to full-scale voltage
 | ||||
|   } | ||||
| 
 | ||||
|   elapsed_time = millis() - start_time; | ||||
|   nanoFarads = ((float)elapsed_time / RESISTOR_VALUE) * 1e6; | ||||
|   Serial.println((long) nanoFarads); | ||||
|   delay(1000); | ||||
| 
 | ||||
|   return nanoFarads; | ||||
| }; | ||||
| 
 | ||||
| void setup_wifi() { | ||||
|   WiFi.mode(WIFI_STA); // Setup wifi connection
 | ||||
|   wifiMulti.addAP(WIFI_SSID, WIFI_PASSWORD); | ||||
| 
 | ||||
|   Serial.print("Connecting to wifi"); // Connect to WiFi
 | ||||
|   while (wifiMulti.run() != WL_CONNECTED) { | ||||
|     Serial.print("."); | ||||
|     delay(100); | ||||
|   } | ||||
|   Serial.print("Connected to "); | ||||
|   Serial.print(WIFI_SSID); | ||||
|   Serial.println("  Successfully"); | ||||
|   Serial.print(WiFi.localIP()); | ||||
|   Serial.println("  isn the local IP"); | ||||
| } | ||||
| 
 | ||||
| void setup_mqtt() { | ||||
|   client.setServer(MQTT_SERVER, MQTT_PORT); | ||||
|   client.setCallback(callback); | ||||
| } | ||||
| 
 | ||||
| void callback(char *topic, byte *message, unsigned int length) { | ||||
|   Serial.print("Message arrived on topic: "); | ||||
|   Serial.print(topic); | ||||
|   Serial.print(". Message: "); | ||||
|   String messageTemp; | ||||
| 
 | ||||
|   for (int i = 0; i < length; i++) { | ||||
|     Serial.print((char)message[i]); | ||||
|     messageTemp += (char)message[i]; | ||||
|   } | ||||
|   Serial.println(); | ||||
| 
 | ||||
|   if (String(topic) == MQTT_SUBSCRIBE_PUMP) { | ||||
|     Serial.print("Starting Pump for: "); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void reconnect_mqtt() { | ||||
|   // Loop until we're reconnected
 | ||||
|   while (!client.connected()) { | ||||
|     Serial.print("Attempting MQTT connection..."); | ||||
|     // Attempt to connect
 | ||||
|     if (client.connect("ESP32-1")) { | ||||
|       Serial.println("connected"); | ||||
|       // Subscribe
 | ||||
|       client.subscribe(MQTT_SUBSCRIBE_PUMP); | ||||
|     } else { | ||||
|       Serial.print("failed, rc="); | ||||
|       Serial.print(client.state()); | ||||
|       Serial.println(" try again in 5 seconds"); | ||||
|       // Wait 5 seconds before retrying
 | ||||
|       delay(5000); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void publish_mqtt(const char *topic, const char *sensor, float value) { | ||||
|   char buffer[40]; | ||||
|   sprintf(buffer, "plant1 %s=%.0f", sensor, value); | ||||
|   Serial.print("Publishing "); | ||||
|   Serial.println(buffer); | ||||
|   client.publish(topic, buffer); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,11 @@ | |||
| 
 | ||||
| This directory is intended for PlatformIO Test Runner and project tests. | ||||
| 
 | ||||
| Unit Testing is a software testing method by which individual units of | ||||
| source code, sets of one or more MCU program modules together with associated | ||||
| control data, usage procedures, and operating procedures, are tested to | ||||
| determine whether they are fit for use. Unit testing finds problems early | ||||
| in the development cycle. | ||||
| 
 | ||||
| More information about PlatformIO Unit Testing: | ||||
| - https://docs.platformio.org/en/latest/advanced/unit-testing/index.html | ||||
		Loading…
	
		Reference in New Issue