Select your language

Kuidas kasutada RF moodulit andmete ülekandmiseks.
Veel enne kui ESP moodulid mulle näppu puutusid, panustasin Arduino ha RF mooduli kooslusele.
Süsteem toimis, küll vahest kapriissemalt kui ESP-wifi) kuid asjal oli oma võlu.
Süsteemi idee on saatjas andmetest stringide moodustamine teatud algoritmi järgi ning hiljem vastuvõtjas kasutada pöördprotsessi.
Kribamist oli palju ja vahel läks ka midagi kaduma kuid ka see oli ületatav probleem.
Kui saatja saatis xxxx siis vastuvõtja võttis vastu xxxx ning saatsi selle stringi tagasi saatjale, kui xxxx = xxxx siis ok, kui ei siis  protsess kordus kuni rahuldava tulemuseni.
Aga nagu kirjutasin, siis ESP-MQTT-Raspberry-Node red kooslus võimaldas scripti sudida Node redis ja vähem on jooksmist arduinode vahel.
Nüüd on projekt unustuste hõlmas ja alles vaid teadmised ja helge mälestus, mida ei olegi vähe.
allolev script: A. nano kogub sensorite data (temperatuurid, valgustugevus jm) kirjutab maatriksisse
saatmisel loeb maatriksist, moodustab stringi  ja edastab.
Sisseehitatud ka tgasisise funktsioon
Stringi päises alati sihtpunkti ID ja kui ruumis on samaaegselt palju saatjaid vastuvõtjaid siis peab vastuvõtja häälestama "kuulama" oma ID-d

/*
   kanal 0 - Arduino Mega
   kanal 1 - Katel, küttesüsteem
   kanal 2 - Akupaak, saun, boiler
   kanal 3 - esik
   kanal 4 - õu
   kanal 5 - test
*/
int id1 = 1;
int id2 = 2;
int A, B, C, D, E, F, G, H, J, K;
int S = 0; // sek saatmiseks , et ei segaks PIRi
uint32_t tim1, tim2, tim3, tim4, tim5, tim6;

#include <RH_ASK.h>
#include <SPI.h>
RH_ASK driver;
char msg[50]; // message sent
//int dat[4][2] = {0}; // 4-kanal + 1-parameetrit
/*
#define pirPin1 2         //PIR HC-SR501
#define pirPin2 4         //PIR HC-SR501
#define mqPin A0          //suits MQ-2
#define micPin A1         //MIC KY-037
#define klPin A2          //vool light GL5516

#include <DHT.h>
DHT dht1(3, DHT11);
DHT dht2(5, DHT11);
*/
#include <OneWire.h>            //temp DS18B20
#include <DallasTemperature.h>
OneWire oW6(4); //ardino pin 4
DallasTemperature t6(&oW6);
OneWire oW1(5); //ardino pin 5
DallasTemperature t1(&oW1);
OneWire oW2(6); //ardino pin 6
DallasTemperature t2(&oW2);
OneWire oW3(7); //ardino pin 7
DallasTemperature t3(&oW3);
OneWire oW4(8); //ardino pin 8
DallasTemperature t4(&oW4);
OneWire oW5(9); //ardino pin 9
DallasTemperature t5(&oW5);

#define lghPin A1               //light GL5516

#include <Wire.h>
#include <SI7021.h>
SI7021 sensor;

#include <Average.h>
#include <avr/wdt.h>

void setup() {
  wdt_disable();
  Serial.begin(9600);
  if (!driver.init())   // !! peab olema RF
    Serial.println("RF error");
  //dht1.begin();
  //dht2.begin();
  sensor.begin();  //si7021 start
  t1.begin();      // temp DS18B20 start
  t2.begin();      // temp DS18B20 start
  t3.begin();      // temp DS18B20 start
  t4.begin();      // temp DS18B20 start
  t5.begin();      // temp DS18B20 start
  t6.begin();      // temp DS18B20 start
  //pinMode(pirPin1, INPUT);
  //pinMode(pirPin2, INPUT);
  delay(10000); // RIR sensor calibrating 10-60 sek.
  wdt_enable(WDTO_8S); // 8 sec
  //Serial.println(F("==> start"));
}

/*
void r_dht1() {
  if ((millis() > tim1) ) {
    tim1 = millis() + 10000;      // DHT11 min delay 1000
    A = dht1.readTemperature();   //temp DHT11
    B = dht1.readHumidity();      //hum DHT11
  }
}

void r_dht2() {
  if ((millis() > tim4) ) {
    tim4 = millis() + 10000;      // DHT11 min delay 1000
    F = dht2.readTemperature();   //temp DHT11
    G = dht2.readHumidity();      //hum DHT11
  }
}

void r_pir1() {
  if ((millis() > tim3) ) {
    tim3 = millis() + 1000;      // pir min delay 1000
    if (digitalRead(pirPin1) == HIGH) {
      C = 1;
    }
    else {
      C = 0;
    }
  }
}

void r_pir2() {
  if ((millis() > tim5) ) {
    tim5 = millis() + 1000;      // pir min delay 1000
    if (digitalRead(pirPin2) == HIGH) {
      H = 1;
    }
    else {
      H = 0;
    }
  }
}

void r_mic() {
  int i = 0;
  int aeg = 15;
  Average <int>d(aeg);
  while (i < aeg) {
    d.push(analogRead(micPin));
    i++;
  }
  D = d.mode();
}

void r_mq() {
  E = analogRead(mqPin);       //MQ2 >80 häire
}

void r_lgh2() {
  if (analogRead(klPin) < 900) {
    J = 1;
  } else {
    if (millis() > tim6 ) {
      tim6 = millis() + 5000;
      J = 0;
    }
  }
}

void r_xxx() {
  K = 0;
}
*/

void r_dall() {
  t1.requestTemperatures();
  t2.requestTemperatures();
  t3.requestTemperatures();
  t4.requestTemperatures();
  t5.requestTemperatures();
  t6.requestTemperatures();

  A = t1.getTempCByIndex(0);  //temp1 DS18B20 KK sisse
  B = t2.getTempCByIndex(0);  //temp2 DS18B20 KK tagastus
  C = t3.getTempCByIndex(0);  //temp3 DS18B20 Katel valja
  D = t4.getTempCByIndex(0);  //temp4 DS18B20 Katel sisse
  E = t5.getTempCByIndex(0);  //temp5 DS18B20 AKU top

  K = t6.getTempCByIndex(0);  //temp6 DS18B20 AKU mid
  J = 0;                      // vaba
}

void r_lgh1() {
    if (analogRead(lghPin) < 500) {
    F = 1;
  } else {
    if (millis() > tim6 ) {
      tim6 = millis() + 5000;
      F = 0;
    }
  }
  //F = analogRead(lghPin);             //light GL5516 boiler el. kute
}

void r_si() {
  si7021_env data = sensor.getHumidityAndTemperature(); //si7021
  G = data.celsiusHundredths / 100;   // saun temp
  H = data.humidityBasisPoints / 100; // saun hum
}
/*
void rf_kiir() {
  if ((millis() > tim6) ) {
    tim6 = millis() + 1000;
    if (C == 1 || D > 500 || E > 80 || H == 1 || J == 1) {
      Serial.println(F("=> Kiire"));
      rf_send();
    }
  }
}
*/
void saada() {
  driver.send((uint8_t *)msg, strlen(msg));
  driver.waitPacketSent();
  Serial.print(F(" msg:")); Serial.println(msg);
  memset(msg, 0, sizeof( msg)); msg[50] = '\0';  // ! important
}

void rf_send() {
  sprintf(msg, "%d,%d,%d,%d,%d,%d", id1, A, B, C, D, E);
  saada();
  sprintf(msg, "%d,%d,%d,%d,%d,%d", id2, F, G, H, J, K);
  saada();
  delay (S*1000+100);     // tähtis, et ei segaks PIR, min 100 to recice
}

/*
  void rf_recive(){
  //char msg[50]; // RF Transmission container
  int k = 0, A = 0;
  uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];
  uint8_t buflen = sizeof(buf);
  if (driver.recv(buf, &buflen)) {
    for (int i = 0; i < buflen; i++) {
      msg[i] = char(buf[i]);
    }
    sscanf(msg, "%d,%d", &k, &A);
    dat[k-10][2] = A;
    Serial.print(F("    <- k=")); Serial.print(k-10); Serial.print(F(" A= ")); Serial.println(dat[k-10][2]);
    memset(msg, 0, sizeof( msg)); msg[buflen] = '\0';  // ! important
  }
  delay(1000);    // ! important
  }
*/

void loop() {
  wdt_reset();
  //r_dht1();
  //r_pir1();
  //r_mic();
  //r_mq();
  //r_dht2();
  //r_pir2();
  //r_lgh2();
  //r_xxx();
  r_dall();
  r_lgh1();
  r_si();
  //rf_kiir();
  if ((millis() > tim2) ) {
    tim2 = millis() + 10000;
    rf_send();
  }
  //rf_recive();
}


​