4 LoRa-radiomoduulien testailua

LoRa on näppärä tapa siirtää tietoa langattomasti radioteitse.
Ebayssa on myynnissä edulliseen hintaan Arduinoon suoraan sopivia LoRa-moduuleita,
esimerkiksi SX1276-piirillä.
Ilman kunnollista antennia näiden kantomatka jää muutamaan sataan metriin, mutta kokeilussa
tämä on vain hyvä asia niin ei vahingossakaan häiritä muita.
Kannattaa huomioida että myynnissä on moduuleita usealle eri taajuusalueella ja kaikki niistä ei ole Suomessa sallittuja.
Myöskin kannattaa perehtyä Traficomin määräykseen, rajoitteita on esimerkiksi toimintasuhteen osalta.


Kokeilu tarvitsee kaksi identtistä kokoonpanoa (tukiasemassa piipparia ei  tarvitse, mutta ei sen kytkeminen toki haittaakaan mitään).

Liikenteen periaate on seuraava:
LIIKKUVA                  TUKIASEMA
>?200<             -->
                         <--        >!200<
(PIIP)
>?400<             -->
                         <--        >!400<
(PIIP)
-----------------------------------------------

Liikkuva asema lähettää tukiasemalle viestin >?200<
Tukiasema vastaanottaa paketin ja lähettää vastauksen >!200<
Kun liikkuva asema saa vastauksen oikein, se soittaa piipparia lyhyesti.
Jos vastaus tulee, mutta se on virheellinen, soitetaan piipparia kahdesti.
Tuo numero on joka kierroksella kasvava luku.
Ohjelmakoodissa liikkuva.ino rivillä
if (kierros % 200 == 0) {
määritellään kuinka monen kierroksen välein tukiasemalle dataa lähetetään.
Tässä pitää nuo Traficomin määräykset huomioida, ettei lähetetä liian suurta aikaa
toimintasuhteen osalta.

Liikkuvan aseman pakkasin reppuun  muoviseen jäätelörasiaan virtapankin kera...

...ja lähdin koiran kanssa lenkille kuuntelemaan kentän kantavuutta.
Kaupungissa liikkuessa kannattaa harkita, onko välttämättä hyvä idea kävellä pitkin poikin
piipittävä reppu selässä vai miettiikö piipparin sijaan jonkun muun käyttöliittymän laitteella
mikäli haluaa välttää ylimääräisen hämmingin aiheuttamista.



LIIKKUVA ja TUKIASEMA molemmat  samalla kytkennällä:

Arduinossa käytetty kirjasto: Lora by Sandeep Mistry Version 0.5.0

[liikkuva.ino]

#include <SPI.h>
#include <LoRa.h>
#define PIIPPARI 5
unsigned long kierros = 0;
//LORA TESTI LIIKKUVA ASEMA NANO
//Lähettää tukiasemalle ">?8<" JOSSA 8 JUOKSEVA NUMERO. Odottaa saavansa vastaukseksi ">!8<"
String  vastaanotettu = "";
String lahetettava = "";

void piipita (int luku) {
  for (int a = 0; a < luku; a++) {
    digitalWrite(PIIPPARI, HIGH);
    delay(100);
    digitalWrite(PIIPPARI, LOW);
    delay(50);
  }
}

void setup() {
  pinMode(PIIPPARI, OUTPUT);
  Serial.begin(9600);
  piipita(3);
  Serial.println("Lora liikkuva käynnissä");
  if (!LoRa.begin(868E6)) {
    piipita(10);
    Serial.println("Lora-moduuli ei toimi. Tarkasta kytkentä");
    while (1);
  }
}

void loop() {
  //LÄHETETÄÄN JOKA NN KIERROS SANOMA TUKIASEMALLE
  if (kierros % 200 == 0) {
    Serial.print("Lähetetään: ");
    lahetettava = ">?" + String(kierros) + "<";
    LoRa.beginPacket();
    Serial.println(lahetettava);
    LoRa.print(lahetettava);
    LoRa.endPacket();
  }

  // VASTAANOTETAAN DATAA
  vastaanotettu="";
  if (LoRa.parsePacket()) {//jOS LORASTA ON TULEMASSA DATAA
    Serial.print("Vastaanotettu '");
    while (LoRa.available()) {
      vastaanotettu += char(LoRa.read());
    }
    Serial.println("Saatu sanoma kokonaan: " + vastaanotettu);
    if (vastaanotettu[0] == '>') { //Sanoma kuuluu alkaa ">"-merkillä. Jos se ei ala, se tuskin on meille kuuluva paketti joten ei vastata siihen
      if (vastaanotettu.substring(2) == lahetettava.substring(2)) {
        piipita(1);
      }
      else{
        piipita(2);
      }
    }
  }
  kierros++;
  delay(50);
}



[tukiasema.ino]

#include <SPI.h>
#include <LoRa.h>
//LORA TESTI TUKIASEMA NANO
//ODOTTAA SAAVANSA LORALTA SANOMAN >?8< JOSSA 8 JUOKSEVA NUMERO. KUN SAA SEN, VASTAA >!8<
String  vastaanotettu = "";
void setup() {
  Serial.begin(9600);
  Serial.println("Lora tukiasema käynnissä");
  if (!LoRa.begin(868E6)) {
    Serial.println("Lora-moduuli ei toimi. Tarkasta kytkentä");
    while (1);
  }
}

void loop() {
  // VASTAANOTETAAN DATAA
  vastaanotettu="";
  int packetSize = LoRa.parsePacket(); //jOS LORASTA ON TULEMASSA DATAA
  if (packetSize) {
    // received a packet
    Serial.print("Received packet '");
    while (LoRa.available()) {
      vastaanotettu += char(LoRa.read());
      Serial.println(vastaanotettu);
    }
    Serial.println("Saatu sanoma kokonaan: " + vastaanotettu);

    // print RSSI of packet
    Serial.print("' with RSSI ");
    Serial.println(LoRa.packetRssi());

    if (vastaanotettu[0] == '>') { //Sanoma kuuluu alkaa ">"-merkillä. Jos se ei ala, se tuskin on meille kuuluva paketti joten ei vastata siihen
      Serial.print("Sending packet: ");
      vastaanotettu[1] = '!';
      Serial.println(vastaanotettu);
      LoRa.beginPacket();
      LoRa.print(vastaanotettu);
      LoRa.endPacket();
    }

    delay(100);
  }
 
}

Kommentit

Tämän blogin suosituimmat tekstit

0 Nyymi Nysvää

2 Ensimmäinen projekti: Lämpömittari RS485-väylään