Olá,
Estou montando um projeto onde recebo os dados externos através de um atmega328, envio para um atmega328 responsável por enviar os dados lidos para um banco de dados na web via ESP01.
O problema está no fato de que, para configurar o ESP01, preciso utilizar uma "porta serial" criada pelo softwareserial.h e preciso dela também para essa outra conexão. Se eu startar a Serial1 e depois startar a Serial2, a Serial1 não funciona(nesse caso, não lê os dados recebidos do outro atmega) e se startar a Serial2 e depois startar a Serial1, a comunicação com o ESP01 dá timeout.
A pergunta é: dá para utilizar mais de uma porta advinda da softwareserial.h ou essa é uma limitação do uno que não dá para contornar? Se sim, é possível criar uma Serial3 também? Precisava dessas portas para fazer meu projeto rodar.
Atenciosamente,
O código que estou inicializando é esse:
#include "SoftwareSerial.h"
#include "WiFiEsp.h"
IPAddress server(192,168,1,77);
SoftwareSerial Serial2(8,9); // RX, TX
SoftwareSerial Serial1(3,2); // RX, TX
char ssid[] = "conexao";
char pass[] = "******";
int status = WL_IDLE_STATUS;
const char http_site[] = "http://192.168.1.77/";
const int http_port = 12990;
WiFiEspClient client;
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
Serial2.begin(9600);
WiFi.init(&Serial2);
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("Não há nenhum ESP8266 nas portas RX: 9 TX: 8");
while (true);
}
while ( status != WL_CONNECTED) {
Serial.print("Conectando à rede: ");
Serial.println(ssid);
status = WiFi.begin(ssid, pass);
}
Serial.println("Conectado com sucesso!!");
statusconexao();
}
String leitordedados(){
String informacao = "";
char dado;
// Enquanto receber algo pela serial
while(Serial1.available() > 0) {
// Lê o dado disponível na serial
dado = Serial1.read();
// Ignora caracter de quebra de linha
if (dado != '\n'){
// Concatena valores
informacao.concat(dado);
}
delay(15);
}
Serial.print("Informação recebida: ");
Serial.println(informacao);
return informacao;
}
void loop() {
// Se receber algo pela serial1
if (Serial1.available() > 0){
String param = leitordedados();
Serial.println(param);
if ( !client.connect(server, http_port) ) {
Serial.println("Falha na conexão ");
}
else{
Serial.println(param);
client.println("GET /injetora_um/injet.php" + param + " HTTP/1.1");
client.println("Host: ");
client.println(http_site);
client.println("Connection: close");
client.println();
client.println();
while (client.available() && status == WL_CONNECTED) {
char c = client.read();
Serial.write(c);
}
Serial2.flush();
}
}
}
// ------------------------------------------------------------
void statusconexao()
{
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
long rssi = WiFi.RSSI();
Serial.print("Força do Sinal (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}