etc

문자보내기

우유빛 2009. 8. 23. 01:55


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 참고
  • http://www.modemhelp.net/atcommands/ampersand.shtml#Q



    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-95-A
    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자를 길게 누름) 

    ==============================