I have an Arduino Uno and an ESP8266, connected over serial through ESP8266 pin GPIO_2 (which is set as RX over espsoftwareserial) and 11 on Uno (which is set as TX over SoftwareSerial). I am trying to send data (for now just random numbers from 0 to 1000) from Arduino Uno to ESP8266. But ESP8266 shows messy chars.
I am using:
Arduino UNO code:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
int randnum;
void setup() {
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
Serial.begin(115200);
}
void loop() { // run over and over
randnum = random(0,1000);
mySerial.write(randnum);
Serial.println(randnum);
delay(2000);
}
ESP8266 code: (it's programmed with Arduino IDE)
#include <ESP8266WiFi.h>
#include <SoftwareSerial.h>
SoftwareSerial ARD_ESP(2, SW_SERIAL_UNUSED_PIN); // RX, TX |||| RX = ESP8266 = GPIO_2
const char* ssid = "myssid";
const char* password = "mypassword";
const char* host = "www.myweb.com";
const char* value2 = "986.458";
const char* value1 = "150.0589";
long previousMillis = 0;
char indata;
String incomingData_from_ARD = "";
int i=0;
void setup() {
Serial.begin(115200);
ARD_ESP.begin(9600);
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("connecting to wifi: ");
Serial.print(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
//int value = 0;
void loop() {
//delay(1000);
//++value;
if (ARD_ESP.available() > 0) {
Serial.write(ARD_ESP.read());
indata = ARD_ESP.read();
incomingData_from_ARD += String(indata);
}
if ((millis() - previousMillis) > 10000) {
Serial.println("---------------------------------------------------------------------------------------");
Serial.print("Requesting URL: ");
Serial.println(host);
Serial.println("-------------------------------");
// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("Request failed");
return;
}
// We now create a URI for the request
String url = "/testesp.php";
url += "?sensor_1_total_volume=";
url += incomingData_from_ARD;
url += "&sensor_2_total_volume=";
url += value2;
Serial.println("Sending data to URL: ");
Serial.println(url);
Serial.println("-------------------------------");
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println(">>> Server Timeout!");
client.stop();
return;
}
}
while(client.available()) {
String line = client.readStringUntil('\r');
Serial.print(line);
}
Serial.println();
Serial.println("Closing connection with web");
Serial.println("-----------------------------------------------------------------------------------");
previousMillis = millis();
incomingData_from_ARD = "";
}
}
And this is the text that I am getting on Serial (on PC):
-----------------------------------------------------------------------------------
›¸Ąě*Ű
---------------------------------------------------------------------------------------
Requesting URL: www.myweb.com
-------------------------------
Sending data to URL:
/testesp.php?sensor_1_total_volume=Ĺ˙˙˙˙˙&sensor_2_total_volume=986.458
-------------------------------
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 13 Dec 2016 23:28:58 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
X-Powered-By: PHP/7.0.10
354
<div style=" background-color:#; font-size: px;"><div class="oznamy"><div class="eq"><i>„Čas si vymysleli lidé, aby věděli, od kdy do kdy a co za to.“ </i>Jan Werich</div></div></div><!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="description" content="TEST_ESP">
<meta name="author" content="Vasekdvor">
<meta name="robots" content="noindex">
<title>TEST ESP 8266 POST A GET</title>
0
Closing connection with web
-----------------------------------------------------------------------------------
These messy chars at the beginning are the random numbers that Arduino Uno sends:
›¸Ąě*Ű
But Arduino sends real numbers, only the ESP8266 is interpreting them as this.
Can you please help me fix that? How can I receive numbers?
Thank you.
EDIT:
So i have made some changes based on chupo_cro recommendations
Now its Arduino:
void loop() { // run over and over
randnum = random(0,1000);
mySerial.write((byte*)&randnum, sizeof(randnum));
Serial.println(randnum);
delay(2000);
}
And ESP8266:
long previousMillis = millis();
char indata;
String incomingData_from_ARD = "";
int i=0;
void setup() {
.................................
void loop() {
//delay(1000);
//++value;
if (ARD_ESP.available() > 0) {
//Serial.write(ARD_ESP.read());
indata = ARD_ESP.read();
incomingData_from_ARD += indata;
}
Serial.println(incomingData_from_ARD);
if ((millis() - previousMillis) > 10000) {
Its still doesnt work.