Esp8266 TPC Server
Esp8266 TPC Server
Zdravím,
prosím o radu, potřeboval bych zprovoznit TCP server na ESP, něco sem našel, ale nic podle mých představ. Potřebuju, klient se připojí a občas(každé 2s) pošle dotaz (5 bajtů) a čeká odpověť od serveru(85 bajtů) a mezi tím běžel na ESP program (konkrétně čtení dat z čidel). Tady kousek kódu co sem zatím vypotil podle příkladů co sem našel. Připojení klienta proběhne i detekce přijmu o délce 5, ale odeslání podle všeho ne "nvys=0" a klient take hlásí špatnou délku. Ten webserver běží bez problémů.
...
WiFiServer server2 ( 5301 );
ESP8266WebServer server ( 80 );
...
void setup(void) {
...
server2.begin();
}
void loop(void) {
byte i;
float celsius, fahrenheit;
msek=millis()/1000;
ds_read();
//Serial.println();
// the first ROM byte indicates which chip
if(bOk){
/*
for(i=0;i<maxAdr;i++){
Serial.print(" Teplota");
Serial.print(i);
Serial.print(" = ");
Serial.print(teplds);
}
*/
}
else{
//Serial.println(time_get_str(time_get(0),0));
}
server.handleClient();
//TCPServer();
WiFiClient client = server2.available(); // If client is connected
if (!client) { return;}
//Read client request
byte pbuf[10];
size_t req = client.readBytes(pbuf,5);
if(req>0){
Serial.print("delka prijmu = ");
Serial.println(req);
if(req==5){
Serial.println("Prijem OK");
byte vbuf[85];
vbuf[0]=64;
vbuf[1]=1;
vbuf[2]=0;
vbuf[3]=40;
for(byte n=0;n<40;n++){
vbuf[n*2+4]=polh[n]/256;
vbuf[n*2+5]=polh[n]%256;
}
vbuf[84]=35;
byte nvys=server2.write(vbuf,85);
Serial.print("delka vysilani = ");
Serial.println(nvys);
}
}
//client.flush();
}
prosím o radu, potřeboval bych zprovoznit TCP server na ESP, něco sem našel, ale nic podle mých představ. Potřebuju, klient se připojí a občas(každé 2s) pošle dotaz (5 bajtů) a čeká odpověť od serveru(85 bajtů) a mezi tím běžel na ESP program (konkrétně čtení dat z čidel). Tady kousek kódu co sem zatím vypotil podle příkladů co sem našel. Připojení klienta proběhne i detekce přijmu o délce 5, ale odeslání podle všeho ne "nvys=0" a klient take hlásí špatnou délku. Ten webserver běží bez problémů.
...
WiFiServer server2 ( 5301 );
ESP8266WebServer server ( 80 );
...
void setup(void) {
...
server2.begin();
}
void loop(void) {
byte i;
float celsius, fahrenheit;
msek=millis()/1000;
ds_read();
//Serial.println();
// the first ROM byte indicates which chip
if(bOk){
/*
for(i=0;i<maxAdr;i++){
Serial.print(" Teplota");
Serial.print(i);
Serial.print(" = ");
Serial.print(teplds);
}
*/
}
else{
//Serial.println(time_get_str(time_get(0),0));
}
server.handleClient();
//TCPServer();
WiFiClient client = server2.available(); // If client is connected
if (!client) { return;}
//Read client request
byte pbuf[10];
size_t req = client.readBytes(pbuf,5);
if(req>0){
Serial.print("delka prijmu = ");
Serial.println(req);
if(req==5){
Serial.println("Prijem OK");
byte vbuf[85];
vbuf[0]=64;
vbuf[1]=1;
vbuf[2]=0;
vbuf[3]=40;
for(byte n=0;n<40;n++){
vbuf[n*2+4]=polh[n]/256;
vbuf[n*2+5]=polh[n]%256;
}
vbuf[84]=35;
byte nvys=server2.write(vbuf,85);
Serial.print("delka vysilani = ");
Serial.println(nvys);
}
}
//client.flush();
}
-
- Příspěvky: 1030
- Registrován: 06 zář 2017, 20:04
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: Esp8266 TPC Server
Pro kamaráda jsem dělal server pro Sonoff, ale ladil jsem ho na samotném ESP8266. Má tyto vlastnosti:
1. Je ošetřeno připojení více klientů a zároveň existuje mechanizmus odpojení klientů při nečinnosti
2. Tickerem je zajištěno periodické čtení senzoru
3. Pomocí tlačítka na GPIO0 a LED na GPIO13 je možné použít WiFi WPS, pokud to router dokáže, pak není třeba do sketche psát SSID a password
4. Server na základě požadavků klienta ve formě dotazů HUMI<CRLF>,TEMP<CRLF> atp. vrací hodnoty nebo provádí činnosti.
Perfektně se dá testovat klientem Hercules Setup utility by HW-group.com
Server se dá velmi snadno modifikovat, když upřesníš svoje požadavky, nemám zásadní problém ti pomoci, nejspíš by se jednalo o vypuštění nadbytečných částí.
1. Je ošetřeno připojení více klientů a zároveň existuje mechanizmus odpojení klientů při nečinnosti
2. Tickerem je zajištěno periodické čtení senzoru
3. Pomocí tlačítka na GPIO0 a LED na GPIO13 je možné použít WiFi WPS, pokud to router dokáže, pak není třeba do sketche psát SSID a password
4. Server na základě požadavků klienta ve formě dotazů HUMI<CRLF>,TEMP<CRLF> atp. vrací hodnoty nebo provádí činnosti.
Perfektně se dá testovat klientem Hercules Setup utility by HW-group.com
Server se dá velmi snadno modifikovat, když upřesníš svoje požadavky, nemám zásadní problém ti pomoci, nejspíš by se jednalo o vypuštění nadbytečných částí.
-
- Příspěvky: 1030
- Registrován: 06 zář 2017, 20:04
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: Esp8266 TPC Server
Zapomněl jsem přidat odkaz - http://esp8266.fancon.cz/esp8266-sonoff ... duino.html
Re: Esp8266 TPC Server
Moje požadavky:
-chtěl bych zachovat svůj bin.protokol, klienta mám napsanýho a odzkoušenýho a používám ho pro více zařízení.
-WPS asi taky nepotřebuju (aspoň zatím).
-kvůli rychlému nastavení bych taky rád zachoval webserver, pokud to jde.
Ve zbytku programu se provádí čtení z 3xDS18B20, dále tam provádím jednoduchou jakoPID regulaci s PWM výstupem, takže dotaz od klienta bude někdy vlastně příkaz pro změnu některé proměnné.
Zajímá mě hlavně jak v arduinu obsloužit stále připojeného klienta, někde sem viděl příklad a tam to běželo ve smyčce dokud byl klient připojen a to se mi zdá nehezké. S ESP sem začínal s fw LUA a tam se mi to povedlo napsat podle mých představ, ale tam je obsluha pomocí událostí.
-chtěl bych zachovat svůj bin.protokol, klienta mám napsanýho a odzkoušenýho a používám ho pro více zařízení.
-WPS asi taky nepotřebuju (aspoň zatím).
-kvůli rychlému nastavení bych taky rád zachoval webserver, pokud to jde.
Ve zbytku programu se provádí čtení z 3xDS18B20, dále tam provádím jednoduchou jakoPID regulaci s PWM výstupem, takže dotaz od klienta bude někdy vlastně příkaz pro změnu některé proměnné.
Zajímá mě hlavně jak v arduinu obsloužit stále připojeného klienta, někde sem viděl příklad a tam to běželo ve smyčce dokud byl klient připojen a to se mi zdá nehezké. S ESP sem začínal s fw LUA a tam se mi to povedlo napsat podle mých představ, ale tam je obsluha pomocí událostí.
Re: Esp8266 TPC Server
Aha už jdu na odkaz, díky.
Re: Esp8266 TPC Server
Moc pěkný, už mi chodí ten základ dotaz-odpověď, takže díky moc.
Ještě bych měl dotaz, existuje nějaká dokumentace?
Ještě bych měl dotaz, existuje nějaká dokumentace?
-
- Příspěvky: 1030
- Registrován: 06 zář 2017, 20:04
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: Esp8266 TPC Server
Je otázka, co si pod pojmem dokumentace představuješ. Základní informace jsem se snažil napsat do úvodu a poznámek. Někde bych asi našel popis, který jsem k tomu psal kamarádovi. Ale ten se týkal opravdu jen komunikace, nikoliv popisu software. A schéma hardware ke kterému se váže obsluha tlačítka, LED a relé, je pochopitelně dostupné na webu.
Re: Esp8266 TPC Server
Ne, to sem se nevyjádřil přesně, mě zajímá dokumentace, nebo spíš help ke knihovnám arduina, nebo se člověk musí prokousávat zdrojákem knihoven.
-
- Příspěvky: 1030
- Registrován: 06 zář 2017, 20:04
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: Esp8266 TPC Server
Za základ pro sebe považuji https://arduino-esp8266.readthedocs.io/en/2.4.1/ no a potom examples v jednotlivých knihovnách. Na GitHub se také nějaké popisy najdou. Jiné zdroje nemám. Občas i do těch knihoven musím nakouknout, ale abych je louskal to teda ne...
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host