Raspberry PI3에 중국 USIM을 통한 Alcaltel L800MA 연동 테스트

1. 중국유심
China Unicom : uninet
China Telecom : ??
China Mobile (CMCC) : cmnet

[Dialer Defaults] Modem = /dev/ttyUSB1
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1,”IP”,”cmnet”
Stupid Mode = 1
Modem Type = Analog Modem
Phone = *99#
New PPPD = yes
ISDN = 0
Username = 1
Auto Reconnect = 1
Password = 1
Baud = 9600
Check Def Route = 1

Raspberry PI3에 Alcaltel L800MA 연동

구글링하면 라즈베리파이3에 Alcaltel L800 연동이 쉽게 된다고 써있는 글이 많아
L800MA구입하였으나 모델간의 차이가 있는건지 그대로 하면 안되었다.
사실 wvdial등을 설치하고 쉘에서 명령을 치면서 하면 되는데
나의 경우는 부팅시 자동으로 연결하게 하려고 하다보니, 잘 안된것이다.
아래는 그중 나의 라즈베리파이에서 되는것을 정리한 글이다.

1. 패키지 설치
usb-modeswitch와 ppp는 현재 라즈베파이 2018-03-13 버전을 설치하여보니 존재하고 있어 wvdial만 설치하였다.

$ sudo apt-get update
$ sudo apt-get install wvdial
$ sudo reboot

2. wvdial.conf 파일 수정

$sudo vi /etc/wvdial.conf

아래와 같이 수정

[Dialer Defaults]
Modem = /dev/ttyUSB1
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1,"IP","lte.sktelecom.com","",0,0
Stupid Mode = 1
Modem Type = Analog Modem
Phone = *99#
New PPPD = yes
ISDN = 0
Username = 1
Auto Reconnect = 1
Password = 1
Baud = 9600
Check Def Route = 1

2. interfaces 파일 수정
“iface ppp0 inet wvdial” 를 추가함

$sudo vi /etc/network/interfaces

아래와 같이 수정

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

# PPP
iface ppp0 inet wvdial

3. 부팅시 PPP 활성화 및 기본 라우트 추가

$sudo vi /etc/rc.local

마지막에 아래와 같이 ppp0를 올리고 잠시후 route를 add 하는것을 추가함.

sleep 20
ifup ppp0
sleep 10
route add default dev ppp0 &

Raspberry Pi3 GPS 연동

1. 하드웨어 연결 및 설정
1) 하드웨어 연결
– GPS 연동을 위하여 NEO-6M 모듈을 이용하였다.
– NEO-6M을 라즈베리파이에 연결하기 위해서 NEO-6M의 핀을 다음과 같이 꽂으면 된다.

NEO-6M 라즈베리파이3
VCC PIN01(3.3v)
RX PIN10(GPIO15)
TX PIN08(GPIP14)
GND PIN14

2) 라즈베리파이 설정
GPS를 시리얼로 연결하귀 위해 다음과 같이 설정을 수정한다.
– cmdline.txt 파일 수정

sudo vi /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=tty1 root=PARTUUID=53707d2f-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

– 파이썬3 시리얼로 GPS 데이터를 받기 위해 시리얼모듈 설치

sudo apt-get install python3-serial

2. NMEA(National Marine Electronics Association) 프로토콜 분석
GPS 모듈을 연결하면 문자열로 된 GPS 데이터가 넘어오는데 이를 NMEA 데이터라 하고,
우리는 이 포맷을 파싱하여 필요한 데이터만 가져다 사용하면 된다.
NMEA의 섹션의 다음과 같다. 하지만 대부분 GPCGA와 GPRMC만 이용하게 된다.

1) $GPGGA: Global Positioning System Fix Data의 약어로 시간 및 경위도 좌표를 구할때 주로 쓰인다.

    Ex) $GPGGA,103022.132,3735.0079,N,12701.6446,E,1,04,5.4,50.1,M,20.6,M,0.0,0000*48
       - 103022.132: 시간
       - 3735.0079 : 위도
       - N은 북위
       - 12701.6446 : 경도
       - E : 동경
       - 1 : Fix의 종류 [0 : 위성이 안 잡혀 Invalid, 1 : GPS에서 제공하는 기본 위성을 가지고만 계산할 경우, 2 : DGPS를 이용하여 보정하여 계산할 경우)
       - '04':  계산에 사용한 위성을 개수
       - '5.4': horizontal dilution of Precision
       - '50.1M' : 해수면 기준 고도
       - '20.6M' : WGS-84에서 정해놓은 타원체로서 모델링한 지구와 구체로서 모델링된 지구의 고도차이
       - '0.0'과 '0000' : DGPS 사용시 마지막으로 update한 시간과 DGPS 기지국의 ID
       - '48': Check Sum

2) $GPRMC: Recommended minimum specific GPS/Transit data의 약어로 최소한의 데이터가 들어오게 되는데 날자가 들어오므로
주로 날짜를 구하기 위해 사용된다.

   EX) $GPRMC,114455.532,A,3735.0079,N,12701.6446,E,0.000000,121.61,110706,,*0A
       - 114455.532: 시간
       - A : GPS 신호의 신뢰성[A: 신뢰, V : 미신뢰]
       - 3735.0079: 위도
       - N : 북위
       - 12701.6446 : 경도
       - E : 동경
       - '0.000000' : Speed over ground로서 knots 단위의 속도- air speed의 약자이다. km/h로 변환시 대략 1.8을 곱한다.
       - '121.61': 방향 
       - '110706' : 날짜
       - ' ' : Magnetic Variation나침반
       - '*0A': 체크섬

3) $GPGSV: GPS satellites in view의 약어로 현재 GPS Module이 수신할 수 있는 모든 위성의 정보를 출력한다.
4) $GPGSA: GPS DOP and active satellites

3. 파이썬을 이용한 NMEA 파싱

1) $GPRMC의 파싱
– GPMRC의 경우 최소한의 정보가 모두 들어오지만, 그중에 제일 중요한것은 날짜가 들어온다는 것이다. 그리고
날짜는 UTC시간이므로 반드시 Locale시간으로 변환해서 사용해야 한다.
– 속도의 경우 단위는 Knots이므로 Km/h로 환산하려면 반드시 * 1.852을 해야 한다.
– 다음은 GPRMC를 파싱한 파이썬 소스 예제이다.

2) $GPGGA의 파싱
– GPGGA는 시간, 경위도, 고도등의 모든 데이터가 들어오기때문에 주의를 기울여 파싱할 필요가 있다. \
– 시간의 경우, UTC시간이므로 Locale 시간으로 변환해서 사용해야 한다.

Raspberry PI 블루투스 설정

1. bluez 설치
라즈베리파이에서 쓸수 있는 블루투스 라이브러리를 다음과 같은 절차로 설치한다.

1) 설치방법
– bluez 설치

– 파이썬용 pybluez 설치

2) 블루투스 동작 확인
다음과 같이 hciconfig 명령을 입력하여 보면 RUNNING 이라고 뜨는것을 확인할수 있다.

– RUNNING아 아니라면 sudo hciconfig hci0 up 를 입력하여 RUNNING상태로 바꾼다.

3) 파이썬용 비콘스캐너 설치
개발전에 비콘값을 제대로 받을수 있는지 테스트하기 위해 오픈소스로 되어 있는 비콘스캐너를 아래와 같이 다운로드 받아 테스트해보았다.
비콘값을 제대로 받는다면 UUID, RSSI등의 값이 출력되는것을 볼수있다.

2.라즈베리파이에서 블루투스와 시리얼 포트를 모두 사용하기 위한 방안
– GPS장치 및 블루투스 2개를 모두 시리얼 포트로 사용할수 없는 문제가 발생하여
GPS는 시리얼, 블루투스는 miniuart 를 이용하여 데이터를 수신하기로 함

1) cmdline.txt 파일 수정

2) 파이썬3 시리얼로 GPS 데이터를 받기 위해 시리얼모듈 설치

3) config.txt 파일 수정

아래와 같은 내용을 추가한다.

3. 블루투스 비콘 데이터 파싱
– iBeacon이 여러개 켜져있으면 비콘별로 분석하여 파싱처리를 해야 데이터로 이용할수 있다.
즉 비콘데이터를 아래와 같이 패킷의 자리수를 이동하면서 각각 UUID, Major/Minor 버전, Tx Power, RSSI등을 구해야 한다.

라즈베리파이에 Paho MQTT 클라이언트 테스트

1. MQTT 클라이언트 설치
– 라즈베리파이에서 아래와 같이 입력하여 mqtt 클라이언트를 설치한다.

sudo pip3 install paho-mqtt

2. Publish 테스트

import paho.mqtt.client as mqtt

client = mqtt.Client()
client.username_pw_set("yomile", "1234")
client.connect("192.168.0.9", 4530, 60)
client.publish("mbizok-client/iot/door/toilet", "test")

라즈베리 파이 기본 개발환경 구성

1. 파이썬 패키지 인덱스(PyPI) 설치
– 파이썬 라이브러리를 쉽게 설치하기 위한 도구

sudo apt-get install python3-pip

2. GPIO(General Purpose Input/Output) 설치
– 라즈베리파이에 있는 GPIO 핀을 통해 입출력 할수 있게 하는 라이브러리

sudo apt-get install python3-rpi.gpio

3. 시리얼 모듈 설치

sudo apt-get install python3-serial

파이참을 이용하여 라즈베리파이 원격 빌드 환경 설정

1. 파이참 열기
– Create New Project로 하여 프로젝트 생성

2. 작업위치설정

3. 원격지 설정
– Interpreter의 Add Remote를 클릭

4. 원격지 정보 입력
– Host IP, Port, 계정정보 및 원격지의 파이쎤 인터프리터를 설정한다.

5. Remote Project location 설정

6. 파이썬 파일 생성
– 오른쪽 Project에서 New > Python File을 눌러 파일생성

7. 파일명 입력

8. 간단한 코딩

9. 서버로 배포(Deployment)
– 위에서 코딩한것을 Tools > Deployment > Upload to ssh~ 를 눌러 라즈베리파이로 배포

– 하단 로그창에 업로드 상태 표시됨

10. 라즈베리 파이에서 구동

sudo python3 DoorClient.py

11. 라즈베리 파이로 부터 Sync
– 라즈베리 파이에서 직접 vi로 에디팅한 경우 라지베리파이로 부터 동기화를 할수 있다.
– Tools > Deployment > Sync with Deployed to ssh~ 메뉴 클릭하여 동기화.

12.참고사항
파이참 Unresolved reference 에러시
https://hyesun03.github.io/2016/10/04/pycharmImportError/

파이참의 원격빌드시 sudo 문제로 컴파일이 안될때

$sudo vi /usr/bin/python3-sudo.sh

아래와 같이 작성후

#!/bin/bash
sudo /usr/bin/python3.5 "$@"

파이참의 Configure Remote Python Interpreter의 Python interpreter path에 “/usr/bin/python3-sudo.sh” 입력

라즈베리파이(Raspberry PI) 인터넷 연결

1. 유선랜 설정
– 기본적으로 DHCP기능이 활성화 되어 있어 랜선만 꽃기만 하면 된다.
ifconfig를 쳐보면 192.168.0.125라는 IP주소로 할당받은 것을 알수 있다.

pi@raspberrypi:~$ ifconfig
enxb827ebeaadc5: flags=4163  mtu 1500
        inet 192.168.0.125  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::3dba:6631:6fe1:c90f  prefixlen 64  scopeid 0x20
        ether b8:27:eb:ea:ad:c5  txqueuelen 1000  (Ethernet)
        RX packets 5418  bytes 569192 (555.8 KiB)
        RX errors 0  dropped 1239  overruns 0  frame 0
        TX packets 63  bytes 7286 (7.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 1  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4099  mtu 1500
        ether b8:27:eb:bf:f8:90  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

pi@raspberrypi:~$

2. SSH를 통한 연결 접속
1) SSH 서버 활성화

sudo raspi-config







2) SSH 서버로 접속
위에서 확인한 IP/PORT :192.168.0.125/22로 SecureCRT를 통해 접속

3. 무선랜 설정
1) iwconfig 명령으로 네트워크 어답터 목록 확인
이중 “no wireless extensions”가 아닌 wlan0이 내장되어있는 WiFi 아답터임.

iwconfig

2) 접속가능한 주변 AP 검색

sudo iwlist wlan0 scan | more

– 여러개의 AP가 나오는데, 연구소에 설치되어 있는 “moram-lab”을 이용하기로 한다.

          Cell 05 - Address: 64:E5:99:0A:32:04
                    Channel:6
                    Frequency:2.437 GHz (Channel 6)
                    Quality=60/70  Signal level=-50 dBm  
                    Encryption key:on
                    ESSID:"moram-lab"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                              9 Mb/s; 12 Mb/s; 18 Mb/s
                    Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
                    Mode:Master
                    Extra:tsf=0000000000000000
                    Extra: Last beacon: 80ms ago
                    IE: Unknown: 00096D6F72616D2D6C6162
                    IE: Unknown: 010882848B960C121824
                    IE: Unknown: 030106
                    IE: Unknown: 2A0100
                    IE: Unknown: 32043048606C
                    IE: Unknown: 2D1A6E181EFFFF000000000000000000000000000000000000000000
                    IE: Unknown: 3D1606070000000000000000000000000000000000000000
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP

3) PSK를 생성
– wpa_passphrase명령을 이용하여 PSK 생성

 wpa_passphrase 접속할AP의SSID 접속할AP의비밀번호
 wpa_passphrase moram-lab 비밀번호
network={
        ssid="moram-lab"
        psk=d847cf7519242cc9486e9bbe317a1ed811b20034cd74b4d995c6d6c8a2e2c3d9
}

4) /etc/wpa_supplicant/wpa_supplicant.conf 파일 수정
– 일단 editing을 위해 vim 설치

sudo apt-get install vim
sudo vim /etc/wpa_supplicant/wpa_supplicant.conf

– 아래와 같이 하단에 위에서 생성한 PSK를 추가한후에 저장

country=GB
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        ssid="moram-lab"
        psk=d847cf7519242cc9486e9bbe317a1ed811b20034cd74b4d995c6d6c8a2e2c3d9
}

5) 인터페이스 파일 수정

sudo vim /etc/network/interfaces

하단에 아래와 같이 추가

auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

6) wifi 아답터 재시작
– WIFI 재시작

sudo ifup wlan0

Internet Systems Consortium DHCP Client 4.3.5
Copyright 2004-2016 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/wlan0/b8:27:eb:bf:f8:90
Sending on   LPF/wlan0/b8:27:eb:bf:f8:90
Sending on   Socket/fallback
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 4
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 5
DHCPREQUEST of 192.168.0.126 on wlan0 to 255.255.255.255 port 67
DHCPOFFER of 192.168.0.126 from 192.168.0.1
DHCPACK of 192.168.0.126 from 192.168.0.1
bound to 192.168.0.126 -- renewal in 3297 seconds.

– 참고 : 만약 아래와 같이 에러난 경우, 라즈베리파이에 전원을 뺐다가 다시 넣으니까 해결됨.

wpa_supplicant: /sbin/wpa_supplicant daemon failed to start
run-parts: /etc/network/if-pre-up.d/wpasupplicant exited with return code 1
ifup: failed to bring up wlan0
pi@raspberrypi:~$ 

7) IP 할당

sudo wpa_cli reconfigure
Selected interface 'p2p-dev-wlan0'
OK

8) IP 할당 확인
– ifconfig로 확인

wlan0: flags=4163  mtu 1500
        inet 192.168.0.126  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::ba27:ebff:febf:f890  prefixlen 64  scopeid 0x20
        ether b8:27:eb:bf:f8:90  txqueuelen 1000  (Ethernet)
        RX packets 316  bytes 36224 (35.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 40  bytes 6359 (6.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

라즈베리파이(Raspberry PI) OS 설치

1. 라즈비안 OS 다운로드
– 아래 주소에서 다운받아 압축을 푼다.

2. Win32 Disk Imager
– 라즈비안 이미지 파일을 SD카드로 Write하기 위한 도구
– 다운로드 URL

http://sourceforge.net/projects/win32diskimager/

– 설치가 완료되면 “Image File” 칸에 위 라즈비안 이미지 파일을 지정하고
“device”란에 SD카드 리더기 위치를 지정하면 된다.

– “Write” 버튼을 눌러 이미지를 write 한다.
– “Write Successful” 이라고 쓰면 성공적으로 설치

3. UART를 이용하여 PC와 연결
1) UART 활성화 : 부팅시 UART가 활성화되도록 탐색기에서 SD카드에 있는 config.txt 파일을 열어 수정한다.

– 파일의 마지막 라인에 “enable_uart=1” 추가

2) 케이블 만들기
– 아래 GPIO 06, 08, 10 핀에 연결한다.




– DIP 스위치에 주의




– 연결하게 되면 장치관리자에서 아래와 같이 확인

3) PUTTY에서 연결
– 위 장치관리자에서 보여준 COM포트를 이용하여 접속한다.

– 모두 입력하고 접속하면 아무것도 표시되지않는다면 다시 전원을 넣고 putty에서 엔터를 치면 된다.

– 기본 로그인 계정은 pi/raspberry 임.

4. 환경설정

1) 언어 설정




– en_US.ISO-8859-1, en_US.UTF-8, ko_KR.UTF-8 를 선택한다.

2) 타임존 설정
– Asia/Seoul 선택