From b8964c87d1e3b287ffcb49a58b35c2ba329e5988 Mon Sep 17 00:00:00 2001 From: nightflyer88 Date: Sun, 27 Jan 2019 10:32:18 +0100 Subject: [PATCH] add mDNS service, add tare button, tare procedure improved --- CG_scale.ino | 181 +++++++++++++++++++++----------------- data/airplane.png | Bin data/bootstrap.min.css.gz | Bin 20280 -> 20987 bytes data/home.png | Bin data/index.html.gz | Bin 1677 -> 1736 bytes data/settings.html.gz | Bin 2308 -> 2307 bytes data/settings.png | Bin settings_ESP8266.h | 6 +- 8 files changed, 103 insertions(+), 84 deletions(-) mode change 100644 => 100755 data/airplane.png mode change 100644 => 100755 data/home.png mode change 100644 => 100755 data/settings.png diff --git a/CG_scale.ino b/CG_scale.ino index b366014..13bcbb6 100644 --- a/CG_scale.ino +++ b/CG_scale.ino @@ -4,7 +4,7 @@ (c) 2019 by M. Lehmann ------------------------------------------------------------------ */ -#define CGSCALE_VERSION "1.0.63" +#define CGSCALE_VERSION "1.0.65" /* ****************************************************************** @@ -56,8 +56,8 @@ #if defined(ESP8266) #include #include -#include #include +#include #include #endif @@ -268,6 +268,31 @@ bool runAutoCalibrate() { } +// check if a loadcell has error +bool getLoadcellError(){ + bool err = false; + + if (LoadCell_1.getTareTimeoutFlag()) { + errMsg[++errMsgCnt] = "ERROR: Timeout TARE Lc1\n"; + err = true; + } + + if (LoadCell_2.getTareTimeoutFlag()) { + errMsg[++errMsgCnt] = "ERROR: Timeout TARE Lc2\n"; + err = true; + } + + if (nLoadcells > 2) { + if (LoadCell_3.getTareTimeoutFlag()) { + errMsg[++errMsgCnt] = "ERROR: Timeout TARE Lc3\n"; + err = true; + } + } + + return err; +} + + void setup() { // init serial @@ -381,83 +406,37 @@ void setup() { // init & tare Loadcells LoadCell_1.begin(); - LoadCell_1.start(STABILISINGTIME); + //LoadCell_1.start(STABILISINGTIME); + LoadCell_1.setCalFactor(calFactorLoadcell1); + LoadCell_2.begin(); - LoadCell_2.start(STABILISINGTIME); - - if (LoadCell_1.getTareTimeoutFlag()) { - errMsg[++errMsgCnt] = "ERROR: Timeout TARE Lc1\n"; - } - else { - LoadCell_1.setCalFactor(calFactorLoadcell1); - } - - if (LoadCell_2.getTareTimeoutFlag()) { - errMsg[++errMsgCnt] = "ERROR: Timeout TARE Lc2\n"; - } - else { - LoadCell_2.setCalFactor(calFactorLoadcell2); - } - + //LoadCell_2.start(STABILISINGTIME); + LoadCell_2.setCalFactor(calFactorLoadcell2); + if (nLoadcells > 2) { LoadCell_3.begin(); - LoadCell_3.start(STABILISINGTIME); + //LoadCell_3.start(STABILISINGTIME); + LoadCell_3.setCalFactor(calFactorLoadcell3); + } - if (LoadCell_3.getTareTimeoutFlag()) { - errMsg[++errMsgCnt] = "ERROR: Timeout TARE Lc3\n"; - } - else { - LoadCell_3.setCalFactor(calFactorLoadcell3); + // stabilize scale values + long stabilisingtime = millis() + STABILISINGTIME; + while(millis() < stabilisingtime) { + LoadCell_1.update(); + LoadCell_2.update(); + if (nLoadcells > 2) { + LoadCell_3.update(); } } - /* - // init Loadcells - LoadCell_1.begin(); - LoadCell_2.begin(); - if (nLoadcells > 2) { - LoadCell_3.begin(); - } + LoadCell_1.tare(); + LoadCell_2.tare(); + if (nLoadcells > 2) { + LoadCell_3.tare(); + } - // tare - byte loadcell_1_rdy = 0; - byte loadcell_2_rdy = 0; - byte loadcell_3_rdy = 0; - lastTimeLoadcell = millis(); - - while ((loadcell_1_rdy + loadcell_2_rdy + loadcell_3_rdy) < 3) { - loadcell_1_rdy = LoadCell_1.startMultiple(STABILISINGTIME); - loadcell_2_rdy = LoadCell_2.startMultiple(STABILISINGTIME); - if (nLoadcells == 3) { - loadcell_3_rdy = LoadCell_3.startMultiple(STABILISINGTIME); - } else { - loadcell_3_rdy = 1; - } - // timeout - if ((millis() - lastTimeLoadcell) > TARE_TIMEOUT) { - errMsg[++errMsgCnt] = "ERROR: Timeout TARE\n"; - break; - } - } - - // check loadcells if error - if (!loadcell_1_rdy) { - errMsg[++errMsgCnt] = "ERROR: Loadcell 1 not ready\n"; - } - if (!loadcell_2_rdy) { - errMsg[++errMsgCnt] = "ERROR: Loadcell 2 not ready\n"; - } - if (!loadcell_3_rdy) { - errMsg[++errMsgCnt] = "ERROR: Loadcell 3 not ready\n"; - } - - // set calibration factor - LoadCell_1.setCalFactor(calFactorLoadcell1); - LoadCell_2.setCalFactor(calFactorLoadcell2); - if (nLoadcells > 2) { - LoadCell_3.setCalFactor(calFactorLoadcell3); - } - */ + getLoadcellError(); + #if defined(ESP8266) while (WiFi.status() != WL_CONNECTED) { @@ -487,7 +466,7 @@ void setup() { oledDisplay.setCursor(0, 64); oledDisplay.print(WiFi.localIP()); } while ( oledDisplay.nextPage() ); - //delay(5000); + delay(2000); } else { // if WiFi not connected, switch to access point mode WiFi.mode(WIFI_AP); @@ -495,9 +474,20 @@ void setup() { WiFi.softAP(ssid_AP, password_AP); } + // init mDNS + String hostName = ssid_AP; + hostName.replace(" ", ""); + hostName.toLowerCase(); + char hostString[32]; + hostName.toCharArray(hostString, 32); + MDNS.begin(hostString); + // init webserver server.begin(); + // Add service to MDNS-SD + MDNS.addService("http", "tcp", 80); + // When the client requests data server.on("/getHead", getHead); server.on("/getValue", getValue); @@ -506,6 +496,7 @@ void setup() { server.on("/getWiFiNetworks", getWiFiNetworks); server.on("/saveParameter", saveParameter); server.on("/autoCalibrate", autoCalibrate); + server.on("/tare", runTare); server.on("/saveModel", saveModel); server.on("/openModel", openModel); server.on("/deleteModel", deleteModel); @@ -520,17 +511,29 @@ void setup() { if (!handleFileRead(server.uri())) server.send(404, "text/plain", "404: Not Found"); }); -#endif - // stabilize scale values - for (int i = 0; i <= 15; i++) { - LoadCell_1.update(); - LoadCell_2.update(); - if (nLoadcells > 2) { - LoadCell_3.update(); - } - delay(200); +Serial.println("Sending mDNS query"); +int n = MDNS.queryService("esp", "tcp"); // Send out query for esp tcp services +Serial.println("mDNS query done"); +if (n == 0) { + Serial.println("no services found"); +} else { + Serial.print(n); + Serial.println(" service(s) found"); + for (int i = 0; i < n; ++i) { + // Print details for each service found + Serial.print(i + 1); + Serial.print(": "); + Serial.print(MDNS.hostname(i)); + Serial.print(" ("); + Serial.print(MDNS.IP(i)); + Serial.print(":"); + Serial.print(MDNS.port(i)); + Serial.println(")"); } +} +Serial.println(); +#endif } @@ -961,6 +964,7 @@ void loop() { } #if defined(ESP8266) + MDNS.update(); server.handleClient(); #endif @@ -1167,6 +1171,21 @@ void autoCalibrate() { } +// tare cg scale +void runTare() { + LoadCell_1.tare(); + LoadCell_2.tare(); + if (nLoadcells > 2) { + LoadCell_3.tare(); + } + if (!getLoadcellError()){ + server.send(200, "text/plain", "tare completed"); + return; + } + server.send(404, "text/plain", "404: tare failed !"); +} + + // save new model void saveModel() { if (server.hasArg("modelname")) { diff --git a/data/airplane.png b/data/airplane.png old mode 100644 new mode 100755 diff --git a/data/bootstrap.min.css.gz b/data/bootstrap.min.css.gz index 5c56fafcc4864bd0d7fa8adcece1c41a9bb10386..055b91a04461a1f797c37aec732d74647c7cc355 100755 GIT binary patch literal 20987 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

#5(@IoHT$Y#lt}|?WI{-|K=vn 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 literal 20280 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 C-l~59 diff --git a/data/home.png b/data/home.png old mode 100644 new mode 100755 diff --git a/data/index.html.gz b/data/index.html.gz index 3c64014d3499129327598555023c6f297a25a3a8..c9a3c1ffa9e34dd184d5a0208e3c7184d7ead054 100755 GIT binary patch literal 1736 zcmV;(1~>U1iwFqnXiZ!I18Ht#Wq2-VbZu+^?OJwu5H8JZ8oiSS353Ty@_@y6dExP}4M1i5n}71bjg>zVTu+m8eZ=m;+uy^KPs zF>*tpsQ}VT=IQy!qYLIzC;76Em|&U_?kJaVIvVUFHJ40$bad#!9+hP6kPD_Nvj zC@k(Zge2DUP+Bw>U35<80TCjn)=YCcJ~=~)0BE{IE1F?1eVS5o5DU#EosDpB8irbF zNuqARMAuacBT4xPE4}1Y%_-G6|5Q?>q`NllgTmusFC{2Zr(evqAQGLNy@x46ypmwBit6pBvhl}0-tcFcLhl$DO@l(!nt=o@oZ86CII zUl1M}70Z0OD&kCc@FTp}JlzZ3H~_SEVGB+S-bXltE8H5~ zH-J!4;n@Jau7&+;BEdm4m0z*{;Mi|`0P5seH+tg(+@gfJYNFvFKlT#0G?pR@`aIS;32iPXN}V(CZApW0K|8x1Qv`Oz+id}NEB{N% z{JEZln(()rT6L`!(KNcL=lWX+JQ ze{w$wr$`j{k#*h~O}}QG&!^h59P<8(uEGtQ>aHe^ZE56|PPx$`x2oaH)tc?=OYNU*z)2FBT11Bb~oy!}BG;1FEg~zP{PgCuQhI)d zIk0)Fvu&P$IiNIWylIQKjxNT)w<$AL{iR_qZQ%{4p|{N1O@b^?Qp=7o+)lyL>4)PH z`4P?774;k)Mri6MBY4%A8hWgl>gIaw%L?WXfpmVpE_^j%h?&~hj*PLpB;LnL93y56i@|xk` z$~mYJxmceCe%g8@Oh%jt+Kq&d0j8#3ijr<+)|NdYu?~;tiEAD`?nhT`Y>Qo39k}wX zsJBBe)xF{AwpN0KsiD4WvXf_=U0PEBv4230CoOadZQ?xHssVQnGo2C}TbXg}w0Ts*sb`jL zbJKuuUW#1WoXN~TCx|taN!3-;Gq~|(GqnldwFa#Vxiv%00COJ-V6MLzTqkE=6tGt3 z&WD3lrR8+Lph7oCmEE}g#JJ+}Cdfi&s3*U;=vDL$9u#9%@9=+uSgDWxNf8Ds!B#Fe zgY0=q_(j1h@A%veU7sL(jVl_i%H!-E>*|=2$W>un{c5d|z`fSMdCgoYeH8_-}8M`i3D&vUqHysvhs|%HGmG!b@Y+Q4Fy;7lTYTE2RDj5^b zHp5i?amU?52mQe_>*pEBLD}2pBkM>~c@I7Acl(9;GhW3$MCG4d(MZ~!;It@#gt90)pVBLDzg(ODt@ literal 1677 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 delta 2300 zcmV5ABzYG!>ve>2O@vx_PUAeLpE*F0%=+#LAQru5zrECb4yV=lFH*2 z{oik>mnB)2N%;sX{m7}B zQ>qjEh$&LiUK0C5;jz_?I^=(PNB@}59g*nt{1!xny1iqHO@QMFX&KPtv{QO94TNo! zf@V~|f%R(b|C!!P&?Nm&K$Qj%LGRJ0cNcH8_OGJG*8Xv>f84j@2?=PAN)t_C-Nnps zNCqnoVm@rz(sQOdq1d$%L!%KoM9-h2u-za9%Crr7y%PC6hVnh3=na2;(C8V^4me*S zvY2Bea;?FXW=3B{pyNvUJHi7q#XL?&`JCw%evbE7i#whjxL|4>Sc2D_n#*4w-#RU< z6m#%?hY3ODo11qR03QzXx%c}9X!a~L*N;>x;{;{6gB7@6ms;~JU&~Fvr=o?=U*F&Z zgk$r9OJj&Dj7Cx6WDS4nYpI!Dk^7H^?hjM_>zFFH`@6GLZVyVq`W0ZH&*h*OMZF4j z*3cNP?!4~oA^&+_v`tP`M{=o!(8eGy0w>cpuGds?}3fhx!eaLVRO_}{_weP z?sKqs(Q09F;StBCoGUPa#J?IzIt=t9Z2GC6O7_>39Hf$iH6?$CspPPkB;-rKQ8t_F zRPeB|;OTiP^p9pjuqmDqTYECm?m|aDZ-}ta)ju~xSm^9!)2S=aw2Ua z(5$E+5NCfS`lH7ei`8#vS|+`@y}mhF2sX4VpD1UGC@VZ7y+q6YDT+l-0Xi$w^>JxT33vsH6^i;;qB(fH-U>DRGSd zKRaT&E$t$${EeNlOR8awzo;ME+&ACmjJTql+D5~x>~AlL8G98-Q%|Cnfn$KwJ4Vb3 zX>~XiGd({>FJ7=3r!m5wpCe+!if9^hY3+GoC83Ii`9OcKPNI^?ZCQnHClbpcp-w8& zTZj1IAI|BVai;}9737}MDYJgGwO=Z7M=O(0hiGCV(7y^HC~SWLHx^0L2%{IPBU>i9 z+K(1(1>o~VGF6S3NxGUM4jLj38Y2!HA`a^i)1<5#aFM&!EOB})T~-bx>&32Bt5KCd74HxMXb?ACcUgd%w?0+p!vkJ1~=I=sv*;C zv<5Akd{!go($pp#Pd+rD2M{+IP-6KY$=}z#GFy|pvpX#ga-IS z3WIiG)Iw9hGvLWYGnX<^`&yC6v?gnLCS~ z=@KS=P6X}vVurzU&4XwZJ_e4TcOMyVJD!Ij^k~@gAF5!}RalgjlBFouLpPfHio1X7 zYH3+Dj)}-JqnSoZnS1W`3Ryijt81*KXqW-dc+tX4tuByHUJU?mLeeu-%q3oOw3I2> z!;A^zqeuN-o})D%j?KB)1U}8gOhEt`mOF50)HCS?e$jV1nNU7{1A0OsmU&+RwXUz< zzS=*sy3yUdL|jkFA{*K;8=U%Wn4NzX^%4md(OklL4osWMlKItk0}ZLx_|y}^jHo?C zA0X{FMI;f`0sz#=m+E_69fZ?Qvey-JXCh2WLNiXf;?=6iCF{{vF~V)Un(jny#{DGB z8IbQW*v%TQV|Fe^-4*jl&In~wXu67Tr$~6ox*-N+;SdMA+W{hQ$?i;olDU5ymByU! zWr4R;&WT1Q=hf(C_&yUH!{Mk=J9n^_yv2a~r!Np~9~3SFcLE{TnTl1xq&oYJ zCoy<}N$lJi>n1ULf=TS$OT(kK;hmI-(G`SjZ@wG*PwUuE&w8+P);l*CQzs`gid;xt z0vXmSHp~z5rT5xh|NSK%zrSppB)mU6gZ^h{n#3XPD?;> zC#&n%*MjOt8stYBY%y$73=zG>QZwu@KkRUWVNKaV=rJm{P^)W73h_0JoLLW;V?v~5 z@1sGl|4Zgu2B?kV_qekZ3vYOjd!61g-;hsAd+FN)>DK^`vrYMTV{*4j>)W}POplj} WpHbBljyvXyBmV=5((ctrG5`Q6LUHr} diff --git a/data/settings.png b/data/settings.png old mode 100644 new mode 100755 diff --git a/settings_ESP8266.h b/settings_ESP8266.h index eda725e..d546d88 100644 --- a/settings_ESP8266.h +++ b/settings_ESP8266.h @@ -51,14 +51,14 @@ CG scale with 3 Loadcells: #define PIN_LOADCELL2_DOUT D2 #define PIN_LOADCELL2_PD_SCK D1 -#define PIN_LOADCELL3_DOUT D8 +#define PIN_LOADCELL3_DOUT D0 #define PIN_LOADCELL3_PD_SCK D7 // **** Measurement settings **** -#define STABILISINGTIME 2000 // ms +#define STABILISINGTIME 3000 // ms #define UPDATE_INTERVAL_OLED_MENU 500 // ms #define UPDATE_INTERVAL_LOADCELL 100 // ms @@ -135,7 +135,7 @@ U8G2_SH1106_128X64_NONAME_1_HW_I2C oledDisplay(U8G2_R0, /* reset=*/ U8X8_PIN_NON // Access point mode: create own network #define SSID_AP "CG scale" #define PASSWORD_AP "" -const char ip[4] = {1,1,1,1}; // default IP address +const char ip[4] = {1,2,3,4}; // default IP address // **** Model memory settings ****