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