• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Grove RF 433 MHz
#1
    Witam, od 2 dni walczę z wysłaniem sygnału o treści „ hello”. Mowa o module Grove RF 433 MHz. Piny w nadajniku i odbiorniku podłączam do dwóch Arduino w sposób:

VCC – 5V
GND – GND
SIG-DO PIN 2 NA ARDUINO

NC-NIGDZIE
[Obrazek: NADAJNIK-ODBIORNIK-Grove-RF-433-MHz.jpg]



Odbiornik jest podłączony do Arduino Uno Wifi

[Obrazek: NADAJNIK-Grove-RF-433-MHz.jpg]

[Obrazek: NADAJNIK-POD-LUP-Grove-RF-433-MHz.jpg]

Nadajnik jest podłączony do Arduino Uno


[Obrazek: ODBIORNIK-Grove-RF-433-MHz.jpg]
[Obrazek: ODBIORNIK-POD-LUP-Grove-RF-433-MHz.jpg]


Pin 2 na Arduino NADAJNIK ustawiam na INPUT a w Arduino ODBIORNIK na OUTPUT.
Mam wgrany program do Arduino ODBIORNIK otworzony monitor portu szeregowego. Wgrywam program do NADAJNIK i na monitorze w ODBIORNIK pokazuje się tylko „ system” bo tak jest w kodzie ale napisu z transmisji nie ma. Próbowałem już różnych pinów i analogowych i TX i nic się nie wysłało. Zmieniałem, nawet odbiornik - nadajnik bo może tu się pomyliłem ale nie pomogło.


MONITOR ODBIORNIKA:


[Obrazek: ODBIORNIK-Grove-RF-433-MHz.png]


MONITOR NADAJNIKA:

[Obrazek: NADAJNIK-Grove-RF-433-MHz.png]

KOD NADAJNIKA:


Kod:
#include <VirtualWire.h>

    //Grove - 315(433) RF link kit Demo v1.0
    //by :https://www.seeedstudio.com/
    //connect the sent module to D2 to use 
    #include <VirtualWire.h>

    int RF_TX_PIN = 2;

    void setup()

    {
      pinMode(RF_TX_PIN, INPUT);
      vw_set_tx_pin(RF_TX_PIN); // Setup transmit pin
      vw_setup(2000); // Transmission speed in bits per second.
    }

    void loop()
    {
      const char *msg = "hello";
      vw_send((uint8_t *)msg, strlen(msg));  // Send 'hello' every 400ms.
      delay(400);

    }

KOD ODBIORNIKA:


Kod:
    //Grove - 315(433) RF link kit Demo v1.0
    //by :https://www.seeedstudio.com/
    //connect the receive module to D2 to use ..
    #include <VirtualWire.h>

    int RF_RX_PIN = 2;

    void setup()
    {
      pinMode(RF_TX_PIN, OUTPUT);
      Serial.begin(9600);
      Serial.println("setup");
      vw_set_rx_pin(RF_RX_PIN);  // Setup receive pin.
      vw_setup(2000); // Transmission speed in bits per second.
      vw_rx_start(); // Start the PLL receiver.
    }

    void loop()
    {
      uint8_t buf[VW_MAX_MESSAGE_LEN];
      uint8_t buflen = VW_MAX_MESSAGE_LEN;
      if(vw_get_message(buf, &buflen)) // non-blocking I/O
      {
        int i;
        // Message with a good checksum received, dump HEX
        Serial.print("Got: ");
        for(i = 0; i < buflen; ++i)
        {
          Serial.print(buf[i], HEX);
          Serial.print(" ");
          //Serial.print(buf[i]);
        }
        Serial.println("");
      }
    }



Link do botland Grove RF 433 MHz

Link do instrukcji producenta:
Instrukcja Grove RF 433 MHz

Być może moduł Grove RF 433 MHz zadziała tylko z modułem Grove - Base Shield V2 na Arduino i musuowo kupić 2x- Grove - Base Shield V2



Dodam, że udało mi się połączyć Czterokanałowy moduł radiowy 433 MHz + pilot i zapalać 4 diody różnymi przyciskami.


Czterokanałowy moduł radiowy 433 MHz + pilot

[video=youtube]http://https://youtu.be/vz3iA9qa9mA[/video]


Proszę o poradę co powinienem zrobić aby nawiązać łączność za pomocą Grove RF 433 MHz
 
Odpowiedź
#2
Generalnie to wygląda jak jakaś odmiana tych modułów po 5 zeta: https://allegro.pl/oferta/modul-radiowy-...7797277460 a tu nie ma żadnej filozofii, podłączasz, przykładowy kod i działa. Nie wiem czemu w odbiorniku ustawia się pin jako wyjście, a w nadajniku odwrotnie, może biblioteka to odkręca potem, może odwrotnie wkleiłeś?
 
Odpowiedź
#3
Próbowałem już wklejać kod w dwóch różnych możliwościach i nie pomogło. Pisałem o tym: " Zmieniałem, nawet odbiornik - nadajnik bo może tu się pomyliłem ale nie pomogło. " Zmieniałem OUTPUT na INPUT I też nic. Linijkę z pinMode(RF_RX_PIN,INPUT) lub pinMode(RF_RX_PIN,OUTPUT) dodałem bo kombinuje co zrobić. Bez tej linijki też nic się nie wysyła. 

[Obrazek: 31-264-2.jpg]
 
Odpowiedź
#4
Zauważyłem, że kod do Arduino Uno WiFi Rev2. co do nadajnika wcale się nie wgrywa i tu jest pierwszy problem. Na chwilę obecną drąże ten temat. Możliwe, że będę musiał kupić drugą płytkę Arduino Uno bez WiFi bo na nią kod się wgrywa. Mam kod do nadajnika na nowszej bibliotece <RH_ASK.h> i nadal nie mogę wgrać kodu na Arduino Uno WiFi Rev2. Inne programy które zrobiłem działają.

Nowy kod nadajnika(TX) oparty na <RH_ASK.h> :


Kod:
#include <RadioHead.h>
#include <radio_config_Si4460.h>
#include <RHCRC.h>
#include <RHDatagram.h>
#include <RHGenericDriver.h>
#include <RHGenericSPI.h>
#include <RHHardwareSPI.h>
#include <RHMesh.h>
#include <RHNRFSPIDriver.h>
#include <RHReliableDatagram.h>
#include <RHRouter.h>
#include <RHSoftwareSPI.h>
#include <RHSPIDriver.h>
#include <RHTcpProtocol.h>
#include <RH_ASK.h>
#include <RH_NRF24.h>
#include <RH_NRF905.h>
#include <RH_RF22.h>
#include <RH_RF24.h>
#include <RH_RF69.h>
#include <RH_RF95.h>
#include <RH_Serial.h>
#include <RH_TCP.h>



#include <SPI.h> // Not actualy used but needed to compile

RH_ASK driver;

void setup()
{
  pinMode(13,1);
    Serial.begin(9600);  // Debugging only
    if (!driver.init())
         Serial.println("init failed");
}

void loop()
{
    uint8_t buf[12];
    uint8_t buflen = sizeof(buf);
    String x="";
    String y="Turn LED OFF";
    if (driver.recv(buf, &buflen)) // Non-blocking
    {
      int i;
      // Message with a good checksum received, dump it.
      Serial.print("Message: ");
      x=((String)(char*)buf);
      x.trim();
      Serial.println(x+ " :"+x.length());  
       if(x=="Turn LED ON!")
       {
        Serial.println("true ");
        digitalWrite(13,1);
        }
        else
        {
          digitalWrite(13,0);
          }
         
    }
   
}




Tyle importów #include robi się przez SZKIC>DOŁĄCZ BIBLIOTEKĘ>RADIOHEAD
Kiedy w kodzie jest samo #include <RH_ASK.h> wywala jeszcze więcej błędów.



Nowy kod odbiornika(RX) oparty na <RH_ASK.h> :

Kod:
#include <RH_ASK.h>
#include <SPI.h> // Not actualy used but needed to compile

RH_ASK driver;

void setup()
{
    Serial.begin(9600);  // Debugging only
    if (!driver.init())
         Serial.println("init failed");
}

void loop()
{
    uint8_t buf[12];
    uint8_t buflen = sizeof(buf);
    if (driver.recv(buf, &buflen)) // Non-blocking
    {
      int i;
      // Message with a good checksum received, dump it.
      Serial.print("Message: ");
      Serial.println((char*)buf);        
    }
   
}


Błędy które wywala mi na Arduino Uno WiFi Rev2 :

Kod:
In file included from C:\Users\Lenovo T420S\Desktop\Arduino\KOMPILACJA\sketch_jan06a\sketch_jan06a.ino:22:0:
C:\Users\Lenovo T420S\Downloads\DS3231-1.1.0\libraries\RadioHead/RH_Serial.h:105:29: error: expected ')' before '&' token
     RH_Serial(HardwareSerial& serial);
                             ^
C:\Users\Lenovo T420S\Downloads\DS3231-1.1.0\libraries\RadioHead/RH_Serial.h:177:5: error: reference to 'HardwareSerial' is ambiguous
     HardwareSerial& _serial;
     ^~~~~~~~~~~~~~
C:\Users\Lenovo T420S\Downloads\DS3231-1.1.0\libraries\RadioHead/RH_Serial.h:36:7: note: candidates are: class HardwareSerial
class HardwareSerial;
       ^~~~~~~~~~~~~~
In file included from C:\Users\Lenovo T420S\AppData\Local\Arduino15\packages\arduino\hardware\megaavr\1.8.7\cores\arduino/UART.h:27:0,
                 from C:\Users\Lenovo T420S\AppData\Local\Arduino15\packages\arduino\hardware\megaavr\1.8.7\cores\arduino/Arduino.h:140,
                 from sketch\sketch_jan06a.ino.cpp:1:
C:\Users\Lenovo T420S\AppData\Local\Arduino15\packages\arduino\hardware\megaavr\1.8.7\cores\arduino/api/HardwareSerial.h:87:7: note:                 class arduino::HardwareSerial
class HardwareSerial : public Stream
       ^~~~~~~~~~~~~~
exit status 1
Błąd kompilacji dla płytki Arduino Uno WiFi Rev2.
 
Odpowiedź
#5
Nie mam takiej płytki, a to jest nietypowy dla Arduino uC ATmega4809, może po prostu nie jest uwzględniony w tej bibliotece do Grove. Ma co prawda aż 4 UART (Serial), ale jak widać są tu jakieś konflikty, może coś jest inaczej poprzypisywane do komunikacji z USB i modułem WIFI.
Nie wiem po co tej bibliotece Grvoe odwołania do Serial, może zamień komunikaty na serial w miganie LED, pomoże jak nie są zaszyte w bibliotekę jakieś komunikaty serwisowe na Serial do PC.
No i jakiś tani klon NANO zadziała pewnie prawidłowo, skoro na zwykłym UNO działa OK.
No i na koniec, to jest błąd kompilacji, nie wgrywania, zanim kupisz inne Arduino wybierz płytkę, na jaką to ma być wgrane, nie musi być podłączona ani nawet w promieniu kilometra od komputera, kliknij kompiluj i jak pójdzie bez błędów to zrób taki zakup. Przynajmniej ten etap będziesz miał pewny, potem się będziesz martwił wgraniem i samym działaniem.
 
Odpowiedź
#6
Dziękuje za pomoc. Kupiłem drugie Arduino Uno i po problemie. Jak będę miał czas. Postaram się jeszcze uruchomić ten moduł na Arduino WiFi i odpiszę jak to zrobiłem.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości