nRF24L01+ : побеждаем модуль.

Тема в разделе "Проводная и беспроводная связь", создана пользователем ИгорьК, 19 июн 2014.

  1. Пашка

    Пашка Нуб

    Парни, такой вопрос...допустим есть несколько передатчиков и на них устанавливаем разные каналы. Например, на одном radio.setChannel(11), а на другом radio.setChannel(12)....Возможно ли на приёмнике налету менять частоту и принимать со всех передатчиков данные? Есть пример в библиотеке - scanner, где частота меняется и сканируется загруженность канала, но прикрутить в свой код не получается.
     
  2. Пашка

    Пашка Нуб

    И ещё, в результате сегодняшних экспериментов с библиотекой TMRh20 вылезла некоторая особенность. Если мы в настройках ставим radio.setChannel( i) и radio.setPALevel(RF24_PA_MAX); (где i - любой канал), то передатчик ничего не передаёт. Нужно либо ставить скорость на HIGH, либо убирать настройку принудительно канала и оставлять по-умолчанию. Что интересно, если такие настройки radio.setChannel( i) и radio.setPALevel(RF24_PA_MAX); ставить на приём, то приёмник отлично работает.

    P.S. хотя особой разницы между HIGH и MAX не заметил (проверял дальность)
     
  3. fandm

    fandm Нуб

    Мучился я мучился с этой RF24, и с исходной и с форком крайним, и кондёры паял и разные скетчи с этого форума и не только с этого, пока таки не попробовал библиотеку http://www.airspayce.com/mikem/arduino/RadioHead/ и всё как рукой сняло. Заработало сходу. А уж было начал мириться с мыслями, что модули неисправные. Так что, если кто-то также, как я, никак не может победить данные модули и заставить их работать в паре, то хороший повод убедиться в их работоспособности с помощью RadioHead. IMHO, если что. Mirf не пробовал, ничего не скажу.
    Да, модули контачил с Arduno Pro Mini 5V.
     
  4. Надо, на досуге тоже опробовать, может быть все как по маслу будет.............. Mirf пробовали, работает нормально... Скорее всего проблема в чипах модулей. Скорее в Radio Head прописаны более подробные функции....
     
  5. Мучился я мучился с этой RF24, и с исходной и с форком крайним, и кондёры паял и разные скетчи с этого форума и не только с этого, пока таки не попробовал библиотекуhttp://www.airspayce.com/mikem/arduino/RadioHead/ и всё как рукой сняло.
    А можно не обазованому поподробнее
     
  6. Всем привет! Долго и упорно мучался с данным модулем. Работает только с библиотекой RadioHead. Все бы хорошо, но в примере RH_nrf_24 client (server) отправляется сторка текста. Подскажите как отправлять там цифры от 1 до 255.
    И если кто знает расшифруйте пожалуйста эти строки построчно:
    uint8_t data[] = "Hello World"; \\интересует uint8_t data[]
    nrf24.send(data, sizeof(data)); \\data, sizeof(data)?? можно ли переменную int указать?
    nrf24.waitPacketSent();
    uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN]; \\ что в квадратных скобках?
    uint8_t len = sizeof(buf);

    что такое buf и len ?

    Serial.println((char*)buf); \\ ((char*)buf) что это???
    Буду очень благодарен!
     
  7. geher

    geher Гуру

    Есть два варианта.
    Первый - преобразовать число в строку при помощи, например, sprintf и отправить как строку. При приеме преобразовать обратно.
    Второй - передать массив байт длиной 1, указав в качестве буфера адрес переменной типа байт (unsigned char).
    Примерно так (пишу не по описанию библиотеки, а полагая, что строки, приведенные вами из примера к ней).
    Код (Text):

    uint8_t command;
    nrf24.send(&command, sizeof(command));
    nrf24.waitPacketSent();
     
    uint8_t - тип, который на самом деле unsigned char, целое, занимает в памяти байт, значения от 0 до 255.
    uint8_t data[] - массив элементов данного типа, размер явно не определен, определяется длиной инициализирующей строки, указанной в определении массива (с учетом замыкающего символа с кодом 0).
    data - переменная-массив, объявленная выше, фактически интерпретируется как указатель на область памяти, в которой и расположен массив.
    sizeof(data) - размер памяти, отведенной под массив. В данном контексте это длина строки "Hello World" плюс один байт на замыкающий символ '\0'.
    sizeof - функция, возвращающая размер памяти, отведенной под переменную (можно в качестве параметра передать тип, тогда вернет размер переменной такого типа).

    Можно указать и переменную int.
    Например, так:
    Код (Text):

    int  command;
    nrf24.send((uint8_t*)&command, sizeof(command)); // длина int в ардуине 2
    nrf24.waitPacketSent();
     
    Очевидно, ожидание завершения передачи, т.е. пока пакет не будет отправлен.
    Еще одно объявление переменной-массива, но длина указана явно в виде макроопределения-константы. Судя по наименованию это максимальный размер пакета, который способен передать радиомодуль (точнее, способна передать библиотека, обслуживающая радиомодуль).
    buf в данном случае переменная-массив, объявленная строчкой выше.
    len - переменная типа uint8_t, инициализированная значением, равным длине вышеобъявленного массива buf.
    явное преобразование типа указателя, наверное, чтобы компилятор не ругался. buf - переменная-массив. Потому buf в большинстве случаев интерпретируется как указатель на память, занимаемую этим массивом. В данном случае его можно считать uint8_t*. Компилятор скорее всего видит этот тип как uint8_t[], возможно еще и const. Конструкция (char*)buf в данном случае заставляет считать компилятор при вызове функции, что buf, переданный туда параметром, имеет тип char*
     
    Дмитрий П нравится это.
  8. zaynus

    zaynus Нерд

    Здравствуйте!
    Прежде всего спасибо за ветку, она помогла существенно.
    Позвольте добавить свои 5 копеек.
    Код (Text):

    #include <SPI.h>
    #include <Wire.h>
    #include "nRF24L01.h"//9-13 pin
    #include "RF24.h"
    #include <EEPROM2.h>
    #include <BMP085.h>
    #include "printf.h"
    #define CE_PIN 9
    #define CSN_PIN 10
    #define ONE_WIRE_BUS 2
    #define TEMPERATURE_PRECISION 9
    const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
    RF24 radio(9, 10);
    //////////////////////////////////
    //структура передающая данные
    typedef struct {
      volatile  int ID ;//main id
      volatile  short int B;//tmp
      volatile short int C;//tmp
      volatile  short int D;//tmp
      volatile  short int S;//nagruzka
      volatile  short int T;//
      volatile  short int U;//
      volatile  short int V;//
      volatile  short int W;//
      volatile  short int X;//
      volatile  short int Y;//
      volatile  short int Z;//
    }
    B_t;
    B_t message;
    //////////////////////////////////
    BMP085 dps = BMP085();
    long Temperature = 0, Pressure = 0, Altitude = 0;
    /////////////////////////////////
    long previousMillis = 0;        // храним время последнего
    long interval = 500;   //interval of send data
    //////////////////////////////////
    void setup()
    {
      message.ID = 2; //main id
      Serial.begin(115200);
      printf_begin();
      radio.begin();
      radio.setRetries(15, 15);
      radio.setChannel(120);
      radio.setPayloadSize(32);
      radio.powerUp();
      radio.startListening();
      radio.setPALevel(RF24_PA_MAX);
      radio.setDataRate(RF24_2MBPS);
      radio.enableAckPayload();
      //radio.setAutoAck(false);
      radio.openWritingPipe(pipes[0]);
    // radio.printDetails();
      attachInterrupt(0, check_radio, FALLING);
      /////////////////////////////////
      dps.init();
      /////////////////////////////
    }
    void loop()
    {
      dps.getTemperature(&Temperature);
      dps.getPressure(&Pressure);
      dps.getAltitude(&Altitude);
      message.S = (Temperature / 10);
      //message.T=(Altitude*0.01);
      message.U = (Pressure / 133.3);
       unsigned long currentMillis = millis();
      if (currentMillis - previousMillis > interval)
      {
        previousMillis = currentMillis;
       // radio.stopListening();///////////////////////////////////////////////////
                radio.flush_tx();
        //radio.write(&message,sizeof(message));//nabor
          radio.startWrite(&message, sizeof(message));
         //radio.startListening();
      }
      attachInterrupt(0, check_radio, FALLING);
    }
    void check_radio(void)
    {
      // What happened?
      bool tx, fail, rx;
      radio.whatHappened(tx, fail, rx);

      // Have we successfully transmitted?
      if ( tx )
      {
        Serial.println("Send:OK");
        detachInterrupt(0);
      }
      // Have we failed to transmit?
      if ( fail )
      {
        Serial.println("Send:Failed");
        detachInterrupt(0);
      }

      // if ( ( tx || fail )  )
      // radio.powerDown();
      if ( rx )
      {
        // Serial.println("Read askPayload");
        // radio.read( &message, sizeof(message));
        //  Serial.println("received");
        detachInterrupt(0);
      }
    }
     
    Код (Text):
    #include <SPI.h>
    #include "nRF24L01.h"
    #include "RF24.h"
    #include <LiquidCrystal_I2C.h>
    #include <Wire.h>
    #include "printf.h"

    const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };

    RF24 radio(9, 10);

    typedef struct {
    volatile  int ID ;//main id
    volatile  short int B;//tmp
    volatile short int C;//tmp
    volatile  short int D;//tmp
    volatile  short int S;//nagruzka
    volatile  short int T;//ustanovka otsechki 1
    volatile  short int U;//ustanovka otsechki 2
    volatile  short int V;//temperatury dathikov
    volatile  short int W;//temperatury dathikov
    volatile  short int X;//temperatury dathikov
    volatile  short int Y;//temperatury dathikov
    volatile  short int Z;//temperatury dathikov
    }
    B_t;
    B_t message;
    typedef struct {
      short int V;//ustanovka otsechki 1
      short int W;//ustanovka otsechki 2
      short int X;
      short int Y;
    short int Z;
    }
    R_t;
    R_t rget;
    int P =0 ;
    int nagr1 =  0;
    int nagr2 =  0;
    int Temp1 =  0;
    int Temp2 = 0;
    int Temp3 = 0;
    int Temp4 = 0;
    int Temp5 = 0;
    int TempHome = 0;
    int ALT = 0 ;
    int Pressure = 0;
    LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address  // set the LCD address to 0x27 for a 16 chars and 2 line display
    unsigned long time;

    void setup() {
      rget.V = 1260;
        rget.W = 2260;
        rget.X = 31312;//main id
      Serial.begin(115200);
    lcd.begin(16, 2);
      printf_begin();
      radio.begin();
      radio.setRetries(15, 15);
      radio.setChannel(120);
      radio.setPayloadSize(32);
      radio.setPALevel(RF24_PA_MAX);  
      radio.setDataRate(RF24_2MBPS);
      radio.openReadingPipe(1, pipes[1]);
      radio.openWritingPipe(pipes[0]);
      radio.startListening();
        radio.printDetails();
      radio.enableAckPayload();
        radio.powerUp();

      attachInterrupt(0, check_radio, FALLING);
    }
    void loop() {
      lcd.clear();
        radio.startListening();
    if(message.ID==1)
    {
    P = message.S ;
    nagr1 =  message.T ;
    nagr2 =  message.U  ;
    Temp1 =  message.V  ;
      Temp2 = message.W  ;
      Temp3 = message.X  ;
      Temp4 = message.Y;
      Temp5 = message.Z ;
    }
    else if (message.ID==2)
    {
    TempHome  = message.S ;
    ALT =  message.T ;
    Pressure  =  message.U  ;
    // =  message.V  ;
    //  = message.W  ;
    //  = message.X  ;
    // = message.Y;
    // = message.Z ;
    }
        lcd.setCursor(0, 0);
      lcd.print(P);
      lcd.setCursor(12, 0);
      lcd.print(nagr1);
      lcd.setCursor(0, 1);
      lcd.print(Temp3);
      lcd.setCursor(3, 1);
      lcd.print(Temp1);
      lcd.setCursor(6, 1);
      lcd.print(Temp2);
      lcd.setCursor(12, 1);
      lcd.print(nagr2);
      lcd.setCursor(9, 1);
      lcd.print(TempHome);
      lcd.setCursor(5, 0);
      lcd.print(Pressure);
      lcd.noBlink();
      delay(300);
      attachInterrupt(0, check_radio, FALLING);
    }
    void check_radio(void)
    {
      // What happened?
      bool tx,fail,rx;
      radio.whatHappened(tx,fail,rx);
      // Have we successfully transmitted?
      if ( tx )
      {
            printf("Ack Payload:Sent\n\r");
          detachInterrupt(0);
      }
      // Have we failed to transmit?
      if ( fail )
      {
          printf("Ack Payload:Failed\n\r");
            detachInterrupt(0);
    }
      // Did we receive a message?
      if ( rx )
      {
          radio.read( &message, sizeof(message) );
          radio.writeAckPayload( 0, &rget, sizeof(rget) );
      detachInterrupt(0);
      }
    }
     
     
    Последнее редактирование: 30 мар 2015
  9. zaynus

    zaynus Нерд

    Код (Text):

    #include <SPI.h>
    #include <DallasTemperature.h>
    #include <OneWire.h>
    #include "nRF24L01.h"//9-13 pin
    #include "RF24.h"
    #include <EEPROM2.h>
    #define CE_PIN 9
    #define CSN_PIN 10
    #define ONE_WIRE_BUS 2
    #define TEMPERATURE_PRECISION 9


    // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
    OneWire oneWire(ONE_WIRE_BUS);
    // Pass our oneWire reference to Dallas Temperature.
    DallasTemperature sensors(&oneWire);

    const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };

    RF24 radio(9, 10);
    //структура передающая температуру
    typedef struct {
    volatile  int ID ;//main id
    volatile  short int B;//tmp
    volatile short int C;//tmp
    volatile  short int D;//tmp
    volatile  short int S;//nagruzka
    volatile  short int T;//ustanovka otsechki 1
    volatile  short int U;//ustanovka otsechki 2
    volatile  short int V;//temperatury dathikov
    volatile  short int W;//temperatury dathikov
    volatile  short int X;//temperatury dathikov
    volatile  short int Y;//temperatury dathikov
    volatile  short int Z;//temperatury dathikov
    }
    B_t;
    B_t message;

    typedef struct {
      short int V;//ustanovka otsechki 1
      short int W;//ustanovka otsechki 2
      short int X;
      short int Y;
      short int Z;
    }
    R_t;
    R_t rget;
    volatile short int P1;
    volatile  short int P2;
    //.. адреса датчиков
    DeviceAddress Tpod1 = {
      0x28, 0xB8, 0x76, 0x57, 0x04, 0x00, 0x00, 0x89
    };
    DeviceAddress Tpod2    = {
      0x28, 0xFE, 0x50, 0x57, 0x04, 0x0, 0x0, 0x2a
    };
    DeviceAddress Ttitan  = {
      0x28, 0xA5, 0x47, 0x57, 0x04, 0x00, 0x00, 0xD1
    } ;
    DeviceAddress  Tobr = {
      0x28, 0x53, 0x9B, 0x57, 0x04, 0x00, 0x00, 0x6E
    } ;
    DeviceAddress Thome  = {
      0x28, 0x5B, 0x9B, 0x57, 0x04, 0x00, 0x00, 0xCF
    };
    // красный + белый - желтый сигнал
    // переменные температуры
    float tempS1;
    float tempS2;
    float tempS3;
    float tempS4;
    float tempS5;

    int analogInPin = A3;//датчик трансформатора тока
    short int sensorValue = 0;
    int ten1 = 3;// ten1
    int ten2 = 4;// ten2 vt
    /////////////////////////////////////////////////////////
    long previousMillis = 0;        // храним время последнего
    long interval = 500;  //interval of send data
    //////////////////////////////////////
    void setup()
    {
      message.ID = 1;//main ID
      sensors.begin();
      Serial.begin(115200);
      sensors.setResolution(Tpod1, TEMPERATURE_PRECISION);
      sensors.setResolution(Tpod2, TEMPERATURE_PRECISION);
      sensors.setResolution(Ttitan, TEMPERATURE_PRECISION);
      sensors.setResolution(Tobr, TEMPERATURE_PRECISION);
      sensors.setResolution(Thome, TEMPERATURE_PRECISION);
       radio.begin();
      radio.setRetries(15, 15);
      radio.setChannel(120);
      radio.setPayloadSize(32);
      radio.powerUp();
      radio.startListening();
      radio.setPALevel(RF24_PA_MAX);
      radio.setDataRate(RF24_2MBPS);
      radio.enableAckPayload();
      radio.openWritingPipe(pipes[0]);
      pinMode(ten1, OUTPUT);
      pinMode(ten2, OUTPUT);
      digitalWrite(ten1, 1);//тушим тены
      digitalWrite(ten2, 1);
      attachInterrupt(0, check_radio, FALLING);
    }
    void loop()
    {
      EEPROM_read(32, rget);
      P1 = rget.V;
      P2 = rget.W;
      sensorValue = analogRead(analogInPin); //читаем нагрузку сети
      sensorValue = (sensorValue * 9); // конвертируем мощность
      if (sensorValue < P1)//рулим тенами
      {
        digitalWrite(ten1, 1);
      }
      else
      {
        digitalWrite(ten1, 0);
      }
      if (sensorValue < P2)
      {
        digitalWrite(ten2, 1);
      }
      else
      {
        digitalWrite(ten2, 0);
      }
      //получаем температуру
      sensors.requestTemperatures();
      //формируем массив
      message.S = sensorValue;
      message.T = P1;
      message.U = P2 ;
      message.V  =  sensors.getTempC(Tpod1);
      message.W  = sensors.getTempC(Tpod2);
      message.X  = sensors.getTempC(Tobr);
      message.Y = sensors.getTempC(Ttitan);
      message.Z = sensors.getTempC(Thome);
    unsigned long currentMillis = millis();
      if(currentMillis - previousMillis > interval)
        {
        // сохраняем время последнего переключения
        previousMillis = currentMillis;
      radio.flush_tx();
      //bool ok =
      radio.startWrite( &message, sizeof(message) );
      delay(20);
        }
      attachInterrupt(0, check_radio, FALLING);

    }
    void check_radio(void)
    {
      // What happened?
      bool tx, fail, rx;
      radio.whatHappened(tx, fail, rx);

      // Have we successfully transmitted?
      if ( tx )
      {
    Serial.println("Send:OK\n\r");
    detachInterrupt(0);
      }
      // Have we failed to transmit?
      if ( fail )
      {
        Serial.println("Send:Failed\n\r");

    detachInterrupt(0);
      }
      // Did we receive a message?
      if ( rx )
      {
        // If we're the sender, we've received an ack payload
        Serial.println("Read askPayload");
        radio.read( &rget, sizeof(rget));
        int temp = rget.V;
        Serial.println("rget:");
     
      Serial.println(temp);
       if( rget.X == 31312)
       {
        if  ((P1 != rget.V) || (P2 != rget.W))
    {
          EEPROM_write(32, rget);
          Serial.println("Memory writed");
    detachInterrupt(0);
        }
      }
    }

    1 и 3 скетчи передатчики, 2й - приемник.
    Приемник отсылает автоответом настройки третьему
    Первый - барометр(только сегодня прикрутил).
    Разные трубы не использовал из принципа, хочу оставить простор для добавления железок.
    Третий рулит отоплением в зависимости от нагрузки сети.
    При добавлении первого(так уж "истерически" сложилось, изначально собирал погодную станцию, а не все это барахло) начались небольшие пробуксы(первый код не пробивает даже стену, хотя третий пробивает 3 (NRF физически разнятся, но что на них написано не могу рассмотреть, очки забыл в будущем) .
    Библиотека от maniacbug.
    Собственно вопросы к сообществу!
    Стоит ли перепиливать на RadioHead или TMRh20(когда начинал пилить про них в ветке не было)
    Если да, то какую из них прикрутить(чтоб еще малой кровью)
    Скетчи непричесаны, если есть где поправить - подскажите.

    Попутно собирал ретранслятор ИК пульта(работает)
    Сейчас пилю световые костюмы с радиоуправлением по миди и вебсервер к вышеописанному барахлу.
    Вебсервер на W5100(хочется выбросить(прошивается с 3й попытки, не работают втроем -NRF+W5100+SD card)
     
    Последнее редактирование: 24 мар 2015
    ИгорьК нравится это.
  10. ИгорьК

    ИгорьК Гуру

    Перепиливать стоит на ESP8266, ИМХО. А если работает - то и трогать не надо. У меня уже полгода работает система из четырех NRF - один ведущий, два ведомых и один частично дублирует управление через интернет. Все работает с библиотекой Маньячного Жука в составе Мега, два Уно и Yun. Без проблем, не смотря на все те жалобы, что присутствуют в этой ветке. Возможно у меня оригинальные модули, возможно.
    Но если теперь надо что-то разрабатывать, считаю надо использовать ESP8266 и только их.
     
    Последнее редактирование: 24 мар 2015
  11. zaynus

    zaynus Нерд

    Есть пара ESP однако, где то прочитал "пока в устройстве есть проприетарные блоки я к нему не прикоснусь"
    Я их заказывал на заре появления, бился об них неделю так и не запустил, потом(гдет в феврале 2015)выпустили новую прошивку и вроде заработало, но с непостоянством.
    Я так и планировал сделать шлюз из nrf24-diuno-ESP но после продолжительных танцев бросил и заказал W5100.
    Все таки стоит отбросить W5100 и перейти на ESP(я давно про них не читал, может что поменялось??)
    Ненавижу глюки(у меня передатчик отключает тены, если включишь чайник, а он не отключит, выбьет автомат и обесточит дом, а если не включит, то можно проснуться стуча зубами от холода)
    В моей связке все проработало зиму(1 приемник 1 передатчик) но есть существенный минус - нет выхода в интернет.
    "Нет повести печальнее на свете, чем повесть о компьютере вне сети" :)

    Возможно дело в модулях, у меня по сути одинаковые скетчи(всмысле обработки самой nrf) однако один передатчик пробивает 3 стены а второй не может и одну.
    Хотя до этого бился и с ними в т.ч. и мирфом, ничего не работало
    Сейчас последовательность инициализации храню как зеницу ока, например ретранслятор ИК пульта скрутился за 15 минут добавлением библиотеки ИК.
    Возможно ли сейчас поднять такой ретранслятор ИК на ESP?
     
    Последнее редактирование: 24 мар 2015
  12. ИгорьК

    ИгорьК Гуру

    Посмотрите, я тут пару проектов сделал, повторите, проверьте устойчивость. Сейчас делаю реле (можно и термостат) с управлением через интернет, как сделаю - выложу.
    А про проприе..... как их там, блоки.... ну да, есть такая религия, в том числе на этом сайте. Но, как мне кажется, я убежден,эта религия имеет весьма определенное коммерческое основание.
     
  13. zaynus

    zaynus Нерд

    Про то и разговор
    Часть прошивки закрыта, пишешь пишешь, а она потом по воздуху обновилась и не работает
     
  14. ИгорьК

    ИгорьК Гуру

    Да Вы лучше попробуйте. "Я предпочитаю обсуждать вкус ананаса с тем кто его ел". А коммерческое основание - это вИдение дилеров ардуино, продажи которых должны слегка просесть в части wifi шилдов, NRF, всяких БИ и даже частично простых моделек ардуино. Вот и появляются религиозные "свидетели проприетарности"....
    Что касается обновления через интернет, то оно осуществляется только по вашей команде, если оно вам надо. А надо?
     
    Последнее редактирование: 24 мар 2015
  15. zaynus

    zaynus Нерд

    Завтра буду искать прошивку на ЕСП.
    На http://homes-smart.ru/ чтото есть, но как понял за некоторые функции автор просит денег!
    Не он ли писец этих "проприетарных блоков"?
    Чтото недопонимаю мал.
    Насчет продаж полностью согласен(собирался брать Nrf со встроенным контроллером) но отказался
    дуина Pro mini + Nrf по цене выходит так же но функционал существенно мощнее.
    В случае с ESP имеется выигрыш в вайфай и шине 1wire на одном борту(Nrf со встроенным контроллером вроде такого не поддерживает)
     
  16. ИгорьК

    ИгорьК Гуру

    Да, есть товарищ который пишет закрытые прошивки и кое за что просит денег. Это его право. Но в интернете хватает информации для самостоятельного написания. Это не так как привыкли на С++ но разобраться можно. Особенно интересен NodeMCU Lua.
    Насколько мне сейчас понятно, есть два наиболее распространеннных способа работы с модулем. Как UART wifi модуль и как самостоятельный процессор на Lua. Есть еще пара способов но они наименее описаны пока.
    Мелкие вещи можно делать как самостоятельный прцессор, крупнее - привинчивать к ардуно АТ командами. Все это есть в открытом доступе.
     
    Последнее редактирование: 24 мар 2015
    dealpa нравится это.
  17. Lagvin

    Lagvin Нерд

    Имею 11шт. nRF24L01+с антеной.(до 1000м).(Китай)
    Хочу сделать 10 передатчиков и 1 приемник.
    Вопрос (Желательно к Игорю):
    1.Подойдут ли вышеописанные библиотеки к этим модулям?
    2.Возможно ли использовать столько передатчиков (работать будут с arduino pro mini 3.3V)
    (приемник на mega 2560)?
    Воспользуюсь любым ответом
    ДА/НЕТ-отлично!
    >ДА/НЕТ-супер!
     
  18. ПЕРЕДатчики капризные, у меня только с библиотекой radiohead заработали.
    А отправлять одновременно будут или в разное время?
    Если в разное то точно будет работать.
     
  19. Инженер

    Инженер Нерд

    Да можно, но во первых придется использовать ручную адресацию т.е. в каждый пакет данных включать поле номера устройства, и на всех устройствах задать одинаковый адрес. Насчет библиотеки не знаю я на си пишу и если что сам библиотеку дописываю. И еще очень рекомендую установить у каждого устройства разный интервал повторной передачи (регистр 04 биты 4-7) чтобы если возникнет одновременная передачи передатчики сами разрулили конфликт за счет разной временной паузы. Если питания хватит то будут работать