Ардуино и esp01s
- Войдите на сайт для отправки комментариев
Сб, 09/11/2019 - 12:52
Доброго дня!!!
Недавно люди помогли с передачей из ардуино в 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]);
}
}
Очень надеюсь на понимание и помощь!!!
А отправлять в порт перед данными символ единицы - это чтобы задачка не была слишком простой?!)
И еще у меня два вопроса
1 зачем на меге пользовать Софтсериал?
2 откуда вы взяли код с reinterpretet cast? - явно где-то списали
Люди которые помогли у них все списал и все работает но только при передачи в esp.
Сам не понял для чего символ но без него не работает.
На счет Софтсериал если подключить к сериал3 по получу нуль, если поменять местами tx rx получи вот что
Люди которые помогли у них все списал ...
Сам не понял
Беда в том, что Вам не помогли, а сделали за Вас. Если бы помогли (т.е. заставили бы Вас дойти до всего и сделать самому), то сегодняшнего поста бы не было.
Хотите помощи, Вам могут помочь, но именно пинанием и подталкиванием (с некоторой долей глума, конечно). Сделать же Вы должны сами. Вот тогда повторных вопросов, типа сегодняшнего, не будет.
А если опять за Вас напишут, то через неделю Вы вернётесь с вопроом: "мне тут помогли отправить букву А, а теперь надо отправлять Б, но что-то никак не могу. Надеюсь на помощь и понимание".
Согласен с вами, и все же не могли бы объяснить в чем проблема и как исправить?
Теоретически дальнейших проблем с основной программой не должно быть но все возможно, сейчас главное настроить передачу по uart туда и обратно!!! Надеюсь дальше сам справлюсь.
Я не против если меня будут подталкивать главное простым понятным языком!
Отключил символ и данные пошли нормально.
// Отправляем данные в сериал порт // 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]); } } }