문자보내기
http://www.adminschool.net/wiki/doku.php?id=develop:python:tip:sendsms
http://python.kr/viewtopic.php?p=60302&sid=3786deb28b06ba01b1e865b0447fbcd0
http://blog.eztcp.com/sollae/28
검색 : AT*SKT*MOREQ
import serial
ser = serial.Serial('/dev/ttyS0', 115200, timeout=1) # 시리얼포트 연결
ser.write("AT*ESMS=1\r") # 문자보내기 기능을 활성화 한다.
serial_result = ser.readlines()
ser.write("ATE0\r")
serial_result = ser.readlines()
ser.write("ATV1\r")
serial_result = ser.readlines()
ser.write("AT+CHV\r") # 호연결 끊기
serial_result = ser.readlines()
ser.write("AT+CSQ?\r") # 장비 테스트
serial_result = ser.readlines()
ser.write("AT+CDV *0661\r") # 호에 연결
serial_result = ser.readlines()
serial_result = ser.readlines()
ser.write("AT*MOREQ 0,0113872176,0162348765,4098,첫번째문자보내기\r") # 첫번째문자 보내기
serial_result = ser.readlines()
ser.write("AT*MOREQ 1,0113872176,0162348765,4098,두번째문자보내기\r") # 두번째문자 보내기
serial_result = ser.readlines()
ser.write("AT+CHV\r") # 호연결 끊기
serial_result = ser.readlines()
ser.close() # 시리얼포트 끊기
Serial port 캡처
SMS을 보낼 때 사용되는 AT명령어를 알기 위해서는 통신사에서 제공하는 프로그램을 설치한다. 그 후 핸드폰을 연결한 후 SMS을 보낼 떄 주고 받는 내용을 시리얼 포트에서 캡쳐해내야 한다. 이때 사용하는 프로그램이 Agg Software의 Advanced Serial Port Monitor이다. 아래의 사이트에서 트라이얼 버전을 다운로드하여 사용한다(일정 기간 동안만 사용 가능).
http://www.aggsoft.com/serial-port-monitor/
AT Command 참고
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hPort = CreateFile(TEXT("\\\\.\\COM5"),
GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_READ,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
// 휴대폰 USB 드라이버 설치 후 제어판에 보시면 해당 휴대폰의 포트가 나옵니다.
// 해당 포트를 파일 이름처럼 적으면 됨.
if ( NULL == hPort )
{
printf("%d", GetLastError());
}
/*
각 이동통신사별 접속 스트링
AT*SKT*MOREQ=0,%s,%s,4098,%s%c
AT*LGT*MOREQ=0,%s,%s,4098,%s%c
AT*KTF*MOREQ=0,%s,%s,4098,%s%c
*/
char szBuff[255]={0}, szBuff2[10]={0};
sprintf(szBuff, "AT*SKT*MOREQ=0,%s,%s,4098,%s%c", "보내고 싶은 번호","보내는 번호", "보낼 메시지", '\r');
// 보내는 사람과 받는 사람 이름 잘 적어서
// 문자열 만들어서 포트로 고고 고고 ~
BOOL bReturn = FALSE;
DWORD dwWritten = 0, dwRead = 0;
bReturn = WriteFile(hPort, szBuff, strlen(szBuff), &dwWritten, NULL);
if ( FALSE == bReturn )
{
printf("%d", GetLastError());
}
// 포트에 문자열을 쏴주는 순간, 휴대폰은 문자발송 화면으로 바뀜니다.
bReturn = ReadFile(hPort, szBuff2, 10, &dwRead, NULL);
if ( FALSE == bReturn )
{
printf("%d", GetLastError());
}
// 제대로 발송 되었다면 OK 가 넘어오죠.
CloseHandle(hPort);
return 0;
}
http://chul0302.tistory.com/402
--------------------------------------------------------------------------------------------------------------
TIA/EIA/IS-637
TIA/EIA/IS-707
TIA/EIA/TSB74
TIA/EIA-615
비동기통신 RS-232 TIA/EIA-530
AT*SKT*DIAL => 현재 설정된 휴대폰 번호 보기
AT*SKT*RESET =>휴대폰 초기화
AT*SKT*PING =>*SKT*PONG: 0, 20081217125639
AT*SKT*SETPING=10 =>*SKT*SETPING: 10
AT*SKT*VER => *SKT*VER: 2.3
AT*SKT*ORI=01199996160 => 전화걸기
AT*SKT*REL =>전화끊기
AT*SKT*MOREQ=발신메시지번호(0~254),수신번호,회신번호,TI, 메시지
Ex) AT*SKT*MOREQ=0,01196141802,114,4098,문자테스트입니다
AT*SKT*MTCNT => *SKT*MTCNT: 99, 0 99개 메시지중 0개의 읽지 않은 메시지
AT*SKT*READMT=0 =>*SKT*READMT: 0, 20081217104710, 15885114, 4098, 삼성화재]고객님 전화한통으로 약관
대출가능 /서류필요없음1588-5114(41번)수신거부08
AT*SKT*NEWMSG? =>조회
AT*SKT*NEWMSG=4098 =>설정
AT*SKT*NEWMSG=0 =>해제
AT*SKT*SETLCD=1 =>LCD창 공백으로 설정
AT*SKT*SETLCD=0 =>원래 상태로 복귀
AT*SKT*SETLCD? =>*SKT*SETLCD: 1, 21, 12 SETLCD : STATE, COL, ROW
LCD 제어권소유상태(1소유,0해제), COL:가로방향크기, ROW:세로방향크기
AT*SKT*CLRLCD =>화면지우기 SETLCD=1 인경우만
AT*SKT*OUTLCD=PosX,PosY,문자열
=====================
def Setkey(self):
"""키패드 관련 제어 상태를 설정 ('at*skt*setkey=1\r')
setkey=1 # key emulation 설정
setkey=2 # key scan 설정(키패드를 누르면 해당 key code를 TE2에 전달
setkey=0 # 키패드 제어 해제
setkey? # 설정상태 조회
"""
def Keyemul(self):
"""TE2 가 단말의 키패드를 제어할수 있는경우(setkey=1), keyemul 명령을 이용하여
TE2 는 단말기에 키코드 값을 보낸다
('at*skt*keyemul=keycodestring\r')
keycodestring:해당 단말기의 고유 키코드
# Keypad Scan: setkey=2로 설정되어있고 단말의 키패드를 누를 경우
keyscan 명령을 이용하여 TE2에 키코드 값을 보내야 한다.
길게 누를 경우 키코드 뒤에 "L"자를 붙여서 응답한다.
ex) 3L (3자를 길게 누름)
==============================