• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Esp master,Arduino slave

Technogrover

New member
Снова всех приветсвую!Все так же с Блунком,только вот интерфейс решил сменить,так все таки,наверное,лучше будет.
Для этого решил использовать библиотеку easytransfer,но механизм передачи,наверное,не совсем понял.Хотелось просто светодиодом встроенным поморгать на ардуине через есп-01,но почему-то быстро загорается и гаснет светодиод и на ардуине,и на есп,где-то значит допускаю ошибку?
На мастере использую такой код:
Код:
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <EasyTransfer.h>

//create object
EasyTransfer ET;

struct SEND_DATA_STRUCTURE {
  //put your variable definitions here for the data you want to send
  //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
  int16_t LED13;
};

//give a name to the group of data
SEND_DATA_STRUCTURE ETdata;
char auth[] = "BuR";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "HUAWEI";
char pass[] = "Huaell";
char server[] = "blynk-cloud.com";
int port = 8080;
void setup() {
Serial.begin(9600);
  ET.begin(details(ETdata), &Serial);
  Blynk.config(auth, server, port);
  Blynk.connect();
}
BLYNK_WRITE(V3){
  ETdata.LED13 = param.asInt();
  digitalWrite(1, !param.asInt());
  ET.sendData();
}

void loop() {
Blynk.run();
}
А на рабе такой:
Код:
#include <EasyTransfer.h>

//create object
EasyTransfer ET;

struct RECEIVE_DATA_STRUCTURE {
  //put your variable definitions here for the data you want to receive
  //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
  int16_t LED13;

};

//give a name to the group of data
RECEIVE_DATA_STRUCTURE ETdata;

void setup() {
  Serial.begin(9600);
  //start the library, pass in the data details and the name of the serial port. Can be Serial, Serial1, Serial2, etc.
  ET.begin(details(ETdata), &Serial);

  pinMode(13, OUTPUT);

}

void loop() {
  //check and see if a data packet has come in.
  ET.receiveData();
  if (ETdata.LED13 == 1) {
    digitalWrite(13, HIGH);
  } else {
    digitalWrite(13, LOW);
    delay(2000);
  }
}
Дайте подсказок пожалуйста,что я упускаю?o_O:)
 

nikolz

Well-known member
  1. if( ET.receiveData()){
  2. if (ETdata.LED13 == 1) {
  3. digitalWrite(13, HIGH);
  4. } else {
  5. digitalWrite(13, LOW);
  6. delay(2000);
  7. }
  8. }
 

Technogrover

New member
  1. if( ET.receiveData()){
  2. if (ETdata.LED13 == 1) {
  3. digitalWrite(13, HIGH);
  4. } else {
  5. digitalWrite(13, LOW);
  6. delay(2000);
  7. }
  8. }
Так вроде все работает,но все равно пришлось в мастере код немного править/дополнять.А вы работали с этой библиотекой?В ней вроде потолок - 255кб для передачи,но непонятно,а нужны ли задержки/ка после,например -if(receiveData())
timer.setInterval(5000, [] () {все переменные для передачи});
Или просто в конце таймер попроще поставить?
Не совсем правильно было бы игнорировать задержку,чтобы ардуина без остановки пересылал на есп показания?
 

nikolz

Well-known member
Так вроде все работает,но все равно пришлось в мастере код немного править/дополнять.А вы работали с этой библиотекой?В ней вроде потолок - 255кб для передачи,но непонятно,а нужны ли задержки/ка после,например -if(receiveData())
timer.setInterval(5000, [] () {все переменные для передачи});
Или просто в конце таймер попроще поставить?
Не совсем правильно было бы игнорировать задержку,чтобы ардуина без остановки пересылал на есп показания?
Не понял вопроса про задержку.
функция
ET.receiveData() - получить данные , а не послать.
Внутри она проверяет есть ли данные при их наличии записывает их в буфер и выдает true
если их нет то выдает false
послать данные это ET.sendData();
------------------
В примере if(receiveData())
реализована логика послать данные через 5000 т е это не задержка а периодичность посылки данных
Вы сами решаете с какой периодичностью Вы посылаете данные
Если надо максимальную скорость то таймер не нужно.
-------------------
 

Technogrover

New member
Не понял вопроса про задержку.
функция
ET.receiveData() - получить данные , а не послать.
Внутри она проверяет есть ли данные при их наличии записывает их в буфер и выдает true
если их нет то выдает false
послать данные это ET.sendData();
------------------
В примере if(receiveData())
реализована логика послать данные через 5000 т е это не задержка а периодичность посылки данных
Вы сами решаете с какой периодичностью Вы посылаете данные
Если надо максимальную скорость то таймер не нужно.
-------------------
Сегодня решил попробовать подключить попловковый
 

Technogrover

New member
Не понял вопроса про задержку.
функция
ET.receiveData() - получить данные , а не послать.
Внутри она проверяет есть ли данные при их наличии записывает их в буфер и выдает true
если их нет то выдает false
послать данные это ET.sendData();
------------------
В примере if(receiveData())
реализована логика послать данные через 5000 т е это не задержка а периодичность посылки данных
Вы сами решаете с какой периодичностью Вы посылаете данные
Если надо максимальную скорость то таймер не нужно.
-------------------
Сегодня решил попробовать подключить поплавковый датчик,решил делать по аналогии со светодиодом.Отдельно,когда подключаю,то отлично работает,а вот,когда пытаюсь отправить на есп,чтобы он виджетлэд включил при срабатывании,то вообще не фурычит.Понимаю,что скорей всего допускаю какую-то незначительную ошибку,но по всякому уже перепробовал,а идеи уже кончились:)
На мастере использую такой код:
Код:
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <EasyTransfer.h>
#include <WidgetRTC.h>
//#include <Servo.h>
//Servo myservo;



//create object
EasyTransfer ET;


struct SEND_DATA_STRUCTURE {
  //put your variable definitions here for the data you want to send
  //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
  int16_t LED13;
  int16_t LED1;
};

//give a name to the group of data
SEND_DATA_STRUCTURE ETdata;
char auth[] = "";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "HUAWEI";
char pass[] = "";
char server[] = "blynk-cloud.com";
int port = 8080;
BlynkTimer timer;

WidgetRTC rtc;
WidgetLED led4(V4);

// Digital clock display of the time
void clockDisplay()
{
  // You can call hour(), minute(), ... at any time
  // Please see Time library examples for details

  String currentTime = String(hour()) + ":" + minute() + ":" + second();
  String currentDate = String(day()) + " " + month() + " " + year();
  Serial.print("Current time: ");
  Serial.print(currentTime);
  Serial.print(" ");
  Serial.print(currentDate);
  Serial.println();

  // Send time to the App
  Blynk.virtualWrite(V1, currentTime);
  // Send date to the App
  Blynk.virtualWrite(V2, currentDate);
}

BLYNK_CONNECTED() {
  // Synchronize time on connection
  rtc.begin();
}

void setup() {
  Serial.begin(9600);
  ET.begin(details(ETdata), &Serial);
  Blynk.config(auth, server, port);
  Blynk.connect();
  setSyncInterval(10 * 60); // Sync interval in seconds (10 minutes)

  // Display digital clock every 10 seconds
  timer.setInterval(10000L, clockDisplay);
 
}
BLYNK_WRITE(V3) {
  ETdata.LED13 = param.asInt();
  if (param.asInt() == 1) {
    digitalWrite(13, HIGH);
  } else {
    digitalWrite(13, LOW);
  }
  ET.sendData();
}
BLYNK_WRITE(V4) {
  ETdata.LED1 = param.asInt();
  if (param.asInt() == 1)
  {
    led4.on();
   
  } else {
    led4.off();
  }
  ET.sendData();
}




void loop() {
  Blynk.run();
  timer.run();
}
А на слуге такой:
Код:
//#include <SimpleTimer.h>
#include <EasyTransfer.h>
//#include <Servo.h>
//Servo myservo;  // create servo object to control a servo
EasyTransfer ET;
//SimpleTimer timer;
//int pos = 0;
const int16_t pinSensor1 = 7;



struct RECEIVE_DATA_STRUCTURE {
  //put your variable definitions here for the data you want to receive
  //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
  int16_t LED13;
  int16_t LED1;
};

//give a name to the group of data
RECEIVE_DATA_STRUCTURE ETdata;
void setup() {
  Serial.begin(9600);
  //start the library, pass in the data details and the name of the serial port. Can be Serial, Serial1, Serial2, etc.
  ET.begin(details(ETdata), &Serial);

  pinMode(13, OUTPUT);
  pinMode(pinSensor1, INPUT_PULLUP);
}



void loop() {
  if (ET.receiveData())
  {

    if (ETdata.LED13 == 1) {
      digitalWrite(13, HIGH);
    } else {
      digitalWrite(13, LOW);
    }
    ETdata.LED1 = !digitalRead(pinSensor1);
   if (ETdata.LED1 == 1)
   if (!digitalRead(pinSensor1))
 
   {
      Serial.println("СЕНСОР ТОНЕТ");
    }
    
    }
}
Не подскажите,где ошибку допускаю?Это просто конечный вариант,а до него много было вариантов и,цука,все не прошли:D
 
Сверху Снизу