Esp master,Arduino nano slave*easytransfer

Technogrover
Offline
Зарегистрирован: 23.07.2018

Всех приветствую!Продолжил эксперименты с easytransfer:удается передать от мастера команду включить светодиод на слуге,но вот,когда подключил поплавковый датчик,чтобы виджэт лэд включался по срабатыванию геркона,то он не загорается.Как только не пытался крутить переменными,как итог - ничего не загорается.

Возможно,допускаю какую-то незначительную ошибку,но по всякому уже пытался заставить его моргнуть ,а он,зараза,не слушается,силюсь понять,почему?

На мастере использую такой код:

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <EasyTransfer.h>
#include <WidgetRTC.h>
//#include <Servo.h>
//Servo myservo;a
const int16_t pinSensor1 = 10;
int LEDstate = 0;




//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);
/*void blinkLedWidget()
  {
  if (led4.!(pinSensor1))
  led4.on();
  }*/

// 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);
  timer.setInterval (1000L, ledOnOff);

}
BLYNK_WRITE(V3) {
  ETdata.LED13 = param.asInt();
  if (param.asInt() == 1) {
    digitalWrite(13, HIGH);
  } else {
    digitalWrite(13, LOW);
  }
  ET.sendData();
}
void ledOnOff() 
{
  //ETdata.LED1 == (!digitalRead(pinSensor1));
  if (!digitalRead(pinSensor1),ETdata.LED1){
    led4.on();
  Serial.println("LED4 ON");
} else {
  led4.off()
  ;
  Serial.println("LED4 OFF");
}
ET.sendData();
}





/*BLYNK_READ(V4) {
  Blynk.virtualWrite(V4, !digitalRead(pinSensor1));
  Serial.println("GOGOGO");
  Blynk.virtualWrite(V4, ETdata.LED1);
  Blynk.virtualWrite(V4, 255);
  Serial.println("LED1.ON");

  led4.off();
  Serial.println("LED1.off");
  ET.sendData();
  }*/

/*BLYNK_WRITE(V4) {
  ETdata.LED1 = param.asInt();
  LEDstate = digitalRead(pinSensor1);
  Serial.println("OKOKOK");
  if (LEDstate == 1) {
    Serial.println("GOGOGO");
  Blynk.virtualWrite(V4, 255);
  Serial.println("LED1.ON");
  } else {

    Blynk.virtualWrite(V4, 0);
    Serial.println("LED1.OFF");
  }
  ET.sendData();
  }

  /*BLYNK_WRITE(V4){
  if (param.asInt() == 1) {
  ETdata.LED1 = !LEDstate;
  digitalWrite(pinSensor1, !LEDstate);
  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;
#define RELAY_ON LOW
#define RELAY_OFF HIGH
const int16_t pinSensor1 = 10;
const byte ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9};



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);
  for (byte i = 2; i <= 9; i++) {
    pinMode(i, OUTPUT);
    digitalWrite(i, RELAY_ON);
  }
}
void loop() {
  ET.receiveData();
  {

    if (ETdata.LED13 == 1) {
      digitalWrite(13, HIGH);
    } else {
      digitalWrite(13, LOW);
    }
    /*if (ETdata.LED1 == 1)
      Serial.println("ETdata.LED1");*/
      
      ETdata.LED1 == !digitalRead(pinSensor1);
      Serial.println("pinSensor1");
    if (!digitalRead(pinSensor1)) {
      Serial.println("СЕНСОР ТОНЕТ");
    }
  }
}

 

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

Чтото уже который вопрос про Изятрансфер. В колледже что ли тему такую проходят?

Автор, есди хотите помощи по библиотеке ET - упростите скетч, выкиньте из него все не относящееся к делу - Blynk. установку времени. вайфай и прочий "цирк со шлюхами". Когда вы это сделаете - может статься. и сами косяк найдете. Не найдете - приходите снова.

Заодно подумайте, зачем для пересылки значений LOW HIGH выделять тип uint16_t ? - хотя причина вряд ли в этом

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

посмотрел внимательнее - добавлю сразу, чтоб два раза не вставть. Поплавковый датчик не работает, потому вы его значение вовсе по ЕТ не передаете...

Technogrover
Offline
Зарегистрирован: 23.07.2018

Изя-трансфер помогает расширить возможности самой платы,память в 30 раз увеличить,часы настроить для эвентора,если есп балетом управлять будет.По мне,так возможностей больше,если использовать в таком ключе.Я бы потом поменял все это на uint8_t,мне просто хотелось логическую часть по работе с этой либой понять,но что-то не выходит пока.Не думаю,что "цирк со шлюхами" здесь виноват,потому что самим диодиком я могу управлять,но вот,что не так с поплавковым датчиком?Условия верно я прописал?

Technogrover
Offline
Зарегистрирован: 23.07.2018

А что бы по ЕТ передать,то нужно в if (ETdata.LED1 == 1) прописать для передачи?Правильно я понимаю?За подсказку спасибо

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

Technogrover пишет:
что не так с поплавковым датчиком?Условия верно я прописал?

Условие, конечно, у вас совершенно бредовое (строка 94). Я даже не могу понять, что вы тут пытались написать. Но главная причина не в этом - как я уже написал выше, вы значение поплавкового датчика вообще в структуру не помещаете, поэтому оно и не передается.

И еще - если у вас в структуре ЕТ два поля, LED1 и LED13 - то лучше при каждой пересылке устанавливать их оба, а не как у вас - отдельно отправляете одно, отдельно другое...

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

Technogrover пишет:
А что бы по ЕТ передать,то нужно в if (ETdata.LED1 == 1) прописать для передачи?

нет. Строчка if (ETdata.LED1 == 1) отлично подошла бы для приемника, но никак не для передатчика. У вас вообще все написано так, будто вы LED1 и LED13 передаете навстречу другу другу...

Напишите передачу данных поплавкового датчика по аналогии с светодиодом.

 

Или я вообще не понимаю, что вы делаете

 

Technogrover
Offline
Зарегистрирован: 23.07.2018

ETdata.LED1 == 1 ,я оказывается тоже пробовал и тоже не шла передача,так все-таки значит не так передачу организовывать надо?
Как только получилась передача управлением диодом на плате,я по той аналогии пытался сделать передачу поплавка,но не получается по той же схеме это передать.
Вы же тоже видите,что передача у меня организована была так же,как со светодиодом.
Не совсем понимаю,как при каждой пересылке устанавливать их оба?У меня разве не так сделано?Сначала лэд13,затем лэд1?
Вы бы как его поместили в моем случае?

Technogrover
Offline
Зарегистрирован: 23.07.2018

b707 пишет:

Technogrover пишет:
что не так с поплавковым датчиком?Условия верно я прописал?

Условие, конечно, у вас совершенно бредовое (строка 94). Я даже не могу понять, что вы тут пытались написать. Но главная причина не в этом - как я уже написал выше, вы значение поплавкового датчика вообще в структуру не помещаете, поэтому оно и не передается.

И еще - если у вас в структуре ЕТ два поля, LED1 и LED13 - то лучше при каждой пересылке устанавливать их оба, а не как у вас - отдельно отправляете одно, отдельно другое...


Просто экспериментировал:))