code is now compatible with standard OLED displays and original code base (default pw length = 32)

This commit is contained in:
Rainer Stransky 2020-08-19 12:35:14 +02:00
parent 3cf22bb65a
commit f7293003fb
2 changed files with 131 additions and 129 deletions

View File

@ -4,29 +4,31 @@
(c) 2019 by M. Lehmann (c) 2019 by M. Lehmann
------------------------------------------------------------------ ------------------------------------------------------------------
*/ */
#define CGSCALE_VERSION "2.1" #define CGSCALE_VERSION "2.2"
/* /*
****************************************************************** ******************************************************************
history: history:
V2.2 18.08.20 code is now compatible with standard OLED displays
and original code base (default pw length = 32)
V2.1 18.07.20 added support for ESP8266 based Wifi Kit 8 V2.1 18.07.20 added support for ESP8266 based Wifi Kit 8
(by Pulsar07/ (https://heltec.org/project/wifi-kit-8/) (by Pulsar07/ (https://heltec.org/project/wifi-kit-8/)
R.Stransky is a ESP8266 with R.Stransky is a ESP8266 with
* a build in OLED 128x32 a build in OLED 128x32
* battery connector with charging management battery connector with charging management
* reset and GPIO0 button reset and GPIO0 button
support for a tare button (PIN_TARE_BUTTON) support for a tare button (PIN_TARE_BUTTON)
bug fixed: wifi password now with up to 64 chars bug fixed: wifi password now with up to 64 chars
bug fixed: wifi data (ssid/passwd) with special bug fixed: wifi data (ssid/passwd) with special
character (e.g. +) is now supported character (e.g. +) is now supported
for specified battery type, voltage is displayed for specified battery type, voltage is displayed
using uncompressed html files makes WEB GUI much faster using uncompressed html files makes WEB GUI much faster
V2.0 26.01.20 Webpage rewritten, no bootstrap framework needed V2.0 26.01.20 Webpage rewritten, no bootstrap framework needed
add translation to webpage (en, de) add translation to webpage (en, de)
optimized for measuring with landinggears optimized for measuring with landinggears
updated to ArduinoJson V6 updated to ArduinoJson V6
firmware update over web interface firmware update over web interface
V1.2.1 31.03.19 small bug fixed V1.2.1 31.03.19 small bug fixed
values in model database are rounded values in model database are rounded
mDNS and OTA did not work in AP mode mDNS and OTA did not work in AP mode
V1.2 23.02.19 Add OTA (over the air update) V1.2 23.02.19 Add OTA (over the air update)
@ -98,7 +100,7 @@
#endif #endif
// HX711 constructor array (dout pin, sck pint): // HX711 constructor array (dout pin, sck pint):
HX711_ADC LoadCell[]{HX711_ADC(PIN_LOADCELL1_DOUT, PIN_LOADCELL1_PD_SCK),HX711_ADC(PIN_LOADCELL2_DOUT, PIN_LOADCELL2_PD_SCK),HX711_ADC(PIN_LOADCELL3_DOUT, PIN_LOADCELL3_PD_SCK)}; HX711_ADC LoadCell[] {HX711_ADC(PIN_LOADCELL1_DOUT, PIN_LOADCELL1_PD_SCK), HX711_ADC(PIN_LOADCELL2_DOUT, PIN_LOADCELL2_PD_SCK), HX711_ADC(PIN_LOADCELL3_DOUT, PIN_LOADCELL3_PD_SCK)};
// webserver constructor // webserver constructor
#if defined(ESP8266) #if defined(ESP8266)
@ -153,6 +155,12 @@ bool updateMenu = true;
int menuPage = 0; int menuPage = 0;
String errMsg[5]; String errMsg[5];
int errMsgCnt = 0; int errMsgCnt = 0;
int oledDisplayHeight;
int oledDisplayWidth;
const uint8_t *oledFontLarge;
const uint8_t *oledFontNormal;
const uint8_t *oledFontSmall;
const uint8_t *oledFontTiny;
#if defined(ESP8266) #if defined(ESP8266)
String updateMsg = ""; String updateMsg = "";
bool wifiSTAmode = true; bool wifiSTAmode = true;
@ -169,40 +177,50 @@ void resetCPU() {}
void initOLED() { void initOLED() {
oledDisplay.begin(); oledDisplay.begin();
oledDisplayHeight = oledDisplay.getDisplayHeight();
oledDisplayWidth = oledDisplay.getDisplayWidth();
printConsole(T_BOOT, "init OLED display: " + String(oledDisplayWidth) + String("x") + String(oledDisplayHeight));
const uint8_t *font;
font = u8g2_font_6x12_tr; oledFontLarge = u8g2_font_helvR12_tr;
int displayHeight = oledDisplay.getDisplayHeight(); oledFontNormal = u8g2_font_helvR10_tr;
int displayWidth = oledDisplay.getDisplayWidth(); oledFontSmall = u8g2_font_5x7_tr;
if (displayHeight <= 32) { oledFontTiny = u8g2_font_4x6_tr;
font = u8g2_font_6x12_tr;
if (oledDisplayHeight <= 32) {
oledFontLarge = u8g2_font_helvR10_tr;
oledFontNormal = u8g2_font_6x12_tr;
} }
int ylineHeight = displayHeight/3; int ylineHeight = oledDisplayHeight / 3;
oledDisplay.setFont(oledFontNormal);
oledDisplay.firstPage(); oledDisplay.firstPage();
do { do {
if (displayHeight <= 32) { oledDisplay.setFont(oledFontLarge);
if (oledDisplayHeight <= 32) {
oledDisplay.drawXBMP(5, 0, 18, 18, CGImage); oledDisplay.drawXBMP(5, 0, 18, 18, CGImage);
} else { } else {
oledDisplay.drawXBMP(20, 12, 18, 18, CGImage); oledDisplay.drawXBMP(20, 12, 18, 18, CGImage);
} }
oledDisplay.setFont(u8g2_font_helvR12_tr); oledDisplay.setFont(oledFontLarge);
if (displayHeight <= 32) {
if (oledDisplayHeight <= 32) {
oledDisplay.setCursor(30, 12); oledDisplay.setCursor(30, 12);
} else { } else {
oledDisplay.setCursor(45, 28); oledDisplay.setCursor(45, 28);
} }
oledDisplay.print(F("CG scale")); oledDisplay.print(F("CG scale"));
oledDisplay.setFont(u8g2_font_5x7_tr); oledDisplay.setFont(oledFontSmall);
if (displayHeight <= 32) { if (oledDisplayHeight <= 32) {
oledDisplay.setCursor(30, 22); oledDisplay.setCursor(30, 22);
} else { } else {
oledDisplay.setCursor(35, 55); oledDisplay.setCursor(35, 55);
} }
oledDisplay.print(F("Version: ")); oledDisplay.print(F("Version: "));
oledDisplay.print(CGSCALE_VERSION); oledDisplay.print(CGSCALE_VERSION);
if (displayHeight <= 32) { if (oledDisplayHeight <= 32) {
oledDisplay.setCursor(5, 31); oledDisplay.setCursor(5, 31);
} else { } else {
oledDisplay.setCursor(20, 64); oledDisplay.setCursor(20, 64);
@ -212,35 +230,28 @@ void initOLED() {
} while ( oledDisplay.nextPage() ); } while ( oledDisplay.nextPage() );
} }
void printOLED(String aLine1, String aLine2, String aLine3=String("")); void printOLED(String aLine1, String aLine2, String aLine3 = String(""));
void printOLED(String aLine1, String aLine2, String aLine3) { void printOLED(String aLine1, String aLine2, String aLine3) {
const uint8_t *font; int ylineHeight = oledDisplayHeight / 3;
font = u8g2_font_6x12_tr;
int displayHeight = oledDisplay.getDisplayHeight();
int displayWidth = oledDisplay.getDisplayWidth();
font = u8g2_font_helvR10_tr;
if (displayHeight <= 32) {
font = u8g2_font_6x12_tr;
}
int ylineHeight = displayHeight/3;
oledDisplay.firstPage(); oledDisplay.firstPage();
do { do {
oledDisplay.setFont(u8g2_font_6x12_tr); oledDisplay.setFont(oledFontNormal);
oledDisplay.setCursor(0, ylineHeight*1); oledDisplay.setCursor(0, ylineHeight * 1);
oledDisplay.print(aLine1); oledDisplay.print(aLine1);
oledDisplay.setCursor(0, ylineHeight*2); oledDisplay.setCursor(0, ylineHeight * 2);
oledDisplay.print(aLine2); oledDisplay.print(aLine2);
if (aLine3 == "") { if (aLine3 == "") {
oledDisplay.drawLine(0, ylineHeight*2 + 2, displayWidth, ylineHeight*2+2); oledDisplay.drawLine(0, ylineHeight * 2 + 2, oledDisplayWidth, ylineHeight * 2 + 2);
oledDisplay.setFont(u8g2_font_4x6_tr); oledDisplay.setFont(oledFontTiny);
oledDisplay.setCursor(0, displayHeight); oledDisplay.setCursor(0, oledDisplayHeight);
oledDisplay.print("IP:" + WiFi.localIP().toString());
String signature = "CG scale: V" + String(CGSCALE_VERSION); String signature = "CG scale: V" + String(CGSCALE_VERSION);
oledDisplay.setCursor(displayWidth - oledDisplay.getStrWidth(signature.c_str()), displayHeight); oledDisplay.setCursor(oledDisplayWidth - oledDisplay.getStrWidth(signature.c_str()), oledDisplayHeight);
oledDisplay.print(signature); oledDisplay.print(signature);
} else { } else {
oledDisplay.setCursor(0, displayHeight); oledDisplay.setCursor(0, oledDisplayHeight);
oledDisplay.print(aLine3); oledDisplay.print(aLine3);
} }
} while ( oledDisplay.nextPage() ); } while ( oledDisplay.nextPage() );
@ -248,7 +259,9 @@ void printOLED(String aLine1, String aLine2, String aLine3) {
void printScaleOLED() { void printScaleOLED() {
// print to display // print to display
char buff[8]; char buff1[8];
char buff[12];
char buff2[8];
int pos_weightTotal = 7; int pos_weightTotal = 7;
int pos_CG_length = 28; int pos_CG_length = 28;
if (nLoadcells == 2) { if (nLoadcells == 2) {
@ -260,19 +273,6 @@ void printScaleOLED() {
} }
} }
const uint8_t *font;
int linestart = 14;
int linedist = 25;
int col0=0;
int col1=28;
font = u8g2_font_helvR12_tr;
if (oledDisplay.getDisplayHeight() <=32) {
font = u8g2_font_6x12_tr;
linestart = 8;
linedist = 12;
col0=0;
col1=28;
}
oledDisplay.firstPage(); oledDisplay.firstPage();
do { do {
if (errMsgCnt == 0) { if (errMsgCnt == 0) {
@ -283,7 +283,7 @@ void printScaleOLED() {
dtostrf(percentVolt, 3, 0, buff); dtostrf(percentVolt, 3, 0, buff);
oledDisplay.drawBox(49, 2, (percentVolt / (100 / 8)), 4); oledDisplay.drawBox(49, 2, (percentVolt / (100 / 8)), 4);
oledDisplay.setFont(u8g2_font_5x7_tr); oledDisplay.setFont(oledFontSmall);
oledDisplay.setCursor(78 - oledDisplay.getStrWidth(buff), 7); oledDisplay.setCursor(78 - oledDisplay.getStrWidth(buff), 7);
if (batType > B_VOLT) { if (batType > B_VOLT) {
dtostrf(percentVolt, 3, 0, buff); dtostrf(percentVolt, 3, 0, buff);
@ -294,48 +294,48 @@ void printScaleOLED() {
oledDisplay.print(buff); oledDisplay.print(buff);
oledDisplay.print(F("V")); oledDisplay.print(F("V"));
} }
// print total weight // print total weight
oledDisplay.setFont(font); oledDisplay.setFont(oledFontNormal);
if (oledDisplay.getDisplayHeight() <= 32) { dtostrf(weightTotal, 7, 1, buff);
if (oledDisplayHeight <= 32) {
oledDisplay.setCursor(1, 18); oledDisplay.setCursor(1, 18);
oledDisplay.print(F("M = ")); oledDisplay.print(F("M = "));
} else { } else {
oledDisplay.drawXBMP(2, pos_weightTotal, 18, 18, weightImage); oledDisplay.drawXBMP(2, pos_weightTotal, 18, 18, weightImage);
oledDisplay.setCursor(93 - oledDisplay.getStrWidth(buff), pos_weightTotal + 17); oledDisplay.setCursor(93 - oledDisplay.getStrWidth(buff), pos_weightTotal + 17);
} }
dtostrf(weightTotal, 5, 1, buff);
oledDisplay.print(buff); oledDisplay.print(buff);
oledDisplay.print(F("g")); oledDisplay.print(F(" g"));
// print CG longitudinal axis // print CG longitudinal axis
if (oledDisplay.getDisplayHeight() <=32) { dtostrf(CG_length, 7, 1, buff);
if (oledDisplayHeight <= 32) {
oledDisplay.setCursor(1, 32); oledDisplay.setCursor(1, 32);
oledDisplay.print(F("CG = ")); oledDisplay.print(F("CG = "));
} else { } else {
oledDisplay.drawXBMP(2, pos_CG_length, 18, 18, CGImage); oledDisplay.drawXBMP(2, pos_CG_length, 18, 18, CGImage);
oledDisplay.setCursor(93 - oledDisplay.getStrWidth(buff), pos_CG_length + 16); oledDisplay.setCursor(93 - oledDisplay.getStrWidth(buff), pos_CG_length + 16);
} }
dtostrf(CG_length, 5, 1, buff);
oledDisplay.print(buff); oledDisplay.print(buff);
oledDisplay.print(F("mm")); oledDisplay.print(F(" mm"));
// print CG transverse axis // print CG transverse axis
if (nLoadcells == 3) { if (nLoadcells == 3) {
if (oledDisplay.getDisplayHeight() <=32) { if (oledDisplayHeight <= 32) {
oledDisplay.setCursor(78, 32); oledDisplay.setCursor(78, 32);
oledDisplay.print(F("LR=")); oledDisplay.print(F("LR="));
dtostrf(CG_trans, 3, 0, buff); dtostrf(CG_trans, 3, 0, buff);
} else { } else {
oledDisplay.drawXBMP(2, 47, 18, 18, CGtransImage); oledDisplay.drawXBMP(2, 47, 18, 18, CGtransImage);
oledDisplay.setCursor(93 - oledDisplay.getStrWidth(buff), 64); oledDisplay.setCursor(93 - oledDisplay.getStrWidth(buff), 64);
dtostrf(CG_trans, 5, 1, buff); dtostrf(CG_trans, 7, 1, buff);
} }
oledDisplay.print(buff); oledDisplay.print(buff);
oledDisplay.print(F("mm")); oledDisplay.print(F(" mm"));
} }
} else { } else {
oledDisplay.setFont(u8g2_font_5x7_tr); oledDisplay.setFont(oledFontSmall);
for (int i = 1; i <= errMsgCnt; i++) { for (int i = 1; i <= errMsgCnt; i++) {
oledDisplay.setCursor(0, 7 * i); oledDisplay.setCursor(0, 7 * i);
oledDisplay.print(errMsg[i]); oledDisplay.print(errMsg[i]);
@ -345,19 +345,21 @@ void printScaleOLED() {
} while ( oledDisplay.nextPage() ); } while ( oledDisplay.nextPage() );
} }
#ifdef PIN_TARE_BUTTON #ifdef PIN_TARE_BUTTON
void handleTareBtn() { void handleTareBtn() {
static unsigned long lastTaraBtn = 0; static unsigned long lastTaraBtn = 0;
if ((millis() - lastTaraBtn) > 20) { if ((millis() - lastTaraBtn) > 20) {
lastTaraBtn = millis(); lastTaraBtn = millis();
static int tareBtnCnt = 0; static int tareBtnCnt = 0;
if(digitalRead(PIN_TARE_BUTTON)) { if (digitalRead(PIN_TARE_BUTTON)) {
tareBtnCnt = 0; tareBtnCnt = 0;
} else { } else {
tareBtnCnt++; tareBtnCnt++;
if (tareBtnCnt > 10) { if (tareBtnCnt > 10) {
Serial.println("tare button pressed"); Serial.println("tare button pressed");
printOLED("TARE ==>"," tare load cells ..."); printOLED("TARE ==>", " tare load cells ...");
// avoid keybounce // avoid keybounce
tareBtnCnt = -1000; tareBtnCnt = -1000;
tareLoadcells(); tareLoadcells();
@ -378,7 +380,7 @@ void saveCalFactor(int nLC) {
} }
void updateLoadcells(){ void updateLoadcells() {
for (int i = LC1; i <= LC3; i++) { for (int i = LC1; i <= LC3; i++) {
if (i < nLoadcells) { if (i < nLoadcells) {
LoadCell[i].update(); LoadCell[i].update();
@ -387,7 +389,7 @@ void updateLoadcells(){
} }
void tareLoadcells(){ void tareLoadcells() {
for (int i = LC1; i <= LC3; i++) { for (int i = LC1; i <= LC3; i++) {
if (i < nLoadcells) { if (i < nLoadcells) {
LoadCell[i].tare(); LoadCell[i].tare();
@ -396,7 +398,7 @@ void tareLoadcells(){
} }
void printNewValueText(){ void printNewValueText() {
Serial.print(F("Set new value:")); Serial.print(F("Set new value:"));
} }
@ -421,7 +423,7 @@ bool runAutoCalibrate() {
calFactorLoadcell[i] = calFactorLoadcell[i] / (toWeightLoadCell[i] / weightLoadCell[i]); calFactorLoadcell[i] = calFactorLoadcell[i] / (toWeightLoadCell[i] / weightLoadCell[i]);
saveCalFactor(i); saveCalFactor(i);
} }
// finish // finish
Serial.println(F("done")); Serial.println(F("done"));
} }
@ -461,7 +463,7 @@ int percentBat(float cellVoltage) {
break; break;
} }
} }
float cellempty = pgm_read_float( &percentList[batTypeArray][0][0]); float cellempty = pgm_read_float( &percentList[batTypeArray][0][0]);
float cellfull = pgm_read_float( &percentList[batTypeArray][elementCount][0]); float cellfull = pgm_read_float( &percentList[batTypeArray][elementCount][0]);
@ -473,9 +475,9 @@ int percentBat(float cellVoltage) {
for (int i = 0; i <= elementCount; i++) { for (int i = 0; i <= elementCount; i++) {
float curVolt = pgm_read_float(&percentList[batTypeArray][i][0]); float curVolt = pgm_read_float(&percentList[batTypeArray][i][0]);
if (curVolt >= cellVoltage && i > 0) { if (curVolt >= cellVoltage && i > 0) {
float lastVolt = pgm_read_float(&percentList[batTypeArray][i-1][0]); float lastVolt = pgm_read_float(&percentList[batTypeArray][i - 1][0]);
float curPercent = pgm_read_float(&percentList[batTypeArray][i][1]); float curPercent = pgm_read_float(&percentList[batTypeArray][i][1]);
float lastPercent = pgm_read_float(&percentList[batTypeArray][i-1][1]); float lastPercent = pgm_read_float(&percentList[batTypeArray][i - 1][1]);
result = float((cellVoltage - lastVolt) / (curVolt - lastVolt)) * (curPercent - lastPercent) + lastPercent; result = float((cellVoltage - lastVolt) / (curVolt - lastVolt)) * (curPercent - lastPercent) + lastPercent;
break; break;
} }
@ -496,7 +498,7 @@ void setup() {
#if defined(ESP8266) #if defined(ESP8266)
printConsole(T_BOOT, "startup CG scale V" + String(CGSCALE_VERSION)); printConsole(T_BOOT, "startup CG scale V" + String(CGSCALE_VERSION));
// init filesystem // init filesystem
SPIFFS.begin(); SPIFFS.begin();
EEPROM.begin(EEPROM_SIZE); EEPROM.begin(EEPROM_SIZE);
@ -579,9 +581,6 @@ void setup() {
#endif #endif
// init OLED display // init OLED display
#if defined(ESP8266)
printConsole(T_BOOT, "init OLED display: " + String(oledDisplay.getDisplayWidth())+ String("x") + String(oledDisplay.getDisplayHeight()));
#endif
initOLED(); initOLED();
// init & tare Loadcells // init & tare Loadcells
@ -590,7 +589,7 @@ void setup() {
LoadCell[i].begin(); LoadCell[i].begin();
LoadCell[i].setCalFactor(calFactorLoadcell[i]); LoadCell[i].setCalFactor(calFactorLoadcell[i]);
#if defined(ESP8266) #if defined(ESP8266)
printConsole(T_BOOT, "init Loadcell " + String(i+1)); printConsole(T_BOOT, "init Loadcell " + String(i + 1));
#endif #endif
} }
} }
@ -606,12 +605,13 @@ void setup() {
#if defined(ESP8266) #if defined(ESP8266)
printConsole(T_BOOT, "Wifi: STA mode - connecing with: " + String(ssid_STA));
// Start by connecting to a WiFi network // Start by connecting to a WiFi network
WiFi.persistent(false); WiFi.persistent(false);
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
WiFi.begin(ssid_STA, password_STA); WiFi.begin(ssid_STA, password_STA);
printConsole(T_BOOT, "Wifi: STA mode - connect with: " + String(ssid_STA));
long timeoutWiFi = millis(); long timeoutWiFi = millis();
@ -643,7 +643,7 @@ void setup() {
printConsole(T_RUN, "Wifi: Connected, IP: " + String(WiFi.localIP().toString())); printConsole(T_RUN, "Wifi: Connected, IP: " + String(WiFi.localIP().toString()));
} }
// Set Hostname // Set Hostname
String hostname = "disabled"; String hostname = "disabled";
#if ENABLE_MDNS #if ENABLE_MDNS
@ -653,7 +653,7 @@ void setup() {
if (!MDNS.begin(hostname, WiFi.localIP())) { if (!MDNS.begin(hostname, WiFi.localIP())) {
hostname = "mDNS failed"; hostname = "mDNS failed";
printConsole(T_ERROR, "Wifi: " + hostname); printConsole(T_ERROR, "Wifi: " + hostname);
}else{ } else {
hostname += ".local"; hostname += ".local";
printConsole(T_RUN, "Wifi: " + hostname); printConsole(T_RUN, "Wifi: " + hostname);
} }
@ -703,10 +703,10 @@ void setup() {
printConsole(T_RUN, "Webserver is up and running"); printConsole(T_RUN, "Webserver is up and running");
// init OTA (over the air update) // init OTA (over the air update)
if(enableOTA){ if (enableOTA) {
ArduinoOTA.setHostname(ssid_AP); ArduinoOTA.setHostname(ssid_AP);
ArduinoOTA.setPassword(password_AP); ArduinoOTA.setPassword(password_AP);
ArduinoOTA.onStart([]() { ArduinoOTA.onStart([]() {
String type; String type;
if (ArduinoOTA.getCommand() == U_FLASH) { if (ArduinoOTA.getCommand() == U_FLASH) {
@ -718,16 +718,16 @@ void setup() {
updateMsg = "Updating " + type; updateMsg = "Updating " + type;
printConsole(T_UPDATE, type); printConsole(T_UPDATE, type);
}); });
ArduinoOTA.onEnd([]() { ArduinoOTA.onEnd([]() {
updateMsg = "successful.."; updateMsg = "successful..";
printUpdateProgress(100, 100); printUpdateProgress(100, 100);
}); });
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
printUpdateProgress(progress, total); printUpdateProgress(progress, total);
}); });
ArduinoOTA.onError([](ota_error_t error) { ArduinoOTA.onError([](ota_error_t error) {
if (error == OTA_AUTH_ERROR) { if (error == OTA_AUTH_ERROR) {
updateMsg = "Auth Failed"; updateMsg = "Auth Failed";
@ -746,14 +746,14 @@ void setup() {
ArduinoOTA.begin(); ArduinoOTA.begin();
printConsole(T_RUN, "OTA is up and running"); printConsole(T_RUN, "OTA is up and running");
} }
// https update // https update
httpsClient.setInsecure(); httpsClient.setInsecure();
if(enableUpdate){ if (enableUpdate) {
// check for update // check for update
httpsUpdate(PROBE_UPDATE); httpsUpdate(PROBE_UPDATE);
} }
#endif #endif
} }
@ -767,15 +767,15 @@ void loop() {
MDNS.update(); MDNS.update();
#endif #endif
if(enableOTA){ if (enableOTA) {
ArduinoOTA.handle(); ArduinoOTA.handle();
} }
server.handleClient(); server.handleClient();
#endif #endif
#ifdef PIN_TARE_BUTTON #ifdef PIN_TARE_BUTTON
handleTareBtn(); handleTareBtn();
#endif #endif
updateLoadcells(); updateLoadcells();
@ -811,9 +811,9 @@ void loop() {
CG_length = ((weightLoadCell[LC2] * model.distance[X2]) / weightTotal) + model.distance[X1]; CG_length = ((weightLoadCell[LC2] * model.distance[X2]) / weightTotal) + model.distance[X1];
#if defined(ESP8266) #if defined(ESP8266)
if(model.mechanicsType == 2){ if (model.mechanicsType == 2) {
CG_length = ((weightLoadCell[LC2] * model.distance[X2]) / weightTotal) - model.distance[X1]; CG_length = ((weightLoadCell[LC2] * model.distance[X2]) / weightTotal) - model.distance[X1];
}else if(model.mechanicsType == 3){ } else if (model.mechanicsType == 3) {
CG_length = ((weightLoadCell[LC2] * model.distance[X2]) / weightTotal) * -1 + model.distance[X1]; CG_length = ((weightLoadCell[LC2] * model.distance[X2]) / weightTotal) * -1 + model.distance[X1];
} }
#endif #endif
@ -835,7 +835,6 @@ void loop() {
printScaleOLED(); printScaleOLED();
// serial connection // serial connection
if (Serial) { if (Serial) {
if (Serial.available() > 0) { if (Serial.available() > 0) {
@ -969,7 +968,7 @@ void loop() {
for (int i = X1; i <= X3; i++) { for (int i = X1; i <= X3; i++) {
Serial.print(MENU_DISTANCE_X1 + i); Serial.print(MENU_DISTANCE_X1 + i);
Serial.print(F(" - Set distance X")); Serial.print(F(" - Set distance X"));
Serial.print(i+1); Serial.print(i + 1);
Serial.print(F(" (")); Serial.print(F(" ("));
Serial.print(model.distance[i]); Serial.print(model.distance[i]);
Serial.print(F("mm)\n")); Serial.print(F("mm)\n"));
@ -990,9 +989,9 @@ void loop() {
for (int i = LC1; i <= LC3; i++) { for (int i = LC1; i <= LC3; i++) {
Serial.print(MENU_LOADCELL1_CALIBRATION_FACTOR + i); Serial.print(MENU_LOADCELL1_CALIBRATION_FACTOR + i);
if((MENU_LOADCELL1_CALIBRATION_FACTOR + i) < 10) Serial.print(F(" ")); if ((MENU_LOADCELL1_CALIBRATION_FACTOR + i) < 10) Serial.print(F(" "));
Serial.print(F(" - Set calibration factor of load cell ")); Serial.print(F(" - Set calibration factor of load cell "));
Serial.print(i+1); Serial.print(i + 1);
Serial.print(F(" (")); Serial.print(F(" ("));
Serial.print(calFactorLoadcell[i]); Serial.print(calFactorLoadcell[i]);
Serial.print(F(")\n")); Serial.print(F(")\n"));
@ -1001,7 +1000,7 @@ void loop() {
for (int i = R1; i <= R2; i++) { for (int i = R1; i <= R2; i++) {
Serial.print(MENU_RESISTOR_R1 + i); Serial.print(MENU_RESISTOR_R1 + i);
Serial.print(F(" - Set value of resistor R")); Serial.print(F(" - Set value of resistor R"));
Serial.print(i+1); Serial.print(i + 1);
Serial.print(F(" (")); Serial.print(F(" ("));
Serial.print(resistor[i]); Serial.print(resistor[i]);
Serial.print(F("ohm)\n")); Serial.print(F("ohm)\n"));
@ -1362,14 +1361,14 @@ void getWiFiNetworks() {
bool ssidSTAavailable = false; bool ssidSTAavailable = false;
String response = ""; String response = "";
int n = WiFi.scanNetworks(); int n = WiFi.scanNetworks();
if (n > 0) { if (n > 0) {
for (int i = 0; i < n; ++i) { for (int i = 0; i < n; ++i) {
response += WiFi.SSID(i); response += WiFi.SSID(i);
if(WiFi.SSID(i) == ssid_STA) ssidSTAavailable = true; if (WiFi.SSID(i) == ssid_STA) ssidSTAavailable = true;
if (i < n - 1) response += "&"; if (i < n - 1) response += "&";
} }
if(!ssidSTAavailable){ if (!ssidSTAavailable) {
response += "&"; response += "&";
response += ssid_STA; response += ssid_STA;
} }
@ -1421,7 +1420,7 @@ void saveParameter() {
EEPROM.put(P_ENABLE_OTA, enableOTA); EEPROM.put(P_ENABLE_OTA, enableOTA);
EEPROM.commit(); EEPROM.commit();
if(model.name != ""){ if (model.name != "") {
saveModelJson(model.name); saveModelJson(model.name);
} }
@ -1682,7 +1681,7 @@ bool deleteModelJson(String modelName) {
void writeModelData(JsonObject object) { void writeModelData(JsonObject object) {
char buff[8]; char buff[8];
String stringBuff; String stringBuff;
dtostrf(weightTotal, 5, 1, buff); dtostrf(weightTotal, 5, 1, buff);
stringBuff = buff; stringBuff = buff;
stringBuff.trim(); stringBuff.trim();
@ -1707,14 +1706,13 @@ void writeModelData(JsonObject object) {
// print update progress screen // print update progress screen
void printUpdateProgress(unsigned int progress, unsigned int total) { void printUpdateProgress(unsigned int progress, unsigned int total) {
printConsole(T_UPDATE, updateMsg); printConsole(T_UPDATE, updateMsg);
oledDisplay.firstPage(); oledDisplay.firstPage();
do { do {
oledDisplay.setFont(u8g2_font_helvR08_tr); oledDisplay.setFont(oledFontSmall);
oledDisplay.setCursor(0, 12); oledDisplay.setCursor(0, 12);
oledDisplay.print(updateMsg); oledDisplay.print(updateMsg);
oledDisplay.setFont(u8g2_font_5x7_tr);
oledDisplay.setCursor(107, 35); oledDisplay.setCursor(107, 35);
oledDisplay.printf("%u%%\r", (progress / (total / 100))); oledDisplay.printf("%u%%\r", (progress / (total / 100)));
@ -1739,10 +1737,10 @@ char * TimeToString(unsigned long t)
return str; return str;
} }
void printConsole(int t, String msg){ void printConsole(int t, String msg) {
Serial.print(TimeToString(millis())); Serial.print(TimeToString(millis()));
Serial.print(" ["); Serial.print(" [");
switch(t) { switch (t) {
case T_BOOT: case T_BOOT:
Serial.print("BOOT"); Serial.print("BOOT");
break; break;
@ -1768,7 +1766,7 @@ void printConsole(int t, String msg){
// https update // https update
bool httpsUpdate(uint8_t command){ bool httpsUpdate(uint8_t command) {
if (!httpsClient.connect(HOST, HTTPS_PORT)) { if (!httpsClient.connect(HOST, HTTPS_PORT)) {
printConsole(T_ERROR, "Wifi: connection to GIT failed"); printConsole(T_ERROR, "Wifi: connection to GIT failed");
return false; return false;
@ -1776,44 +1774,44 @@ bool httpsUpdate(uint8_t command){
const char * headerKeys[] = {"Location"} ; const char * headerKeys[] = {"Location"} ;
const size_t numberOfHeaders = 1; const size_t numberOfHeaders = 1;
HTTPClient https; HTTPClient https;
https.setUserAgent("cgscale"); https.setUserAgent("cgscale");
https.setRedirectLimit(0); https.setRedirectLimit(0);
https.setFollowRedirects(true); https.setFollowRedirects(true);
String url = "https://" + String(HOST) + String(URL); String url = "https://" + String(HOST) + String(URL);
if (https.begin(httpsClient, url)) { if (https.begin(httpsClient, url)) {
https.collectHeaders(headerKeys, numberOfHeaders); https.collectHeaders(headerKeys, numberOfHeaders);
printConsole(T_HTTPS, "GET: " + url); printConsole(T_HTTPS, "GET: " + url);
int httpCode = https.GET(); int httpCode = https.GET();
if (httpCode > 0) { if (httpCode > 0) {
// response // response
if (httpCode == HTTP_CODE_FOUND) { if (httpCode == HTTP_CODE_FOUND) {
String newUrl = https.header("Location"); String newUrl = https.header("Location");
gitVersion = newUrl.substring(newUrl.lastIndexOf('/')+2).toFloat(); gitVersion = newUrl.substring(newUrl.lastIndexOf('/') + 2).toFloat();
if(gitVersion > String(CGSCALE_VERSION).toFloat()){ if (gitVersion > String(CGSCALE_VERSION).toFloat()) {
printConsole(T_UPDATE, "Firmware update available: V" + String(gitVersion)); printConsole(T_UPDATE, "Firmware update available: V" + String(gitVersion));
}else{ } else {
printConsole(T_UPDATE, "Firmware version found on GitHub: V" + String(gitVersion) + " - current firmware is up to date"); printConsole(T_UPDATE, "Firmware version found on GitHub: V" + String(gitVersion) + " - current firmware is up to date");
} }
}else if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) { } else if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
Serial.println(https.getString()); Serial.println(https.getString());
}else{ } else {
printConsole(T_ERROR, "HTTPS: GET... failed, " + https.errorToString(httpCode)); printConsole(T_ERROR, "HTTPS: GET... failed, " + https.errorToString(httpCode));
https.end(); https.end();
return false; return false;
} }
}else { } else {
return false; return false;
} }
https.end(); https.end();
}else { } else {
printConsole(T_ERROR, "Wifi: Unable to connect"); printConsole(T_ERROR, "Wifi: Unable to connect");
return false; return false;
} }
return true; return true;
} }

View File

@ -48,7 +48,7 @@ CG scale with 3 Loadcells:
// Wifi Kit 8 (https://heltec.org/project/wifi-kit-8/) // Wifi Kit 8 (https://heltec.org/project/wifi-kit-8/)
// is a ESP8266 based board, with integrated OLED and battery management // is a ESP8266 based board, with integrated OLED and battery management
// #define WIFI_KIT_8 1 #define WIFI_KIT_8 1
#ifdef WIFI_KIT_8 #ifdef WIFI_KIT_8
#define PIN_LOADCELL1_DOUT D6 #define PIN_LOADCELL1_DOUT D6
#define PIN_LOADCELL1_PD_SCK D7 #define PIN_LOADCELL1_PD_SCK D7
@ -62,6 +62,8 @@ CG scale with 3 Loadcells:
// D3 can be used in parallel to the load cell with Wifi Kit 8 // D3 can be used in parallel to the load cell with Wifi Kit 8
#define PIN_TARE_BUTTON D3 #define PIN_TARE_BUTTON D3
#define MAX_SSID_PW_LENGHT 64
#else #else
#define PIN_LOADCELL1_DOUT D6 #define PIN_LOADCELL1_DOUT D6
#define PIN_LOADCELL1_PD_SCK D5 #define PIN_LOADCELL1_PD_SCK D5
@ -151,7 +153,9 @@ CG scale with 3 Loadcells:
// **** Wifi settings **** // **** Wifi settings ****
#define MAX_SSID_PW_LENGHT 64 #ifndef MAX_SSID_PW_LENGHT
#define MAX_SSID_PW_LENGHT 32
#endif
// Station mode: connect to available network // Station mode: connect to available network
#define SSID_STA "myWiFi" #define SSID_STA "myWiFi"