Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Esp master,Arduino slave

Тема в разделе "Раздел для начинающих", создана пользователем Technogrover, 14 сен 2019.

  1. Technogrover

    Technogrover Новичок

    Сообщения:
    128
    Симпатии:
    0
    Снова всех приветсвую!Все так же с Блунком,только вот интерфейс решил сменить,так все таки,наверное,лучше будет.
    Для этого решил использовать библиотеку easytransfer,но механизм передачи,наверное,не совсем понял.Хотелось просто светодиодом встроенным поморгать на ардуине через есп-01,но почему-то быстро загорается и гаснет светодиод и на ардуине,и на есп,где-то значит допускаю ошибку?
    На мастере использую такой код:
    Код (Text):
    1. #include <ESP8266WiFi.h>
    2. #include <BlynkSimpleEsp8266.h>
    3. #include <EasyTransfer.h>
    4.  
    5. //create object
    6. EasyTransfer ET;
    7.  
    8. struct SEND_DATA_STRUCTURE {
    9.   //put your variable definitions here for the data you want to send
    10.   //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
    11.   int16_t LED13;
    12. };
    13.  
    14. //give a name to the group of data
    15. SEND_DATA_STRUCTURE ETdata;
    16. char auth[] = "BuR";
    17.  
    18. // Your WiFi credentials.
    19. // Set password to "" for open networks.
    20. char ssid[] = "HUAWEI";
    21. char pass[] = "Huaell";
    22. char server[] = "blynk-cloud.com";
    23. int port = 8080;
    24. void setup() {
    25. Serial.begin(9600);
    26.   ET.begin(details(ETdata), &Serial);
    27.   Blynk.config(auth, server, port);
    28.   Blynk.connect();
    29. }
    30. BLYNK_WRITE(V3){
    31.   ETdata.LED13 = param.asInt();
    32.   digitalWrite(1, !param.asInt());
    33.   ET.sendData();
    34. }
    35.  
    36. void loop() {
    37. Blynk.run();
    38. }
    А на рабе такой:
    Код (Text):
    1. #include <EasyTransfer.h>
    2.  
    3. //create object
    4. EasyTransfer ET;
    5.  
    6. struct RECEIVE_DATA_STRUCTURE {
    7.   //put your variable definitions here for the data you want to receive
    8.   //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
    9.   int16_t LED13;
    10.  
    11. };
    12.  
    13. //give a name to the group of data
    14. RECEIVE_DATA_STRUCTURE ETdata;
    15.  
    16. void setup() {
    17.   Serial.begin(9600);
    18.   //start the library, pass in the data details and the name of the serial port. Can be Serial, Serial1, Serial2, etc.
    19.   ET.begin(details(ETdata), &Serial);
    20.  
    21.   pinMode(13, OUTPUT);
    22.  
    23. }
    24.  
    25. void loop() {
    26.   //check and see if a data packet has come in.
    27.   ET.receiveData();
    28.   if (ETdata.LED13 == 1) {
    29.     digitalWrite(13, HIGH);
    30.   } else {
    31.     digitalWrite(13, LOW);
    32.     delay(2000);
    33.   }
    34. }
    35.  
    Дайте подсказок пожалуйста,что я упускаю?o_O:)
     
  2. Юрий Ботов

    Юрий Ботов Moderator Команда форума

    Сообщения:
    1.053
    Симпатии:
    175
    =>
    • if (ETdata.LED13 == 1) {
    • digitalWrite(13, HIGH);
    • delay(1000);
    • } else {
    • digitalWrite(13, LOW);
    • delay(1000);
    • }
    ?
     
  3. Technogrover

    Technogrover Новичок

    Сообщения:
    128
    Симпатии:
    0
    Без изменений,у Вас есть еще идейки?:)
     
  4. nikolz

    nikolz Гуру

    Сообщения:
    4.940
    Симпатии:
    454
    1. if( ET.receiveData()){
    2. if (ETdata.LED13 == 1) {
    3. digitalWrite(13, HIGH);
    4. } else {
    5. digitalWrite(13, LOW);
    6. delay(2000);
    7. }
    8. }
     
  5. Technogrover

    Technogrover Новичок

    Сообщения:
    128
    Симпатии:
    0
    Так вроде все работает,но все равно пришлось в мастере код немного править/дополнять.А вы работали с этой библиотекой?В ней вроде потолок - 255кб для передачи,но непонятно,а нужны ли задержки/ка после,например -if(receiveData())
    timer.setInterval(5000, [] () {все переменные для передачи});
    Или просто в конце таймер попроще поставить?
    Не совсем правильно было бы игнорировать задержку,чтобы ардуина без остановки пересылал на есп показания?
     
  6. nikolz

    nikolz Гуру

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

    Technogrover Новичок

    Сообщения:
    128
    Симпатии:
    0
    Сегодня решил попробовать подключить попловковый
     
  8. Technogrover

    Technogrover Новичок

    Сообщения:
    128
    Симпатии:
    0
    Сегодня решил попробовать подключить поплавковый датчик,решил делать по аналогии со светодиодом.Отдельно,когда подключаю,то отлично работает,а вот,когда пытаюсь отправить на есп,чтобы он виджетлэд включил при срабатывании,то вообще не фурычит.Понимаю,что скорей всего допускаю какую-то незначительную ошибку,но по всякому уже перепробовал,а идеи уже кончились:)
    На мастере использую такой код:
    Код (Text):
    1. #include <ESP8266WiFi.h>
    2. #include <BlynkSimpleEsp8266.h>
    3. #include <EasyTransfer.h>
    4. #include <WidgetRTC.h>
    5. //#include <Servo.h>
    6. //Servo myservo;
    7.  
    8.  
    9.  
    10. //create object
    11. EasyTransfer ET;
    12.  
    13.  
    14. struct SEND_DATA_STRUCTURE {
    15.   //put your variable definitions here for the data you want to send
    16.   //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
    17.   int16_t LED13;
    18.   int16_t LED1;
    19. };
    20.  
    21. //give a name to the group of data
    22. SEND_DATA_STRUCTURE ETdata;
    23. char auth[] = "";
    24.  
    25. // Your WiFi credentials.
    26. // Set password to "" for open networks.
    27. char ssid[] = "HUAWEI";
    28. char pass[] = "";
    29. char server[] = "blynk-cloud.com";
    30. int port = 8080;
    31. BlynkTimer timer;
    32.  
    33. WidgetRTC rtc;
    34. WidgetLED led4(V4);
    35.  
    36. // Digital clock display of the time
    37. void clockDisplay()
    38. {
    39.   // You can call hour(), minute(), ... at any time
    40.   // Please see Time library examples for details
    41.  
    42.   String currentTime = String(hour()) + ":" + minute() + ":" + second();
    43.   String currentDate = String(day()) + " " + month() + " " + year();
    44.   Serial.print("Current time: ");
    45.   Serial.print(currentTime);
    46.   Serial.print(" ");
    47.   Serial.print(currentDate);
    48.   Serial.println();
    49.  
    50.   // Send time to the App
    51.   Blynk.virtualWrite(V1, currentTime);
    52.   // Send date to the App
    53.   Blynk.virtualWrite(V2, currentDate);
    54. }
    55.  
    56. BLYNK_CONNECTED() {
    57.   // Synchronize time on connection
    58.   rtc.begin();
    59. }
    60.  
    61. void setup() {
    62.   Serial.begin(9600);
    63.   ET.begin(details(ETdata), &Serial);
    64.   Blynk.config(auth, server, port);
    65.   Blynk.connect();
    66.   setSyncInterval(10 * 60); // Sync interval in seconds (10 minutes)
    67.  
    68.   // Display digital clock every 10 seconds
    69.   timer.setInterval(10000L, clockDisplay);
    70.  
    71. }
    72. BLYNK_WRITE(V3) {
    73.   ETdata.LED13 = param.asInt();
    74.   if (param.asInt() == 1) {
    75.     digitalWrite(13, HIGH);
    76.   } else {
    77.     digitalWrite(13, LOW);
    78.   }
    79.   ET.sendData();
    80. }
    81. BLYNK_WRITE(V4) {
    82.   ETdata.LED1 = param.asInt();
    83.   if (param.asInt() == 1)
    84.   {
    85.     led4.on();
    86.    
    87.   } else {
    88.     led4.off();
    89.   }
    90.   ET.sendData();
    91. }
    92.  
    93.  
    94.  
    95.  
    96. void loop() {
    97.   Blynk.run();
    98.   timer.run();
    99. }
    А на слуге такой:
    Код (Text):
    1. //#include <SimpleTimer.h>
    2. #include <EasyTransfer.h>
    3. //#include <Servo.h>
    4. //Servo myservo;  // create servo object to control a servo
    5. EasyTransfer ET;
    6. //SimpleTimer timer;
    7. //int pos = 0;
    8. const int16_t pinSensor1 = 7;
    9.  
    10.  
    11.  
    12. struct RECEIVE_DATA_STRUCTURE {
    13.   //put your variable definitions here for the data you want to receive
    14.   //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
    15.   int16_t LED13;
    16.   int16_t LED1;
    17. };
    18.  
    19. //give a name to the group of data
    20. RECEIVE_DATA_STRUCTURE ETdata;
    21. void setup() {
    22.   Serial.begin(9600);
    23.   //start the library, pass in the data details and the name of the serial port. Can be Serial, Serial1, Serial2, etc.
    24.   ET.begin(details(ETdata), &Serial);
    25.  
    26.   pinMode(13, OUTPUT);
    27.   pinMode(pinSensor1, INPUT_PULLUP);
    28. }
    29.  
    30.  
    31.  
    32. void loop() {
    33.   if (ET.receiveData())
    34.   {
    35.  
    36.     if (ETdata.LED13 == 1) {
    37.       digitalWrite(13, HIGH);
    38.     } else {
    39.       digitalWrite(13, LOW);
    40.     }
    41.     ETdata.LED1 = !digitalRead(pinSensor1);
    42.    if (ETdata.LED1 == 1)
    43.    if (!digitalRead(pinSensor1))
    44.  
    45.    {
    46.       Serial.println("СЕНСОР ТОНЕТ");
    47.     }
    48.    
    49.     }
    50. }
    51.  
    52.  
    Не подскажите,где ошибку допускаю?Это просто конечный вариант,а до него много было вариантов и,цука,все не прошли:D
     

Поделиться этой страницей