اطلاعیه

Collapse
No announcement yet.

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

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

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

    سلام
    میشه کد ویژن دریافت پیامک رو بزارید برای روشن شدن رله ؟
    ممنون

    دیدگاه


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

      سلام
      قابلیت ذخیره وضعیت رله ها در زمان قطعی برق به برنامه اضافه شد.

      کد:
      //Sim800l(8,7)(RX,TX)
      // pin OUTPUT to Relay(A0, A1, A2, A3 , 2, 3, 4, 5)
      #include <EEPROM.h>
      #include <gprs.h>
      #include <softwareserial.h>
      
      
      #define TIMEOUT    5000
      #define Ron LOW
      #define Roff HIGH
      
      byte Relay[] = {A0, A1, A2, A3, 2, 3, 4, 5};
      
      byte StatRelay[8];
      char buffNumber[15];
      String replyNumber = "091xxxxxxxx";
      GPRS gprs;
      
      void setup() {
      
        for (int i = 0; i < 8; i++) {
          pinMode (Relay[i] , OUTPUT);
          digitalWrite (Relay[i], EEPROM.read(i));
          StatRelay[i] = EEPROM.read(i);
        }
      digitalWrite(2,EEPROM.read(1));
        Serial.begin(9600);
        while (!Serial);
        Serial.println("Starting SIM800 SMS Command Processor>>> Automatically Read SMS");
        gprs.preInit();
        delay(1000);
      
        while (0 != gprs.init()) {
          delay(1000);
          Serial.print("init error\r\n");
        }
      
        //Set SMS mode to ASCII
        if (0 != gprs.sendCmdAndWaitForResp("AT+CMGF=1\r\n", "OK", TIMEOUT)) {
          ERROR("ERROR:CNMI");
          return;
        }
      
        //Start listening to New SMS Message Indications
        if (0 != gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0\r\n", "OK", TIMEOUT)) {
          ERROR("ERROR:CNMI");
          return;
        }
      
        int pjg = replyNumber.length() + 1;
      
        buffNumber[pjg];
        replyNumber.toCharArray(buffNumber, pjg);
        //Serial.print("Send reply to number = > ");
        //Serial.println(buffNumber);
        //Serial.println("Initialization Done");
        //Serial.println("=============================================================");
      }
      
      //Variable to hold last line of serial output from SIM800
      char currentLine[500] = "";
      int currentLineIndex = 0;
      
      //Boolean to be set to true if message notificaion was found and next
      //line of serial output is the actual SMS message content
      bool nextLineIsMessage = false;
      
      
      
      void loop() {
      
        // Change status Relay ON / OFF
        for (int i = 0; i < 8; i++) {
          digitalWrite(Relay[i], StatRelay[i]);
        }
      
        //If there is serial output from SIM800
        if (gprs.serialSIM800.available()) {
          char lastCharRead = gprs.serialSIM800.read();
          //Read each character from serial output until \r or \n is reached (which denotes end of line)
          if (lastCharRead == '\r' || lastCharRead == '\n') {
            String lastLine = String(currentLine);
            lastLine.toUpperCase(); // Uppercase the Received Message FOR Non-case-sensitivity
      
            //If last line read +CMT, New SMS Message Indications was received.
            //Hence, next line is the message content.
            if (lastLine.startsWith("+CMT:")) {
      
              Serial.println(lastLine);
              nextLineIsMessage = true;
      
            } else if (lastLine.length() > 0) {
      
              if (nextLineIsMessage) {
      
                Serial.println(lastLine);
      
                //Relay 1 Controller
                //Read message content and set status according to SMS content Then reply SMS
                if (lastLine.indexOf("R1 OFF") >= 0) {
                  StatRelay[0] = Roff;
                  EEPROM.write(0, Roff);
                  //Serial.print("Reply To ");
                  //Serial.print(buffNumber);
                  //Serial.println("==>> Relay 1 Status OFF");
                  gprs.sendSMS (buffNumber, "Relay 1 Status OFF");
      
                } else if (lastLine.indexOf("R1 ON") >= 0) {
                  StatRelay[0] = Ron;
                  EEPROM.write(0, Ron);
                  //Serial.print("Reply To ");
                  //Serial.print(buffNumber);
                  //Serial.println("==>> Relay 1 Status ON");
                  gprs.sendSMS (buffNumber, "Relay 1 Status ON");
                }
      
                //Relay 2 Controller
                //Read message content and set status according to SMS content Then reply SMS
                if (lastLine.indexOf("R2 OFF") >= 0) {
                  StatRelay[1] = Roff;
                   EEPROM.write(1, Roff);
                  //Serial.print("Reply To ");
                  //Serial.print(buffNumber);
                  //Serial.println("==>> Relay 2 Status OFF");
                  gprs.sendSMS (buffNumber, "Relay 2 Status OFF");
      
                } else if (lastLine.indexOf("R2 ON") >= 0) {
                  StatRelay[1] = Ron;
                   EEPROM.write(1, Ron);
                  //Serial.print("Reply To ");
                  //Serial.print(buffNumber);
                  //Serial.println("==>> Relay 2 Status ON");
                  gprs.sendSMS (buffNumber, "Relay 2 Status ON");
                }
      
                //Relay 3 Controller
                //Read message content and set status according to SMS content Then reply SMS
                if (lastLine.indexOf("R3 OFF") >= 0) {
                  StatRelay[2] = Roff;
                  EEPROM.write(2, Roff);
                  //Serial.print("Reply To ");
                  //Serial.print(buffNumber);
                  //Serial.println("==>> Relay 3 Status OFF");
                  gprs.sendSMS (buffNumber, "Relay 3 Status OFF");
      
                } else if (lastLine.indexOf("R3 ON") >= 0) {
                  StatRelay[2] = Ron;
                  EEPROM.write(2, Ron);
                  //Serial.print("Reply To ");
                  //Serial.print(buffNumber);
                  //Serial.println("==>> Relay 3 Status ON");
                  gprs.sendSMS (buffNumber, "Relay 3 Status ON");
                }
      
                //Relay 4 Controller
                //Read message content and set status according to SMS content Then reply SMS
                if (lastLine.indexOf("R4 OFF") >= 0) {
                  StatRelay[3] = Roff;
                  EEPROM.write(3, Roff);
                  //Serial.print("Reply To ");
                  //Serial.print(buffNumber);
                  //Serial.println("==>> Relay 4 Status OFF");
                  gprs.sendSMS (buffNumber, "Relay 4 Status OFF");
      
                } else if (lastLine.indexOf("R4 ON") >= 0) {
                  StatRelay[3] = Ron;
                  EEPROM.write(3, Ron);
                  //Serial.print("Reply To ");
                  //Serial.print(buffNumber);
                  //Serial.println("==>> Relay 4 Status ON");
                  gprs.sendSMS (buffNumber, "Relay 4 Status ON");
                }
      
                //Relay 5 Controller
                //Read message content and set status according to SMS content Then reply SMS
                if (lastLine.indexOf("R5 OFF") >= 0) {
                  StatRelay[4] = Roff;
                  EEPROM.write(4, Roff);
                  //Serial.print("Reply To ");
                  //Serial.print(buffNumber);
                  //Serial.println("==>> Relay 5 Status OFF");
                  gprs.sendSMS (buffNumber, "Relay 5 Status OFF");
      
                } else if (lastLine.indexOf("R5 ON") >= 0) {
                  StatRelay[4] = Ron;
                  EEPROM.write(4, Ron);
                  //Serial.print("Reply To ");
                  //Serial.print(buffNumber);
                  //Serial.println("==>> Relay 5 Status ON");
                  gprs.sendSMS (buffNumber, "Relay 5 Status ON");
                }
      
                //Relay 6 Controller
                //Read message content and set status according to SMS content Then reply SMS
                if (lastLine.indexOf("R6 OFF") >= 0) {
                  StatRelay[5] = Roff;
                  EEPROM.write(5, Roff);
                  //Serial.print("Reply To ");
                  //Serial.print(buffNumber);
                  //Serial.println("==>> Relay 6 Status OFF");
                  gprs.sendSMS (buffNumber, "Relay 6 Status OFF");
      
                } else if (lastLine.indexOf("R6 ON") >= 0) {
                  StatRelay[5] = Ron;
                  EEPROM.write(5, Ron);
                  //Serial.print("Reply To ");
                  //Serial.print(buffNumber);
                  //Serial.println("==>> Relay 6 Status ON");
                  gprs.sendSMS (buffNumber, "Relay 6 Status ON");
                }
      
                //Relay 7 Controller
                //Read message content and set status according to SMS content Then reply SMS
                if (lastLine.indexOf("R7 OFF") >= 0) {
                  StatRelay[6] = Roff;
                  EEPROM.write(6, Roff);
                  //Serial.print("Reply To ");
                  //Serial.print(buffNumber);
                  //Serial.println("==>> Relay 7 Status OFF");
                  gprs.sendSMS (buffNumber, "Relay 7 Status OFF");
      
                } else if (lastLine.indexOf("R7 ON") >= 0) {
                  StatRelay[6] = Ron;
                  EEPROM.write(6, Ron);
                  //Serial.print("Reply To ");
                  //Serial.print(buffNumber);
                  //Serial.println("==>> Relay 7 Status ON");
                  gprs.sendSMS (buffNumber, "Relay 7 Status ON");
                }
      
                //Relay 8 Controller
                //Read message content and set status according to SMS content Then reply SMS
                if (lastLine.indexOf("R8 OFF") >= 0) {
                  StatRelay[7] = Roff;
                  EEPROM.write(7, Roff);
                  //Serial.print("Reply To ");
                  //Serial.print(buffNumber);
                  //Serial.println("==>> Relay 8 Status OFF");
                  gprs.sendSMS (buffNumber, "Relay 8 Status OFF");
      
                } else if (lastLine.indexOf("R8 ON") >= 0) {
                  StatRelay[7] = Ron;
                  EEPROM.write(7, Ron);
                  //Serial.print("Reply To ");
                  //Serial.print(buffNumber);
                  //Serial.println("==>> Relay 8 Status ON");
                  gprs.sendSMS (buffNumber, "Relay 8 Status ON");
                }
                nextLineIsMessage = false;
              }
      
            }
      
            //Clear char array for next line of read
            for ( int i = 0; i < sizeof(currentLine);  ++i ) {
              currentLine[i] = (char)0;
            }
            currentLineIndex = 0;
          } else {
            currentLine[currentLineIndex++] = lastCharRead;
          }
        }
      }

      دیدگاه


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

        سلام ببخشید لینک دانلود برنامه رو که میزنم دانلود نمیشه خطا میده

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

        سلام ببخشید لینک دانلود برنامه رو که میزنم دانلود نمیشه خطا میده&nbsp;

        دیدگاه


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

          سلام ببخشید لینک دانلود برنامه رو که میزنم دانلود نمیشه خطا میده

          دیدگاه


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

            سلام
            من درقسمت دریافت پیامک و انجام عمل خاموش و روشن شدن رله مشکل دارم .
            یعنی همه چیز درست پیش میره الا این قسمت . ال ای دی بعد از اتصال به ماژول خاموش میشه و پیامک که روشن بودن ماژول رو نشون میده میادش ولی با ارسال #on و #off عملی انجام نمیشه .
            حتما باید کریستال 16 باشه ؟
            نمیشه کاری کرد با کریستال 8 هزار کار بکنه .
            من کریستال 16 ندارم احتمالا از همون هست ؟
            ممنون

            دیدگاه


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

              سلام
              مشکل از همون کریستال 16 مگاهرتز بود که با قرار دادنش مشکل دریافت و روشن شدن رله حل شد.
              حالا دوستان میشه بگن تو کدها دوم قسمت هست که میشه کریستال 16 رو به 8 تغییر داد .
              ممنون

              دیدگاه


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

                سلام
                ببخشید شما مشکلتون در کد با تبدیل کریستال 16 به 8 حل شد؟
                میشه منو راهنمایی کنید برای تبدیل کد چیکار باید بکنم؟

                دیدگاه


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

                  سلام
                  ببخشید برای تبدیل کریستال این مدار از 16 به 8 باید چیکار کرد؟
                  میشه منو راهنمایی کنید چیکار بکنم؟

                  دیدگاه


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

                    سلام وقت بخیر من این برنامه را اجرا کردم ماژول sim 800 l هم درست کار میکنه(چشمک زدنش درسته )
                    ولی led port b.1 خاموش نمیشه اصلا
                    و هیچ کاری انجام نمیده
                    ممنون میشم راهنماییم فرمایید

                    دیدگاه


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

                      سلام
                      من اینو با آردوینو UNO بستم جواب داد
                      میشه یه ای سی بذاریم جای ای سی آردوینو که برنامه روش ریخته بشه بعد جدا استفاده کنیم ازش که برد مون رو استفاده نکنیم ؟
                      لطفا راهنمایی کنید

                      دیدگاه


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

                        سلام
                        من با استفاده از این کد مدارشو ساختم و یه سنسور حساس به حرکت هم بهش اضافه کردم که همش خیلی عالی کار می کنه فقط یه مشگل بزرگ که داره اینه که اس ام اس ها رو پاک نمیکنه یعنی بعد از اینکه 40 یا 45 اس ام اس در یافت می کنه کلا دیکه پیام دریافت نمی کنه من با سرو کله زدن این طور متوجه شدم مشگل از کامپایلر کد ویژنه یعنی مشابه همین کدهرو با اتمل استودیو نوشتم کلا پیامها سیم و خود ماژولو به راحتی حذف کرد .
                        دوستان اگه راه حلی به نظرشون می رسه لطفا کمک کنن با تشکر

                        دیدگاه


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

                          من به مشکل چراغ چشمک زن برخورد کردم

                          دیدگاه


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

                            سلام ببخشید با این توضیحات کامل بازم سوال میکنم ..
                            ممکنه این قسمت از کد رو برام توضیح بدید؟ :various_024:
                            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];
                            تو تاپیک خم این سوال رو مطرح کردم

                            دیدگاه


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

                              AT+CSMP=17,167,0,0
                              AT&W
                              AT+CSAS=0
                              سلام .من هم مشکلی مشابه این داشتم که تماس برقرار می شد ولی پیام ارسال نمیشد، این چند خط را به کدها initکه برای راه اندزی sim800 نوشته بودم اضافه کردم و مشکل رفع شد. خیلی ممنون.
                              جدیدترین ویرایش توسط Aliiraj; ۱۱:۴۹ ۱۴۰۱/۰۶/۰۸.

                              دیدگاه


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

                                باسلام ووقت بخیر
                                بنده یک برد دارم که شامل یک سنسور هست و اطلاعات سنسور را بصورت مرتب اندازه گیری کرده و در صورت بالا رفتن مقدار اطلاعات اندازه گیری شده توسط سنسور، یک رله را قطع و وصل میکند.
                                مساله ای که هست این برد یک ماژول sim800l داشته اطلاعات اندازه گیری شده توسط سنسور را برای شمار های تعریف شده برای برد ارسال میکند.
                                برای تعریف شماره نیز با ارسال یک کد پیامکی مشخص به برد، میکرو پیام دریافتی توسط ماژول sim800l را بررسی کرده و درصورت تایید انرا در دفترچه تلفن برد ثبت میکند.
                                حال مشکل بنده اینست که این برد پس از مدتی کار کردن، ماژول sim آن هنگ میکند ینی پیام دریافتی توسط آن یکسری کاراکترهای نامشخص بوده و دیگر پیامی نیز ارسال نمیکند
                                و اگر تغذیه برد را برای چندلحظه قطع و وصل کنم برد به حالت عادی خود برمیگردد.
                                ازلحاظ سخت افزاری برد مطمینا درست است و برنامه برد با bascom نوشته شده است.
                                ممن.ن میشوم دوستان راهنمایی فرمایند.
                                حتی اگر ممکن است من برنامه را ارسال کنم و کسی بتواند یک بررسی اجمالی کند خیلی ممنون میشوم
                                باتشکر فراوان

                                دیدگاه

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