Поборол приёмопередатчик xy-wb (xy-wa) на lt8920!!!

Тема в разделе "Проводная и беспроводная связь", создана пользователем Olegmih, 30 ноя 2020.

  1. Olegmih

    Olegmih Нерд

    Добился работы этих радиомодулей. Выкладываю рабочие примеры. Подключение в принципе на видео видно, могу выложить фото.

    ,кому пригодится просьба подписаться, мне будет приятно, что работа проделана не зря.
    150 метров дальности связи проверено!
    На мой взгляд очень удобный модуль, изменяя в скетче слово синхронизации или номер канала можно принимать и передавать данные определённой ардуине.

    Для МЕГИ с выводом в монитор порта:
    Код (C++):
    #include <SPI.h>
    #include "LT8920.h"

    const uint8_t PIN_NRF_RST = 26;
    const uint8_t PIN_NRF_CS = 28;
    const uint8_t PIN_NRF_PKT = 30;
    char sbuf[32];
    LT8920 lt(PIN_NRF_CS, PIN_NRF_PKT, PIN_NRF_RST);
    uint8_t a = 0;
    uint8_t b = 181;
    uint8_t c = 16;
    uint8_t d = 7;
    uint8_t e = 249;

    void setup()
    {
      Serial.begin(9600);
      SPI.begin();
      SPI.setBitOrder(MSBFIRST);
      SPI.setClockDivider(SPI_CLOCK_DIV16);

      lt.begin();
      lt.setDataRate(LT8920::LT8920_1MBPS);
      lt.setChannel(80);
      lt.setSyncWord(0x1234123412341234);

        //verify chip registers.
      for (int i = 0; i <= 52; i++)
      {
        uint16_t value = lt.readRegister(i);
        sprintf_P(sbuf, PSTR("%d = %04x\r\n"), i, value);
        Serial.print(sbuf);
      }
    }

    void loop()
    {
        uint8_t data[] = { a,b,c,d,e };
        lt.sendPacket(data, 5);
        Serial.print("Packet send:");
        Serial.println(a);
        a=a+1;
        if (a>=256)
        {
          a=0;
        }
          lt.startListening();
          delay(2000);
       if (lt.available())
        {
          uint8_t buf[32];
          int packetSize = lt.read(buf, 32);
          if (packetSize > 0)
          {
            Serial.println(F("Packet read OK"));
            for(int i = 0; i < packetSize; i++)
            {
              Serial.print(i);
              Serial.print("=");
              Serial.println(buf);
            }
          }
          else
          {
            Serial.println(F("Packet read fail"));
          }
        }
    }
     
    Такой-же для УНО:
    Код (C++):
    #include <SPI.h>
    #include "LT8920.h"

    const uint8_t PIN_NRF_RST = 6;
    const uint8_t PIN_NRF_CS = 5;
    const uint8_t PIN_NRF_PKT = 4;
    char sbuf[32];
    LT8920 lt(PIN_NRF_CS, PIN_NRF_PKT, PIN_NRF_RST);
    uint8_t a = 0;
    uint8_t b = 126;
    uint8_t c = 34;
    uint8_t d = 219;
    uint8_t e = 4;

    void setup()
    {
      Serial.begin(9600);
      SPI.begin();
      SPI.setBitOrder(MSBFIRST);
      SPI.setClockDivider(SPI_CLOCK_DIV16);

      lt.begin();
      lt.setDataRate(LT8920::LT8920_1MBPS);
      lt.setChannel(80);
      lt.setSyncWord(0x1234123412341234);

        //verify chip registers.
      for (int i = 0; i <= 52; i++)
      {
        uint16_t value = lt.readRegister(i);
        sprintf_P(sbuf, PSTR("%d = %04x\r\n"), i, value);
        Serial.print(sbuf);
      }
    }

    void loop()
    {
        uint8_t data[] = { a,b,c,d,e };
        lt.sendPacket(data, 5);
        Serial.print("Packet send:");
        Serial.println(a);

        a=a+1;
        if (a>=256)
        {
          a=0;
        }
          lt.startListening();
          delay(2000);
       if (lt.available())
        {
          uint8_t buf[32];
          int packetSize = lt.read(buf, 32);
          if (packetSize > 0)
          {
            Serial.println(F("Packet read OK"));
            for(int i = 0; i < packetSize; i++)
            {
              Serial.print(i);
              Serial.print("=");
              Serial.println(buf);
            }
          }
          else
          {
            Serial.println(F("Packet read fail"));
          }
        }
    }
    Для МЕГИ светодиод моргнёт после приёма пакета:
    Код (C++):
    #include <SPI.h>
    #include "LT8920.h"

    const uint8_t PIN_NRF_RST = 26;
    const uint8_t PIN_NRF_CS = 28;
    const uint8_t PIN_NRF_PKT = 30;
    char sbuf[32];
    LT8920 lt(PIN_NRF_CS, PIN_NRF_PKT, PIN_NRF_RST);
    uint8_t a = 0;
    uint8_t b = 181;
    uint8_t c = 16;
    uint8_t d = 7;
    uint8_t e = 249;
    const int ledPin = 2;

    void setup()
    {
      Serial.begin(9600);
      SPI.begin();
      SPI.setBitOrder(MSBFIRST);
      SPI.setClockDivider(SPI_CLOCK_DIV16);

      pinMode(ledPin, OUTPUT);

      lt.begin();
      lt.setDataRate(LT8920::LT8920_1MBPS);
      lt.setChannel(80);
      lt.setSyncWord(0x1234123412341234);

          //verify chip registers.
      for (int i = 0; i <= 52; i++)
      {
        uint16_t value = lt.readRegister(i);
        sprintf_P(sbuf, PSTR("%d = %04x\r\n"), i, value);
        Serial.print(sbuf);
      }
    }
    void loop()
    {
        uint8_t data[] = { a,b,c,d,e };
        lt.sendPacket(data, 5);
        Serial.print("Packet send:");
        Serial.println(a);

        a=a+1;
        if (a>=256)
        {
          a=0;
        }
          digitalWrite(ledPin,LOW);
          lt.startListening();
          delay(1500);
       if (lt.available())
        {
          uint8_t buf[32];
          int packetSize = lt.read(buf, 32);
          if (packetSize > 0)
          {

            Serial.println(F("Packet read OK"));
            for(int i = 0; i < packetSize; i++)
            {
              Serial.print(i);
              Serial.print("=");
              Serial.println(buf);
            }
            digitalWrite(ledPin, HIGH);
            delay(500);
          }
          else
          {
            Serial.println(F("Packet read fail"));
          }
        }
    }


    Для УНО с дисплеем I2C:
    Код (C++):
    #include <SPI.h>
    #include "LT8920.h"
    #include <LCD_1602_RUS.h>
    LCD_1602_RUS lcd(0x26,16,2);

    const uint8_t PIN_NRF_RST = 6;
    const uint8_t PIN_NRF_CS = 5;
    const uint8_t PIN_NRF_PKT = 4;

    char sbuf[32];
    LT8920 lt(PIN_NRF_CS, PIN_NRF_PKT, PIN_NRF_RST);
    uint8_t a = 0;
    uint8_t b = 126;
    uint8_t c = 34;
    uint8_t d = 219;
    uint8_t e = 46;

    void setup()
    {
      Serial.begin(9600);
      lcd.init();
      lcd.backlight();
      lcd.print("Hello, world!");
      SPI.begin();
      SPI.setBitOrder(MSBFIRST);
      SPI.setClockDivider(SPI_CLOCK_DIV16);

      lt.begin();
      lt.setDataRate(LT8920::LT8920_1MBPS);
      lt.setChannel(80);
      lt.setSyncWord(0x1234123412341234);

          //verify chip registers.
      for (int i = 0; i <= 52; i++)
      {
        uint16_t value = lt.readRegister(i);
        sprintf_P(sbuf, PSTR("%d = %04x\r\n"), i, value);
        Serial.print(sbuf);
      }
    }

    void loop()
    {
        uint8_t data[] = { a,b,c,d,e };
        lt.sendPacket(data, 5);
        lcd.setCursor(0,0);
        lcd.print("Packet send: ");
        lcd.print(a,DEC);
        lcd.print("  ");
        a=a+1;
        if (a>=256)
        {
          a=0;
        }
          lt.startListening();
          delay(2000);
       if (lt.available())
        {
          uint8_t buf[32];
          int packetSize = lt.read(buf, 32);
          if (packetSize > 0)
           {
            lcd.setCursor(0,1);
            for(int i = 0; i < packetSize; i++)
            {
              lcd.print(buf,DEC);
              lcd.print(" ");
            }
           lcd.print("  ");
          }
        }
      else
       {
            lcd.setCursor(0,1);
            lcd.print("Packet read --  ");
       }

    }
     
    Последнее редактирование: 30 ноя 2020
    Aneasol нравится это.
  2. Olegmih

    Olegmih Нерд

    Подключение и коррекция скетча на канале.
     
  3. parovoZZ

    parovoZZ Гуру

    И что здесь революционного? Если бы библиотеку переписал - снял бы шляпу.
     
  4. Olegmih

    Olegmih Нерд

    Да, как-то рука не поднимается чужую библиотеку корректировать и выкладывать. А с нуля написать не смогу, я любитель. Где подправить и как подключить я указал.
    Мне понадобился приёмопередатчик с минимальными габаритами и массой, заказал сначала этот, связать между собой их весной не смог т.к. инфы в инете минимум. Заказал несколько других..., не устроили..., по nrf почитал как люди мучаются... и решил добить или уж выбросить эти.
    Полтора месяца мытарств и то, что получилось я выложил, хорошо или плохо не знаю, судить вам. Но то-что кому-то пригодится, уверен.
     
  5. b707

    b707 Гуру

    а что в этом такого? - на гитхабе даже специальный механизм для этого есть - делаешь клон чужой библиотеки и правишь, в итоге будет видна и оригинальная и твоя
     
    Рокки1945 нравится это.
  6. Olegmih

    Olegmih Нерд

    Тогда попробую, но это не так быстро, я не профи.
     
  7. Olegmih

    Olegmih Нерд

    Запутался, если честно на GITHAB, да и Менгуанг смотрю, лицензии прижимает..., была 2-я ... сейчас уже 3-я с ограничениями... Не мой это хлеб честно сказать..., кто хочет, корректируйте! Будут вопросы..., спрашивайте!
     
  8. Aneasol

    Aneasol Нуб

    Отлично. Мне это очень пригодится в моем проекте. Спасибо
    Правда, нужно будет адаптировать это под работу с Arduino Pro Mini и TINY85 Digispark
     
  9. Olegmih

    Olegmih Нерд

  10. Olegmih

    Olegmih Нерд

  11. Olegmih

    Olegmih Нерд

    Спасибо мне сказали ..., это радует , хоть не забыли!