Ардуино и esp01s

aidfir
Offline
Зарегистрирован: 07.11.2019

Доброго дня!!!

Недавно люди помогли с передачей из ардуино в esp. Все работает. Теперь возникла проблема с передачей из esp в ардуино. Ни как не понимаю что опять делаю не так. Прошу помогите чайнику еще разок.

Вот esp принимает пакет, данные точно приходят.

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>


int16_t FirstMass[2] = {0,0};

WiFiUDP Udp;
char packetBuffer[255];
unsigned int localPort = 9999;
const char *ssid = "Mega";  
const char *password = "12345678";

  // IPAddress ipServidor(192, 168, 4, 1);
   IPAddress ipCliente(192, 168, 4, 10);
 //  IPAddress Subnet(255, 255, 255, 0);


void setup() {
  Serial.begin(115200);
  WiFi.softAP(ssid, password);
  Udp.begin(localPort);
  }

void loop() {

// Прием пакета

int data = Udp.parsePacket();
  if (data) {
    int len = Udp.read(reinterpret_cast<uint8_t *>(FirstMass), sizeof(FirstMass));

// Отправляем данные в сериал порт

 Serial.println("1");
 if( Serial.available() >= 0 ) { // Если в порт что-то пришло, то ...
        while(Serial.available()) Serial.read(); // плевать что там просто вычитываем все нахрен  
   Serial.write(reinterpret_cast<uint8_t *>(FirstMass), sizeof(FirstMass)); 
   delay(500);

  }
}

  

Вот ардуино MEGA принимает.

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX, TX

int16_t FirstMass[2] = {0,0};



void setup() {
  mySerial.begin(115200);
  Serial.begin(115200);
}
 
void loop() {
   
   // Читаем данные из порта
mySerial.println("1");
    if ( mySerial.available() >= 0) {
                
  mySerial.readBytes(reinterpret_cast<uint8_t *>(FirstMass), sizeof(FirstMass));

Serial.println();
Serial.print("data0 = ");Serial.println(FirstMass[0]);
Serial.println();
Serial.print("data1 = ");Serial.println(FirstMass[1]);
    }

}

Очень надеюсь на понимание и помощь!!!

b707
Offline
Зарегистрирован: 26.05.2017

А отправлять в порт перед данными символ единицы - это чтобы задачка не была слишком простой?!)

b707
Offline
Зарегистрирован: 26.05.2017

И еще у меня два вопроса
1 зачем на меге пользовать Софтсериал?
2 откуда вы взяли код с reinterpretet cast? - явно где-то списали

aidfir
Offline
Зарегистрирован: 07.11.2019

Люди которые помогли у них все списал и все работает но только при передачи в esp.

Сам не понял для чего символ но без него не работает.

На счет Софтсериал если подключить к сериал3 по получу нуль, если поменять местами tx rx получи вот что

data0 = -254
 
data1 = 12547
 
data0 = 2573
 
data1 = 700
 
data0 = 1023
 
data1 = 3377
 
data0 = -17398
 
правильные данные должны быть data0 = 700  и data1 = 1023
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

aidfir пишет:

Люди которые помогли у них все списал ...

Сам не понял 

Беда в том, что Вам не помогли, а сделали за Вас. Если бы помогли (т.е. заставили бы Вас дойти до всего и сделать самому), то сегодняшнего поста бы не было.

Хотите помощи, Вам могут помочь, но именно пинанием и подталкиванием (с некоторой долей глума, конечно). Сделать же Вы должны сами. Вот тогда повторных вопросов, типа сегодняшнего, не будет.

А если опять за Вас напишут, то через неделю Вы вернётесь с вопроом: "мне тут помогли отправить букву А, а теперь надо отправлять Б, но что-то  никак не могу. Надеюсь на помощь и понимание".

aidfir
Offline
Зарегистрирован: 07.11.2019

Согласен с вами, и все же не могли бы объяснить в чем проблема и как исправить?

Теоретически дальнейших проблем с основной программой не должно быть но все возможно, сейчас главное настроить передачу по uart туда и обратно!!! Надеюсь дальше сам справлюсь.

Я не против если меня будут подталкивать главное простым понятным языком!

aidfir
Offline
Зарегистрирован: 07.11.2019

Отключил символ и данные пошли нормально.

 // Отправляем данные в сериал порт
// Serial.println("1");
 if( Serial.available() >= 0 ) { // Если в порт что-то пришло, то ...
        while(Serial.available()) Serial.read(); // плевать что там просто вычитываем все нахрен  
   Serial.write(reinterpret_cast<uint8_t *>(FirstMass), sizeof(FirstMass)); 
   delay(500);

Только когда отключаю клиента данные все равно продолжают выводиться.

Я так понимаю в буфере uart они остались? Как его очистить?

int16_t FirstMass[2] = {0,0};



void setup() {
  Serial3.begin(115200);
  Serial.begin(115200);
}
 
void loop() {
   
   // Читаем данные из порта
Serial3.println("1");
    if ( Serial3.available() >= 0) {
         
  Serial3.readBytes(reinterpret_cast<uint8_t *>(FirstMass), sizeof(FirstMass));

if ( Serial.available() >= 0) {
   while(Serial.available()) Serial.read(); // плевать что там просто вычитываем все нахрен  


Serial.println();
Serial.print("data0 = ");Serial.println(FirstMass[0]);
Serial.println();
Serial.print("data1 = ");Serial.println(FirstMass[1]);


    }
   }
}