Arduino + ESP8266 "serial.find" probléma

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Andrew-V
Újonc
Újonc
Hozzászólások: 1
Csatlakozott: 2016. január 11. hétfő, 15:21

Arduino + ESP8266 "serial.find" probléma

Hozzászólás Szerző: Andrew-V »

Tiszteletem!

Arduino Uno panellel (illetve annak itt vásárolt megfelelőjével) és ESP8266 (01-es) áramkörrel kísérletezem. Egy gomb megnyomásakor kell egy TCP "jelet" továbbítanom egy helyi hálón lévő szervernek (nyitom a kapcsolatot, nem küldök semmit hanem zárom /mert így gyorsabb/ - de ezt a szerver érzékeli is) Softwerserial-t és AT parancsokat használok a vezérlésére.
Mivel úgy tapasztaltam, hogy a wifi modul megjegyzi, hogy utoljára milyen beállításokkal és hogyan kapcsolódtam a programból hiányzik is a csatlakozás (ettől még működik)

A 13-as lábon van egy led ami jelzi, hogy létrejött-e a kapcsolat (kap választ a ping-re) illetve villan ha gombnyomás történik. - na itt a gond. Ha USB-n csatlakoztatom a panelt a géphez akkor működik, ha külső tápról akkor nem kezd el világítani a led, jelezve a kapcsolat létrejöttét csak ha RESET-et nyomok a panelon. Ez miért van?!

Ugyan ide kapcsolódó kérdésem: ok, most elég ha a gombra csak nyitja a kapcsolatot a szerver felé majd zárja is de ha adatot is akarok küldeni (megadom az átküldendő byte-ok méretét + AT+CIPSEND-el bármit a szervernek), akkor a szerveren majd egy másodperc telik el a kapcsolat létrejötte után az adat beérkezéséig. - ilyet tapasztalt már más?

Remélem érthető voltam.
Köszönöm a figyelmet! :)

Kód: Egész kijelölése

#include <SoftwareSerial.h>
SoftwareSerial ESPserial(11, 10); // RX | TX
const int begomb=8; const int ledpin=13; int buttonstate;
 
void setup() 
{
    pinMode(begomb,INPUT);  pinMode(ledpin,OUTPUT);
    digitalWrite(ledpin,LOW); 
    Serial.begin(9600);    ESPserial.begin(9600);  
 
    Serial.println("");  Serial.println("EST8266 teszt program.");    
    ESPserial.println(F("AT+PING=\"192.168.1.250\""));   Serial.println("");
    if (ESPserial.find("OK")) {
      digitalWrite(ledpin,HIGH);
      Serial.println("----- ONLINE -----");      }
      else Serial.println("----- OFFLINE! -----");       
 ESPserial.println("AT+CIFSR");  //ip cim kiirasa
}
 
void loop() 
{
  buttonstate=digitalRead(begomb);
    if (buttonstate == HIGH) {
      digitalWrite(ledpin,LOW);
      Serial.println("Gombnyomas");
      ESPserial.println("AT+CIPSTART=\"TCP\",\"192.168.1.254\",80");
      if (ESPserial.find("OK")) {
        Serial.println("adatkimenet...");        
        if (ESPserial.find("CLOSED")) {
          Serial.println("OK - A szerver zarta a kapcsolatot");
        } else      
          ESPserial.println("AT+CIPCLOSE");        
        delay(1200);
        digitalWrite(ledpin,HIGH);
      }
    }
  
    if ( ESPserial.available() )   {        
      Serial.write(ESPserial.read());     
     }
 
    int be;
    if ( Serial.available() )       { 
      be=Serial.read();
      digitalWrite(13,LOW); 
      ESPserial.write( be );
      digitalWrite(13,HIGH);     
    }
}
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: Arduino + ESP8266 "serial.find" probléma

Hozzászólás Szerző: SanyiSay »

Üdv!

Erre felénk sajnos még nem igen terjedt el az ESP+AVR használata.
Páran szemezgetnek vele, talán próbálgatják is, de nagy a csend.
Kicsit "aktívabb" az ESP+Arduino IDE vonal, ESP közvetlen programozása arduinoval, de ott sem izzik a csapat munka. :)

Nálam az instabil indulást ESP-01 modulnál a rossz, vagy kicsi táp, a hiányos felhúzó ellenállások és betápkondi, meg efféle HW problémák okozták, de AT firmware-el eddig nem igen volt dolgom, abból is lehetne többfélét tesztelni.
Ellenben ha bármi eredményre jutsz szívesen olvassuk. Sok tapasztalatból lesz előbb utóbb hasznos kis összefoglaló. :)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino + ESP8266 "serial.find" probléma

Hozzászólás Szerző: Robert »

A tápod nincs szerintem megfelelően szűrve. Akkor vacakol a ESP modul.
Erdist87
DrótVégénSzéndarab
Hozzászólások: 15
Csatlakozott: 2017. december 18. hétfő, 4:19

Re: Arduino + ESP8266 "serial.find" probléma

Hozzászólás Szerző: Erdist87 »

Andrew-V írta:Tiszteletem!

Arduino Uno panellel (illetve annak itt vásárolt megfelelőjével) és ESP8266 (01-es) áramkörrel kísérletezem. Egy gomb megnyomásakor kell egy TCP "jelet" továbbítanom egy helyi hálón lévő szervernek (nyitom a kapcsolatot, nem küldök semmit hanem zárom /mert így gyorsabb/ - de ezt a szerver érzékeli is) Softwerserial-t és AT parancsokat használok a vezérlésére.
Mivel úgy tapasztaltam, hogy a wifi modul megjegyzi, hogy utoljára milyen beállításokkal és hogyan kapcsolódtam a programból hiányzik is a csatlakozás (ettől még működik)

A 13-as lábon van egy led ami jelzi, hogy létrejött-e a kapcsolat (kap választ a ping-re) illetve villan ha gombnyomás történik. - na itt a gond. Ha USB-n csatlakoztatom a panelt a géphez akkor működik, ha külső tápról akkor nem kezd el világítani a led, jelezve a kapcsolat létrejöttét csak ha RESET-et nyomok a panelon. Ez miért van?!

Ugyan ide kapcsolódó kérdésem: ok, most elég ha a gombra csak nyitja a kapcsolatot a szerver felé majd zárja is de ha adatot is akarok küldeni (megadom az átküldendő byte-ok méretét + AT+CIPSEND-el bármit a szervernek), akkor a szerveren majd egy másodperc telik el a kapcsolat létrejötte után az adat beérkezéséig. - ilyet tapasztalt már más?

Remélem érthető voltam.
Köszönöm a figyelmet! :)

Kód: Egész kijelölése

#include <SoftwareSerial.h>
SoftwareSerial ESPserial(11, 10); // RX | TX
const int begomb=8; const int ledpin=13; int buttonstate;
 
void setup() 
{
    pinMode(begomb,INPUT);  pinMode(ledpin,OUTPUT);
    digitalWrite(ledpin,LOW); 
    Serial.begin(9600);    ESPserial.begin(9600);  
 
    Serial.println("");  Serial.println("EST8266 teszt program.");    
    ESPserial.println(F("AT+PING=\"192.168.1.250\""));   Serial.println("");
    if (ESPserial.find("OK")) {
      digitalWrite(ledpin,HIGH);
      Serial.println("----- ONLINE -----");      }
      else Serial.println("----- OFFLINE! -----");       
 ESPserial.println("AT+CIFSR");  //ip cim kiirasa
}
 
void loop() 
{
  buttonstate=digitalRead(begomb);
    if (buttonstate == HIGH) {
      digitalWrite(ledpin,LOW);
      Serial.println("Gombnyomas");
      ESPserial.println("AT+CIPSTART=\"TCP\",\"192.168.1.254\",80");
      if (ESPserial.find("OK")) {
        Serial.println("adatkimenet...");        
        if (ESPserial.find("CLOSED")) {
          Serial.println("OK - A szerver zarta a kapcsolatot");
        } else      
          ESPserial.println("AT+CIPCLOSE");        
        delay(1200);
        digitalWrite(ledpin,HIGH);
      }
    }
  
    if ( ESPserial.available() )   {        
      Serial.write(ESPserial.read());     
     }
 
    int be;
    if ( Serial.available() )       { 
      be=Serial.read();
      digitalWrite(13,LOW); 
      ESPserial.write( be );
      digitalWrite(13,HIGH);     
    }
}
A kódod végén található egy érték amit kommenteztem
int be;
if ( Serial.available() ) {
be=Serial.read();
digitalWrite(13,LOW); // a be esetén nem hagynám itt mert kikapcsokt állapotban van
ESPserial.write( be );
digitalWrite(13,HIGH); // a be esetén ezt hagynám benne
}

De javítsatok ki mert csak rápillantottam
Válasz küldése