LoRa 모듈 E22-900T22S Breakout Board 설계 2


지난번 설계에서 두 가지 업데이트 사항이 있다.
첫 번째로 3.3V 로 로직 컨버터를 거치지 않고 직접 통신할수 있는 포트를 구성하였다. 
이 포트를 통해 3.3V 동작의 MCU를 사용할때 좀 더 빠르게 회로를 구성  할수 있을것으로 기대한다.
두 번째로 동작 전압 레벨이 서로 다른 MCU 와 Lora 모듈이 통신할때 사용할 기준전압을 직접 인가 할 수 있도록 하였다.



보드에는 위 와같은 점퍼가 주어지는데 3.3V 나 5V 로 점프 시키지 않을 경우 VREF 핀에 사용할 소스전압을 직접 인가해 주어야한다. 특수한 경우가 아니라면 Vref를 사용하는일은 없을것 같다.


위사 진들은 이번에 제작한 테스트 모듈이다. 
왼쪽은 E22-900T22S 모듈이고 오른쪽은 ATmega328P/PB 3.3V 8Mhz 보드를 준비했다.
오른쪽의 보드는 ATmega328P/PB 를 모두 장착하여 사용할 수 있도록 설계했다.

E22-900T22S 보드의 전체 회로는 다음과 같다.
동작 전압 레벨이 서로 다른 장치와 통신 할 수 있도록 레벨 컨버터를 추가 하였고, 핀 헤더를 장착하여 다른 MCU 보드와 통신하거나 점퍼를 수정해서 USB 시리얼 통신을 할수 있도록 했다.



모듈의 테스트는 mischianti의 E22 라이브러리를 사용했다.

정리가 아주 잘 되어있는 라이브러리로 생각된다.

아래 코드는 라이브러리에 포함된 시리얼 입력을 LoRa 통신으로 전송하는 예제이다.

LoraATmega328p
AUXD3
RXD4
TXD5
M1D6/GND
M0D7/GND

송신측 코드

#include "Arduino.h"
#include "LoRa_E22.h"

LoRa_E22 e22ttl(4, 5, 3, 7, 6);

void setup() {
    Serial.begin(9600);
    delay(500);

    // Startup all pins and UART
    e22ttl.begin();

    Serial.println("Hi, I'm going to send message!");

    // Send message
    ResponseStatus rs = e22ttl.sendBroadcastFixedMessage(0x47, "Hello, world?");
    // Check If there is some problem of succesfully send
    Serial.println(rs.getResponseDescription());
}

void loop() {
    // If something available
    if (e22ttl.available() > 1) {
        // read the String message
#ifdef ENABLE_RSSI
        ResponseContainer rc = e22ttl.receiveMessageRSSI();
#else
        ResponseContainer rc = e22ttl.receiveMessage();
#endif
        // Is something goes wrong print error
        if (rc.status.code != 1) {
            Serial.println(rc.status.getResponseDescription());
        } else {
            // Print the data received
            Serial.println(rc.status.getResponseDescription());
            Serial.println(rc.data);
#ifdef ENABLE_RSSI
            Serial.print("RSSI: ");
            Serial.println(rc.rssi, DEC);
#endif
        }
    }
    if (Serial.available()) {
        String input = Serial.readString();
        ResponseStatus rs = e22ttl.sendBroadcastFixedMessage(0x47, input);
        // Check If there is some problem of succesfully send
        Serial.println(rs.getResponseDescription());
    }
}


수신측 코드

#define DESTINATION_ADDL 3

#include "Arduino.h"
#include "LoRa_E22.h"

LoRa_E22 e22ttl(4, 5, 3, 7, 6);

void setup() {
    Serial.begin(9600);
    delay(500);

    // Startup all pins and UART
    e22ttl.begin();
}

void loop() {
    // If something available
    if (e22ttl.available() > 1) {
        // read the String message
#ifdef ENABLE_RSSI
        ResponseContainer rc = e22ttl.receiveMessageRSSI();
#else
        ResponseContainer rc = e22ttl.receiveMessage();
#endif
        // Is something goes wrong print error
        if (rc.status.code != 1) {
            Serial.println(rc.status.getResponseDescription());
        } else {
            // Print the data received
            Serial.println(rc.status.getResponseDescription());
            Serial.println(rc.data);
#ifdef ENABLE_RSSI
            Serial.print("RSSI: ");
            Serial.println(rc.rssi, DEC);
#endif
        }
    }
    if (Serial.available()) {
        String input = Serial.readString();
        e22ttl.sendFixedMessage(0, DESTINATION_ADDL, 0x47, input);
    }
}



Comments

Popular posts from this blog

[POE] - 패스 오브 엑자일 획득키 F 의 사용법 (Path of Exile)

[Arduino] - HC-06를 이용해 PC 와 Arduino 블루투스 연결

[Python] - 블루투스 모듈 HC-06의 MAC 주소를 이용하여 통신 포트 찾기