WeMos D1 WIFI WebServer

Automatizace, řízení, měření, logování a programování s využitím platformy Arduino.
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Reputace: 285
Lokalita: SO, SK
Bydliště: SO, SK

WeMos D1 WIFI WebServer

Příspěvek od rottenkiwi »

Zaujímavá vecička ten WeMos. Dá sa to napr. využiť na WiFi meranie teploty pomocou
Dallas senzoru.

Kód: Vybrat vše

#include <OneWire.h>
#include <DallasTemperature.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
 
const char* ssid = "guest";
const char* password = "0000";
 
OneWire oneWire(D8);
DallasTemperature sensor(&oneWire);
String myHTML = "";
ESP8266WebServer server(80);
 
 
const int led = BUILTIN_LED;
float teplota;
 

 
void handleNotFound(){
  digitalWrite(led, 1);
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET)?"GET":"POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i=0; i<server.args(); i++){
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
  digitalWrite(led, 0);
}

void generateHTML(){
myHTML="";
myHTML+="<html>";
myHTML += "  <head> ";
myHTML += "<script type=\"text/javascript\" src=\"https://www.gstatic.com/charts/loader.js\"></script>";
myHTML += "   <script type=\"text/javascript\">";
myHTML += "      google.charts.load('current', {'packages':['gauge']});";
myHTML += "      google.charts.setOnLoadCallback(drawChart);";
myHTML += "      function drawChart() {";
myHTML += "";
myHTML += "        var data = google.visualization.arrayToDataTable([";
myHTML += "          ['Label', 'Value'],";
myHTML += "          ['Teplota', @id_1@]";
myHTML += "        ";
myHTML += "        ]);";
myHTML += "";
myHTML += "        var options = {";
myHTML += "          width: 120, height: 120,";
myHTML += "          redFrom: 90, redTo: 100,";
myHTML += "          yellowFrom:75, yellowTo: 90,";
myHTML += "          minorTicks: 5";
myHTML += "        };";
myHTML += "";
myHTML += "        var chart = new google.visualization.Gauge(document.getElementById('chart_div'));";
myHTML += "";
myHTML += "        chart.draw(data, options);      ";
myHTML += "        ";
myHTML += "      }";
myHTML += "    </script>";
myHTML += "  </head>";
myHTML += "  <body>";
myHTML += "    <div id=\"chart_div\" style=\"width: 120px; height: 120px;\"></div>";
myHTML += "  </body>";
myHTML += "</html>";
int sensor_value = analogRead(0);
sensor.requestTemperatures(); 
myHTML.replace("@id_1@", String(sensor.getTempCByIndex(0),1));
}

void handleRoot() {
  
  digitalWrite(led, 1);  
  Serial.println();
  String message = "";
  message += server.args();
  message += "\n";
  for (uint8_t i=0; i<server.args(); i++){
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  Serial.println(message);
  if (server.args()==0)
  {
    generateHTML();
    server.send(200, "text/html", myHTML);
  }
  else
  {}
  digitalWrite(led, 0);
}
 
void setup(void){
  sensor.begin();
  
  pinMode(led, OUTPUT);
  digitalWrite(led, 0);
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println("");
 
  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
 
  if (MDNS.begin("esp8266")) {
    Serial.println("MDNS responder started");
  }
 
  server.on("/", handleRoot);
  server.on("/inline", [](){server.send(200, "text/plain", "this works as well");});
  server.onNotFound(handleNotFound);
 
  server.begin();
  Serial.println("HTTP server started");
}
 
void loop(void){
    
  server.handleClient();
}

Přílohy
WeMos_D1_Temp_Gauge.jpg
WeMos_D1.jpg
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
kodl69
Příspěvky: 7379
Registrován: sob črc 19, 2014 8:56 pm
Reputace: 866
Lokalita: severně od Brna
Systémové napětí: 48V
Výkon panelů [Wp]: 8kWp
Kapacita baterie [kWh]: 12kWh
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: WeMos D1 WIFI WebServer

Příspěvek od kodl69 »

jo, je to esp8266 na desce imitující arduino.
tady mám třeba "bazéntermostat" což je použitelný i pro fototermiku:
bazentermostat.png
bazentermostat.png (7.08 KiB) Zobrazeno 2633 x
bazetermsch.png
a rozhraní vypadá nějak takhle,
http://www.internetove-sluzby.cz/bazen/?w=0 - to jsou samozřejmě "fake data" , ty okýnka mění barvu podle teploty, a po kliknutá na střed vrtule, co signalizuje funkci čerpadla, je možný nastavit dobu běhu čerpadla. jako bonus mám i odesílání dat na thingspeak, inspirace zde:
http://www.xpablo.cz/?p=941#comment-2413
ten wificonfig je "k nezaplacení" - po nějaké upravě v domácí síti není potřeba nic přeprogramovávat, nastaví se to přes web rozhraní.
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Reputace: 285
Lokalita: SO, SK
Bydliště: SO, SK

Re: WeMos D1 WIFI WebServer

Příspěvek od rottenkiwi »

Už sa mi to rozbehlo. Len ma zaujíma ako pripevniť Dallas DS1820 na panely
a ako ju presne nakalibrovať.
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
Uživatelský avatar
youda
Příspěvky: 3074
Registrován: stř dub 27, 2016 12:12 am
Reputace: 907

Re: WeMos D1 WIFI WebServer

Příspěvek od youda »

rottenkiwi píše:Už sa mi to rozbehlo. Len ma zaujíma ako pripevniť Dallas DS1820 na panely
a ako ju presne nakalibrovať.
Co třeba přilepit to tavným lepidlem?
Měl jsem 3xDS1820 k jednomu arduinu současně a rozcházely se mi jen +- 1°C
Youdova ostrovní laboratoř 20kWp: https://youda.mypower.cz
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Reputace: 285
Lokalita: SO, SK
Bydliště: SO, SK

Re: WeMos D1 WIFI WebServer

Příspěvek od rottenkiwi »

Od 20 do 44 *C mi to ukazuje OK,
ale ak je teplota nad 44 *C, tak mi to vypíše 127.7 .
Tak kde je chyba ?
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
Uživatelský avatar
youda
Příspěvky: 3074
Registrován: stř dub 27, 2016 12:12 am
Reputace: 907

Re: WeMos D1 WIFI WebServer

Příspěvek od youda »

A není možný, že došlo jen k pomíchání datových typů?
127.7 vypadá jako by se špatně přenášela hodnota mezi signed a unsigned.
Youdova ostrovní laboratoř 20kWp: https://youda.mypower.cz
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Reputace: 285
Lokalita: SO, SK
Bydliště: SO, SK

Re: WeMos D1 WIFI WebServer

Příspěvek od rottenkiwi »

Problém bol odpor, mal som tam 5k a má byť 4k7. Teraz to už merá OK.
Idem skúsiť kalibráciu podľa tohto:
https://thecavepearlproject.org/2015/03 ... libration/
Zatiaľ to funguje ako vonkajší WiFi teplomer napájaný z DIY banku z vyradených 18650.

Zajtra to skúsim dať na panely, nejakou teplovodivou pastou a integrovať to do mojho online monit.
Přílohy
gauge_1_2_II.jpg
gauge_1_2_I.jpg
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
kodl69
Příspěvky: 7379
Registrován: sob črc 19, 2014 8:56 pm
Reputace: 866
Lokalita: severně od Brna
Systémové napětí: 48V
Výkon panelů [Wp]: 8kWp
Kapacita baterie [kWh]: 12kWh
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: WeMos D1 WIFI WebServer

Příspěvek od kodl69 »

S DS18B20 jsem něco užil, co vím jistě, tak hodnota odporu nehraje moc velkou roli. -85°C a 127 jsou ve farnheitech v hex nějaký chybový stavy, jeden tuším přerušení napájení během konverze a druhej si hned nevzpomenu, ale řeší to kde kdo: https://forum.arduino.cc/index.php?topic=271388.0
Určitě vím, že na 3.3V funguje spolehlivě třídrát zapojení a odpor jsem dával 3k3 v některejch kusech snad i 2k7.
Jedna z chyb vzniktne tím, že se zadá požadavek na teplotu a nepočká se těch 0.6s , než je hodnota připravená k načtení, čas se mění podle tozlišení měření.
Chyba 85°C je tuším při dvoudrát zapojení, když nejsou spojený piny GND a VCC - podle datasheetu první naměřená hodnota po resetu napájení.
Kdysi jsem to lamersky řešil tak, že když přijde jedna z těchhle hodnot, tak to ignoruju a změřím znovu, a furt dokola, dokud se neprobudí k životu.

Jinak DS18B20 se nekalibruje, pokud se nastaví nejvyšší rozlišení, a čidla jsou zaručeně na stejné teplotě (třeba v promíchávané sklenici s vodou) tak rozdíl mezi čidly 0.1°C je fakt hodně. A absolutní přesnost se snadno porovná třeba proti teploměru na člověka, kterej by měl chodit +- 0.2°C, jinak je k ničemu.
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Reputace: 285
Lokalita: SO, SK
Bydliště: SO, SK

Re: WeMos D1 WIFI WebServer

Příspěvek od rottenkiwi »

Keď tam nie je 4k7, tak to dojde k 44 *C a potom koniec merania, už len ukazuje 127.7,
ak je teplota vyššia ako 44 *C.

Teraz so správnym odporom som to otestoval od +2 do +50 a vždy načítalo teplotu OK.
Používam podľa datasheetu 130 a 800 ms.

Ja to skor plánujem na ten BMS, už mi došli ATtiny85, čakám na optočleny
a referencie, lebo referencia u nás v obchode stojí 2.5 € a dallas som kupoval za 4.9 €.

Lenže vobec to nechytalo signál, hoci to je 5 m od routera, tak som tam dal parabolu
a už je to OK. Panely majú cca. 40 *C, uvidíme kde sa to dostane na poludnie.
Přílohy
gauge_temp.jpg
gauge_1_2_parabola.jpg
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
kodl69
Příspěvky: 7379
Registrován: sob črc 19, 2014 8:56 pm
Reputace: 866
Lokalita: severně od Brna
Systémové napětí: 48V
Výkon panelů [Wp]: 8kWp
Kapacita baterie [kWh]: 12kWh
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: WeMos D1 WIFI WebServer

Příspěvek od kodl69 »

kolik bitů máš nastavený rozlišení? Na tohle stačí to nejnižší, pak i ta konverze proběhne rychlej. Zapojení dvoudrát nebo třídrát?
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Reputace: 285
Lokalita: SO, SK
Bydliště: SO, SK

Re: WeMos D1 WIFI WebServer

Příspěvek od rottenkiwi »

Kód: Vybrat vše

   int16_t raw = (data[1] << 8) | data[0];
      if (type_s) {
        raw = raw << 3; // 9 bit resolution default
        if (data[7] == 0x10) {
        // "count remain" gives full 12 bit resolution
          raw = (raw & 0xFFF0) + 12 - data[6];
        }
      } else {
        byte cfg = (data[4] & 0x60);
        // at lower res, the low bits are undefined, so let's zero them
        if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
        else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
        else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
        //// default is 12 bit resolution, 750 ms conversion time
      }
Vyčítavam to týmto kódom. Pripojené je to cez 3 droty, ale dva sú na Arduine napojené na GND
a dátový je na pin a z pinu pull-up 4k7 na 5 V, lebo na 3.3 V to nešlo vobec.
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
Uživatelský avatar
youda
Příspěvky: 3074
Registrován: stř dub 27, 2016 12:12 am
Reputace: 907

Re: WeMos D1 WIFI WebServer

Příspěvek od youda »

Těch +5V potvrzuji. Taky jsem zkoušel DS1820 napájet přes 3.3V a nešlo mi to.

Zapojení mi vždycky chodilo 3 drát, dokonce přesně jak je tady na obrázku: jeden společný pull-up odpor 4k7 a k tomu 3 senzory. Tohle má Dallas krásně vymyšlené, že každý ten senzor má svou vlastní hex adresu a může se jich tak paralelně zapojit celá kopa, aniž by člověk plýtval piny :)
DS1820 bus.jpg
Youdova ostrovní laboratoř 20kWp: https://youda.mypower.cz
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Reputace: 285
Lokalita: SO, SK
Bydliště: SO, SK

Re: WeMos D1 WIFI WebServer

Příspěvek od rottenkiwi »

To isté zapojenie, ten istý program, a jeden senzor ukazuje OK a druhý nie. :)
Keď teplota panelov=senzoru presiahne 44 *C, prestane ukazovať OK a vypisuje 127.7.
Přílohy
gauge_temp_127.jpg
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
Uživatelský avatar
youda
Příspěvky: 3074
Registrován: stř dub 27, 2016 12:12 am
Reputace: 907

Re: WeMos D1 WIFI WebServer

Příspěvek od youda »

Rottenkiwi,
No jak se to při vyšší teplotě chová v 3-drátovém zapojení?
Youdova ostrovní laboratoř 20kWp: https://youda.mypower.cz
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Reputace: 285
Lokalita: SO, SK
Bydliště: SO, SK

Re: WeMos D1 WIFI WebServer

Příspěvek od rottenkiwi »

Už som na to prišiel :) Buď ja alebo mačky prehrýzli jeden drot :)
Idem ho vymeniť a dúfam, že už to pojde OK :)
Tak už je to ako mám byť. Teším sa, že už vidím aj teplotu dvoch panelov z 12
a mohol by som zaˇčať robiť ich chladenie.

Lenže stále nemožem rozchodiť nahrávanie programu do Wemosu cez WiFI. ???
Přílohy
gauge_all_OK.png
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
Uživatelský avatar
petrzobran
Příspěvky: 145
Registrován: sob pro 07, 2013 5:41 pm
Reputace: 10
Bydliště: 8 KM východně od Brna

Re: WeMos D1 WIFI WebServer

Příspěvek od petrzobran »

Nic si z toho nedělej, ja mam 2x WeMos a ani na jednommi nahravani přes WiFi nejde.
Ale dřív mě to šlo, asi před rokem, dělal řízení a sledování rekuperace, párkrát jsem to po WiFi nahrál.
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Reputace: 285
Lokalita: SO, SK
Bydliště: SO, SK

Re: WeMos D1 WIFI WebServer

Příspěvek od rottenkiwi »

Doteraz som mal |Wemos napájaný z powerbanku. Ale moj powerbank sa nabíja
2 dni, tak som to vyriešil DC-DC step-down meničom 35 na 5 V.

Ako sa to bude správať v zime ? Zrazí to napatie panelov ráno o pár V ?
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Reputace: 285
Lokalita: SO, SK
Bydliště: SO, SK

Re: WeMos D1 WIFI WebServer

Příspěvek od rottenkiwi »

Kód: Vybrat vše

kiwi@kiwi-P55A-UD5:~$ dmesg | grep usb
[    0.129399] usbcore: registered new interface driver usbfs
[    0.129399] usbcore: registered new interface driver hub
[    0.129399] usbcore: registered new device driver usb
[    0.920226] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    0.920227] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    0.920229] usb usb1: Product: EHCI Host Controller
[    0.920230] usb usb1: Manufacturer: Linux 4.15.0-32-generic ehci_hcd
[    0.920231] usb usb1: SerialNumber: 0000:00:1a.0
[    0.940250] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002
[    0.940254] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    0.940257] usb usb2: Product: EHCI Host Controller
[    0.940259] usb usb2: Manufacturer: Linux 4.15.0-32-generic ehci_hcd
[    0.940262] usb usb2: SerialNumber: 0000:00:1d.0
[    0.941094] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002
[    0.941095] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    0.941096] usb usb3: Product: xHCI Host Controller
[    0.941097] usb usb3: Manufacturer: Linux 4.15.0-32-generic xhci-hcd
[    0.941098] usb usb3: SerialNumber: 0000:05:00.0
[    0.944209] usb usb4: We don't know the algorithms for LPM for this host, disabling LPM.
[    0.944220] usb usb4: New USB device found, idVendor=1d6b, idProduct=0003
[    0.944222] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    0.944223] usb usb4: Product: xHCI Host Controller
[    0.944224] usb usb4: Manufacturer: Linux 4.15.0-32-generic xhci-hcd
[    0.944224] usb usb4: SerialNumber: 0000:05:00.0
[    1.260015] usb 1-1: new high-speed USB device number 2 using ehci-pci
[    1.280190] usb 2-1: new high-speed USB device number 2 using ehci-pci
[    1.416453] usb 1-1: New USB device found, idVendor=8087, idProduct=0020
[    1.416455] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[    1.448787] usb 2-1: New USB device found, idVendor=8087, idProduct=0020
[    1.448789] usb 2-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[    1.708045] usb 1-1.4: new low-speed USB device number 3 using ehci-pci
[    1.736075] usb 2-1.1: new low-speed USB device number 3 using ehci-pci
[    1.824580] usb 1-1.4: New USB device found, idVendor=258a, idProduct=0001
[    1.824581] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    1.824582] usb 1-1.4: Product: USB KEYBOARD
[    1.824583] usb 1-1.4: Manufacturer: SINO WEALTH
[    1.839491] usbcore: registered new interface driver usbhid
[    1.839492] usbhid: USB HID core driver
[    1.840865] input: SINO WEALTH USB KEYBOARD as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4/1-1.4:1.0/0003:258A:0001.0001/input/input3
[    1.853554] usb 2-1.1: New USB device found, idVendor=1a81, idProduct=1705
[    1.853556] usb 2-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    1.853557] usb 2-1.1: Product: Wireless Mouse
[    1.853558] usb 2-1.1: Manufacturer: KYE
[    1.862112] input: KYE Wireless Mouse as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.0/0003:1A81:1705.0003/input/input4
[    1.900135] hid-generic 0003:258A:0001.0001: input,hidraw0: USB HID v1.10 Keyboard [SINO WEALTH USB KEYBOARD] on usb-0000:00:1a.0-1.4/input0
[    1.900273] input: SINO WEALTH USB KEYBOARD as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4/1-1.4:1.1/0003:258A:0001.0002/input/input5
[    1.960304] hid-generic 0003:1A81:1705.0003: input,hiddev0,hidraw1: USB HID v1.11 Mouse [KYE Wireless Mouse] on usb-0000:00:1d.0-1.1/input0
[    2.020159] hid-generic 0003:258A:0001.0002: input,hiddev1,hidraw2: USB HID v1.10 Device [SINO WEALTH USB KEYBOARD] on usb-0000:00:1a.0-1.4/input1
[    4.610355] audit: type=1400 audit(1534616802.839:2): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/sbin/ippusbxd" pid=788 comm="apparmor_parser"
kiwi@kiwi-P55A-UD5:~$ lsusb
Bus 002 Device 003: ID 1a81:1705 Holtek Semiconductor, Inc. 
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 258a:0001  
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
kiwi@kiwi-P55A-UD5:~$ lsusb
Bus 002 Device 004: ID 258a:0001  
Bus 002 Device 003: ID 1a81:1705 Holtek Semiconductor, Inc. 
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
kiwi@kiwi-P55A-UD5:~$ dmesg | grep ttyS
[    0.897092] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
kiwi@kiwi-P55A-UD5:~$ dmesg | grep ttyS0
[    0.897092] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
kiwi@kiwi-P55A-UD5:~$ dmesg | grep ttyS1
kiwi@kiwi-P55A-UD5:~$ dmesg | grep ttyS2
kiwi@kiwi-P55A-UD5:~$ dmesg | grep ttyS3
kiwi@kiwi-P55A-UD5:~$ dmesg | grep ttyS

Celý deň na troch kompoch s roznymi OS a roznymi verziami Arduino IDE, nemožem
dostať program do Wemos-u D1. Stále tá istá chyba. espcomm_open failed
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Reputace: 285
Lokalita: SO, SK
Bydliště: SO, SK

Re: WeMos D1 WIFI WebServer

Příspěvek od rottenkiwi »

Tak včera mi to nešlo kvoli káblu. Tu je vyčítanie z dvoch ds18b20 a zobrazenie cez Wemos D1,
ale určite to pojde na hocijakom ESP8266. Keďže je to cez AJAX, tak možete si tam nastaviť
obnovu napr. 500 alebo 2000 ms, resp. poslať aj iné dáta okrem teploty.

Kód: Vybrat vše

#include <OneWire.h>
#include <ESP8266WiFi.h>
//#include <DallasTemperature.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

const char* ssid = "guest";
const char* password = "00000000";
 
OneWire ds (D8);
OneWire ds_2 (D6);
//DallasTemperature sensor(&oneWire);

String myHTML = "";
String XML;
ESP8266WebServer server(80);
 
 
const int led = BUILTIN_LED;
float teplota;
 

void handleNotFound(){
  digitalWrite(led, 1);
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET)?"GET":"POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i=0; i<server.args(); i++){
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
  digitalWrite(led, 0);
}

float Get_temp_0 ()
{

    float celsius = 25.2;
      return celsius;
}


float Get_temp_1 ()
{
    byte i;
    byte present = 0;
    byte type_s;
    byte data[12];
    byte addr[8];
    
    float celsius;
    if ( !ds.search(addr)) {
        Serial.println("No more addresses.");
        Serial.println();
        ds.reset_search();
        delay(130);
     
        return -33.3;
      }
      Serial.print("ROM =");
      for( i = 0; i < 8; i++) {
        Serial.write(' ');
        Serial.print(addr[i], HEX);
      }

      if (OneWire::crc8(addr, 7) != addr[7]) {
          Serial.println("CRC is not valid!");
          return -33.2;
      }
      Serial.println();
 
    // the first ROM byte indicates which chip
      switch (addr[0]) {
        case 0x10:
          Serial.println("  Chip = DS18S20");  // or old DS1820
          type_s = 1;
          break;
        case 0x28:
          Serial.println("  Chip = DS18B20");
          type_s = 0;
          break;
        case 0x22:
          Serial.println("  Chip = DS1822");
          type_s = 0;
          break;
        default:
          Serial.println("Device is not a DS18x20 family device.");
          return -33.1;
      };

      ds.reset();
      ds.select(addr);
      ds.write(0x44, 1);        // start conversion, with parasite power on at the end
  
      // wait to see if a reply is available
      delay(790);
    // maybe 750ms is enough, maybe not
    // we might do a ds.depower() here, but the reset will take care of it.
  
      present = ds.reset();
      ds.select(addr);    
      ds.write(0xBE);         // Read Scratchpad
  
      Serial.print("  Data = ");
      Serial.print(present, HEX);
      Serial.print(" ");
      for ( i = 0; i < 9; i++) {           // we need 9 bytes
        data[i] = ds.read();
        Serial.print(data[i], HEX);
        Serial.print(" ");
      }
      Serial.print(" CRC=");
      Serial.print(OneWire::crc8(data, 8), HEX);
      Serial.println();

    // Convert the data to actual temperature
    // because the result is a 16 bit signed integer, it should
    // be stored to an "int16_t" type, which is always 16 bits
    // even when compiled on a 32 bit processor.
      int16_t raw = (data[1] << 8) | data[0];
      if (type_s) {
        raw = raw << 3; // 9 bit resolution default
        if (data[7] == 0x10) {
        // "count remain" gives full 12 bit resolution
          raw = (raw & 0xFFF0) + 12 - data[6];
        }
      } else {
        byte cfg = (data[4] & 0x60);
        // at lower res, the low bits are undefined, so let's zero them
        if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
        else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
        else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
        //// default is 12 bit resolution, 750 ms conversion time
      }
      celsius = (float)(raw / 16.0);
      
/*    
    Serial.print("  Temperature = ");
    Serial.print(celsius);
    Serial.print(" Celsius, ");
    Serial.print(fahrenheit);
    Serial.println(" Fahrenheit");
*/ 
     
      return celsius;
}

float Get_temp_2 ()
{
    byte i;
    byte present = 0;
    byte type_s;
    byte data[12];
    byte addr[8];
    
    float celsius;
    if ( !ds_2.search(addr)) {
        Serial.println("No more addresses.");
        Serial.println();
        ds_2.reset_search();
        delay(130);
     
        return -33.3;
      }
      Serial.print("ROM =");
      for( i = 0; i < 8; i++) {
        Serial.write(' ');
        Serial.print(addr[i], HEX);
      }

      if (OneWire::crc8(addr, 7) != addr[7]) {
          Serial.println("CRC is not valid!");
          return -33.2;
      }
      Serial.println();
 
    // the first ROM byte indicates which chip
      switch (addr[0]) {
        case 0x10:
          Serial.println("  Chip = DS18S20");  // or old DS1820
          type_s = 1;
          break;
        case 0x28:
          Serial.println("  Chip = DS18B20");
          type_s = 0;
          break;
        case 0x22:
          Serial.println("  Chip = DS1822");
          type_s = 0;
          break;
        default:
          Serial.println("Device is not a DS18x20 family device.");
          return -33.1;
      };

      ds_2.reset();
      ds_2.select(addr);
      ds_2.write(0x44, 1);        // start conversion, with parasite power on at the end
  
      // wait to see if a reply is available
      delay(760);
    // maybe 750ms is enough, maybe not
    // we might do a ds.depower() here, but the reset will take care of it.
  
      present = ds_2.reset();
      ds_2.select(addr);    
      ds_2.write(0xBE);         // Read Scratchpad
  
      Serial.print("  Data = ");
      Serial.print(present, HEX);
      Serial.print(" ");
      for ( i = 0; i < 9; i++) {           // we need 9 bytes
        data[i] = ds_2.read();
        Serial.print(data[i], HEX);
        Serial.print(" ");
      }
      Serial.print(" CRC=");
      Serial.print(OneWire::crc8(data, 8), HEX);
      Serial.println();

    // Convert the data to actual temperature
    // because the result is a 16 bit signed integer, it should
    // be stored to an "int16_t" type, which is always 16 bits
    // even when compiled on a 32 bit processor.
      int16_t raw = (data[1] << 8) | data[0];
      if (type_s) {
        raw = raw << 3; // 9 bit resolution default
        if (data[7] == 0x10) {
        // "count remain" gives full 12 bit resolution
          raw = (raw & 0xFFF0) + 12 - data[6];
        }
      } else {
        byte cfg = (data[4] & 0x60);
        // at lower res, the low bits are undefined, so let's zero them
        if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
        else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
        else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
        //// default is 12 bit resolution, 750 ms conversion time
      }
      celsius = (float)(raw / 16.0);
      
/*    
    Serial.print("  Temperature = ");
    Serial.print(celsius);
    Serial.print(" Celsius, ");
    Serial.print(fahrenheit);
    Serial.println(" Fahrenheit");
*/ 
     
      return celsius;
}



void generateHTML(){
myHTML="<!DOCTYPE HTML>\n";
myHTML +="<html>\n";
myHTML += "  <head>\n";
myHTML += "<script type=\"text/javascript\" src=\"https://www.gstatic.com/charts/loader.js\"></script>\n";
myHTML += "   <script type=\"text/javascript\">\n";
myHTML += "   var IP = \"192.168.1.12\";\n";
myHTML += "   var temp_1 = 10;\n";
myHTML += "   var temp_2 = 20;\n";
myHTML += "      google.charts.load('current', {'packages':['gauge']});\n";
myHTML += "      google.charts.setOnLoadCallback(drawChart_1);\n";
myHTML += "      function drawChart_1() {\n";
myHTML += "        nocache = \"&nocache=\" + Math.random() * 1000000;\n";
myHTML += "        var data1 = google.visualization.arrayToDataTable([\n";
myHTML += "          ['Label', 'Value'],\n";
myHTML += "          ['Teplota', temp_1]\n";
myHTML += "        ]);\n";
myHTML += "        var options1 = {\n";
myHTML += "          width: 400, height: 400,\n";
myHTML += "          blueFrom: 30, blueTo: 40,\n";
myHTML += "          redFrom: 90, redTo: 100,\n";
myHTML += "          yellowFrom:70, yellowTo: 90,\n";
myHTML += "          greenFrom: 40, greenTo: 50,\n";
myHTML += "          minorTicks: 5\n";
myHTML += "        };\n";
myHTML += "        var chart = new google.visualization.Gauge(document.getElementById('chart_div_1'));\n";
myHTML += "         chart.draw ( data1, options1 );\n";
myHTML += "         setInterval ( function () {\n";
myHTML += "         Act_1 ();\n";
myHTML += "         data1.setValue ( 0, 1, temp_1 );\n";
myHTML += "         chart.draw ( data1, options1 );\n";
myHTML += "         } ,2000 );\n";
myHTML += "      }\n";
myHTML += "      google.charts.setOnLoadCallback(drawChart_2);\n";
myHTML += "      function drawChart_2() {\n";
myHTML += "        nocache = \"&nocache=\" + Math.random() * 1000000;\n";
myHTML += "        var data2 = google.visualization.arrayToDataTable([\n";
myHTML += "          ['Label', 'Value'],\n";
myHTML += "          ['Teplota', temp_2]\n";
myHTML += "        \n";
myHTML += "        ]);\n";
myHTML += "        var options2 = {\n";
myHTML += "          width: 400, height: 400,\n";
myHTML += "          greenFrom: 20, greenTo: 25,\n";
myHTML += "          redFrom: 90, redTo: 100,\n";
myHTML += "          yellowFrom:75, yellowTo: 90,\n";
myHTML += "          minorTicks: 5\n";
myHTML += "        };\n";
myHTML += "        var chart = new google.visualization.Gauge(document.getElementById('chart_div_2'));\n";
myHTML += "         chart.draw ( data2, options2 );\n";
myHTML += "         setInterval ( function () {\n";
myHTML += "         Act_2 ();\n";
myHTML += "         data2.setValue ( 0, 1, temp_2 );\n";
myHTML += "         chart.draw ( data2, options2 );\n";
myHTML += "         } ,2000 );\n";
myHTML += "      }\n";
myHTML += "       function Act_1() {\n";
myHTML += "       var xmlhttp = new XMLHttpRequest();\n";
myHTML += "           xmlhttp.onreadystatechange = function() {\n";
myHTML += "             if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n";
myHTML += "               temp_1 = xmlhttp.responseXML.getElementsByTagName('response')[0].childNodes[0].nodeValue;\n";
myHTML += "             }\n";
myHTML += "           }\n";
myHTML += "           xmlhttp.open(\"GET\", \"/act1\", true);\n";
myHTML += "           xmlhttp.send(null);\n";
myHTML += "       }\n";
myHTML += "       function Act_2() {\n";
myHTML += "       var xmlhttp = new XMLHttpRequest();\n";
myHTML += "           xmlhttp.onreadystatechange = function() {\n";
myHTML += "             if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n";
myHTML += "               temp_2 = xmlhttp.responseXML.getElementsByTagName('response')[0].childNodes[0].nodeValue;\n";
myHTML += "             }\n";
myHTML += "           }\n";
myHTML += "           xmlhttp.open(\"GET\", \"/act2\", true);\n";
myHTML += "           xmlhttp.send(null);\n";
myHTML += "       }\n";
myHTML += "   </script>\n";
myHTML += "  </head>\n";
myHTML += "  <body onload=\"drawChart_1()\">\n";
myHTML += "    <div id=\"chart_div_1\" style=\"width: 400px; height: 400px;\"></div>\n";
myHTML += "    <div id=\"chart_div_2\" style=\"width: 400px; height: 400px;\"></div>\n";
myHTML += "  </body>\n";
myHTML += "</html>\n";
//myHTML += "               document.getElementById('chart_div_2').innerHTML=xmlhttp.responseXML.getElementsByTagName('response')[0].childNodes[0].nodeValue;\n";
//myHTML += "               document.getElementById('chart_div_1').innerHTML=xmlhttp.responseXML.getElementsByTagName('response')[0].childNodes[0].nodeValue;\n"
}



void buildXML_1(){
  XML="<?xml version=\"1.0\"?>\n";
  XML+="<response>";
  XML+= String(Get_temp_1 (),1);
  XML+="</response>\n";
}


void buildXML_2(){
  XML="<?xml version=\"1.0\"?>\n";
  XML+="<response>";
  XML+= String(Get_temp_2 (),1);
  XML+="</response>\n";
}


void handleAct1 (){
   buildXML_1();
  server.send(200,"text/xml",XML);
  //server.send(200, "text/plain", String(Get_temp_1 (),1) );
  //DBG_OUTPUT_PORT.print(message);
}

void handleAct2 (){
   buildXML_2();
  server.send(200,"text/xml",XML);
  //server.send(200, "text/plain", String(Get_temp_2 (),1) );
  //DBG_OUTPUT_PORT.print(message);
}


void handleRoot() {  
    //sensor.requestTemperatures(); 
    server.send(200, "text/plain", String(Get_temp_1 (),1) );
}

void handleWebsite(){
   generateHTML();
  server.send(200,"text/html",myHTML);
}

/*
void handleRoot() {  
    sensor.requestTemperatures(); 
    server.send(200, "text/plain", String(sensor.getTempCByIndex(0), 1));
}


void handleRoot() {
  
  digitalWrite(led, 1);  

  Serial.println();
  String message = "";
  message += server.args();
  message += "\n";
  for (uint8_t i=0; i<server.args(); i++){
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  Serial.println(message);
  if (server.args()==0)
  {
    generateHTML();
    server.send(200, "text/html", myHTML);
  }
  else
  {}
  
  
  digitalWrite(led, 0);
}

*/
 
void setup(void){
  //sensor.begin();
  
  pinMode(led, OUTPUT);
  digitalWrite(led, 0);
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println("");
 
  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
 
  if (MDNS.begin("esp8266")) {
    Serial.println("MDNS responder started");
  }
 
  server.on("/", handleWebsite);
  server.on("/act1", handleAct1);
  server.on("/act2", handleAct2);
  //server.on("/edit", HTTP_PUT, handleCreate);
 // server.on("/inline", [](){server.send(200, "text/plain", "this works as well");});
  server.onNotFound(handleNotFound);
 
  server.begin();
  Serial.println("HTTP server started");
}
 
void loop(void){
    
  server.handleClient();
}
 
Přílohy
wemos_d1_dallas.png
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Reputace: 285
Lokalita: SO, SK
Bydliště: SO, SK

Re: WeMos D1 WIFI WebServer

Příspěvek od rottenkiwi »

Doplnil som do Wemos-u meranie napatia bateriek 18650, aby som ich vedel dobiť.
Lenže potreboval by som ešte merať napatie panelov, ale to má len jeden A0 pin.
Ako to multiplexovať ?
Přílohy
wemos_temp_voltage.png
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.

Odpovědět
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek