اطلاعیه

Collapse
No announcement yet.

[آموزشی] کنترل رله با پیامک توسط sim800l

Collapse
این موضوع برجسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    [آموزشی] کنترل رله با پیامک توسط sim800l

    سلام برنامه زیر رو به کمک کدویزارد کدویژن برای کنترل رله توسط پیامک نوشتم. میکروی استفاده شده atmega16 هستش. portb.0 به رله متصل هست و با ارسال on# فعال و off# غیر فعال میشه. portb.1 رو هم گذاشتم برای وضعیت که به صورت پیشفرض روشنه و در صورت برقرار شدن ارتباط میکرو با sim800 خاموش میشه. از کریستال خارجی 16 مگاهرتز برای اسیلاتور استفاده شده. میکرو بعد روشن شدن پیامک sim 800 was turned on به شماره ای که از قبل تعیین شده میفرسته.
    اطلاعات بیشتر رو انشاالله در پست های بعدی میگم.


    به این نکته توجه کنید که بعد روشن شدن مدار باید یه 30 ثانیه ای صبر کنید،بعد پیام بفرستید.این عمل فقط برای اولین بار بعد روشن شدن ماژول باید رعایت بشه و بعد اون محدودیتی برای ارسال پیامک وجود نداره.

    آپدیت: 96/08/13


    کد:
    #include <mega32a.h>
    #include <delay.h>
    #include <string.h>
    
    char c=0;
    char i=0;
    char * pch;
    char a;
    char ctrlz=0x1A;
    
    char at[]={"AT\r"};
    char ATE0[]={"ATE0\r"};
    char text_mode[]={"AT+CMGF=1\r"};
    char cpbs[]={"AT+CPBS=\"ME\"\r"};
    char csmp[]={"AT+CSMP=17,167,0,0\r"};
    char cpms[]={"AT+CPMS=\"ME\",\"ME\",\"ME\"\r"};
    char cnmi[]={"AT+CNMI=2,1,0,0,0\r"};
    char gsm[]={"AT+CSCS=\"GSM\"\r"};
    char save_on_sim[]={"AT+CSAS=0\r"};
    char ATW[]={"AT&W\r"};
    char send_sms[]={"AT+CMGS=\"+98911213----\"\r"};
    char sms_ok[]={"sim800 was turned on"};
    char cmgda[]= {"AT+CMGDA=\"DEL ALL\"\r"};
    char cmgr[]={"AT+CMGR="};
    
    #define DATA_REGISTER_EMPTY (1<<UDRE)
    #define RX_COMPLETE (1<<RXC)
    #define FRAMING_ERROR (1<<FE)
    #define PARITY_ERROR (1<<UPE)
    #define DATA_OVERRUN (1<<DOR)
    
    // USART Receiver buffer
    #define RX_BUFFER_SIZE 128
    char rx_buffer[RX_BUFFER_SIZE];
    
    #if RX_BUFFER_SIZE <= 256
    unsigned char rx_wr_index=0,rx_rd_index=0;
    #else
    unsigned int rx_wr_index=0,rx_rd_index=0;
    #endif
    
    #if RX_BUFFER_SIZE < 256
    unsigned char rx_counter=0;
    #else
    unsigned int rx_counter=0;
    #endif
    
    // This flag is set on USART Receiver buffer overflow
    bit rx_buffer_overflow;
    
    // USART Receiver interrupt service routine
    interrupt [USART_RXC] void usart_rx_isr(void)
    {
    char status,data;
    status=UCSRA;
    data=UDR;
    if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
       {
       rx_buffer[rx_wr_index++]=data;
    #if RX_BUFFER_SIZE == 256
       // special case for receiver buffer size=256
       if (++rx_counter == 0) rx_buffer_overflow=1;
    #else
       if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
       if (++rx_counter == RX_BUFFER_SIZE)
          {
          rx_counter=0;
          rx_buffer_overflow=1;
          }
    #endif
       }
    }
    
    #ifndef _DEBUG_TERMINAL_IO_
    // Get a character from the USART Receiver buffer
    #define _ALTERNATE_GETCHAR_
    #pragma used+
    char getchar(void)
    {
    char data;
    while (rx_counter==0);
    data=rx_buffer[rx_rd_index++];
    #if RX_BUFFER_SIZE != 256
    if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
    #endif
    #asm("cli")
    --rx_counter;
    #asm("sei")
    return data;
    }
    #pragma used-
    #endif
    
    // USART Transmitter buffer
    #define TX_BUFFER_SIZE 24
    char tx_buffer[TX_BUFFER_SIZE];
    
    #if TX_BUFFER_SIZE <= 256
    unsigned char tx_wr_index=0,tx_rd_index=0;
    #else
    unsigned int tx_wr_index=0,tx_rd_index=0;
    #endif
    
    #if TX_BUFFER_SIZE < 256
    unsigned char tx_counter=0;
    #else
    unsigned int tx_counter=0;
    #endif
    
    // USART Transmitter interrupt service routine
    interrupt [USART_TXC] void usart_tx_isr(void)
    {
    if (tx_counter)
       {
       --tx_counter;
       UDR=tx_buffer[tx_rd_index++];
    #if TX_BUFFER_SIZE != 256
       if (tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
    #endif
       }
    }
    
    #ifndef _DEBUG_TERMINAL_IO_
    // Write a character to the USART Transmitter buffer
    #define _ALTERNATE_PUTCHAR_
    #pragma used+
    void putchar(char c)
    {
    while (tx_counter == TX_BUFFER_SIZE);
    #asm("cli")
    if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
       {
       tx_buffer[tx_wr_index++]=c;
    #if TX_BUFFER_SIZE != 256
       if (tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
    #endif
       ++tx_counter;
       }
    else
       UDR=c;
    #asm("sei")
    }
    #pragma used-
    #endif
    
    // Standard Input/Output functions
    #include <stdio.h>
    
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port A initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
    // State: Bit7=P Bit6=P Bit5=P Bit4=P Bit3=P Bit2=P Bit1=P Bit0=P
    PORTA=(1<<PORTA7) | (1<<PORTA6) | (1<<PORTA5) | (1<<PORTA4) | (1<<PORTA3) | (1<<PORTA2) | (1<<PORTA1) | (1<<PORTA0);
    
    // Port B initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=Out Bit0=Out
    DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (1<<DDB1) | (1<<DDB0);
    // State: Bit7=P Bit6=P Bit5=P Bit4=P Bit3=P Bit2=P Bit1=0 Bit0=0
    PORTB=(1<<PORTB7) | (1<<PORTB6) | (1<<PORTB5) | (1<<PORTB4) | (1<<PORTB3) | (1<<PORTB2) | (1<<PORTB1) | (0<<PORTB0);
    
    // Port C initialization
    // Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=In Bit2=Out Bit1=Out Bit0=Out
    DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
    // State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=P Bit2=0 Bit1=0 Bit0=0
    PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (1<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
    
    // Port D initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=Out Bit0=In
    DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (1<<DDD1) | (0<<DDD0);
    // State: Bit7=P Bit6=P Bit5=P Bit4=P Bit3=P Bit2=P Bit1=0 Bit0=T
    PORTD=(1<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (1<<PORTD4) | (1<<PORTD3) | (1<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
    
    
    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: On
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 9600
    UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
    UCSRB=(1<<RXCIE) | (1<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
    UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
    UBRRH=0x00;
    UBRRL=0x67;
    
    //analogue comparator power off to reduce power consumption
    ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
    SFIOR=(0<<ACME);
    
    
    
    
    
    
    //wait for initiallizing sim800
    delay_ms(10000);
    
    UCSRB=(1<<RXCIE) | (1<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
    //checking serial connection
    check:
      for ( i=0 ; i<=2 ; i++)
            {
            putchar(at[i]);
            }
            
            delay_ms(1000);
            
            pch=strstr(rx_buffer,"OK");  
            if(pch==NULL) goto check;
            PORTB.1=0;
            delay_ms(1000);
        
            
    //echo off
    for ( i=0 ; i<=4 ; i++)
            {
            putchar(ATE0[i]);
            }
            delay_ms(1000);
            
    #asm("cli")
    // delete receive buffer
    for(i=0;i<=128;i++) {
    rx_buffer[i]=0;
    }
    #asm("sei")  
    // Global enable interrupts        
    #asm("sei")
            pch=NULL;
            rx_wr_index=0;
    // text mode sms
    for ( i=0 ; i<=9 ; i++)
    {
    putchar(text_mode[i]);
    }
            //checking ok
            while(pch==NULL) {
            pch=strstr(rx_buffer,"OK");  
            }
            
    
    //"ME"    
    for ( i=0 ; i<=12 ; i++)
        {
        putchar(cpbs[i]);
        }
        delay_ms(500);
    
    //17,167,0,0        
    for ( i=0 ; i<=18 ; i++)
            {
            putchar(csmp[i]);
            }
            delay_ms(500);
            
    //"ME","ME","ME"        
    for ( i=0 ; i<=22 ; i++)
            {
            putchar(cpms[i]);
            }
            delay_ms(500);
            
    //2,1,0,0,0        
    for ( i=0 ; i<=17 ; i++)
            {
            putchar(cnmi[i]);
            }
            delay_ms(500);
            
    //gsm        
    for ( i=0 ; i<=13 ; i++)
            {
            putchar(gsm[i]);
            }
            delay_ms(500);        
    
    //save_on_sim        
    for ( i=0 ; i<=9 ; i++)
            {
            putchar(save_on_sim[i]);
            }
            delay_ms(1000);
            
    //save all setting        
    for ( i=0 ; i<=4 ; i++)
            {
            putchar(ATW[i]);
            }
            delay_ms(1500);
            
    #asm("cli")        
    // delete receive buffer
    for(i=0;i<=128;i++) {
    rx_buffer[i]=0;
    }
    #asm("sei")
    //send turning on sms
    for ( i=0 ; i<=23 ; i++)
    {
    putchar(send_sms[i]);
    }
    delay_ms(1000);
    for ( i=0 ; i<=19 ; i++)
    {
    putchar(sms_ok[i]);
    }
    putchar('\r');
    putchar(ctrlz);
    delay_ms(1000);
    
    #asm("cli")
    // delete receive buffer
    for(i=0;i<=128;i++) {
    rx_buffer[i]=0;
    }
    #asm("sei")    
    pch=NULL;
    rx_wr_index=0;
    a=0;
    
    //delete all messege  
          for ( i=0 ; i<=18 ; i++)
            {
            putchar(cmgda[i]);
            }
            delay_ms(5000);
            i=0;
    while (1) {
    
            rx_wr_index=0;
            
            if(c == 1) {
            if(a>=52){  //if a>='4'
        c=0;
           //delete all messege  
          for ( i=0 ; i<=18 ; i++)
            {
            putchar(cmgda[i]);
            }
            i=0;
            delay_ms(10000);
            }
            }
            
            pch=NULL;
            rx_wr_index=0;
          //waiting for +CMTI: from sim800
          while(pch==NULL) {
          pch=strstr(rx_buffer,"+CMTI:");  
          }
          delay_ms(1000);    
          
          //show messege request
          for ( i=0 ; i<=7 ; i++)
            {
            putchar(cmgr[i]);
            }
            putchar(pch[12]);
            if(pch[13]>47 && pch[13]<58){
            putchar(pch[13]);
            c=1;
            }
            putchar('\r');
            a=pch[12];
            
            pch=NULL;
            rx_wr_index=0;
            
            delay_ms(1500);
          
                    
             //checking on
             pch=strstr(rx_buffer,"#on");
             if(pch != NULL){
             PORTB.0=1;
             pch=NULL;
             rx_wr_index=0;
             }
             //checking off
             pch=strstr(rx_buffer,"#off");
             if(pch != NULL) {
             PORTB.0=0;
             pch=NULL;
             rx_wr_index=0;
             }
            
           #asm("cli")
           // delete receive buffer
           for(i=0;i<=128;i++) {
           rx_buffer[i]=0;
           }
           pch=NULL;
           #asm("sei")      
              
    }
    }
    اینم لینک برنامه کدویژن(آپدیت شده)



    اینم فیلم عملکرد مدار

    جدیدترین ویرایش توسط سید رضا باباتبار; ۲۱:۴۵ ۱۴۰۲/۱۲/۱۳.
    [آموزشی] کنترل رله با پیامک توسط sim800l
    [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
    [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
    [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
    صفحه اینستاگرام : ecdco_ir


    #2
    پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

    اینم شماتیک قسمت sim800

    جدیدترین ویرایش توسط سید رضا باباتبار; ۲۱:۴۷ ۱۴۰۲/۱۲/۱۳.
    [آموزشی] کنترل رله با پیامک توسط sim800l
    [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
    [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
    [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
    صفحه اینستاگرام : ecdco_ir

    دیدگاه


      #3
      پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

      توضیحات برنامه:
      آپدیت: 96/08/17


      ابتدا تنظیمات کد ویزارد رو به صورت زیر انجام میدیم:


      سپس در برنامه اصلی هدر string رو اضافه میکنیم به همراه متغیر های مورد نیاز که جلوتر توضیح داده خواهند شد:
      کد:
      #include <mega32a.h>
      #include <delay.h>
      #include <string.h>
      
      char c=0;
      char i=0;
      char * pch;
      char a;
      char ctrlz=0x1A;
      
      char at[]={"AT\r"};
      char ATE0[]={"ATE0\r"};
      char text_mode[]={"AT+CMGF=1\r"};
      char cpbs[]={"AT+CPBS=\"ME\"\r"};
      char csmp[]={"AT+CSMP=17,167,0,0\r"};
      char cpms[]={"AT+CPMS=\"ME\",\"ME\",\"ME\"\r"};
      char cnmi[]={"AT+CNMI=2,1,0,0,0\r"};
      char gsm[]={"AT+CSCS=\"GSM\"\r"};
      char save_on_sim[]={"AT+CSAS=0\r"};
      char ATW[]={"AT&W\r"};
      char send_sms[]={"AT+CMGS=\"+98911213----\"\r"};
      char sms_ok[]={"sim800 was turned on"};
      char cmgda[]= {"AT+CMGDA=\"DEL ALL\"\r"};
      char cmgr[]={"AT+CMGR="};
      به کد های تولید شده کدویزارد دست نمیزنیم،به جز خط زیر که مربوط به یوزارته:
      کد:
      UCSRB=(1<<RXCIE) | (1<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
      در این کد RXEN رو صفر میکنیم
      سپس قبل حلقه while یه تاخیر 10 ثانیه ای قرار میدیم برای اینکه sim800 شبکه رو پیدا کنه(میتونید این زمان رو کمترش کنید) و سپس دوباره RXEN رو فعال میکنیم:
      کد:
      //wait for initiallizing sim900
      delay_ms(10000);
      
      UCSRB=(1<<RXCIE) | (1<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
      در کد زیر AT میفرستیم تا اینکه OK دریافت کنیم
      توجه کنید sim800 به صورت auto baudrate می باشد یعنی اگر AT براش بفرستیم خودش تشخیص میده که با چه باد ریتی براش دیتا فرستادیم و با همون بادریت برامون دیتا میفرسته که اینجا بادریت رو 9600 تنظیم کردیم
      کد:
      //checking serial connection
      check:
        for ( i=0 ; i<=2 ; i++)
              {
              putchar(at[i]);
              }
              
              delay_ms(3000);
              
              pch=strstr(rx_buffer,"OK");  
              if(pch==NULL) goto check;
              PORTB.1=0;
              delay_ms(1000);
      نکته مهم در این کد استفاده از تابع strstr می باشد.به کمک این تابع شما میتونید در بافر دریافت دیتا دنبال رشته مورد نظرتون بگردید که اگر پیدا شد مقدار اشاره گر pch عددی غیر صفر(غیر null) خواهد شد.
      جلوتر در مورد این تابع توضیح بیشتری میدم.برای اطلاعات تکمیلی میتونید لینک های زیر رو هم ببینید

      C library function - strstr() - The C library function char *strstr(const char *haystack, const char *needle) function finds the first occurrence of the substring needle in the string haystack. The terminating '' characters are not compared.

      بعد از اینکه OK دریافت شد portb.1 صفر خواهد شد.

      در خط زیر echo را خاموش میکنیم تا دیتاهایی که خودمون میفرستیم رو دیگه دریافت نکنیم:
      کد:
      //echo off
      for ( i=0 ; i<=4 ; i++)
              {
              putchar(ATE0[i]);
              }
              delay_ms(2000);
      با استفاده از خط زیر بافر دریافت را پاک میکنیم
      کد:
      // delete receive buffer
      for(i=0;i<=128;i++) {
      rx_buffer[i]=0;
      }
      با استفاده از کد زیر حالت پیامک را روی text mode قرارمیدهیم(دو حالت داریم pud و textmode که باید پیامک رو روی text mode تنظیم کنیم) و منتظر میمونیم تا OK دریافت کنیم:
      کد:
      // text mode sms
      for ( i=0 ; i<=9 ; i++)
      {
      putchar(text_mode[i]);
      }
              //checking ok
              while(pch==NULL) {
              pch=strstr(rx_buffer,"OK");  
              }
      درکد زیر مشکل ارسال پیامک از ایرانسل به همراه اول برطرف شده:
      کد:
      //17,167,0,0        
      for ( i=0 ; i<=18 ; i++)
              {
              putchar(csmp[i]);
              }
              delay_ms(500);
      در کد زیر هم محل ذخیره پیام ها،خود ماژول انتخاب شده.
      توجه نمایید که چون 15 حافظه اول برای سیم کارت می باشد،در این حالت اولین پیامک با شماره 16 نمایش داده خواهد شد.
      کد:
      //"ME","ME","ME"        
      for ( i=0 ; i<=22 ; i++)
              {
              putchar(cpms[i]);
              }
              delay_ms(500);
      در کد زیر هم فرمت نمایش را انتخاب میکنیم که برای این برنامه حتماً باید به صورت زیر نمایش داده بشه:
      کد:
      +CMTI: "ME",16
      کد:
      //2,1,0,0,0        
      for ( i=0 ; i<=17 ; i++)
              {
              putchar(cnmi[i]);
              }
              delay_ms(500);
      با استفاده از کد زیر هم ماژول رو در حالت gsm قرار میدهیم:
      کد:
      //gsm        
      for ( i=0 ; i<=13 ; i++)
              {
              putchar(gsm[i]);
              }
              delay_ms(500);
      و در آخر هم با استفاده ازکد های زیر تنظیمات رو ذخیره میکنیم:
      کد:
      //save_on_sim        
      for ( i=0 ; i<=9 ; i++)
              {
              putchar(save_on_sim[i]);
              }
              delay_ms(1000);
              
      //save all setting        
      for ( i=0 ; i<=4 ; i++)
              {
              putchar(ATW[i]);
              }
              delay_ms(1500);
      با استفاده از کد زیر پیامک sim800 was turned on رو به شماره ای که از قبل تعیین کردیم میفرستیم:
      کد:
      //send turning on sms
      
      
      for ( i=0 ; i<=23 ; i++)
      {
      putchar(send_sms[i]);
      }
      delay_ms(1000);
      for ( i=0 ; i<=20 ; i++)
      {
      putchar(sms_ok[i]);
      }
      putchar('\r');
      putchar(ctrlz);
      delay_ms(1000);
      با استفاده از کد زیر پیامک های ذخیره شده در ماژول را پاک میکنیم:
      کد:
      //delete all messege  
            for ( i=0 ; i<=18 ; i++)
              {
              putchar(cmgda[i]);
              }
              i=0;
      در کد زیر میاد میبینه که اگر تعداد پیام به بیشتر از 40 رسید کل پیام های ماژول رو پاک میکنه:
      توجه کنید c موقعی یک میشه که شماره پیام دو رقمی باشه.
      کد:
      if(c == 1) {
              if(a>=52){  //if a>='4'
          c=0;
             //delete all messege  
            for ( i=0 ; i<=18 ; i++)
              {
              putchar(cmgda[i]);
              }
              i=0;
              delay_ms(10000);
              }
              }
      فرمت رشته دریافتی در صورتی که پیام جدید بیاد به صورت زیره:
      کد:
      [SIZE=2][B]+CMTI: "SM",16[/B][/SIZE]
      که با استفاده از کد زیر منتظر دریافت پیام جدید میمونیم:
      کد:
      //waiting for +CMTI: from sim800
            while(pch==NULL) {
            pch=strstr(rx_buffer,"+CMTI:");  
            }
            delay_ms(1000);
      در صورتی که میخواهید کارهای دیگه هم در حلقه while انجام بدید در کد بالا به جای while میتونید از if استفاده کنید و در صورتی که شرط if برقرار بود یه فلگ رو یک کنید و کد های دیگه مربوط به پیامک رو در صورت یک بودن فلگ اجرا کنید و در آخر دوباره فلگ رو صفر کنید.

      سیزدهمین کاراکتر شماره خونه ایه که پیام در اون ذخیره شده(در صورت دو رقمی بودن سیزدهمین و چهاردهمین) که یعنی pch[12] (و در صورت دو رقمی بودن [13]pch هم اضافه می شود)برابر شماره خونه پیامک دریافتی میشه
      بنابر این میایم با کد زیر پیام اون خونه رو میخونیم(درواقع همون پیام جدید)
      //show messege request
      کد:
      for ( i=0 ; i<=7 ; i++)
              {
              putchar(cmgr[i]);
              }
              putchar(pch[12]);
              if(pch[13]>47 && pch[13]<58){
              putchar(pch[13]);
              c=1;
              }
              putchar('\r');
              a=pch[12];
      با استفاده از کد زیر هم میاد بررسی میکنه که اگر on# اومد رله رو وصل و اگر off# اومد رله رو قطع میکنه
      کد:
       //checking on
               pch=strstr(rx_buffer,"#on");
               if(pch != NULL){
               PORTB.0=1;
               pch=NULL;
               rx_wr_index=0;
               }
               //checking off
               pch=strstr(rx_buffer,"#off");
               if(pch != NULL) {
               PORTB.0=0;
              pch=NULL;
               rx_wr_index=0;
               }
      جدیدترین ویرایش توسط سید رضا باباتبار; ۲۱:۴۸ ۱۴۰۲/۱۲/۱۳.
      [آموزشی] کنترل رله با پیامک توسط sim800l
      [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
      [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
      [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
      صفحه اینستاگرام : ecdco_ir

      دیدگاه


        #4
        پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

        اینم کتابخونه آلتیوم شماتیک و فوت پرینت ماژول sim800l





        جدیدترین ویرایش توسط سید رضا باباتبار; ۲۱:۴۸ ۱۴۰۲/۱۲/۱۳.
        [آموزشی] کنترل رله با پیامک توسط sim800l
        [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
        [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
        [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
        صفحه اینستاگرام : ecdco_ir

        دیدگاه


          #5
          پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

          ضمن تشکر بابت آموزش خوب و واقعا کاملتون
          این تاپیک در قالب یک مقاله علمی در صفحه اول سایت به نام خودتون ثبت شد

          بابت تشکر یک کارت تخفیف ویژه خرید از فروشگاه هم براتون پیغام خصوصی میشه
          موفق باشید

          دیدگاه


            #6
            پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

            با سلام
            این نوع ماژول یه مقدار بد قلق هستند و با تجربه ای که از این ماژول های قرمز دارم به طور قطع میگم که فقط با سیم کارت ایرانسل جواب میدن مگر اینکه آپدیت بشن یا دستور اصلاحی بهشون داده بشه در طول برنامه
            دستور AT+CSMP با پی فرضی که در PDF کامند ها وجود داره در این ماژول متفاوته و باعث همون مشکلی میشه که گفتم

            دیدگاه


              #7
              پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

              همونطور که میدونید این ماژول کوچکترین ماژول آماده sim800 هستش و از طرفی هم خیلی ارزونه و همینطور کم مصرف.
              بنابراین به راحتی میتوان از آن در پروژه ها استفاده کرد،حتی پروژه های صنعتی.به نظر من برای تعداد زیر 20 تا، از این ماژول آماده استفاده کنیم راحت تر و کم هزینه تر در میاد،ابعاد مدار هم کوچیک تر میشه. با توجه به اینکه خود ماژول تعداد پایه های کم داره(ولی پایه های ضروری و مورد نیاز) و dip هم هست،برای افرادی که میخوان خودشون مونتاژ رو انجام بدن بهترین گزینه هستش.
              بنابراین نباید به این ماژول به عنوان یه ماژول کم ارزش نگاه کرد،بلکه حتی میتونیم این ماژول رو بهترین ماژول آماده خانواده ی simcom بدونیم.(با توجه به فاکتور های قیمت،اندازه و توان مصرفی)
              در مورد نکته ی آقا سعید هم، درسته این ماژول یه خورده قلق داره اما آنچنان بد قلق هم نیست،فقط کافیه یه بار مشکل رو حل کنیم و برای همیشه راحتیم.
              الان ماژول پیشم نیست و دارم میرم مسافرت برای همین حدود یکی دو هفته دیگه ایشالا یه فیلم هم از عملکرد مدار با سیم کارت همراه اول میزارم.
              در آخر هم از آقای بلورچیان بابت پیگیریشون تشکر میکنم.
              [آموزشی] کنترل رله با پیامک توسط sim800l
              [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
              [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
              [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
              صفحه اینستاگرام : ecdco_ir

              دیدگاه


                #8
                پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

                نوشته اصلی توسط سید رضا باباتبار نمایش پست ها
                در مورد نکته ی آقا سعید هم، درسته این ماژول یه خورده قلق داره اما آنچنان بد قلق هم نیست،فقط کافیه یه بار مشکل رو حل کنیم و برای همیشه راحتیم.
                دقیقا درسته
                من از همین سایت هم نوع A خریدم و مونتاژ کردم و عالی و بدون دردسر با 5 تا دستور پیامک ارسال کرده
                همین رو هم فکر کنم تا الان 3 دونه تهیه کردمو استفاده کردم و آخریش رو با آردوینو راه انداختم
                برای این ماژول اون 5 دستور که گفتم میشه 6 تا
                که البته قبلا تو یه تاپیک دیگه که مشکل رو مطرح کرده بودم شخص جناب بلورچیان گفتند که با یه آپدیت حل میشه
                من آپدیت نکردم ولی باز با راهنماییمدیران انجمن (فکر کنم جناب آراسته) با همون دستوری که گفتم بدون آپدیت مشکل حل شد.
                من با ترمینال تمام پیشفرض مقدار تمام دستورات رو چک کردم و فقط مشکل ماژول همون دستوره که مقداری تو ارسال و دریافت پیامک برای ما مشکل ساز میشه وگرنه یه گزینه عالی میتونه باشه
                کاملا درسته که از لحاظ اقتصادی به صرفه ترین ماژوله

                دیدگاه


                  #9
                  پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

                  سلام خسته نباشی میشه در مورد پورت b.1 رو بیشتر توضیح بدید b.1 چه کار میکنه؟ ایا به سیم 800 ,وصل میشه؟؟؟
                  جدیدترین ویرایش توسط اشکان غفارزاده; ۰۲:۱۸ ۱۳۹۶/۰۷/۲۰.

                  دیدگاه


                    #10
                    پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

                    سلام
                    این پین با مقاومت به یه led متصل میشه و به sim800 متصل نیست.میتونی ازش استفاده نکنی،تا موقعی که ارتباط میکرو با sim800 برقرار نشده باشه این led روشن میمونه.
                    [آموزشی] کنترل رله با پیامک توسط sim800l
                    [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
                    [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
                    [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
                    صفحه اینستاگرام : ecdco_ir

                    دیدگاه


                      #11
                      پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

                      این ماژول یه مشکل که داره اینه که پای riنداره
                      همانطورکه میدونین این پایه واسه اینه که وقتی پیام (تماسم همینطور) میادصفرمیشه وماباپردازنده امون میتونین اینوبفهمیم ولی وقتی نیست بایدمنتظربمونی واین باعث خستگی میکرومیشه
                      اینوچطورحل کردین؟
                      درعجبم ازمردمی که به دنیایی مشتاقندکه ازآن دورمیشوندوگریزان ازآخرتیکه که روزبه روزبه آن نزدیک میشوند.

                      دیدگاه


                        #12
                        پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

                        نوشته اصلی توسط saeed garoosi نمایش پست ها
                        این ماژول یه مشکل که داره اینه که پای riنداره
                        همانطورکه میدونین این پایه واسه اینه که وقتی پیام (تماسم همینطور) میادصفرمیشه وماباپردازنده امون میتونین اینوبفهمیم ولی وقتی نیست بایدمنتظربمونی واین باعث خستگی میکرومیشه
                        اینوچطورحل کردین؟
                        پایه ri داره دوست عزیز،تو شکل زیر پایه ring همون ri هستش
                        درضمن من از اینتراپت ri استفاده نکردم و به صورت نرم افزاری منتظر میمونم +cmti بیاد که یعنی پیام جدید اومده

                        [آموزشی] کنترل رله با پیامک توسط sim800l
                        [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
                        [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
                        [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
                        صفحه اینستاگرام : ecdco_ir

                        دیدگاه


                          #13
                          پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

                          نوشته اصلی توسط سید رضا باباتبار نمایش پست ها
                          پایه ri داره دوست عزیز،تو شکل زیر پایه ring همون ri هستش
                          درضمن من از اینتراپت ri استفاده نکردم و به صورت نرم افزاری منتظر میمونم +cmti بیاد که یعنی پیام جدید اومده

                          اوکی.من میخوام اینوخریداری کنم فقط مثل ماژولهای دیگه ال ای دی برای نمایش اینکه ماژول روشنه یااینکه به شبکه وصل شده روچطوربایدبزارم؟
                          درعجبم ازمردمی که به دنیایی مشتاقندکه ازآن دورمیشوندوگریزان ازآخرتیکه که روزبه روزبه آن نزدیک میشوند.

                          دیدگاه


                            #14
                            پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

                            نوشته اصلی توسط saeed garoosi نمایش پست ها
                            اوکی.من میخوام اینوخریداری کنم فقط مثل ماژولهای دیگه ال ای دی برای نمایش اینکه ماژول روشنه یااینکه به شبکه وصل شده روچطوربایدبزارم؟
                            یه led نمایش وضعیت شبکه داره که وقتی تو هر حالتی چشمک بزنه یعنی ماژول روشنه
                            دیگه نیازی به نصب led نیست
                            جدیدترین ویرایش توسط سید رضا باباتبار; ۰۱:۴۹ ۱۳۹۶/۰۴/۳۱.
                            [آموزشی] کنترل رله با پیامک توسط sim800l
                            [آموزشی] راه اندازی سنسورهای DHT11 و DHT22 با کدویژن
                            [آموزشی] مدار عملی اتصال میکروفن خازنی به میکروکنترلر
                            [آموزشی] آموزش نحوه راه اندازی میکروهای fmd
                            صفحه اینستاگرام : ecdco_ir

                            دیدگاه


                              #15
                              پاسخ : [آموزشی] کنترل رله با پیامک توسط sim800l

                              نوشته اصلی توسط سید رضا باباتبار نمایش پست ها
                              یه led نمایش وضعیت شبکه داره که وقتی تو هر حالتی چشمک بزنه یعنی ماژول روشنه
                              دیگه نیازی به نصب led نیست
                              اگه به شبکه وصل بشه همچنان چشمک زن هستش یاثابت میمونه؟
                              واسه پایه های rx وtxسطح ولتاژبایدپائین بیادیعنی همون 2.5ولت یامستقم میشه میکرورووصل کرد؟

                              دلیل: ادغام دو پست برای جلوگیری از اسپم

                              برای آنتنش بایدازآنتن تعبیه شده خودش حتمااستفاده کرد یااینکه سوکتش آنتن مدل بردراه اندازsim800cهم میخوره؟
                              درعجبم ازمردمی که به دنیایی مشتاقندکه ازآن دورمیشوندوگریزان ازآخرتیکه که روزبه روزبه آن نزدیک میشوند.

                              دیدگاه

                              لطفا صبر کنید...
                              X