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

Image
지난번 설계 에서 두 가지 업데이트 사항이 있다. 첫 번째로 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 통신으로 전송하는 예제이다. Lora ATmega328p AUX D3 RX D4 TX D5 M1 D6/GND M0 D7/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(&q

[Arduino] - 파이썬을 이용한 아두이노와 PC 시리얼 통신


파이썬의 시리얼 통신모듈인 pyserial 은 윈도우에서는 커뮤니테이션 포트(com port)를 이용해 장치와 통신을 할수 있게 해준다. 이 모듈을 사용하기 위해서는 pyserial 이 설치되어있어야 한다.

pip install pyserial 

다음은 class serial.Serial의 입력 인수들이다.
  • port – 장치 이름 (ex. COM17, dev/tty.usbserial 또는 tty.usbmodem 등)
  • baudrate (int) – 전송속도(baud rate) (ex. 9600, 115200 등)
  • bytesize – 데이터 비트수 ( FIVEBITSSIXBITSSEVENBITSEIGHTBITS )
  • parity – 패리티 검사 ( PARITY_NONEPARITY_EVENPARITY_ODDPARITY_MARKPARITY_SPACE )
  • stopbits – 정지비트 ( STOPBITS_ONESTOPBITS_ONE_POINT_FIVE,STOPBITS_TWO )
  • timeout (float) – 수신 제한시간 설정
  • xonxoff (bool) – (xon/xoff) 소프트웨어 흐름제어
  • rtscts (bool) – 하드웨어 흐름제어 (RTS/CTS)
  • dsrdtr (bool) – 하드웨어 흐름제어 (DSR/DTR)
  • write_timeout (float) – 송신 세한시간 설정
  • inter_byte_timeout (float) – Inter-character timeout, None to disable (default).
  • exclusive (bool) – 단독 엑세스 모드(exclusive access mode) 설정 (POSIX 에서 만 해당). 포트가 이미 독점 모드로 열려있는 경우 독점 모드로 사용될수 없다.
*RTS - Request To Send, CTS - Clear To Send
*DTR - Data Terminal Ready, DSR - Data Set Ready

일반적인 상황에서는 통신 포트 이름전송 속도만 신경써주면 된다. 하지만 몇몇 운영체제에서는 포트가 열리자마자 하드웨어 흐름 제어 기능이 자동으로 활성화되는 경우가 있다. 흐름제어가 활성화되면 rx tx 만으로는 통신이 되지 않게되니 필요한경우가 아니라면 다음과 같이 false를 주면된다.
serial.Serial(device_Port, 115200, timeout=1,
            xonxoff=False, rtscts=False, dsrdtr=False)
cs




ex) 아두이노에서 파이썬으로 문자열을 보내는 간단한 예제.
  • 아두이노
const char *line = "This is a serial communication test.";
void setup() {
    Serial.begin(112500);
}
void loop() {
    Serial.println(line);
    Serial.flush();
    delay(500);
}
cs
  • 파이썬
import serial
arduino_port = '통신 포트 이름'
serialFromArduino = serial.Serial(arduino_port, 115200, timeout=1)
while True:
    line = serialFromArduino.readline().decode("utf-8")
    print(line)
cs

물론 반대로 파이썬에서 아두이노로 데이터를 보내 LED나 모터를 제어하는 것도 가능하다.

시리얼 - 파이썬
시리얼 - 아두이노

Comments

Popular posts from this blog

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

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

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