Thông báo

Collapse
No announcement yet.

Giúp em điều khiển thiết bị qua Module SIM900

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Giúp em điều khiển thiết bị qua Module SIM900

    Em đang làm đề tài điều khiển thiết bị thông qua module sim900. Hiện e đã mua module sim900 của nhóm HLAB (hlab.com.vn) thông qua tìm hiểu em mới chỉ viết được code để gửi tin nhắn lên điện thoại di động, còn phần nhận tin nhắn để thực hiện lệnh thì em chưa viết được. Xin nhờ các anh chị đã làm thành công về sim900 hướng dẫn em thêm về phần code pic để nhận tin nhắn thực hiện lệnh điều khiển, cách để điều khiển thông qua GPRS.
    Ai có tài liệu gì share giúp em với !
    P/s: Module sử dụng PIC6F877A.
    Em xin chân thành cảm ơn!!!

  • #2
    Bạn đã gửi được tin nhắn từ sim900 rồi à? Mình cũng đang dùng PIC16F877A và sim900 đây nhưng code ko gửi tin nhắn được. Bạn cho mình xin cái code gửi tin nhắn từ sim900 nhé ^^ Thks bạn nhìu!
    Email mình là: vinhkhuong.nguyen@gmail.com
    Last edited by rogerfu; 07-01-2013, 12:05.

    Comment


    • #3
      Kinh nghiệm làm việc với SIM900:
      - Đảm bảo các ghép nối đúng phần cứng MCU-MODULE, tối thiểu là:
      + TX_MCU nối với RX_Module
      + RX_MCU nối với TX_Module
      + PWRKEY(chân 12-Module) nối với 1 PIN_OUT_MCU
      + Status(chân 5-Module) nối với 1 PINT_IN_MCU.
      + Ngoài ra các phần cứng khác cần tuân theo đúng data sheet, đặc biệt chú ý phần SIM, Anten, Nguồn VBAT (3.5-4.5V).
      - Lập trình:
      + Khởi động Module khi mới bắt đầu: Cần làm cho chân Status = 1 trước khi giao tiếp, làm thế nào thì xem data sheet (chẳng qua là bật nó lên, bằng PWRKEY).
      + Khởi tạo Module, tối thiểu truyền các String sau vào Module, chú ý cuối mỗi chuỗi là ký tự "CR", nếu truyền đúng Module sẽ phản hồi chuỗi "OK":
      FLASHstr_UART(GSM_UART,"ATZ");
      Wait_ATCMD_ACK(1000);
      FLASHstr_UART(GSM_UART,"ATZ",CRLF);
      Wait_ATCMD_ACK(1000); //Chờ phản hồi
      FLASHstr_UART(GSM_UART,"AT+CMGF=1");//Dinh dang tin nhan TEXT
      Wait_ATCMD_ACK(1000); //Chờ phản hồi
      FLASHstr_UART(GSM_UART,"AT+CLIP=1");//Hien so thue bao goi den
      Wait_ATCMD_ACK(1000); //Chờ phản hồi
      + Muốn gửi tin nhắn:
      Gửi cho Module chuỗi: AT+CMGS="sdt...." + CR, chú ý với Module SIM900 chuỗi số điện thoại cần nằm trong dấu "...", một vài hãng (module khác) không cần dấu "..." cho phần số điện thoại.
      Gửi cho module: <Nội dung tin nhắn>
      Để Send tin nhắn đi: Gửi cho module byte có giá trị = 26 dec (đây chính là 1 ký tự điều khiển trong bảng mã ASCII, là tổ hợp ấn phím Ctr+Z trên bàn phím)
      - Khuyến cáo:
      + Với những người mới bắt đầu nên dùng MCU có ít nhất 2 cổng UART để luôn debug được quá trình "nói chuyện" giữa MCU và MODULE trên PC, ngoài ra điều này giúp ích cho bạn khi cần nghiên cứu về tập lệnh AT.
      Hôm nay trời nắng chang chang.
      Mèo con đi học chẳng mang thứ gì.
      Chỉ mang một cái bút chì.
      Và mang một mẩu bánh mì con con.

      Comment


      • #4
        Bạn nào cần tài liệu thì mail cho mình, mấy module Simcom sử dụng lệnh AT qua UART .nó cũng đơn giản lắm
        mail: dinhnambkhn@gmail.com
        Thân!
        |

        Comment


        • #5
          Các anh chị đi trước có thể chỉ giúp em phần này không ạ? em đang sử dụng sim900 với dspic30f4012

          Module SIM900 của em đã power on nhận được network rồi. (netlight nháy 64/3000ms ) nhưng chỉ có điều khi truyền at command vào thì không nhận được response gì cả.
          truyền "AT\r\n" hoặc "AT\r" đều không nhận được OK. Em đang gửi đi với baudrate là 9600 8-N-1
          Em thấy SIM900 có chức năng autobaud nên dùng AT gửi nhiều lần để nó tự chỉnh baudrate về 9600 nhưng có vẻ là bị sai ở đó.
          Anh chị có thể chỉ giúp em được không ạ.

          Comment


          • #6
            Nguyên văn bởi ziovez Xem bài viết
            Các anh chị đi trước có thể chỉ giúp em phần này không ạ? em đang sử dụng sim900 với dspic30f4012

            Module SIM900 của em đã power on nhận được network rồi. (netlight nháy 64/3000ms ) nhưng chỉ có điều khi truyền at command vào thì không nhận được response gì cả.
            truyền "AT\r\n" hoặc "AT\r" đều không nhận được OK. Em đang gửi đi với baudrate là 9600 8-N-1
            Em thấy SIM900 có chức năng autobaud nên dùng AT gửi nhiều lần để nó tự chỉnh baudrate về 9600 nhưng có vẻ là bị sai ở đó.
            Anh chị có thể chỉ giúp em được không ạ.
            bạn kiểm tra lại xem chân TX và RX của vdk và modulsim đã dúng chưa
            (^_^) hoangnv.3i@gmail.com

            Comment


            • #7
              em đã kiểm tra lại mạch thì thấy không có vấn đề gì.
              Đến hôm nay thì đã gửi được tin nhắn đi, các command khác cũng không vấn đề gì.
              Nhưng có điều là không nhận được response của SIM900, nhưng vậy không ảnh hưởng lắm nên coi như bỏ qua cũng được.
              Em cảm ơn anh, chị đã trả lời.

              Comment


              • #8
                Bạn ziovez có thể chia sẻ về phần gửi tin nhắn xuống cho module sim được không bạn?]

                Comment


                • #9
                  Sau thời gian tìm hiểu em đã viết chương trình giám sát nhiệt độ và điều khiển thiết bị nhưng không biết bị lỗi gì mà nó không chạy. Anh có thể xem chương trình của em rồi tìm nguyên nhân giúp em với. Gần đến ngày nộp lắm rồi. Em dùng module sim900d giao tiếp với vdk 16f877. điều khiển led ra ở chân C0 C1.
                  Đây là code của em:
                  #include <16f877a.h>
                  #device PIC16F877A*=16 ADC=10
                  #include <string.h>
                  #include <lcd_lib_4bit.c>
                  #fuses nowdt,hs,noput,noprotect,nodebug,nobrownout,nolvp, nocpd,nowrt
                  #use delay(clock=12000000)
                  #use fast_io(b)
                  #use fast_io(e)
                  #define Led0 PIN_C0
                  #define Led1 PIN_C1
                  #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8)
                  char chuoi[90],noidung_sms[20],tu_khoa[20];
                  int8 dem,i,j,k,new_sms,z,vitri,x,y,adc,f;
                  /*********** Khai bao ngat nhan noi tiep ***********/
                  #INT_RDA
                  void ngat()
                  {
                  chuoi[dem]=getc();
                  if(chuoi[dem]=='')
                  {
                  z++;
                  if(z==2)new_sms=1;
                  }
                  dem++;
                  }
                  void xuly();
                  void xuly_sms();
                  void gsm_config();
                  void xoa();
                  void nhiet_do();
                  void main()
                  {
                  enable_interrupts(global);//Cho phep ngat toan cuc
                  enable_interrupts(int_rda);//Cho phep ngat nhan noi tiep
                  setup_adc(ADC_clock_internal); // thiet lap tan so lay mau ADC
                  setup_adc_ports(AN0); // ngo vao A0
                  set_adc_channel(0); // chan doc gia tri adc bang read_adc()
                  portd=1;delay_ms(1000);portd=0;delay_ms(1000); //1 led sang
                  LCD_init(); //khoi tao LCD
                  Printf(LCD_putchar," DO AN ");
                  LCD_putcmd(0xC0);Printf(LCD_putchar,"Dang cau hinh ");delay_ms(1000);
                  gsm_config();//goi chuong trinh con cau hinh Module GSM
                  LCD_putcmd(0xC0);Printf(LCD_putchar,"Cau hinh xong ");delay_ms(2000);
                  new_sms=0;
                  z=0;
                  while(1)
                  {
                  signed int16 x;
                  signed int16 adc;
                  int16 y=70; // nhiet do bao dong
                  x=read_ADC();
                  adc=x/2; // do C
                  f=adc*1.8+32; // do F
                  LCD_putcmd(0x01);// xoa man hinh chi thi
                  LCD_putcmd(0x80);Printf(LCD_putchar," Nhiet do phong ");
                  LCD_putcmd(0xC0);Printf(LCD_putchar,"%u",adc);LCD_ putcmd(0xC0+4);Printf(LCD_putchar,"C");
                  LCD_putcmd(0xC0+8);Printf(LCD_putchar,"%u",f);LCD_ putcmd(0xC0+12);Printf(LCD_putchar,"F");
                  delay_ms(500);
                  if(new_sms==1)
                  {
                  LCD_putcmd(0x01);// xoa man hinh chi thi
                  LCD_putcmd(0x80); Printf(LCD_putchar,"Co tin nhan moi ");
                  LCD_putcmd(0xC0); Printf(LCD_putchar,"Dang xu ly");
                  xoa();
                  puts("at+cmgr=1");
                  delay_ms(500);
                  xuly_sms();
                  LCD_putcmd(0x01);// xoa man hinh chi thi
                  xuly();
                  trang_thai();
                  nhiet_do();
                  delay_ms(200);
                  puts("at+cmgd=1");
                  delay_ms(500);
                  xoa();
                  delay_ms(500);
                  }
                  if(adc>=y) // kiem tra nhiet do cao
                  {
                  LCD_putcmd(0x01);// xoa man hinh chi thi
                  LCD_putcmd(0x80);Printf(LCD_putchar," Nhiet do cao ! ");
                  LCD_putcmd(0xC0);Printf(LCD_putchar,"Dang goi dien ");
                  printf("ATD01674577163;");
                  putc(13);
                  delay_ms(20000);
                  puts("ATH");
                  delay_ms(1000);
                  printf("AT+CMGS=\"01675491246\"\r\n");
                  delay_ms(500);
                  printf("Nhiet do luc nay la:\r\n %u",adc); // gui nhiet do ve may
                  delay_ms(500);
                  printf("do C");
                  delay_ms(500);
                  putc(26); // ctrl +Z
                  delay_ms(500);
                  }

                  }
                  void gsm_config()
                  {
                  delay_ms(2000);
                  printf("at\r\n");
                  delay_ms(500);
                  printf("at\r\n");
                  delay_ms(500);
                  printf("at\r\n");
                  delay_ms(500);
                  printf("at\r\n");
                  delay_ms(500);
                  printf("ate0\r\n");
                  delay_ms(500);
                  printf("at+cmgf=1\r\n");
                  delay_ms(500);
                  printf("at+cmgd=1\r\n");
                  delay_ms(500);
                  xoa();
                  delay_ms(500);
                  }
                  //+++++++++++++++ xoa +++++++++++++++++//
                  void xoa()
                  {
                  new_sms=0;
                  z=0;
                  dem=0;
                  y=0;
                  vitri=0;
                  for(i=0;i<=90;i++) //Xoa chuoi[]
                  {chuoi=0;}
                  for(i=0;i<=20;i++) //Xoa noidung_sms[]
                  {noidung_sms=0;}
                  }
                  //+++++++++++++++++++++ xu ly tin nhan ++++++++++++++//
                  void xuly_sms()
                  {
                  y=0;
                  k=0;
                  for(i=0;i<=strlen(chuoi);i++)
                  {
                  if(chuoi=='\n')
                  {
                  k++;
                  if(k==2)vitri=i+1 ;
                  }
                  }
                  for(x=vitri;x<strlen(chuoi)-8;x++)
                  {noidung_sms[y]=chuoi[x];
                  y++ ; // lay noi dung
                  }
                  }
                  //+++++++++++++++ XU LY va DIEU KHIEN +++++++++++++++++++//
                  void xuly()
                  {
                  strcpy(tu_khoa,"On1");
                  if(strcmp(tu_khoa,noidung_sms)==0)
                  {
                  output_bit(Led1,1);
                  LCD_putcmd(0x80); Printf(LCD_putchar,"Den 1 da mo ");
                  LCD_putcmd(0xC0); Printf(LCD_putchar,"Gui sms p.hoi");
                  printf("AT+CMGS=\"01675491246\"\r\n");
                  delay_ms(500);
                  printf("den 1 da mo");
                  delay_ms(500);
                  putc(26); // ctrl +Z
                  delay_ms(500);
                  }
                  strcpy(tu_khoa,"Off1");
                  if(strcmp(tu_khoa,noidung_sms)==0)
                  {
                  output_bit(Led1,0);
                  LCD_putcmd(0x80); Printf(LCD_putchar,"Den 1 da tat ");
                  LCD_putcmd(0xC0); Printf(L CD_putchar,"Gui sms p.hoi");
                  printf("AT+CMGS=\"01675491246\"\r\n");
                  delay_ms(500);
                  printf("den 1 da tat");
                  delay_ms(500);
                  putc(26); // ctrl +Z
                  delay_ms(500);
                  }
                  strcpy(tu_khoa,"On2");
                  if(strcmp(tu_khoa,noidung_sms)==0)
                  {
                  output_bit(Led2,1);
                  LCD_putcmd(0x80); Printf(LCD_putchar,"Den 2 da mo ");
                  LCD_putcmd(0xC0); Printf(LCD_putchar,"Gui sms p.hoi");
                  printf("AT+CMGS=\"01675491246\"\r\n");
                  delay_ms(500);
                  printf("den 2 da mo");
                  delay_ms(500);
                  putc(26); // ctrl +Z
                  delay_ms(500);
                  }
                  strcpy(tu_khoa,"Off2");
                  if(strcmp(tu_khoa,noidung_sms)==0)
                  {
                  output_bit(Led2,0);
                  LCD_putcmd(0x80); Printf(LCD_putchar,"Den 2 da tat ");
                  LCD_putcmd(0xC0); Printf(LCD_putchar,"Gui sms p.hoi");
                  printf("AT+CMGS=\"01675491246\"\r\n");
                  delay_ms(500);
                  printf("den 2 da tat");
                  delay_ms(500);
                  putc(26); // ctrl +Z
                  delay_ms(500);
                  }
                  }
                  void nhiet_do()
                  {
                  strcpy(tu_khoa,"nhietdo");
                  if(strcmp(tu_khoa,noidung_sms)==0)
                  {
                  LCD_putcmd(0x80); Printf(LCD_putchar,"Kiem tra nhiet ");
                  LCD_putcmd(0xC0); Printf(LCD_putchar,"do ve dt ");
                  printf("AT+CMGS=\"01675491246\"\r\n");
                  delay_ms(500);
                  printf("Nhiet do luc nay la:\r\n %u",adc); // gui nhiet do ve may
                  delay_ms(500);
                  printf("do C");
                  delay_ms(500);
                  putc(26); // ctrl +Z
                  delay_ms(500);
                  }
                  }

                  Comment


                  • #10
                    Nguyên văn bởi dinhnam123 Xem bài viết
                    Bạn nào cần tài liệu thì mail cho mình, mấy module Simcom sử dụng lệnh AT qua UART .nó cũng đơn giản lắm
                    mail: dinhnambkhn@gmail.com
                    Thân!
                    Em có cái tài liệu orcad nhưng ko xuất mạch in được nên đã mail cho anh. Mong anh giúp đỡ. Em cảm ơn.

                    Comment


                    • #11
                      Vài demo cho bạn nào chưa biết làm về mảng sim900a này nhé ( share code dưới chú thíc video )
                      arduino + sim900a
                      https://www.youtube.com/watch?v=CrKwZTgW-CQ
                      https://www.youtube.com/watch?v=XBEK16gPyAo
                      pic + sim900a ( pic16f877a + pic18f4520 )

                      Comment

                      Về tác giả

                      Collapse

                      mrkendl Tìm hiểu thêm về mrkendl

                      Bài viết mới nhất

                      Collapse

                      Đang tải...
                      X