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

[Raspberry Pi] - rc카 만들기 #4 라즈베리 파이 부팅시 자동실행(Raspberry Pi Autostart)




 #4 라즈베리 파이 부팅시 자동실행


지난번까지 작성한 스크립트를 Raspberry Pi가 부팅하면서 알아서 실행하도록 해보겠다.
우선 Raspberry Pi가 켜질때 스크립트 혹은 데몬을 자동으로 실행 시키는 방법에는 여러가지가 있다.

우선 시작하기 전에 자신이 작성한 코드가 정상적으로 작동하는지 확인을 한다.


  • 데스크톱 화면이 나올때 실행하는 방법
프로그램 경로를 모르겠다면 whereis 나 which 명령어를 이용하면 알수있다.

sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
@program root

    nano 편집기로 연후 경로를 포함해서 프로그램을 적어주면된다.
    @sudo /usr/local/bin/ds4drv
    @python /home/pi/rc.py &

    • rc.local을 편집해 부팅시 실행하는 방법
    sudo nano /etc/rc.local

      먼저 스크립트 상단에 다음과 같이 추가해준다.
      스크립트나 데몬 뒤에 " &" 를 붙이는 이유는 파이가 부팅중에 루프에 빠지는 것을 막기 위함이다.
      파이선 코드 맨위에 #!/usr/bin/env python 을 적어주면 명령어 앞에 python 없이 실행이 가능해진다.

      #!/usr/bin/env python
      call("sudo pgpio", shell=True)
      call("sudo ds4drv &", shell=True)
      #!/usr/bin/env python
      import time
      from subprocess import call
       
      print("ds4drv load")
      call("sudo /usr/local/bin/ds4drv &", shell=True)
      time.sleep(10)
      print("pigpiod load")
      call("lxterminal -e sudo /usr/bin/pigpiod", shell=True)
      time.sleep(2)
      call('lxterminal -e /usr/bin/python3 /home/pi/rc.py &', shell=True) # "&"background process
      print("online")
       
      cs


      • 스케줄러를 이용한 자동실행
      crontab -e
      @reboot /home/pi/rc.py &
      어떤 방법을 사용해도 좋다.
      작업을 마치면 재부팅을 하여 확인해본다.

      1) 프로그램 상에서 캘리브레이션(Calibration) 작업을 수행하도록 하였기 때문에 Raspberry Pi 에 전원을 넣기 전에 ESC의 전원을 먼저 넣어주어야한다. rc.local은 거의 마지막 단계에 실행 되기때문에 Raspberry Pi의 초록불이 점멸을 시작하기 전에만 켜주면된다.

      2) 부팅이 거의 완료 될 때 긴 비프음이 삐이익 하고 캘리브레이션(Calibration)이 되었음을 알려준다. (xrdp를 이용해 원격 접속이 가능한 시점과 비슷하다.)

      3) 듀얼쇼크(Dual Shock)를 페어링에 성공하면 바로 주행이 가능하다.





      Thx.


      Comments

      Popular posts from this blog

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

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

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