Hi there,
I'm programming an Esp8266 from Espressif (vroom-02).
The project is to sense with an Arduino Uno and then send data to Esp8266 which will send to computer over wifi.
The wifi alone is working, the softwareserial alone as well.
But the combination of both stops wifi.
I think it is because fo interrupts attached to Rx pin for communication communication.
Have an idea?
Chris
The ESP8266 side code:
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
const char* ssid = "xxx"; // MOD
const char* password = "xxx"; // MOD
#define sendIP "192.168.43.221" // MOD
unsigned int sendPort = 8889; // MOD
#define tempoUs 500 // MOD
boolean wifiConnected = false;
boolean udpConnected = false;
char wifiData[255];
WiFiUDP Udp;
#include <SoftwareSerial.h>
#define RXpin 2 // MOD
#define TXpin 5 // MOD
SoftwareSerial espSerial(RXpin, TXpin);
boolean espSerialNewData;
char espSerialBuffer;
String serialData;
void setup() { // ----------------------------------------------------------------------
wifiConnected = connectWifi();
if (wifiConnected) {
udpConnected = connectUDP();
}
ESP.wdtDisable();
ESP.wdtEnable(WDTO_8S);
Serial.begin(115200);
espSerial.begin(57600);
}
void loop() { // -----------------------------------------------------------------------
GetEspSerial Data();
}
void StringToTable() { // --------------------------------------------------------------
strcpy(wifiData, serialData.c_str());
}
void sender() { // ---------------------------------------------------------------------
espSerial.stopListening();
checkWifiStatus();
StringToTable();
Udp.beginPacket(sendIP, sendPort);
Udp.write(wifiData);
boolean state = Udp.endPacket();
ESP.wdtFeed();
yield();
delayMicroseconds(tempoUs);
espSerial.listen();
}
boolean connectWifi() { // -------------------------------------------------------------
boolean state = true;
int i = 0;
WiFi.begin(ssid, password);
Serial.print(F("\n...Connecting WiFi..."));
while (WiFi.status() != WL_CONNECTED) {
delay(500);
if (i > 10) {
state = false;
break;
}
i++;
}
return state;
}
boolean connectUDP() { // --------------------------------------------------------------
boolean state = true;
int i = 0;
Serial.print(F("\n...Connecting UDP..."));
while (Udp.begin(sendPort) != 1) {
// delay(500);
if (i > 3) {
state = false;
break;
}
i++;
}
return state;
}
void checkWifiStatus() { // ------------------------------------------------------------
if (WiFi.status() == WL_DISCONNECTED) {
Serial.println(F("Wifi disconnected"));
}
}
void GetEspSerialData() { // ----------------------------------------------------------------
espSerialNewData = false;
char espSerialBuffer;
String serialData;
espSerial.print(1);
while (espSerial.available() > 0) {
espSerialNewData = true;
espSerialBuffer = espSerial.read();
serialData.concat(espSerialBuffer);
}
if (serialData != "") {
sender();
Serial.println(serialData);
}
}
The Arduino side :
#include <SoftwareSerial.h>
#define RXpin 10 // MOD
#define TXpin 11 // MOD
String Data;
SoftwareSerial espSerial(RXpin, TXpin);
void setup() { // -----------------------------------------------------------------------
Serial.begin(115200);
espSerial.begin(57600);
}
void loop() { // ------------------------------------------------------------------------
for (int i = 0 ; i < 10; i++) {
while (espSerial.available() == 0) {}
espSerial.read();
espSerial.print(String(i));
Serial.println(i);
}
}