All posts by RSR

핸드폰의 AT명령어를 이용하여 SMS보내기.

http://kworks.tistory.com/43


sprintf(str, “AT*KTF*MOREQ=0,%s,%s,4098,%s%c”, 보내고 싶은 번호,보내는 번호, 메시지, ‘\r’);

str를 잡힌 모뎀 포트로 내보내면 잘 보내면 ‘OK’를 그렇지 않으면 ‘ERROR’를 보낸다.
명령어 형식은 폰의 버전마다 종류마다 다를 수 있습니다.

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


파이썬 소스 예제)
※다른 언어로 구현할 경우에는, 시리얼 전송부분만 따로 구현하고 아래의 소스에서 사용된 AT 명령어을 그대로 사용하면 된다.

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 참고
  • er4

    er4p 랑

    er4s 랑
    AS를 2월 10일날 보냈다…
    er4p 산지는 고1 여름방학때쯤?!
    s산날은 기억안나고…
    하여튼 여기 투자한돈만
    3만원 – (er4p 한달만에 한쪽소리 지직거려서)삼정보따리상 대행 AS  -_-;
    2만원 – 필터
    1.3만 – 슈어 옐로 폼팁
    1만원 – 케이블 절단 -_- (케이블 길이 줄인다고 자르고 뉴트릭사 플러그 사다붙힘)
    2만원 – 플러그 교환 ( 스위치 크래프트 하악 )
    1.3만 – 슈어 옐로 폼팁
    2.5만 – 한쪽 크랙으로인한 EMS 배송비 (보냈으나 custom modified 로 AS 거부)
    2.8만 – s랑 같이 재 AS (보험때문에 할증붙었어)
    10.1  – p 수리비용 85달러
    기타비용만 26만원이네
    좀아껴서 하나더살껄
    er4p 선을 왜잘랐지 ….

    RDT 설치

    그동안 vim에서 삽질하다가

    심심해서(?) RDT를 설치해보았다
     
    이클립스 플러그인으로
    http://download.aptana.com/tools/radrails/plugin/install/radrails-bundle
    설치를 하였는데
    이클립스를 실행할때마다
    시피유가 100을 먹는현상이 발생하였다
    프로세스리스트를보니
    /usr/bin/ruby -I /mnt/sdb1/프로그램/workspace/.metadata/.plugins/org.rubypeople.rdt.launching/ruby/flush -rrdt_stream_sync.rb — /usr/bin/gem -v
    /usr/bin/ruby -I /mnt/sdb1/프로그램/workspace/.metadata/.plugins/org.rubypeople.rdt.launching/ruby/flush -rrdt_stream_sync.rb — /usr/bin/gem sources -l
    요런애들이 두개가 떠서 시피유를 다 냠냠하고있었는데
    한참을 삽질을하다가
    한글디렉토리라서 그런가 싶어 디렉토리명을 Sources 로 바꾸고 심볼릭을 새로 걸어주니까 (워크스페이스도 변경)
    문제없이 잘된다!!..

    한글쓰는게 죄인듯…

    compcache에 대해

    Ubuntu 9.10을 램 4기가로 쓰면서 스왑을 1bit도 주지않았다

    그런데 스왑(swapon -s)을 보면 항상
    Filename Type Size Used Priority
    /dev/ramzswap0                          partition 515272 0 100
    이런 ramzswap0 가 잡혀있었고
    딱히 사용도 안하는데다가 무슨역할을 하는지 나와있는 한글문서(중요하다)도 전혀 없어서 그냥 사용했었는데
    램 4g -> 2g 로 줄이게됨에따라 램부족현상이 잦아 스왑관리의 필요성을 느꼈다.
    결론적으로 /dev/ramzswap0 는 compcache라는 커널 모듈에 의해 생기며
    이게 하는 역할은 cache를 압축하여 저장함으로써 램을 절약 시킬수있다 라고 한다.
    (발영어 + 구번에 의한 지식습득이므로 정확하지 않을수도잇다)
    compcache에 대한 한글포스팅은 내가 처음인거같다ㅋㅋ(처음은 여러의미로 중요하다)
    (뭐 섹폴은 이미 다 알고있었을테지만…)
    더 자세한것은
    사이즈를 수정해보려고 /etc/initramfs-tools/initramfs.conf 를 건드려 보았으나 수정이 되지 않았다….
    (update-initramfs 도 했지만..)

    sticky bit

    sticky bit

    8진수로 1000 이며
    대표적으로 설정된 디렉토리는 /tmp 이다
    이 비트가 설정되어있으면 해당 권한을가진 사용자외에는 삭제가 불가능하다
    예를들어
    root 유저로 777권한의 디렉토리를 만들면
    그 안에 A유저가 디렉토리를 생성할수있다(쓰기권한이 있으니까)
    근데 중요한건 B유저가 A유저가 만들어놓은 디렉토리(파일)를 삭제할수있다(B역시 쓰기권한이있다!)
    하지만 sticky bit를 설정한 1777 로 만들면
    A가 만든 디렉토리는 A 와 root 만이 지울수있게된다 (읽는거는 B도 가능하다(A가 권한을 줫을경우))