Связь Arduino и ESP8266 SoftwareSerial

У меня есть Arduino Uno и ESP8266, подключенные через последовательный порт. ESP8266 контакт GPIO_2 (который установлен как RX через espsoftwareserial) и 11 на Uno (который установлен как TX через SoftwareSerial). Я пытаюсь отправить данные (пока что просто случайные числа от 0 до 1000) с Arduino Uno на ESP8266. Но ESP8266 показывает беспорядочные символы.

Я использую:

  • библиотека espsoftwareserial
  • Оригинальная библиотека SoftwareSerial

Код Arduino UNO:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX
int randnum;

void setup() {
  // установить скорость передачи данных для порта SoftwareSerial
  mySerial.begin(9600);
  Serial.begin(115200);
}

void loop() { // запускать снова и снова
  randnum = random(0,1000);    
  mySerial.write(randnum);
  Serial.println(randnum);
  delay(2000);
}

Код ESP8266: (программируется с помощью 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);
  // Начнем с подключения к сети WiFi
  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());
}
//целое значение = 0;

void loop() {
  //задержка(1000);
  //++значение;
  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("-------------------------------");
    // Используйте класс WiFiClient для создания TCP-соединений
    WiFiClient client;
    const int httpPort = 80;
    if (!client.connect(host, httpPort)) {
      Serial.println("Request failed");
      return;
    }
    // Теперь создаем URI для запроса
    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 = "";
  }
}

И вот текст, который я получаю на Serial (на ПК):

    -----------------------------------------------------------------------------------
        ›¸Ąě*Ű
 ---------------------------------------------------------------------------------------
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
-----------------------------------------------------------------------------------

Эти беспорядочные символы в начале — случайные числа, которые отправляет Arduino Uno:

›¸Ąě*Ű

Но Arduino отправляет реальные числа, только ESP8266 интерпретирует их именно так.

Помогите мне это исправить? Как мне получать номера?

Спасибо.

РЕДАКТИРОВАТЬ:

Поэтому я внес некоторые изменения, основываясь на рекомендациях chupo_cro

Теперь это Arduino:

void loop() { // запускать снова и снова

randnum = random(0,1000);

mySerial.write((byte*)&randnum, sizeof(randnum));
Serial.println(randnum);

delay(2000);
}

И 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) {

Он все еще не работает.

, 👍0


1 ответ


-2

Проверьте библиотеку Softwareserial, она не от Arduino, а от парня по имени Питер Леруп. Я протестировал две платы Uno Softwareserial, и они работают отлично. Но затем, когда я использую плату Wifi-uno-look-alike, я не получаю никакого последовательного сигнала.

,