Esp master,Arduino nano slave*easytransfer
- Войдите на сайт для отправки комментариев
Пт, 27/09/2019 - 20:10
Всех приветствую!Продолжил эксперименты с 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("СЕНСОР ТОНЕТ"); } } }
Чтото уже который вопрос про Изятрансфер. В колледже что ли тему такую проходят?
Автор, есди хотите помощи по библиотеке ET - упростите скетч, выкиньте из него все не относящееся к делу - Blynk. установку времени. вайфай и прочий "цирк со шлюхами". Когда вы это сделаете - может статься. и сами косяк найдете. Не найдете - приходите снова.
Заодно подумайте, зачем для пересылки значений LOW HIGH выделять тип uint16_t ? - хотя причина вряд ли в этом
посмотрел внимательнее - добавлю сразу, чтоб два раза не вставть. Поплавковый датчик не работает, потому вы его значение вовсе по ЕТ не передаете...
Изя-трансфер помогает расширить возможности самой платы,память в 30 раз увеличить,часы настроить для эвентора,если есп балетом управлять будет.По мне,так возможностей больше,если использовать в таком ключе.Я бы потом поменял все это на uint8_t,мне просто хотелось логическую часть по работе с этой либой понять,но что-то не выходит пока.Не думаю,что "цирк со шлюхами" здесь виноват,потому что самим диодиком я могу управлять,но вот,что не так с поплавковым датчиком?Условия верно я прописал?
А что бы по ЕТ передать,то нужно в if (ETdata.LED1 == 1) прописать для передачи?Правильно я понимаю?За подсказку спасибо
Условие, конечно, у вас совершенно бредовое (строка 94). Я даже не могу понять, что вы тут пытались написать. Но главная причина не в этом - как я уже написал выше, вы значение поплавкового датчика вообще в структуру не помещаете, поэтому оно и не передается.
И еще - если у вас в структуре ЕТ два поля, LED1 и LED13 - то лучше при каждой пересылке устанавливать их оба, а не как у вас - отдельно отправляете одно, отдельно другое...
нет. Строчка if (ETdata.LED1 == 1) отлично подошла бы для приемника, но никак не для передатчика. У вас вообще все написано так, будто вы LED1 и LED13 передаете навстречу другу другу...
Напишите передачу данных поплавкового датчика по аналогии с светодиодом.
Или я вообще не понимаю, что вы делаете
ETdata.LED1 == 1 ,я оказывается тоже пробовал и тоже не шла передача,так все-таки значит не так передачу организовывать надо?
Как только получилась передача управлением диодом на плате,я по той аналогии пытался сделать передачу поплавка,но не получается по той же схеме это передать.
Вы же тоже видите,что передача у меня организована была так же,как со светодиодом.
Не совсем понимаю,как при каждой пересылке устанавливать их оба?У меня разве не так сделано?Сначала лэд13,затем лэд1?
Вы бы как его поместили в моем случае?
Условие, конечно, у вас совершенно бредовое (строка 94). Я даже не могу понять, что вы тут пытались написать. Но главная причина не в этом - как я уже написал выше, вы значение поплавкового датчика вообще в структуру не помещаете, поэтому оно и не передается.
И еще - если у вас в структуре ЕТ два поля, LED1 и LED13 - то лучше при каждой пересылке устанавливать их оба, а не как у вас - отдельно отправляете одно, отдельно другое...
Просто экспериментировал:))