# Raspberry Pi × LTE Hat

라즈베리파이에서 사용할 수 있는 LTE Cat-4 Hat으로 모바일 데이터를 사용해보자!

## 준비물

* Raspberry Pi 4 Model B with 4GB RAM
* USB Power Supply (5V 2.1A is sufficient)
* SD Card ~~(class 10 or more required for your mental health safety)~~
* LTE Hat: [SIM7600E-H LTE Cat.4 Hat](https://www.waveshare.com/wiki/SIM7600E-H_4G_HAT)
  * You should select specific model, because SIM7600X-series chipset varies by your country's LTE wireless bandwidth. I'm currently testing it at South Korea, so I would use SIM7600**E**-H. [See here](https://www.waveshare.com/SIM7600E-H-4G-HAT.htm)

### 1단계 - Raspberry Pi OS 설치

* Raspberry Pi OS 설치는 매우 간단하다. [여기](https://www.raspberrypi.org/software/)를 참고해서 SD 카드에 Raspberry Pi OS 32bit를 설치하도록 하자. ~~(일반 PC에 설치할 수 있는 Raspberry Pi OS도 있다! 헷갈리지 말자.)~~
* 설치가 완료된 뒤에는, SIM7600E-H의 포장을 뜯어보도록 하자.

### 2단계 - SIM7600E-H HAT 장착

* Raspberry Pi의 전원을 끄고 분리한다.
* SIM카드 슬롯에 Full-Size SIM을 삽입한 뒤 SIM7600E-H Hat을 Raspberry Pi에 장착한다.\
  (이 때, Raspberry Pi에 고정해버리면 SIM카드를 빼기 힘드므로 유의하자)
* 같이 동봉된 짧은 USB Cable를 Raspberry Pi와 SIM7600E-H Hat의 'USB' 포트에 연결한다.
* 장착한 뒤 Raspberry Pi를 켠다.

### 3단계 - Raspberry Pi 세팅

1. 라즈베리파이 내의 UART를 Disable한다.

![\[1\] raspi-config를 실행한다.](https://721442983-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWdcPhC7mtHG0agXDt2%2F-MWdguLSzj6njscddkOA%2F-MWdhqd1c4EO0PHknJ8G%2Fimage.png?alt=media\&token=d8f53577-68f4-41b5-83b0-552403741419)

<div align="center"><img src="https://721442983-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWdcPhC7mtHG0agXDt2%2F-MWdguLSzj6njscddkOA%2F-MWdhi2abLlXGzo_Welg%2Fimage.png?alt=media&#x26;token=28774992-1d7a-4efa-844b-e7d1b06326a2" alt="[2] 세번째 &#x22;Interface Options&#x22;를 선택한다."></div>

![\[3\] "P6 Serial Port"를 선택한다.](https://721442983-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWdcPhC7mtHG0agXDt2%2F-MWdguLSzj6njscddkOA%2F-MWdi7nJDATV011zJB3L%2Fimage.png?alt=media\&token=86bb98c5-018a-41a6-842b-5ae7791c667e)

![\[4\] No를 선택한다.](https://721442983-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWdcPhC7mtHG0agXDt2%2F-MWdguLSzj6njscddkOA%2F-MWdiEZ3SrpJSxq_SsmO%2Fimage.png?alt=media\&token=c97a2092-18c4-44bb-a591-f4a9afbae88d)

### 4단계 - SIM7600E-H RNDIS 세팅

* Raspberry Pi나 Jetson Nano 자체에 커널 모듈을 빌드하고 물리기 쉬운 일이 아니다. ~~머나먼 과정을 거치면 되긴 하지만 귀찮기 때문에,~~ 모뎀을 RNDIS 모드로 변경해보도록 하자.
* 모뎀을 RNDIS 모드로 변경하면, Android 스마트폰에서 USB 테더링을 연결하듯이 간단하게 작동시킬 수 있다.

1. 먼저 Raspberry Pi가 SIM7600E-H와 잘 연결되었는지 확인하자. USB 디바이스 목록을 확인하여 ttyUSB가 연결되었는지 본다.

   <img src="https://721442983-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWdcPhC7mtHG0agXDt2%2F-MXBYBSy8ueXj1HEGTAd%2F-MXBZIOHQhbr9dd4VW7b%2Fimage.png?alt=media&#x26;token=55b10a3b-1068-4993-bb4e-e68108989fa6" alt="" data-size="original">
2. 연결된 디바이스 네이밍이 어디에 매칭되는지 아래 정보에서 확인해보자.

   ![](https://721442983-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWdcPhC7mtHG0agXDt2%2F-MXBYBSy8ueXj1HEGTAd%2F-MXBZese3FU5su2sAuCp%2Fimage.png?alt=media\&token=7955d973-4e5c-438a-86b2-010189cc58b3)\
   (출처: <https://simcom.ee/documents/SIM5360/How%20to%20use%20linux%20driver.pdf>)
3. 이제 `socat`을 이용하여 ATCOM interface (줄여서 AT interface)에 연결해서 각종 명령어를 보내보자. 실질적으로 SIM7600E-H 보드와 통신하기 위해서는 AT Interface를 이용한다. 해당 인터페이스는 짧은 AT 명령어들로 통신하는 인터페이스이다.

   ![](https://721442983-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWdcPhC7mtHG0agXDt2%2F-MXB_8aAhnejoud2Hpg3%2F-MXB_IyxnDw-uY0_76hT%2Fimage.png?alt=media\&token=b70774c1-3c70-4d44-9506-217bd5e68b08)
4. `AT`라는 **테스트 명령어**를 치고 Enter를 누르면 `OK`라고 뜬다. 정상적으로 연결되었다는 의미이다.
5. 이제 아래와 같이 **RNDIS 인터페이스 활성화 명령어**를 입력한다.\
   `AT+CUSBPIDSWITCH=9011,1,1`\
   `> OK`
6. 이제 socat이 종료되고 칩셋이 재시작된다. 이를 조금만 더 기다리고 다시 시작하면 ip link를 했을때 아래처럼 usb 인터페이스가 뜬다. (보통은 `usb0`으로 뜨지만, 본인이 쓰는 Jetson Nano에는 `usb0`이 이미 있어서 `usb1`으로 할당되었다.)

   <img src="https://721442983-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWdcPhC7mtHG0agXDt2%2F-MXBd274VqBb02vkGj62%2F-MXBdefeX99K8690xtd3%2Fimage.png?alt=media&#x26;token=97901b64-55ee-457b-b280-0b6865e09e8d" alt="" data-size="original">

### 5단계 - APN 설정

* 사실 APN은 자동 설정이 가능하다. 여기서는 APN을 기지국으로부터 자동으로 가져오고 이를 사용해 LTE 네트워크에 연결하는 방법을 기술한다.

1. 4-3단계와 같이 AT Interface에 연결한다.
2. `AT+CGDCONT?` 명령어로 현재 사용되는 APN 프로필 리스트를 확인한다.

   ![](https://721442983-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWdcPhC7mtHG0agXDt2%2F-MXBaxa1kF25R6iR_xr9%2F-MXBbni1QBP0as1GST4J%2Fimage.png?alt=media\&token=509b31f4-7603-4023-aff0-d7f83cf953a0)
3. `+CGDCONT: 1`의 `1`은 프로필 ID를 나타낸다. 1부터 6까지 존재하는데, 여기서는 프로필 1번(셀룰러 네트워크 등록 과정에서 사용)과 프로필 6번(RNDIS 연결 과정)&#x20;
4. 기지국에서 APN을 자동으로 가져올 수 있도록 `AT+CGDCONT=1,"IPV4V6",""` 명령어와 `AT+CGDCONT=6,"IPV4V6",""`를 각각 입력하여 프로필을 비운다.
5. `AT+CGAUTH?` 명령어로 현재 APN 인증 프로필을 확인한다.
6. 마찬가지로 `AT+CGAUTH=1,0`, `AT+CGAUTH=6,0` 명령어로 인증 프로필을 비운다.
7. 마지막으로 `AT+CFUN=0` 명령어로 SIM 카드를 껐다가, `AT+CFUN=1` 명령어로 다시 켠다.
8. 이 뒤에는 인터넷이 정상 연결될 것이다. (다만 IP를 아직 받아오지 못한 상태이다.)\
   위 4, 5번 단계에 설정한 값들은 보드 자체의 NVRAM에 저장되므로 재시작하여도 RNDIS 모드나 APN 설정들을 다시 해줄 필요는 없다.

### 6단계 - DHCP 설정 및 Ping 테스트

* 여기서는 1회성 DHCP를 설정해보도록 하자. 간단하다.

1. `dhclient -v usb0` (USB 디바이스명)으로 DHCP 클라이언트를 돌려서 IP를 할당한다.

   ![](https://721442983-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWdcPhC7mtHG0agXDt2%2F-MXBd274VqBb02vkGj62%2F-MXBdx-sZ7beUi-hhZaP%2Fimage.png?alt=media\&token=42eda0d2-5681-4505-b130-4e93ff46bd74)
2. 이제 IP가 할당되었다. 이 후에 원하는대로 사용하면 될 것이다.
3. 한번 ping 테스트를 해보자. `ping -I usb0` 명령어로 USB 인터페이스로 Ping을 날릴 수 있다. 통신사마다 다르겠지만, LGU+ 기준으로는 Ping이 잘 작동한다.\
   ![](https://721442983-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWdcPhC7mtHG0agXDt2%2F-MXBd274VqBb02vkGj62%2F-MXBeN13o_FGZKWSdjin%2Fimage.png?alt=media\&token=9a573a88-6db5-4ddc-b6fe-d8fe579abfe7)
4. 이제 이 위에 우리가 원하는 각종 Application을 얹어보자. 어디서든 인터넷 환경이 되기 때문에 가능성이 무궁무진하다(?)

## Miscellaneous

### 각 통신사별 APN 설정 [(출처)](https://nemos.tistory.com/763)

> \[SKT 3G APN 설정]\
> APN: web.sktelecom.com\
> MMSC: <http://omms.nate.com:9082/oma\\_mms\\>
> MMS 프록시: smart.nate.com\
> MMS 포트: 9093\
> MCC: 450\
> MNC: 05

> \[SKT LTE APN 설정]\
> APN: lte.sktelecom.com\
> MMSC: <http://omms.nate.com:9082/oma\\_mms\\>
> MMS 프록시: lteoma.nate.com\
> MMS 포트: 9093\
> MCC: 450\
> MNC: 05

> \[KT 3G APN 설정]\
> APN: alwayson.ktfwing.com\
> MMSC: <http://mmsc.ktfwing.com:9082\\>
> MMS 포트: 9093\
> MCC: 450\
> MNC: 08

> \[KT LTE APN 설정]\
> APN: lte.ktfwing.com\
> MMSC: <http://mmsc.ktfwing.com:9082\\>
> MMS 포트: 9093\
> MCC: 450\
> MNC: 08

> \[LG U+ LTE APN 설정]\
> APN: internet.lguplus.co.kr\
> MMSC: <http://omammsc.uplus.co.kr:9084\\>
> MMS 포트: 9084\
> MCC: 450\
> MNC: 06

### AT 명령어 튜토리얼 (출처)
