RF433MHz

Da raspibo.
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
200px

Antenna RF 433MHz
Antenna RF 433MHz, prove d'utilizzo
Repository: non ancora

Antenna RF 433MHz

ATTENZIONE
Le immagini sono puramente indicative.
Fra i simboli di redirezione "<" e ">", sono inseriti i nomi fittizi da sostituire con reali (per esempio: <nomefile.txt>)
Fra parentesi quadre "[]" sono indicati comandi opzionali.


Descrizione

Antenna RF 433MHz

Non e` un progetto vero e proprio, e` piu` una prova d'uso di questa antenna.


Hardware

I codici articolo stampigliati sulle schede RF sono:

Trasmettitore FS1000A
Ricevitore XY-MK-5V

Scheda Arduino Uno, ne servono due.

Poi per la prova ho collegato una forcina di controllo umidita` del terreno, codice YL-100, non necessita di modulo aggiuntivo, genera gia` di per se un'uscita analogica, che pero` non arrivera` mai a fondo scala (5V).

Il circuito e` semplice ed ancora non l'ho messo in bella copia, e` comunque sufficiente sbirciare i programmi, c'e` praticamente scritto dentro.


Software

Trasmettitore

/*
 * Lettura e trasmissione del valore di umidita`
 */
// ask_transmitter.pde
// -*- mode: C++ -*-
// Simple example of how to use RadioHead to transmit messages
// with a simple ASK transmitter in a very simple way.
// Implements a simplex (one-way) transmitter with an TX-C1 module
/*
 * (Derivato da esempio citato sopra)
 * 
 * Legge l'ingresso analogico 0, fa` una media di 10 valori letti, 
 * ed invia il valore con una stringa in formato json al ricevitore.
 * 
 * Ho dovuto ridurre il Topic perche` non funzionava, troppo lungo.
 */

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

/*
 * RH_ASK (speed, rxPin, txPin, pttPin, false/true)
 * speed = velocita` (default 2000)
 * rxPin, il pin di ricezione (default 11)
 * txPin, il pin di trasmissione (default 12)
 * pttPin, il pin di abilitazione (default 10)
 * false/true, se false, pttPin dev'essere alto per abilitare
 *             se true,  pttPin dev'essere basso per abilitare
 *             (default false)
 * 
 */
RH_ASK driver;
// RH_ASK driver(2000, 2, 4, 5); // ESP8266: do not use pin 11

int hPin = 0;  // Pin analogico sensore umidita` del terreno
String exitString;  // Stringa da inviare
//String Topic;  // Stringa Topic (json style)
String ID1;  // Stringa per composizione iniziale (1)
String IDend;  // Stringa per composizione finale (End)

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

void loop()
{
  // Trasmettitore
  Serial.println("\t * RF Transmitter *"); // myDebug

  int SumH = 0; // Somma humidita`
  for (int i = 0; i < 10; i++) {
    SumH += analogRead(hPin);  // Somma valori
    Serial.print(i); // myDebug
    Serial.print("\t"); // myDebug
    Serial.println(SumH); // myDebug
    delay(1000);
  }
  Serial.print(SumH); // myDebug
  float ResH = SumH / 10.0; // Media humidity
  Serial.print("\t"); // myDebug
  Serial.println(ResH); // myDebug

  // Creazione stringa da inviare
  //Topic = "I/Giardino/PianoTerra/VasoFiori/Umidita";
  ID1 = "{ \"ID\" : \"SThum\", \"Valore\" : \"";
  IDend = "\" }";
  //exitString = Topic+" "+ID1+String(ResH)+IDend;
  exitString = ID1+String(ResH)+IDend;
  Serial.println(exitString); // myDebug

  // RF
  const char *msg = exitString.c_str();
  //const char *msg = "{ \"ID\" : \"SThum\", \"Valore\" : \"000\" }";
  Serial.println(msg); // myDebug

  // RF
  driver.send((uint8_t *)msg, strlen(msg));
  driver.waitPacketSent();
  //delay(1000); // L'ho bypassata perche` ci sono gia` i delay nella lettura analogica
}

Ricevitore

// ask_receiver
// -*- mode: C++ -*-
// Simple example of how to use RadioHead to receive messages
// with a simple ASK transmitter in a very simple way.
// Implements a simplex (one-way) receiver with an Rx-B1 module
/*
 * Modificato/riadattato per provare alcune possibilita`
 * e verificare come poterlo utilizzare.
 * Questo "ask" e` l'unico (di questa libreria) usabile
 * per le RF a 433MHz.
 */

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


/*
 * RH_ASK (speed, rxPin, txPin, pttPin, false/true)
 * speed = velocita` (default 2000)
 * rxPin, il pin di ricezione (default 11)
 * txPin, il pin di trasmissione (default 12)
 * pttPin, il pin di abilitazione (default 10)
 * false/true, se false, pttPin dev'essere alto per abilitare
 *             se true,  pttPin dev'essere basso per abilitare
 *             (default false)
 * 
 */
RH_ASK driver;
// RH_ASK driver(2000, 2, 4, 5); // ESP8266: do not use pin 11

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

void loop()
{
    uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];
    uint8_t buflen = sizeof(buf);

    if (driver.recv(buf, &buflen)) // Non-blocking
    {
	    //int i;
      
	    // Message with a good checksum received, dump it.
	    driver.printBuffer("Got:", (char*)buf, buflen);
      // Quello che segue serve a stampare i caratteri e non i numeri
      for (int j=0; j<buflen; j++){
        Serial.print((char)buf[j]);
      }
      Serial.print('\n');
      Serial.println("\t receiver");
      // end!
    }
    //Serial.println('\t receiver');
}


Utilizzo

Una volta accesi, il trasmettitore invia a cadenza regolare la media di 10 misurazioni effettuate dalla sonda.

Per verificare la trasmissione e i dati ci si deve collegare alla seriale arduino, nei programmi ho messo la stampa della stringa trasmettitore o ricevitore, per non confondersi ;)

Per effettuare alcune prove, ho avuto la necessita` di aggiungere un'unteriore progetto, un "visualizzatore" di seriale, anche questo e` una prova, lo troverete alla pagina SerialViewGLCD (al momento in cui scrivo, ancora non esiste).


Riferimenti

(Non tutti effettivamente consultati/utilizzati)