ATmega 328p ESP8266

Salve a tutti, sto cercando di fare comunicare un ATmega328p standalone (8 Mhz oscillatore interno, 3.3V)
con un modulo ESP8266 (ESP-1).
Uso 2 Software Serial, per poter leggere sul monitor seriale le risposte ai comandi AT, attraverso un adattatore USB/Seriale.
Il problema è che non ricevo alcuna risposta ai comandi AT e all'avvio ricevo una serie di caratteri incomprensibili, come se ci fosse un problema di baudrate errato.

Riporto un riassunto su quello che ho fatto:

  • Alimentato tutto con regolatore di tensione 3.3V LM1117t;
  • Caricato bootloader di un pro Mini (8MHz 3.3V) modificando il low_fuses da 0xFF a 0xE2 nel file board.txt;
  • Per l'upload del bootloader e degli sketch, ho usato un arduino nano as ISP;
  • Uso la software serial al posto di quella fisica, visto che lavoro a 3.3V;
  • Il tutto è montato su breadboard;
  • Cambiato il baudrate del ESP8266 a 9600 baud;

Ormai sono due settimane che ci sbatto la testa e ho esaurito le idee sulle possibili cause, se poteste suggerimi soluzioni o test da fare ve ne sarei grato.

[code]

#include <SoftwareSerial.h>

SoftwareSerial esp(10, 11); // RX, TX
SoftwareSerial seriale(5, 6); // RX, TX

void setup() {
  seriale.begin(9600);
  esp.begin(9600);
  seriale.println("Pronto");
  esp.println("Pronto");

}

void loop() { // run over and over
  if (esp.available()) {
    seriale.write(esp.read());
  }
  if (seriale.available()) {
    esp.write(seriale.read());
  }
}

[/code]

Non so se lo hai già visto, ma in Megatopic c'è un thread di oltre 170 pagine interamente dedicato al ESP8266.

Nella prima pagina troverai una serie di link a guide e tutorials che forse potranno esserti utili.

Guglielmo

Inoltre, se ricordo bene una sola seriale sw può essere attiva in ricezione, le devi scambiare esplicitamente con una .listen()

Standardoil:
Inoltre, se ricordo bene una sola seriale sw può essere attiva in ricezione, le devi scambiare esplicitamente con una .listen()

Esatto ... si possono creare quante SoftwareSerial si vogliono, ma sempre UNA sola può essere attiva in ricezione (... mentre entrambe possono trasmettere) !

Guglielmo

Avete ragione, e lo sapevo anche, è stato un errore per cercare di postare una configurazione minima sul forum per cercare di evidenziare l'errore di trasmissione seriale.

Ho visto il megatopic ma credo centri poco con il mio problema, il modulo funziona correttamente un un arduino nano, ma collegato all' Atmega328p smette di funzionare.

Ho cambiato il codice, questo dovrebbe inviare il comando"AT" ogni 3 secondi e il modulo ESP-1 dovrebbe rispondere con "OK".

#include <SoftwareSerial.h>

SoftwareSerial esp(10, 11); // RX, TX
SoftwareSerial seriale(5, 6); // RX, TX
unsigned long contatore;

void setup() {
  seriale.begin(19200);
  esp.begin(19200);
  seriale.println("Pronto");
  esp.println("Pronto");
 
}
void loop() { 

 if (millis() > contatore+3000){
  contatore = millis();
  seriale.println("Invio comando AT");
  esp.write("AT\r\n");
  esp.listen();
  }
  
  if (esp.available()) {
    seriale.write(esp.read());
  }

}

Questo è l'output del monitor seriale:

Invio comando AT
AT5
-5⸮Invio comando AT
AT5)-5⸮Invio comando AT
A55=-5⸮Invio comando AT
AT6
-5⸮Invio comando AT
AT5)-5⸮Invio comando AT
AT6
)-5⸮Invio comando AT
AT5:⸮-5⸮Invio comando AT
AT56-5⸮Invio comando AT
A55=-5⸮Invio comando AT
AT5:⸮-5⸮Invio comando AT
AT55>-5⸮Invio comando AT

Grazie a tutti, risolto :slight_smile:

e come?