2 ESP con SoftwareSerial in arduino UNO

Ciao a tutti visto i miei piccoli progressi che ste schedine WIFI ho tentato di strafare provando ad utilizzare 2 ESP8266 su ArduinoUNO.

L’idea è quella di utilizzarne uno per collegarmi ad una telecamerina da Drone e l’altro per comunicare al mio telefono.

Il problema che ho è che quando vado a mettere nel setup il secondo serial.begin…non funziona più niente.

#include <SoftwareSerial.h>
SoftwareSerial ESP_1(11,10); // RX, TX
char rx_1=0;
String RX_1="";
char tx_1=0;
String TX_1="";

#include <SoftwareSerial.h>
SoftwareSerial ESP_2(8,7); // RX, TX

char rx_2=0;
String RX_2="";
char tx_2=0;
String TX_2="";


void setup()
{
 Serial.begin(9600);
 ESP_1.begin(9600);
 ESP_2.begin(9600);
}

void scrivi_ESP_1()
{ 
 if(Serial.available())
   {
    TX_1="";
    while(Serial.available())
         { 
          tx_1=Serial.read();
          TX_1.concat(tx_1);
          ESP_1.print(TX_1);                       
         }        
   }
}

void leggi_ESP_1()
{
 if(ESP_1.available())
   {            
    RX_1="";     
    while(ESP_1.available())
         {
          rx_1=ESP_1.read();
          RX_1.concat(rx_1);
          delay(10);
         }
    Serial.println(RX_1);             
   }   
}

void loop()
{ 
  leggi_ESP_1();
  scrivi_ESP_1();
  
}
void setup()
{
 Serial.begin(9600);
 ESP_1.begin(9600);
 ESP_2.begin(9600);...CON QUESTO NON FUNZIONA SENZA QUESTO FUNZIONA.....
                              
}
 non capisco  :confused:  :confused:

Tu hai studiato il reference della SoftwareSerial vero Puso ? ? ? :smiling_imp:

Hai letto che, in ricezione, può essere selezionata SOLO UNA SoftwareSerial per volta vero ?

Guglielmo

Si Guglielmo infatti ma "una per volta" l'ho inteso che ne posso avere anche 2 basta che comunicano 1 alla volta,infatti nel Loop sto utilizzando solo una ESP....il problema l'ho notato mentre stavo preparando lo schetck per la seconda.

Per quale motivo non puoi usare lo stesso ESP per collegarti ad entrambi i dispositivi?

NO, uno per volta significa che gli devi dire TU quale vuoi usare ... altrimenti ne funziona solo una (... in ricezione). Per questo chiedevo se ti eri studiato il reference ... :smiling_imp:

Guarda il metodo listen() ed i suoi esempi ... :wink:

Guglielmo

Piu che non poterlo fare è che non lo sò ancora fare. :blush: :drooling_face: :sob: :sob:

Sono ancora alle prime armi con ESP, per il momento sono arrivato a scrivere su Arduino quello che invio da APP e viceversa leggere su App quello che manda Arduino....ma figurati che sono talmente indietro che sto utilizzando il tutto come se fosse un bluetooth...sono ancora lontano dal da usarlo via Web.

Sto tentando di fare esperimenti semplici per prendere confidenza.

OK Guglielmo ho guardato......credo di aver capito che mi manca la riga listen()

Grazie ragazzi

effettivamente mi è bastato aggiungere la listen() nel loop per il momento
[code
void loop()
{ 
  ESP_1.listen();
  leggi_ESP_1();
  scrivi_ESP_1();
  
}

e funziona tutto...immagino che ovviamente dovrò fare i vari listen() ogni volta che cambio seriale.

Altra domanda
ArduninoUNO la uso solo per imparare i vari dispositivi,che dopo metto sulla Mega del mio robottino standard modificato.

Potrei incontrare problemi simili anche sulla Mega (ovviamente senza utilizzare SoftwareSerial)????

E vuoi pure comandare gli ESP dando comandi AT manualmente?

SukkoPera ..sinceramente non so bene cosa sto facendo.

Al momento (grazie hai tuoi consigli precedenti)ho precaricato su ESP.

Di mio ci ho messo che ho caricato un leggi\scrivi su ESP....idem ho fatto su ArduinoUNO(che sto utilizzando ora per le prove).

In breve sto usando 2 schetck...ma effettivamente sto facendo un po di confusione.

:frowning: :o :confused: :drooling_face: :slightly_smiling_face: :roll_eyes: :astonished: :sob: :sob: :sob: :sob: :sob:

Puso:
Potrei incontrare problemi simili anche sulla Mega (ovviamente senza utilizzare SoftwareSerial)????

Sulla MEGA hai ben 4 porte seriali VERE quindi che problemi vuoi incontrare ? ? ?

Guglielmo

incontrare problemi....sono Perfetto su questo :sunglasses: :sunglasses: :sunglasses:

era giusto per chiedere :roll_eyes: :roll_eyes: :cold_sweat: :cold_sweat:

:grinning: :grinning: molto bene sono riuscito a fare alcuni passi indietro ed alkuni in avanti.

Al momento posso leggere\scrivere su ArduinoUNO tramite ESP8266-SoftwareSerial-Blynk,
anche via WEB…(è stato facile,mi è bastato spegnere il WIFI dal telefono e funziona tutto,quindi immagino che faccia tutto l’APP di Blynk).

Ovviamente ho precaricato su ESP il primo Sketch

#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

char auth[] = "ATURIZZAZIONE BLYNK";
char ssid[] = "ROUTER DI CASA";
char pass[] = "PASSWORD RUTER DI CASA";


byte virtual_pin0=0;
byte virtual_pin1=0;

byte virtual_pin10=0;
byte virtual_pin11=0;


char rx=0;
String RX="";
char tx=0;
String TX="";

void leggi_RX()
{
 if(Serial.available())
   {
    RX="";
    while(Serial.available())
         {          
          rx=Serial.read();
          RX.concat(rx);
          Virtual_Pin();        
         }
    Scrivi();                
   } 
      
}

void Virtual_Pin()
{
 if(RX=="V10=0"){virtual_pin10=0;} 
 if(RX=="V10=1"){virtual_pin10=1;}    
 if(RX=="V11=0"){virtual_pin11=0;}   
 if(RX=="V11=1"){virtual_pin11=1;}
   
} 
    

void Scrivi()
{
 if(virtual_pin10==0){Blynk.virtualWrite(V10,"");}
 if(virtual_pin10==1){Blynk.virtualWrite(V10, RX);}
 if(virtual_pin11==0){Blynk.virtualWrite(V11,"");}
 if(virtual_pin11==1){Blynk.virtualWrite(V11, RX);}
   
}

BLYNK_READ(V10){Blynk.virtualWrite(V10, RX);}
BLYNK_READ(V11){Blynk.virtualWrite(V11, RX);}


BLYNK_WRITE(V0){int pinValue=param.asInt();Serial.print("V0=");Serial.print(pinValue);}
BLYNK_WRITE(V1){int pinValue=param.asInt();Serial.print("V1=");Serial.print(pinValue);}


void setup()
{
 Serial.begin(9600);
 Blynk.begin(auth, ssid, pass);
 
}

void loop()
{
  leggi_RX();
  Blynk.run();
}

e su ArduinoUNO il secondo Sketch (in questo leggo la posizione del SERVO solo sul VirtualPin che richiamo).

#include <BlynkSimpleStream.h>


#include <SoftwareSerial.h>
SoftwareSerial ESP_1(11,10); // RX, TX
char rx_1=0;
String RX_1="";
char tx_1=0;
String TX_1="";
SoftwareSerial ESP_2(8,7); // RX, TX
char rx_2=0;
String RX_2="";
char tx_2=0;
String TX_2="";

#include <Servo.h>
Servo myservo;
byte pos=0;
boolean leggi_servo=0;

void setup()
{
 Serial.begin(9600);
 ESP_1.begin(9600);
 ESP_2.begin(9600);
 myservo.attach(4); 

}

void scrivi_ESP_1()
{ 
 if(Serial.available())
   {
    TX_1="";
    while(Serial.available())
         { 
          tx_1=Serial.read();
          TX_1.concat(tx_1);                                
         }
    ESP_1.println(TX_1);              
   }
}

void leggi_ESP_1()
{
 if(ESP_1.available())
   {            
    RX_1="";     
    while(ESP_1.available())
         {
          rx_1=ESP_1.read();
          RX_1.concat(rx_1);
          delay(20);
         }
    Serial.print(RX_1);             
   }   
}

void scrivi_ESP_2()
{ 
 if(Serial.available())
   {
    TX_2="";
    while(Serial.available())
         { 
          tx_2=Serial.read();
          TX_2.concat(tx_2);
                               
         } 
    ESP_2.print(TX_2);            
   }
}

void leggi_ESP_2()
{
 if(ESP_2.available())
   {            
    RX_2="";     
    while(ESP_2.available())
         {
          rx_2=ESP_2.read();
          RX_2.concat(rx_2);
          delay(10);
         }
    Serial.println(RX_2);             
   }   
}

void SERVO()
{
  
 ESP_1.print("V10=1");
 pos=0;
 myservo.write(pos);
 TX_1=pos;
 ESP_1.print(TX_1);
 
 delay(2000); 

 ESP_1.print("V11=1");
 pos=90;
 myservo.write(pos);
 TX_1=pos;
 ESP_1.print(TX_1);
 ESP_1.print("V11=0");
 delay(2000); 

 
 pos=180;
 myservo.write(pos);
 TX_1=pos;
 ESP_1.print(TX_1);
 delay(2000); 
}

void loop()
{ 
  ESP_1.listen();
  leggi_ESP_1();
  scrivi_ESP_1();
  SERVO(); 
}

Ora volendo strafare 8) 8) mantenendo questa logica volevo tornare alla mia idea iniziale sulla telecamerina rubata da un drone.

La storiella che vorrei realizzare è questa, ho ipotizzato di voler mettere una telecamerina rubata da un vecchi drone(funzionante perfettamente con la sua APP dedicata) di cui conosco solo SSID,ma collegandomi col telefono posso avere altre informazioni che non ho ben capito a cosa servono, in un capanno in cortile a 200 MT di distanza (quindi troppo lontano dal RUTER DI CASA soprattutto d’inverno a finestre chiuse)…

Quindi ho ipotizzato di mettere un ESP_2 a circa 100MT (metà strada) che comunica con ESP_1 montato su Arduino che poi comunica a sua volta col RUTER DI CASA.

Ora il primo problema che ho incotrato e che mi sta facendo venire il mal di testa :fearful: :disappointed_relieved: …ESP_2 l’ho precaricato con un schetc simile al precedente …( ho aggiunto solo una “”…char ssid2 = “MJX_FPV_2AB2”;…che è SSID della telecamerina)…ed un ulteriore aggiunta nel SETUP…"“Blynk.begin(auth,ssid,pass,ssid2);”"…cosi si collega alla telecamerina.

IL problema è che non vedo le immagini NE in STANDALONE e neppure se carico questo Sketch su Arduino

#include <BlynkSimpleStream.h>

#include <SoftwareSerial.h>
SoftwareSerial ESP_1(11,10); // RX, TX
char rx_1=0;
String RX_1="";
char tx_1=0;
String TX_1="";
SoftwareSerial ESP_2(8,7); // RX, TX
char rx_2=0;
String RX_2="";
char tx_2=0;
String TX_2="";

#include <Servo.h>
Servo myservo;
byte pos=0;
boolean leggi_servo=0;

void setup()
{
 Serial.begin(9600);
 ESP_1.begin(9600);
 ESP_2.begin(9600);
 myservo.attach(4);

 ESP_1.print("V12=1"); 

}

void scrivi_ESP_1()
{ 
 if(Serial.available())
   {
    TX_1="";
    while(Serial.available())
         { 
          tx_1=Serial.read();
          TX_1.concat(tx_1);                                
         }
    ESP_1.println(TX_1);              
   }
}

void leggi_ESP_1()
{
 if(ESP_1.available())
   {            
    RX_1="";     
    while(ESP_1.available())
         {
          rx_1=ESP_1.read();
          RX_1.concat(rx_1);
          delay(20);
         }
    Serial.print(RX_1);             
   }   
}

void scrivi_ESP_2()
{ 
 if(Serial.available())
   {
    TX_2="";
    while(Serial.available())
         { 
          tx_2=Serial.read();
          TX_2.concat(tx_2);
                               
         } 
    ESP_2.print(TX_2);            
   }
}

void leggi_ESP_2()
{
 if(ESP_2.available())
   {            
    RX_2="";     
    while(ESP_2.available())
         {
          rx_2=ESP_2.read();
          RX_2.concat(rx_2);
          delay(10);
         }
    Serial.print(RX_2);             
   }   
}

void loop()
{ 
  ESP_1.listen();
  leggi_ESP_1();
  scrivi_ESP_1();
  ESP_2.listen();
  leggi_ESP_2();
  scrivi_ESP_2();
  
}

SU Blynk come WidgetBox uso VideoStreaming…ma non vedo nulla. :’( :’( :’( :’(

Qualkuno ha idea da dove posso cominciare a studiare per questo progetto??

Da qui:

https://www.amazon.it/TP-Link-TL-WA850RE-Ripetitore-Universale-Intelligente/dp/B00A0VCJPI/ref=sr_1_5?ie=UTF8&qid=1537805386&sr=8-5&keywords=wifi+extender

SUKKOOOOOO a parte che la pagina non è raggiungibile

Poi non ne voglio comprare una gia funzionante....voglio riuscirci io.

PS

A quel ragazzo che sta tentando di imparare millis()....lo ammiro sembra me un anno fà quando ho comiciato ad armeggiare con arduino.

A parte gli scherzi di esempi in giro non trovo niente...ho una telecamera di un drone rotto che funziona benissimo con la su APP.....sono collegato, ma non vedo niente, hai qualke idea da dove poter cominciare??

Puso, quel che vuoi fare non è possibile, vuoi perché tu non ne hai le conoscenze, vuoi perché l'ESP non è fatto per quelle cose e non ti permette di trattare i pacchetti di rete al livello che ti servirebbe per farlo.

Potrei leggermi il programma scritto dell'APP apposita della telecamera e poi metterci del mio per elaborarlo....ma non so come fare a trovarlo.

Il problema è la comunicazione a livello TCP/IP!!!

in quanto hai pacchetti di rete(che ho una piccola infarinatura) ....al momento mi basterebbe...vedere la telecamera collegandomi direttamente in WIFI dal telefono senza usare il Web.