New Electro, Midroom autocalibration co2
This commit is contained in:
@@ -10,8 +10,8 @@ TimerHandle_t wifiReconnectTimer;
|
|||||||
|
|
||||||
//const char* ssid = "wf-home";
|
//const char* ssid = "wf-home";
|
||||||
//const char* password = "0ndthnrf";
|
//const char* password = "0ndthnrf";
|
||||||
const char* ssid = "mt-24";
|
const char* ssid = "wf-home";
|
||||||
const char* password = "727479-o";
|
const char* password = "0ndthnrf";
|
||||||
const char* mqtt_server = "192.168.1.111";
|
const char* mqtt_server = "192.168.1.111";
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -15,9 +15,11 @@ board = esp07
|
|||||||
framework = arduino
|
framework = arduino
|
||||||
;board_build.ldscript = eagle.flash.1m.ld
|
;board_build.ldscript = eagle.flash.1m.ld
|
||||||
upload_protocol = espota
|
upload_protocol = espota
|
||||||
upload_port = 192.168.1.136
|
upload_port = 192.168.1.131
|
||||||
;upload_port = 192.168.1.95
|
;upload_port = 192.168.1.95
|
||||||
monitor_speed = 115200
|
monitor_speed = 115200
|
||||||
lib_deps =
|
lib_deps =
|
||||||
sstaub/Ticker @ ^4.3.0
|
sstaub/Ticker @ ^4.3.0
|
||||||
knolleary/PubSubClient @ ^2.8
|
knolleary/PubSubClient @ ^2.8
|
||||||
|
ottowinter/ESPAsyncWebServer-esphome @ ^3.0.0
|
||||||
|
ayushsharma82/WebSerial @ ^1.3.0
|
||||||
|
|||||||
@@ -4,9 +4,14 @@
|
|||||||
#include <PubSubClient.h>
|
#include <PubSubClient.h>
|
||||||
#include <SPI.h>
|
#include <SPI.h>
|
||||||
|
|
||||||
#define LED_WF (2) //Blue
|
#include <ESP8266WiFi.h>
|
||||||
#define LED_WRK (3) //Green
|
#include <ESPAsyncTCP.h>
|
||||||
#define LED_MQ (4) //Red
|
#include <ESPAsyncWebServer.h>
|
||||||
|
#include <WebSerial.h>
|
||||||
|
|
||||||
|
#define LED_WF (0) //Red
|
||||||
|
#define LED_WRK (16) //Green
|
||||||
|
#define LED_MQ (5) //Yellow
|
||||||
|
|
||||||
#define HOST_NAME "ElectroT"
|
#define HOST_NAME "ElectroT"
|
||||||
#define MAIN_TOPIC "/home/kort/"
|
#define MAIN_TOPIC "/home/kort/"
|
||||||
@@ -25,18 +30,23 @@
|
|||||||
|
|
||||||
const char* ssid = "wf-home";
|
const char* ssid = "wf-home";
|
||||||
const char* password = "0ndthnrf";
|
const char* password = "0ndthnrf";
|
||||||
const char* mqtt_server = "192.168.1.250";
|
const char* mqtt_server = "192.168.1.111";
|
||||||
|
|
||||||
const int scePin = 15; // SCE - Chip select
|
const int scePinI = 15, scePinU = 4; // SCE - Chip select
|
||||||
|
|
||||||
const double vRef = 3.3;
|
const double vRef = 3.3;
|
||||||
const int period = 1000; //us
|
const int period = 125; //us
|
||||||
|
|
||||||
unsigned long cRun = millis();
|
unsigned long cRun = millis();
|
||||||
double curr = 0.0;
|
double curr = 0.0;
|
||||||
|
double volt = 0.0;
|
||||||
double currT = 0.0;
|
double currT = 0.0;
|
||||||
double currM = 0.0;
|
double currM = 0.0;
|
||||||
int nSec, nSampl;
|
int nSec, nSampl;
|
||||||
|
unsigned long sumReading = 0;
|
||||||
|
unsigned long sumReading2 = 0;
|
||||||
|
long sumAvg = 0, sumAvg2 = 0;
|
||||||
|
int maxV = 0, minV = 0;
|
||||||
|
|
||||||
void connectToWifi();
|
void connectToWifi();
|
||||||
void connectToMqtt();
|
void connectToMqtt();
|
||||||
@@ -52,7 +62,9 @@ WiFiEventHandler wifiDisconnectHandler;
|
|||||||
void spiBegin();
|
void spiBegin();
|
||||||
void mcp_output();
|
void mcp_output();
|
||||||
|
|
||||||
Ticker tckrElcnt(mcp_output, period, 0, MILLIS);
|
Ticker tckrElcnt(mcp_output, period, 0, MICROS_MICROS);
|
||||||
|
|
||||||
|
AsyncWebServer server(80);
|
||||||
|
|
||||||
void connectToWifi() {
|
void connectToWifi() {
|
||||||
Serial.println("Connecting to Wi-Fi...");
|
Serial.println("Connecting to Wi-Fi...");
|
||||||
@@ -68,7 +80,6 @@ void onWifiConnect(const WiFiEventStationModeGotIP& event) {
|
|||||||
Serial.print("IP: ");
|
Serial.print("IP: ");
|
||||||
Serial.println(WiFi.localIP());
|
Serial.println(WiFi.localIP());
|
||||||
Serial.println("Connecting to MQTT...");
|
Serial.println("Connecting to MQTT...");
|
||||||
//reconnect();
|
|
||||||
digitalWrite(LED_WF, HIGH);
|
digitalWrite(LED_WF, HIGH);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,8 +88,6 @@ void onWifiDisconnect(const WiFiEventStationModeDisconnected& event) {
|
|||||||
digitalWrite(LED_WF, LOW);
|
digitalWrite(LED_WF, LOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void setup(){
|
void setup(){
|
||||||
Serial.begin(9600);
|
Serial.begin(9600);
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
@@ -95,9 +104,6 @@ void setup(){
|
|||||||
pinMode(LED_WF, OUTPUT);
|
pinMode(LED_WF, OUTPUT);
|
||||||
pinMode(LED_MQ, OUTPUT);
|
pinMode(LED_MQ, OUTPUT);
|
||||||
pinMode(LED_WRK, OUTPUT);
|
pinMode(LED_WRK, OUTPUT);
|
||||||
pinMode(scePin, OUTPUT);
|
|
||||||
digitalWrite(scePin, HIGH);
|
|
||||||
//spiBegin();
|
|
||||||
digitalWrite(LED_WF, LOW);
|
digitalWrite(LED_WF, LOW);
|
||||||
digitalWrite(LED_MQ, LOW);
|
digitalWrite(LED_MQ, LOW);
|
||||||
digitalWrite(LED_WRK, LOW);
|
digitalWrite(LED_WRK, LOW);
|
||||||
@@ -106,78 +112,95 @@ void setup(){
|
|||||||
nSec = 0;
|
nSec = 0;
|
||||||
curr = -1;
|
curr = -1;
|
||||||
nSampl = 0;
|
nSampl = 0;
|
||||||
//tckrElcnt.start();
|
spiBegin();
|
||||||
|
tckrElcnt.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop(){
|
void loop(){
|
||||||
static bool led_wrk = false;
|
static float currA = 0.0f, voltA = 0.0f;
|
||||||
//tckrElcnt.update();
|
double I, V;
|
||||||
|
tckrElcnt.update();
|
||||||
ArduinoOTA.handle();
|
ArduinoOTA.handle();
|
||||||
if(!mClient.connected()){
|
if(!mClient.connected()){
|
||||||
|
digitalWrite(LED_MQ, LOW);
|
||||||
reconnect();
|
reconnect();
|
||||||
}
|
}
|
||||||
mClient.loop();
|
mClient.loop();
|
||||||
if(cRun + 999 < millis()){
|
if(cRun + 999 < millis()){
|
||||||
cRun = millis();
|
cRun = millis();
|
||||||
mcp_output();
|
|
||||||
nSampl++;
|
nSampl++;
|
||||||
currM += curr;
|
currM += curr;
|
||||||
if(WiFi.isConnected()){
|
I = sqrt(sumReading / double(nSampl)) / 39.7;
|
||||||
Serial.printf("Sec: %d\t%.2f\n", nSec, curr);
|
V = sqrt(sumReading2 / double(nSampl))/ 1.78;
|
||||||
// Serial.print("\t");
|
// Serial.printf("Millis = %lu, I = %f, V = %f, Samples = %d\n",
|
||||||
// Serial.println(curr * 233);
|
// cRun, I, V, nSampl);
|
||||||
led_wrk = !led_wrk;
|
// if(WiFi.isConnected()){
|
||||||
digitalWrite(LED_WRK, led_wrk);
|
// Serial.printf("Sec: %d\tI = %.2f\tU = %.2f\tsamls=%d\tIAvg=%d\n", nSec, I, V, nSampl, sumAvg2/nSampl);
|
||||||
}
|
// // Serial.print("\t");
|
||||||
|
// // Serial.println(curr * 233);
|
||||||
|
// }
|
||||||
|
|
||||||
|
nSampl = 0;
|
||||||
|
sumReading = sumReading2 = sumAvg = sumAvg2 = 0;
|
||||||
|
currA += I;
|
||||||
|
voltA += V;
|
||||||
|
|
||||||
if(++nSec > 59){
|
if(++nSec > 59){
|
||||||
nSec = 0;
|
nSec = 0;
|
||||||
currM = currM / 60.0;
|
|
||||||
char v[7];
|
char v[7];
|
||||||
Serial.printf("Publish min, curr=%.2f\n", currM);
|
// Serial.printf("Publish min, curr=%.2f, volt=%.2f\n", currA / 60.0f, voltA / 60.0f);
|
||||||
sprintf(v, "%.2f", curr);
|
// sprintf(v, "%.2f", curr);
|
||||||
mClient.publish(MAIN_TOPIC "curr", v);
|
//mClient.publish(MAIN_TOPIC "curr", v);
|
||||||
//mqttClient.publish(MAIN_TOPIC "curr", 1, false, v);
|
//mqttClient.publish(MAIN_TOPIC "curr", 1, false, v);
|
||||||
currM = 0.0;
|
currA = voltA = 0.0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void mcp_output(){
|
void mcp_output(){
|
||||||
double currTI = 0.0;
|
uint16_t reading;
|
||||||
int sampl = 0;
|
int adcI, adcU;
|
||||||
int out = 0;
|
|
||||||
unsigned long start = micros();
|
digitalWrite(scePinI, LOW);
|
||||||
//while((start + 20000) >= micros()){
|
reading = SPI.transfer16(0x0000);
|
||||||
SPI.begin();
|
digitalWrite(scePinI, HIGH);
|
||||||
SPI.setDataMode(SPI_MODE0);
|
reading = reading << 3; //Must shift out the 3 MSB's (trash bits)
|
||||||
SPI.setBitOrder(MSBFIRST);
|
reading = reading >> 4;
|
||||||
SPI.setFrequency(800000);
|
adcI = reading - 2044;
|
||||||
digitalWrite(scePin, LOW);
|
//Serial.println(reading);
|
||||||
out = SPI.transfer16(0x0000);
|
if(maxV < adcI) maxV = adcI;
|
||||||
digitalWrite(scePin, HIGH);
|
if(minV > adcI) minV = adcI;
|
||||||
//yield();
|
sumReading += adcI * adcI;
|
||||||
//delayMicroseconds(5);
|
sumAvg += adcI;
|
||||||
out = out << 3; //Must shift out the 3 MSB's (trash bits)
|
|
||||||
out = out >> 4;
|
digitalWrite(scePinU, LOW);
|
||||||
currTI += out;// * (vRef / 4096); // Using VRef
|
reading = SPI.transfer16(0x0000);
|
||||||
sampl++;
|
digitalWrite(scePinU, HIGH);
|
||||||
//}
|
reading = reading << 3; //Must shift out the 3 MSB's (trash bits)
|
||||||
Serial.printf("Time=%d, Out = %d, Samples=%d\n", int(micros() - start), out, sampl);
|
reading = reading >> 4;
|
||||||
//curr = 30.0 * sqrt(currTI / sampl);
|
adcU = reading - 3120;
|
||||||
curr = currTI / sampl;
|
//Serial.println(reading);
|
||||||
|
if(maxV < adcI) maxV = adcU;
|
||||||
|
if(minV > adcI) minV = adcU;
|
||||||
|
sumReading2 += adcU * adcU;
|
||||||
|
sumAvg2 += adcI;
|
||||||
|
|
||||||
|
nSampl++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void spiBegin(void)
|
void spiBegin(void)
|
||||||
{
|
{
|
||||||
pinMode(scePin, OUTPUT);
|
pinMode(scePinI, OUTPUT);
|
||||||
|
pinMode(scePinU, OUTPUT);
|
||||||
|
digitalWrite(scePinI, HIGH);
|
||||||
|
digitalWrite(scePinU, HIGH);
|
||||||
|
|
||||||
SPI.begin();
|
SPI.begin();
|
||||||
SPI.setDataMode(SPI_MODE0);
|
SPI.setDataMode(SPI_MODE0);
|
||||||
SPI.setBitOrder(MSBFIRST);
|
SPI.setBitOrder(MSBFIRST);
|
||||||
SPI.setFrequency(800000);
|
SPI.setFrequency(1200000);
|
||||||
digitalWrite(scePin, HIGH);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void reconnect() {
|
void reconnect() {
|
||||||
@@ -188,6 +211,7 @@ void reconnect() {
|
|||||||
// Attempt to connect
|
// Attempt to connect
|
||||||
if (mClient.connect(HOST_NAME)) {
|
if (mClient.connect(HOST_NAME)) {
|
||||||
Serial.println("connected");
|
Serial.println("connected");
|
||||||
|
digitalWrite(LED_MQ, HIGH);
|
||||||
// Once connected, publish an announcement...
|
// Once connected, publish an announcement...
|
||||||
} else {
|
} else {
|
||||||
Serial.print("failed, rc=");
|
Serial.print("failed, rc=");
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ void setup() {
|
|||||||
}
|
}
|
||||||
//Serial1.println();
|
//Serial1.println();
|
||||||
mhz19.begin(Serial);
|
mhz19.begin(Serial);
|
||||||
|
mhz19.autoCalibration();
|
||||||
Wire.begin();
|
Wire.begin();
|
||||||
bool status = bme.begin(BME280_ADDRESS_ALTERNATE);
|
bool status = bme.begin(BME280_ADDRESS_ALTERNATE);
|
||||||
if (!status) {
|
if (!status) {
|
||||||
@@ -312,19 +313,19 @@ void onMqttConnect(bool sessionPresent) {
|
|||||||
switch (ac.getMode())
|
switch (ac.getMode())
|
||||||
{
|
{
|
||||||
case kToshibaAcAuto:
|
case kToshibaAcAuto:
|
||||||
v[0] = 'A';
|
v[0] = 'A';
|
||||||
break;
|
break;
|
||||||
case kToshibaAcCool:
|
case kToshibaAcCool:
|
||||||
v[0] = 'C';
|
v[0] = 'C';
|
||||||
break;
|
break;
|
||||||
case kToshibaAcDry:
|
case kToshibaAcDry:
|
||||||
v[0] = 'D';
|
v[0] = 'D';
|
||||||
break;
|
break;
|
||||||
case kToshibaAcFan:
|
case kToshibaAcFan:
|
||||||
v[0] = 'F';
|
v[0] = 'F';
|
||||||
break;
|
break;
|
||||||
case kToshibaAcHeat:
|
case kToshibaAcHeat:
|
||||||
v[0] = 'H';
|
v[0] = 'H';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -382,18 +383,58 @@ void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties
|
|||||||
EEPROM.put(4, mvDelaySet);
|
EEPROM.put(4, mvDelaySet);
|
||||||
EEPROM.commit();
|
EEPROM.commit();
|
||||||
}
|
}
|
||||||
if(strcmp(topic, TOPIC"/mode") == 0){
|
if(strcmp(topic, TOPIC"/ac/mode") == 0){
|
||||||
char m = payload[0];
|
char m = payload[0];
|
||||||
switch (m)
|
switch (m)
|
||||||
{
|
{
|
||||||
case 'A':
|
case 'A':
|
||||||
ac.setMode(kToshibaAcAuto);
|
ac.setMode(kToshibaAcAuto);
|
||||||
break;
|
break;
|
||||||
|
case 'C':
|
||||||
|
ac.setMode(kToshibaAcCool);
|
||||||
|
break;
|
||||||
|
case 'D':
|
||||||
|
ac.setMode(kToshibaAcDry);
|
||||||
|
break;
|
||||||
|
case 'F':
|
||||||
|
ac.setMode(kToshibaAcFan);
|
||||||
|
break;
|
||||||
|
case 'H':
|
||||||
|
ac.setMode(kToshibaAcHeat);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
mvDelaySet = atoi(payload);
|
ac.send();
|
||||||
|
}
|
||||||
|
if(strcmp(topic, TOPIC"/ac/temp") == 0){
|
||||||
|
int setTemp = atoi(payload);
|
||||||
|
ac.setTemp(setTemp);
|
||||||
|
ac.send();
|
||||||
|
}
|
||||||
|
if(strcmp(topic, TOPIC"/ac/state") == 0){
|
||||||
|
char m = payload[0];
|
||||||
|
if(m == '1') ac.on();
|
||||||
|
else ac.off();
|
||||||
|
ac.send();
|
||||||
|
}
|
||||||
|
if(strcmp(topic, TOPIC"/ac/eco") == 0){
|
||||||
|
char m = payload[0];
|
||||||
|
if(m == '1'){
|
||||||
|
ac.setEcono(true);
|
||||||
|
mqttClient.publish(TOPIC"/ac/turbo", 1, false, "0");
|
||||||
|
}
|
||||||
|
else ac.setEcono(false);
|
||||||
|
ac.send();
|
||||||
|
}
|
||||||
|
if(strcmp(topic, TOPIC"/ac/turbo") == 0){
|
||||||
|
char m = payload[0];
|
||||||
|
if(m == '1'){
|
||||||
|
ac.setTurbo(true);
|
||||||
|
mqttClient.publish(TOPIC"/ac/eco", 1, false, "0");
|
||||||
|
}
|
||||||
|
else ac.setTurbo(false);
|
||||||
|
ac.send();
|
||||||
}
|
}
|
||||||
b_led.start();
|
b_led.start();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user