Add working version
This commit is contained in:
commit
fbf337f00e
2 changed files with 138 additions and 0 deletions
20
platformio.ini
Normal file
20
platformio.ini
Normal file
|
@ -0,0 +1,20 @@
|
|||
; 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:d1_mini]
|
||||
platform = espressif8266
|
||||
board = d1_mini
|
||||
framework = arduino
|
||||
monitor_speed = 115200
|
||||
|
||||
[env]
|
||||
lib_deps = https://github.com/arduino-libraries/NTPClient
|
||||
https://github.com/knolleary/pubsubclient
|
118
src/main.cpp
Normal file
118
src/main.cpp
Normal file
|
@ -0,0 +1,118 @@
|
|||
#include <Arduino.h>
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <WiFiClient.h>
|
||||
#include <PubSubClient.h>
|
||||
#include <NTPClient.h>
|
||||
#include <WiFiUdp.h>
|
||||
|
||||
#define MQTT_SERVER "mqtt.lan"
|
||||
#define MQTT_PORT 1883
|
||||
#define MQTT_PUB_TOPIC_DISTANCE "luftentfeuchter/distance-to-water"
|
||||
#define MQTT_PUB_TOPIC_DATE "luftentfeuchter/date"
|
||||
|
||||
#define WIFI_SSID "XXX"
|
||||
#define WIFI_PASSWORD "XXX"
|
||||
|
||||
WiFiClient espClient;
|
||||
PubSubClient client(espClient);
|
||||
|
||||
WiFiUDP ntpUDP;
|
||||
NTPClient timeClient(ntpUDP);
|
||||
|
||||
long lastMsg = 0;
|
||||
char data[75];
|
||||
|
||||
void setup() {
|
||||
// Status LED (onboard)
|
||||
pinMode(LED_BUILTIN, OUTPUT);
|
||||
|
||||
// MoistureSensor
|
||||
pinMode(D6, INPUT);
|
||||
|
||||
// HallSensor
|
||||
pinMode(D7, INPUT); // Echo
|
||||
pinMode(D8, OUTPUT); // Trigger
|
||||
|
||||
// Relay
|
||||
pinMode(D2, OUTPUT);
|
||||
|
||||
digitalWrite(LED_BUILTIN, LOW);
|
||||
|
||||
WiFi.setAutoConnect(true);
|
||||
WiFi.setAutoReconnect(true);
|
||||
WiFi.hostname("luftentfeuchter-pumpe");
|
||||
|
||||
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
delay(2000);
|
||||
}
|
||||
client.setServer(MQTT_SERVER, MQTT_PORT);
|
||||
|
||||
timeClient.begin();
|
||||
|
||||
digitalWrite(LED_BUILTIN, HIGH);
|
||||
}
|
||||
|
||||
int connectToMQTT() {
|
||||
if (client.connected()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
String clientId = "luftentfeuchter-pumpe";
|
||||
if (client.connect(clientId.c_str())) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int measureDistanceToWater() {
|
||||
digitalWrite(D8, LOW);
|
||||
delayMicroseconds(2);
|
||||
digitalWrite(D8, HIGH);
|
||||
delayMicroseconds(10);
|
||||
digitalWrite(D8, LOW);
|
||||
|
||||
long duration = pulseIn(D7, HIGH);
|
||||
int distance = duration * 0.034 / 2;
|
||||
|
||||
return distance;
|
||||
}
|
||||
|
||||
bool isMoistureSensorSubmerged() {
|
||||
return digitalRead(D6) == HIGH;
|
||||
}
|
||||
|
||||
void loop() {
|
||||
if (!WiFi.isConnected()) {
|
||||
WiFi.reconnect();
|
||||
}
|
||||
connectToMQTT();
|
||||
timeClient.update();
|
||||
|
||||
int distance = measureDistanceToWater();
|
||||
snprintf(data, sizeof(data), "%d", distance);
|
||||
client.publish(MQTT_PUB_TOPIC_DISTANCE, data);
|
||||
|
||||
snprintf(data, sizeof(data), "%d", timeClient.getEpochTime());
|
||||
client.publish(MQTT_PUB_TOPIC_DATE, data);
|
||||
|
||||
if (distance <= 13) {
|
||||
// Turn on the status LED
|
||||
digitalWrite(LED_BUILTIN, LOW);
|
||||
|
||||
// Run the pump for 2 minutes, 45 seconds
|
||||
digitalWrite(D2, HIGH);
|
||||
delay((60+60+45) * 1000);
|
||||
digitalWrite(D2, LOW);
|
||||
|
||||
// Turn the status LED off again
|
||||
digitalWrite(LED_BUILTIN, HIGH);
|
||||
} else {
|
||||
digitalWrite(LED_BUILTIN, HIGH);
|
||||
digitalWrite(D2, LOW);
|
||||
}
|
||||
|
||||
// Wait for a minute
|
||||
delay(60000);
|
||||
}
|
Loading…
Reference in a new issue