Arduino

아두이노간 LoRa 통신 : 다중 슬레이브 선택 송신하기

작성자 임베디드코리아 작성일25-05-25 01:44 조회96회 댓글0건

첨부파일

<* LoRa 통신 : 다중 슬레이브 선택 송신 *>
◎ 마스터를 송신기로 하고, 수신기를 슬레이브로한다.
    ▷ 슬레이브 ID를 설정한다.
    ▷ 슬레이브 ID로 송신하고, 해당되는 슬레이브에서 수신한다.

--------- < LoRa 통신 다중 슬레이브 선택 송신 소스 코드 > -------------------------------
#include <SPI.h>
#include <LoRa.h>

#define button1 3
#define button2 4
#define button3 5
#define button4 6

byte slave1_id = 0xC1; //0x00~0xFF, 0~255

int counter = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("LoRa Sender");
 
  pinMode(button1,INPUT_PULLUP);
  pinMode(button2,INPUT_PULLUP);
  pinMode(button3,INPUT_PULLUP);
  pinMode(button4,INPUT_PULLUP);

  if (!LoRa.begin(915E6)) {      // initialize ratio at 915 MHz
    Serial.println("LoRa init failed. Check your connections.");
    while(true);                //if failed, do nothing
  }

}

void loop() {
  /*  /버튼을 누르면 수신기쪽으로 '1'을 전송한다! */
  if(digitalRead(button1) == LOW){  // 버튼1을 누르면 수신기쪽으로 '1'을 전송한다.
    LoRa.beginPacket();
    LoRa.write(slave1_id);
    LoRa.write('1');
    LoRa.endPacket();
    delay(300);
  }
  if(digitalRead(button2) == LOW){    // 버튼2을 누르면 수신기쪽으로 '2'을 전송한다.
    LoRa.beginPacket();
    LoRa.write(slave1_id);
    LoRa.write('2');
    LoRa.endPacket();
    delay(300);
  }
  if(digitalRead(button3) == LOW){    // 버튼3을 누르면 수신기쪽으로 '3'을 전송한다.
    LoRa.beginPacket();
    LoRa.write(slave1_id);
    LoRa.write('3');
    LoRa.endPacket();
    delay(300);
  }
  if(digitalRead(button4) == LOW){    // 버튼4을 누르면 수신기쪽으로 '4'을 전송한다.
    LoRa.beginPacket();
    LoRa.write(slave1_id);
    LoRa.write('4');
    LoRa.endPacket();
    delay(300);
  }

}

--------- < LoRa 통신 다중 슬레이브 선택 수신 소스 코드 > -------------------------------
#include <SPI.h>
#include <LoRa.h>

#define LED1 3
#define LED2 4
#define LED3 5
#define LED4 6

byte slave1_id = 0xC1; //0x00~0xFF, 0~255

void setup() {
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT);
  pinMode(LED3,OUTPUT);
  pinMode(LED4,OUTPUT);

  Serial.begin(9600);
  Serial.println("LoRa Receiver");

  if (!LoRa.begin(915E6)) {      // initialize ratio at 915 MHz
    Serial.println("LoRa init failed. Check your connections.");
    while(true);                //if failed, do nothing
  }

}

void loop() {
  // try to parse packet
  int packetSize = LoRa.parsePacket();    // 수신된 데이터 크기를 packetSize에 저장
  if (packetSize > 0) {                    //수신된 데이터가 존재 한다.
    Serial.print("Received packet '");
    Serial.println(packetSize);

    /*  read packet */
    byte id = LoRa.read();        // ID 읽기
    char data = LoRa.read();      // 데이터 읽기

    Serial.println(id,HEX);
    Serial.println(data);
 
    if(id != slave1_id) return;  // ID가 맞지 않으면
   
    /* LED 제어 */
    if(data == '1'){
      digitalWrite(LED1,!digitalRead(LED1));  //송신기에서 1을 받으면 1번 LED 반전
    }else if(data == '2'){
      digitalWrite(LED2,!digitalRead(LED2));  //송신기에서 2을 받으면 2번 LED 반전
    }else if(data == '3'){
      digitalWrite(LED3,!digitalRead(LED3));  //송신기에서 3을 받으면 4번 LED 반전
    }else if(data == '4'){
      digitalWrite(LED4,!digitalRead(LED4));  //송신기에서 4을 받으면 4번 LED 반전
    }
   
    // print RSSI of packet
    Serial.print("' with RSSI ");
    Serial.println(LoRa.packetRssi());
  }

}