Initial commit
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
#include "DHT.h"
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <ModbusIP_ESP8266.h>
|
||||
#include "config.h"
|
||||
|
||||
#define TCP_PORT 15000
|
||||
|
||||
#define SENSOR_UPDATE_INTERVAL 500
|
||||
|
||||
#define MODE_AUTO 0
|
||||
#define MODE_MANUAL 1
|
||||
|
||||
#define REGISTER_CURRENT_TEMP 0
|
||||
#define REGISTER_CURRENT_HUM 1
|
||||
#define REGISTER_CURRENT_PRESS 2
|
||||
#define REGISTER_CUR_STATE 3
|
||||
#define REGISTER_MODE 4
|
||||
#define REGISTER_P_ON 5
|
||||
#define REGISTER_P_OFF 6
|
||||
|
||||
#define DHTPIN D3
|
||||
#define DHTTYPE AM2301
|
||||
|
||||
ModbusIP mb;
|
||||
DHT dht(DHTPIN, DHTTYPE);
|
||||
|
||||
char id[64];
|
||||
|
||||
unsigned long last_update;
|
||||
|
||||
int p_on = 150;
|
||||
int p_off = 250;
|
||||
int cur_mode = MODE_AUTO;
|
||||
int cur_state = 0;
|
||||
int cur_p = 0;
|
||||
int cur_t = 0;
|
||||
int cur_hum = 0;
|
||||
|
||||
void setup()
|
||||
{
|
||||
pinMode(D4, OUTPUT);
|
||||
pinMode(DHTPIN, INPUT);
|
||||
pinMode(A0, INPUT);
|
||||
Serial.begin(115200);
|
||||
Serial.println("Initialized...");
|
||||
|
||||
WiFi.begin(WIFI_NAME, WIFI_PASS);
|
||||
Serial.print("Connecting");
|
||||
while (WiFi.status() != WL_CONNECTED)
|
||||
{
|
||||
delay(500);
|
||||
Serial.print(".");
|
||||
}
|
||||
Serial.println();
|
||||
|
||||
Serial.print("Connected, IP address: ");
|
||||
Serial.println(WiFi.localIP());
|
||||
uint8_t macAddr[6];
|
||||
WiFi.macAddress(macAddr);
|
||||
sprintf(id, "%02x:%02x:%02x:%02x:%02x:%02x", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
|
||||
Serial.printf("Connected, mac address: %s\n", id);
|
||||
// DHT sensor init
|
||||
dht.begin();
|
||||
// Modbus init
|
||||
mb.server(15000);
|
||||
mb.addHreg(REGISTER_CURRENT_TEMP, cur_t);
|
||||
mb.addHreg(REGISTER_CURRENT_HUM, cur_hum);
|
||||
mb.addHreg(REGISTER_CURRENT_PRESS, cur_p);
|
||||
mb.addHreg(REGISTER_CUR_STATE, cur_state);
|
||||
mb.addHreg(REGISTER_MODE, cur_mode);
|
||||
mb.addHreg(REGISTER_P_ON, p_on);
|
||||
mb.addHreg(REGISTER_P_OFF, p_off);
|
||||
}
|
||||
|
||||
|
||||
void UpdateSensorData()
|
||||
{
|
||||
float h = dht.readHumidity();
|
||||
float t = dht.readTemperature();
|
||||
Serial.print("read h ");
|
||||
Serial.print(h);
|
||||
Serial.print(" read t ");
|
||||
Serial.println(t);
|
||||
cur_hum = (int)(h * 100);
|
||||
cur_t = (int)(t * 100);
|
||||
int p_int = analogRead(A0);
|
||||
// we have 10-bit ADC, so get value between 0 and 1 and then multiply by max voltage
|
||||
// (it is 3.3)
|
||||
float p_volt = (p_int / 1024.0f) * 3.3f;
|
||||
// divide by maximal input voltage from sensor (it is 2.5)
|
||||
// and then multiply by sensor max value (10 bar) - we will get pressure in bar
|
||||
// finally multiply by 100 as we have int registers
|
||||
cur_p = (int)(((p_volt / 2.5f) * 10) * 100);
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
unsigned long current = millis();
|
||||
int u = 0;
|
||||
if (current < last_update || current - last_update >= SENSOR_UPDATE_INTERVAL)
|
||||
{
|
||||
UpdateSensorData();
|
||||
last_update = current;
|
||||
u = 1;
|
||||
}
|
||||
mb.task();
|
||||
p_on = mb.Hreg(REGISTER_P_ON);
|
||||
p_off = mb.Hreg(REGISTER_P_OFF);
|
||||
cur_mode = mb.Hreg(REGISTER_MODE);
|
||||
if (cur_mode == MODE_AUTO)
|
||||
{
|
||||
if (cur_p < p_on) cur_state = 1;
|
||||
else if (cur_p > p_off) cur_state = 0;
|
||||
mb.Hreg(REGISTER_CUR_STATE, cur_state);
|
||||
}
|
||||
else
|
||||
{
|
||||
cur_state = mb.Hreg(REGISTER_CUR_STATE);
|
||||
}
|
||||
digitalWrite(D4, cur_state);
|
||||
if (u)
|
||||
{
|
||||
Serial.print("Current pressure: ");
|
||||
Serial.print(cur_p);
|
||||
Serial.print(" t ");
|
||||
Serial.print(cur_t);
|
||||
Serial.print(" h ");
|
||||
Serial.print(cur_hum);
|
||||
Serial.print(" state ");
|
||||
Serial.println(cur_state);
|
||||
}
|
||||
mb.Hreg(REGISTER_P_ON, p_on);
|
||||
mb.Hreg(REGISTER_P_OFF, p_off);
|
||||
mb.Hreg(REGISTER_MODE, cur_mode);
|
||||
mb.Hreg(REGISTER_CURRENT_TEMP, cur_t);
|
||||
mb.Hreg(REGISTER_CURRENT_HUM, cur_hum);
|
||||
mb.Hreg(REGISTER_CURRENT_PRESS, cur_p);
|
||||
if (WiFi.status() != WL_CONNECTED)
|
||||
{
|
||||
// no wifi
|
||||
Serial.println("No WiFi connection");
|
||||
ESP.restart();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user