Thứ Sáu, 17 tháng 2, 2012

Điều khiển thiết bị qua mạng GSM bằng tin nhắn SMS


Mạng GSM hiện nay đã trở nên thông dụng trong cuộc sống, thông qua chiếc điện thoại di động chúng ta có thể trò chuyện, nhắn tin, gọi điện thoại tới bạn bè, người thân... Hầu hết ngày nay mỗi chúng ta đều có một chiếc điện thoại riêng, hay thậm chí là hai cái. Cùng với sự phát triển của công nghệ, các ứng dụng dựa trên điện thoại cũng phát triển không ngừng cho phép chúng ta mở rộng các ứng dụng của chiếc điện thoại ngoài chức năng nghe, gọi và nhắn tin như SMS banking,tra cứu thông tin,nạp tiền, đăng ký dịch vụ...qua SMS. Và phòng thí nghiệm h-lab cũng đã nghiên cứu và ứng dụng công nghệ GSM/GPRS cho phép triển khai các ứng dụng về điều khiển, giám sát và thu thập dữ liệu thông qua mạng GSM/GPRS.

Trong bài này, chúng tôi chỉ tập trung giới thiệu một demo nhỏ về việc ứng dụng công nghệ SMS vào điều khiển và giám sát thiết bị. Demo sử dụng Kit Pic GSM do nhóm h-lab phát triển.

Kit Pic GSM sử dụng module GSM SIM300CZ.Để điều khiển module GSM,ta sử dụng các tập lệnh AT, trong phần sau sẽ giới thiệu một số lệnh AT thông dụng.

Khởi động module Pic GSM, Module GSM sẽ mất khoảng vài phút để khởi động và thiết lập cấu hình...

 

Sau khi khởi động xong, Pic GSM sẽ gởi tín nhắn báo hiệu thiết bị đã khởi động.Trong hình sau,Pic GSM sử dụng sim 01696401246, tự động gởi tin nhắn có nội dung : www.hlab.com.vn - PicGSM_1 ready!

 

Lệnh AT sử dụng để gởi tin nhắn như sau :

PIC send data to  UART>AT+CMGS="0989703330"

Sau đó SIM300CZ sẽ gỏi ký tự ">"

Bây giờ ta sẽ gởi nội dung bằng dòng lệnh sau:

PIC send data to  UART>www.hlab.com.vn - PicGSM_1 Ready !

PIC send data to  UART>CTRL+Z

Ta có thể điều khiển Pic GSM bật tắt thiết bị bằng cách nhắn tin tới PicGSM sử dụng cú pháp sau : bat[hoặc tắt]@thứ_tự_thiết_bị.

Ví dụ nếu ta muốn bật thiết bị số 3 thì nhắn tin như sau : bat@3

 

Để nhận tin nhắn từ SIM300CZ, ta sử dụng lệnh AT sau : AT+CMGR=chỉ_số_tin_nhắn

ví dụ muốn đọc tin nhắn tại vị trí số 2,ta gởi lệnh sau

PIC send data to  UART>AT+CMGR=2

Để xem danh sách toàn bộ tin nhắn, sử dụng lệnh AT sau : AT+CMGL="REC UNREAD" //hiển thị các tin nhắn chưa đọc

Chú ý, khi SIM300CZ có tin nhắn mới ở vị trí số 2, nó sẽ gởi ra cổng UART chuỗi :

SIM300CZ send data to  UART>+CMTI : "SM",2

Sau khi đọc tin nhắn, Pic GSM sẽ thực thi lệnh và hiển thị nội dung lệnh điều khiển lên LCD như hình sau :

Điều khiển đèn led bằng tin nhắn

ta thấy rằng đèn ở port số 3 (RA2) đã sáng. Sau khi thực thi, Pic GSM sẽ gởi sms báo trạng thái của thiết bị.

Tin nhắn báo trạng thái từ PicGSM1.

Pic GSM có thể dùng để điều khiển các thiết bị điện trong gia đình bằng cách ghép nới với module PIO220 cho phép điều khiển tới 4 thiết bị


Kết nối Pic GSM với thiết bị điện 220 sử dụng module PIO220

Đoạn mã chương trình gởi tin nhắn cho PIC16F887 viết bằng CCS C :
#include "Pic_GSM_demo.h"

#include ".\myLCD16x2.c"
#include

#define Led0 PIN_C1
#define Led1 PIN_C2
#define GSM_PW PIN_E2
#define GSM_SENSE PIN_E1
#define TEXTMODE 5;
#define PDUMODE 0;

void GSM_init(void);
void GSM_start(void);
void GSM_sel_mess_mode(char mode);

void GSM_init(void)
{
   output_bit(GSM_PW,1);
   output_bit(Led1,1);
   output_float(GSM_SENSE);
}
void GSM_start(void)
{
//start up GSM module
   delay_ms(2000);
   lcd_init();

   lcd_putc("\fwww.elabvn.com\n");
   lcd_putc("Pic GSM rev 1.0");
   //printf("GSM demo \n \r");  
   output_bit(GSM_PW,0);
   output_bit(Led1,0);
   delay_ms(2000);
   output_bit(GSM_PW,1);
   output_bit(Led1,1);
   lcd_putc("\nGSM initializing");
   delay_ms(50000);

}

void GSM_sel_mess_mode(char mode)
{
   if(mode>0) //text mode
      {
         output_bit(Led1,0);
         printf("AT+CMGF=1");
         putc(13);//enter CR
          output_bit(Led1,1);
         delay_ms(1000);
         output_bit(Led1,0);

         }
   else //PDU mode
      {
         output_bit(Led1,0);
         printf("AT+CMGF=0");
         putc(13);//enter CR
         output_bit(Led1,1);
         delay_ms(1000);
         output_bit(Led1,0);
      }

}

void main()
{
   int1 gsm_ok;
   int cnt;
   int1 temp;
   char c;
   int i;

   GSM_init();
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab

   // TODO: USER CODE!!
      GSM_start();
      GSM_sel_mess_mode(5);

      printf("ATE1"); //echo on
      putc(13);//enter CR
      delay_ms(1000);//

      printf("AT");
      putc(13);//enter CR
      output_bit(Led1,1);
      lcd_putc("\nGSM send message      ");
      delay_ms(1000);
      output_bit(Led1,0);
      printf("AT+CMGS=");
      putc(34);//"
      printf("0989703330");
      putc(34);//"

      putc(13);//enter CR
      delay_ms(1000);//cho ki tu ">"
      printf("SIM300 Ready");
      delay_ms(1000);//
      putc(0x1A);//CTRL+Z
       output_bit(Led1,1);
      delay_ms(2000);//

      lcd_putc("\nGSM sent done    ");
      while(1);
}

0 nhận xét:

Đăng nhận xét