I want to get data from ESP to my Arduino. I added firmware v2 to my ESP and it works correctly in my serial USB to TTL and shows the JSON data that I send to it.
But when I connect to my Uno serial it shows some unknown chars.
#include <SoftwareSerial.h> //Including the software serial library
#define DEBUG true
SoftwareSerial esp8266(2, 3); // This will make the Arduino pin 2 as the RX pin and Arduino pin 3 as the TX. Software UART
/* So you have to connect the TX of the esp8266 to the pin 2 of the Arduino and the TX of the esp8266 to the pin 3 of the Arduino. This means that you need to connect the TX line from the esp to the Arduino's pin 2 */
void setup() {
Serial.begin(115200); // Setting the baudrate to 9600
esp8266.begin(115200); // Set it according to your esp’s baudrate. Different esp’s have different baud rates.
pinMode(11, OUTPUT); // Setting the pin 11 as the output pin.
digitalWrite(11, LOW); // Making it low.
pinMode(12, OUTPUT); // Setting the pin 12 as the output pin..
digitalWrite(12, LOW); // Making pin 12 low.
pinMode(13, OUTPUT); // Setting the pin 13 as the output pin.
digitalWrite(13, LOW); // Making pin 13 low.
sendData("AT+RST\r\n", 2000, DEBUG); //This command will reset module to default
sendData("AT+CWMODE=2\r\n", 1000, DEBUG); // This will configure the mode as access point
sendData("AT+CIFSR\r\n", 1000, DEBUG); // This will get ip address and will show it
sendData("AT+CIPMUX=1\r\n", 1000, DEBUG); // This will configure the ESP8266 for multiple connections
sendData("AT+CIPSERVER=1,80\r\n", 1000, DEBUG); // This will set the server on port 80
}
void loop() {
if (esp8266.available()) {
// Checking that whether the esp8266 is sending a message or not (Software UART Data)
while (esp8266.available()) {
// Checking whether ESP8266 has received the data or not
char c = esp8266.read(); // Read the next character.
Serial.print(c);
// Storing the response from the ESP8266
}
}
}
String sendData(String command, const int timeout, boolean debug) {
// Function to send the data to the esp8266
String response = "";
esp8266.print(command); // Send the command to the ESP8266
long int time = millis();
while ((time + timeout) > millis()) {
// ESP8266 will wait for some time for the data to receive
while (esp8266.available()) {
// Checking whether ESP8266 has received the data or not
char c = esp8266.read(); // Read the next character.
response += c; // Storing the response from the ESP8266
}
}
if (debug) {
Serial.print(response);
// Printing the response of the ESP8266 on the serial monitor.
}
return response;
}
Prints this for me:
???AR)?WS?TZ?eO?C?AJ+CIFSR
+CIFSR:APHP,"192.168.4.1"
+CIFSQ:APMAC,"62:01:94:22:96:7e"
OK
AZ??R????jC?u?H?AT+CIPSERVDR=1,80
OK
0,CONNECT
+IPD,0,385:POST / HTTP/1.1
cache-control: no-cache
Postman-Token; 45494ff7-b3e1-400f-8afc-fcda26514705
Content,Type: application/jsonUser-Agent: PostmanRunthme/6.1.6
@ccept: */*Host: 192.178.4.1
accept-encoding: gzip, defl`te
content,length: 14Connection: keep-alive
{"name":"`li"}0,CLOSED
My correct JSON is: {"name":"ali"}. But it shows incorrectly. And I set the mt serial library to #define _SS_MAX_RX_BUFF 1024.
How can I fix this?
My connection is:
