changes for Finder, introduce Wifi-Enable flag
This commit is contained in:
parent
655e8f6861
commit
34eddf58ce
@ -151,10 +151,10 @@ environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA
|
|||||||
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.DTS/value=3600
|
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.DTS/value=3600
|
||||||
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.LOCAL/delimiter=\:
|
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.LOCAL/delimiter=\:
|
||||||
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.LOCAL/operation=replace
|
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.LOCAL/operation=replace
|
||||||
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.LOCAL/value=1431556581
|
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.LOCAL/value=1431952539
|
||||||
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.UTC/delimiter=\:
|
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.UTC/delimiter=\:
|
||||||
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.UTC/operation=replace
|
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.UTC/operation=replace
|
||||||
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.UTC/value=1431549381
|
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.UTC/value=1431945339
|
||||||
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.ZONE/delimiter=\:
|
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.ZONE/delimiter=\:
|
||||||
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.ZONE/operation=replace
|
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.ZONE/operation=replace
|
||||||
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.ZONE/value=3600
|
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.ZONE/value=3600
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
VOLTAGE,
|
VOLTAGE,
|
||||||
FREQUENCY,
|
COSPHI,
|
||||||
CURRENT,
|
CURRENT,
|
||||||
POWER,
|
POWER,
|
||||||
ENERGY,
|
ENERGY,
|
||||||
@ -25,33 +25,24 @@ Packet packets[TOTAL_NO_OF_PACKETS];
|
|||||||
|
|
||||||
// Mudbus *modbusSlave;
|
// Mudbus *modbusSlave;
|
||||||
|
|
||||||
uint16_t voltage[2];
|
uint16_t voltage;
|
||||||
uint16_t frequency[2];
|
uint16_t cosphi;
|
||||||
uint16_t current[2];
|
uint16_t current;
|
||||||
uint16_t power[2];
|
uint16_t power;
|
||||||
uint16_t energy[2];
|
union {
|
||||||
|
uint16_t in[2];
|
||||||
|
uint32_t v;
|
||||||
|
} energy;
|
||||||
|
|
||||||
float startEnergy = 0;
|
float startEnergy = 0;
|
||||||
|
|
||||||
float convF(uint16_t in[2]) {
|
|
||||||
union {
|
|
||||||
struct {
|
|
||||||
uint16_t a;
|
|
||||||
uint16_t b;
|
|
||||||
} s;
|
|
||||||
float f;
|
|
||||||
} U;
|
|
||||||
U.s.a = in[1];
|
|
||||||
U.s.b = in[0];
|
|
||||||
return U.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
float getVoltage() { return convF(voltage); }
|
float getVoltage() { return (float)voltage; }
|
||||||
float getCurrent() { return convF(current); }
|
float getCurrent() { return (float)current * 0.1; }
|
||||||
float getFrequency() { return convF(frequency); }
|
float getCosPhi() { return (float)cosphi * 0.01; }
|
||||||
float getPower() { return convF(power); }
|
float getPower() { return (float)power * 0.01; }
|
||||||
float getEnergy() { return convF(energy); }
|
float getEnergy() { return (float)energy.v; }
|
||||||
float getNewEnergy() { return convF(energy) - startEnergy; }
|
float getNewEnergy() { return ((float)energy.v) - startEnergy; }
|
||||||
|
|
||||||
|
|
||||||
// void modbusAppBegin(Mudbus *mb) {
|
// void modbusAppBegin(Mudbus *mb) {
|
||||||
@ -60,11 +51,14 @@ void modbusAppBegin() {
|
|||||||
// modbusSlave = mb;
|
// modbusSlave = mb;
|
||||||
|
|
||||||
|
|
||||||
modbus_construct(&packets[VOLTAGE], 1, READ_HOLDING_REGISTERS, 0x2000, 2, voltage);
|
|
||||||
modbus_construct(&packets[FREQUENCY], 1, READ_HOLDING_REGISTERS, 0x2020, 2, frequency);
|
|
||||||
modbus_construct(&packets[CURRENT], 1, READ_HOLDING_REGISTERS, 0x2060, 2, current);
|
modbus_construct(&packets[VOLTAGE], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 35, 1, &voltage);
|
||||||
modbus_construct(&packets[POWER], 1, READ_HOLDING_REGISTERS, 0x2080, 2, power);
|
modbus_construct(&packets[COSPHI], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 39, 1, &cosphi);
|
||||||
modbus_construct(&packets[ENERGY], 1, READ_HOLDING_REGISTERS, 0x3000, 2, energy);
|
modbus_construct(&packets[CURRENT], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 36, 1, ¤t);
|
||||||
|
modbus_construct(&packets[POWER], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 37, 1, &power);
|
||||||
|
modbus_construct(&packets[ENERGY], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 27, 2, energy.in);
|
||||||
|
// modbus_construct(&packets[POWER], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 1, 1, &power);
|
||||||
|
|
||||||
|
|
||||||
modbus_configure(&Serial2, MODBUS_BAUD, SERIAL_8N2, MODBUS_TIMEOUT,
|
modbus_configure(&Serial2, MODBUS_BAUD, SERIAL_8N2, MODBUS_TIMEOUT,
|
||||||
|
@ -14,13 +14,13 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
const uint32_t MODBUS_BAUD = 1200;
|
const uint32_t MODBUS_BAUD = 9600;
|
||||||
const uint16_t MODBUS_TIMEOUT = 10000;
|
const uint16_t MODBUS_TIMEOUT = 10000;
|
||||||
const uint16_t MODBUS_SCANRATE = 1000;
|
const uint16_t MODBUS_SCANRATE = 1000;
|
||||||
const uint8_t MODBUS_RETRY_COUNT = 25;
|
const uint8_t MODBUS_RETRY_COUNT = 25;
|
||||||
const uint8_t MODBUS_TX_ENABLE_PIN = 2;
|
const uint8_t MODBUS_TX_ENABLE_PIN = 2;
|
||||||
const uint8_t ZEROING_PIN = 3;
|
const uint8_t ZEROING_PIN = 3;
|
||||||
|
const uint8_t MODBUS_ADDRESS = 1;
|
||||||
|
|
||||||
// void modbusAppBegin(Mudbus *mb);
|
// void modbusAppBegin(Mudbus *mb);
|
||||||
void modbusAppBegin();
|
void modbusAppBegin();
|
||||||
@ -28,7 +28,7 @@ void modbusAppExec();
|
|||||||
|
|
||||||
float getVoltage();
|
float getVoltage();
|
||||||
float getCurrent();
|
float getCurrent();
|
||||||
float getFrequency();
|
float getCosPhi();
|
||||||
float getPower();
|
float getPower();
|
||||||
float getEnergy();
|
float getEnergy();
|
||||||
float getNewEnergy();
|
float getNewEnergy();
|
||||||
|
@ -201,12 +201,15 @@ void waiting_for_turnaround()
|
|||||||
// get the serial data from the buffer
|
// get the serial data from the buffer
|
||||||
void waiting_for_reply()
|
void waiting_for_reply()
|
||||||
{
|
{
|
||||||
|
// Serial.println("A0");
|
||||||
if ((*ModbusPort).available()) // is there something to check?
|
if ((*ModbusPort).available()) // is there something to check?
|
||||||
{
|
{
|
||||||
|
Serial.println("A1");
|
||||||
unsigned char overflowFlag = 0;
|
unsigned char overflowFlag = 0;
|
||||||
buffer = 0;
|
buffer = 0;
|
||||||
while ((*ModbusPort).available())
|
while ((*ModbusPort).available())
|
||||||
{
|
{
|
||||||
|
Serial.println("A2");
|
||||||
// The maximum number of bytes is limited to the serial buffer size
|
// The maximum number of bytes is limited to the serial buffer size
|
||||||
// of BUFFER_SIZE. If more bytes is received than the BUFFER_SIZE the
|
// of BUFFER_SIZE. If more bytes is received than the BUFFER_SIZE the
|
||||||
// overflow flag will be set and the serial buffer will be read until
|
// overflow flag will be set and the serial buffer will be read until
|
||||||
@ -220,7 +223,7 @@ void waiting_for_reply()
|
|||||||
overflowFlag = 1;
|
overflowFlag = 1;
|
||||||
|
|
||||||
frame[buffer] = (*ModbusPort).read();
|
frame[buffer] = (*ModbusPort).read();
|
||||||
// Serial.print("R: "); Serial.println(frame[buffer], 16);
|
Serial.print("R: "); Serial.println(frame[buffer], 16);
|
||||||
buffer++;
|
buffer++;
|
||||||
}
|
}
|
||||||
// This is not 100% correct but it will suffice.
|
// This is not 100% correct but it will suffice.
|
||||||
@ -504,7 +507,7 @@ void sendPacket(unsigned char bufferSize)
|
|||||||
digitalWrite(TxEnablePin, HIGH);
|
digitalWrite(TxEnablePin, HIGH);
|
||||||
|
|
||||||
for (unsigned char i = 0; i < bufferSize; i++) {
|
for (unsigned char i = 0; i < bufferSize; i++) {
|
||||||
// Serial.print("S: "); Serial.println(frame[i],16);
|
Serial.print("S: "); Serial.println(frame[i],16);
|
||||||
(*ModbusPort).write(frame[i]);
|
(*ModbusPort).write(frame[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,6 +39,9 @@ Metro minute = Metro(60000);
|
|||||||
Metro second = Metro(1000);
|
Metro second = Metro(1000);
|
||||||
uint32_t uptime;
|
uint32_t uptime;
|
||||||
|
|
||||||
|
static bool wifiEnabled = false;
|
||||||
|
|
||||||
|
|
||||||
void callback(char* topic, byte* payload, unsigned int length) {
|
void callback(char* topic, byte* payload, unsigned int length) {
|
||||||
// handle message arrived
|
// handle message arrived
|
||||||
}
|
}
|
||||||
@ -78,46 +81,46 @@ void setup() {
|
|||||||
lcd.print("Starting ...");
|
lcd.print("Starting ...");
|
||||||
|
|
||||||
|
|
||||||
|
if (wifiEnabled) {
|
||||||
|
// check for the presence of the shield:
|
||||||
|
if (WiFi.status() == WL_NO_SHIELD) {
|
||||||
|
Serial.println("WiFi shield not present");
|
||||||
|
lcd.setCursor(0, 1);
|
||||||
|
lcd.print("WiFi shield not present");
|
||||||
|
// don't continue:
|
||||||
|
while(true);
|
||||||
|
}
|
||||||
|
|
||||||
// check for the presence of the shield:
|
int status = WL_IDLE_STATUS;
|
||||||
if (WiFi.status() == WL_NO_SHIELD) {
|
while ( status != WL_CONNECTED) {
|
||||||
Serial.println("WiFi shield not present");
|
Serial.print("Attempting to connect to SSID: ");
|
||||||
lcd.setCursor(0, 1);
|
Serial.println(ssid);
|
||||||
lcd.print("WiFi shield not present");
|
lcd.setCursor(0, 1);
|
||||||
// don't continue:
|
lcd.print("Trying: ");
|
||||||
while(true);
|
lcd.print(ssid);
|
||||||
|
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
|
||||||
|
status = WiFi.begin(ssid, pass);
|
||||||
|
|
||||||
|
// wait 10 seconds for connection:
|
||||||
|
delay(10000);
|
||||||
|
}
|
||||||
|
Serial.println("Connected.");
|
||||||
|
lcd.setCursor(0, 2);
|
||||||
|
lcd.print("Connected.");
|
||||||
|
|
||||||
|
printWifiStatus();
|
||||||
|
|
||||||
|
// if (! client.connect("WiFiPowerMeter")) {
|
||||||
|
// Serial.println("MQTT broker not found");
|
||||||
|
// lcd.home();
|
||||||
|
// lcd.clear();
|
||||||
|
// lcd.print("MQTT broker not found");
|
||||||
|
// while (true);
|
||||||
|
// } else {
|
||||||
|
// lcd.print(" *");
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
int status = WL_IDLE_STATUS;
|
|
||||||
while ( status != WL_CONNECTED) {
|
|
||||||
Serial.print("Attempting to connect to SSID: ");
|
|
||||||
Serial.println(ssid);
|
|
||||||
lcd.setCursor(0, 1);
|
|
||||||
lcd.print("Trying: ");
|
|
||||||
lcd.print(ssid);
|
|
||||||
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
|
|
||||||
status = WiFi.begin(ssid, pass);
|
|
||||||
|
|
||||||
// wait 10 seconds for connection:
|
|
||||||
delay(10000);
|
|
||||||
}
|
|
||||||
Serial.println("Connected.");
|
|
||||||
lcd.setCursor(0, 2);
|
|
||||||
lcd.print("Connected.");
|
|
||||||
|
|
||||||
printWifiStatus();
|
|
||||||
|
|
||||||
// if (! client.connect("WiFiPowerMeter")) {
|
|
||||||
// Serial.println("MQTT broker not found");
|
|
||||||
// lcd.home();
|
|
||||||
// lcd.clear();
|
|
||||||
// lcd.print("MQTT broker not found");
|
|
||||||
// while (true);
|
|
||||||
// } else {
|
|
||||||
// lcd.print(" *");
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
delay(1000);
|
delay(1000);
|
||||||
lcd.home();
|
lcd.home();
|
||||||
lcd.clear();
|
lcd.clear();
|
||||||
@ -160,18 +163,20 @@ void updateDisplay() {
|
|||||||
lcd.print(days); lcd.print("/"); lcd.print(hours); lcd.print(":");
|
lcd.print(days); lcd.print("/"); lcd.print(hours); lcd.print(":");
|
||||||
lcd.print(minutes); lcd.print(":"); lcd.print(seconds); lcd.print(" ");
|
lcd.print(minutes); lcd.print(":"); lcd.print(seconds); lcd.print(" ");
|
||||||
|
|
||||||
long rssi = WiFi.RSSI();
|
if (wifiEnabled) {
|
||||||
lcd.print(rssi); lcd.print(" ");
|
long rssi = WiFi.RSSI();
|
||||||
uint8_t wifiStatus = WiFi.status();
|
lcd.print(rssi); lcd.print(" ");
|
||||||
lcd.print(wifiStatus);
|
uint8_t wifiStatus = WiFi.status();
|
||||||
lcd.print(disconnectState);
|
lcd.print(wifiStatus);
|
||||||
|
lcd.print(disconnectState);
|
||||||
|
}
|
||||||
|
|
||||||
lcd.setCursor(0, 1);
|
lcd.setCursor(0, 1);
|
||||||
lcd.print(getVoltage()); lcd.print("V");
|
lcd.print(getVoltage()); lcd.print("V");
|
||||||
lcd.setCursor(10, 1);
|
lcd.setCursor(10, 1);
|
||||||
lcd.print(getCurrent()); lcd.print("A");
|
lcd.print(getCurrent()); lcd.print("A");
|
||||||
lcd.setCursor(0, 2);
|
lcd.setCursor(0, 2);
|
||||||
lcd.print(getFrequency()); lcd.print("Hz");
|
lcd.print(getCosPhi()); lcd.print("");
|
||||||
lcd.setCursor(10, 2);
|
lcd.setCursor(10, 2);
|
||||||
lcd.print(getPower()); lcd.print("W");
|
lcd.print(getPower()); lcd.print("W");
|
||||||
lcd.setCursor(0, 3);
|
lcd.setCursor(0, 3);
|
||||||
@ -188,67 +193,61 @@ void loop() {
|
|||||||
modbusAppExec();
|
modbusAppExec();
|
||||||
// Mb.Run();
|
// Mb.Run();
|
||||||
|
|
||||||
if ((disconnectState == 0) && (! client.loop())) {
|
if (wifiEnabled) {
|
||||||
disconnectState = 1;
|
if ((disconnectState == 0) && (! client.loop())) {
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
switch (disconnectState) {
|
|
||||||
case 0:
|
|
||||||
// Serial.println("discState 0");
|
|
||||||
// everything fine
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
Serial.println("discState 1");
|
|
||||||
client.disconnect();
|
|
||||||
disconnectTime = millis();
|
|
||||||
disconnectState = 2;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
Serial.println("discState 3");
|
|
||||||
if (disconnectTime + 2000 < millis()) {
|
|
||||||
disconnectState = 3;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
Serial.println("discState 3");
|
|
||||||
if (client.connect("WiFiPowerMeter")) {
|
|
||||||
disconnectTime = millis();
|
|
||||||
disconnectState = 0;
|
|
||||||
} else {
|
|
||||||
disconnectState = 1;
|
disconnectState = 1;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
default:
|
|
||||||
disconnectState = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
switch (disconnectState) {
|
||||||
|
case 0:
|
||||||
|
// Serial.println("discState 0");
|
||||||
|
// everything fine
|
||||||
if (minute.check() == 1) {
|
break;
|
||||||
char strbuf[256];
|
case 1:
|
||||||
memset(strbuf, sizeof(strbuf), 0);
|
Serial.println("discState 1");
|
||||||
PString buf = PString(strbuf, sizeof(strbuf));
|
client.disconnect();
|
||||||
buf << "{ \"metadata\": { \"device\": \"WiFiPowerMeter\" }, " <<
|
disconnectTime = millis();
|
||||||
"\"data\": {" <<
|
disconnectState = 2;
|
||||||
"\"voltage\": " << getVoltage() << ", " <<
|
break;
|
||||||
"\"current\": " << getCurrent() << ", " <<
|
case 2:
|
||||||
"\"frequency\": " << getFrequency() << ", " <<
|
Serial.println("discState 3");
|
||||||
"\"power\": " << getPower() << ", " <<
|
if (disconnectTime + 2000 < millis()) {
|
||||||
"\"energy\": " << getEnergy() << ", " <<
|
disconnectState = 3;
|
||||||
"\"newEnergy\": " << getNewEnergy() << ", " <<
|
}
|
||||||
"\"uptime\": " << uptime <<
|
break;
|
||||||
"}" <<
|
case 3:
|
||||||
"}" << endl;
|
Serial.println("discState 3");
|
||||||
if (disconnectState == 0) {
|
if (client.connect("WiFiPowerMeter")) {
|
||||||
client.publish("IoT/WiFiPowerMeter/Measurement", strbuf);
|
disconnectTime = millis();
|
||||||
|
disconnectState = 0;
|
||||||
|
} else {
|
||||||
|
disconnectState = 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
disconnectState = 0;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (minute.check() == 1) {
|
||||||
|
char strbuf[256];
|
||||||
|
memset(strbuf, sizeof(strbuf), 0);
|
||||||
|
PString buf = PString(strbuf, sizeof(strbuf));
|
||||||
|
buf << "{ \"metadata\": { \"device\": \"WiFiPowerMeter\" }, " <<
|
||||||
|
"\"data\": {" <<
|
||||||
|
"\"voltage\": " << getVoltage() << ", " <<
|
||||||
|
"\"current\": " << getCurrent() << ", " <<
|
||||||
|
"\"cosphi\": " << getCosPhi() << ", " <<
|
||||||
|
"\"power\": " << getPower() << ", " <<
|
||||||
|
"\"energy\": " << getEnergy() << ", " <<
|
||||||
|
"\"newEnergy\": " << getNewEnergy() << ", " <<
|
||||||
|
"\"uptime\": " << uptime <<
|
||||||
|
"}" <<
|
||||||
|
"}" << endl;
|
||||||
|
if (disconnectState == 0) {
|
||||||
|
client.publish("IoT/WiFiPowerMeter/Measurement", strbuf);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (second.check() == 1) {
|
if (second.check() == 1) {
|
||||||
@ -256,11 +255,12 @@ void loop() {
|
|||||||
|
|
||||||
Serial.println("tick");
|
Serial.println("tick");
|
||||||
|
|
||||||
String msg = String("{ \"metadata\": { \"device\": \"WiFiPowerMeter\" }, \"data\": { \"uptime\": ") + uptime + String("}}");
|
if (wifiEnabled) {
|
||||||
if (disconnectState == 0) {
|
String msg = String("{ \"metadata\": { \"device\": \"WiFiPowerMeter\" }, \"data\": { \"uptime\": ") + uptime + String("}}");
|
||||||
client.publish("IoT/WiFiPowerMeter/Heartbeat", (char*)msg.c_str());
|
if (disconnectState == 0) {
|
||||||
|
client.publish("IoT/WiFiPowerMeter/Heartbeat", (char*)msg.c_str());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user