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

                      • mèomướp
                        Trả lời cho Sửa bộ nguồn DC 60V 45A
                        bởi mèomướp
                        Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
                        Hôm qua, 13:11
                      • tuyennhan
                        Trả lời cho Sửa bộ nguồn DC 60V 45A
                        bởi tuyennhan
                        Sửa dạng này thì chuyên còn không dám chắc khộng cháy nổ với linh kiện bán ngoài chợ nói gì khộng chuyên .
                        Hôm qua, 09:25
                      • tuyennhan
                        Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                        bởi tuyennhan
                        Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
                        Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
                        Hôm qua, 09:10
                      • Ng.Phuong.5
                        Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                        bởi Ng.Phuong.5
                        Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                        Mấy con...
                        09-01-2025, 19:44
                      • viettinh
                        Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                        bởi viettinh
                        Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
                        Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
                        09-01-2025, 18:12
                      • nguyendinhvan
                        Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                        bởi nguyendinhvan
                        Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
                        Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
                        Cách đơn giản...
                        09-01-2025, 00:04
                      • mèomướp
                        Trả lời cho Sửa bộ nguồn DC 60V 45A
                        bởi mèomướp
                        Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
                        08-01-2025, 19:02
                      • tuyennhan
                        Trả lời cho Sửa bộ nguồn DC 60V 45A
                        bởi tuyennhan
                        Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
                        08-01-2025, 15:43
                      • tuyennhan
                        Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                        bởi tuyennhan
                        Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
                        08-01-2025, 15:28
                      • mèomướp
                        Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                        bởi mèomướp
                        Dạ loa tép bé xíu như ngón chân cái thôi ạ. Thiếu gì chỗ để đâu. Quan trọng là gắn thêm nó loa nghe ok hay ko thôi ạ...
                        08-01-2025, 11:44
                      Đang tải...
                      X