Передача данных через GPS модуль M590 Цена вопроса ?

Тема в разделе "Закажу проект", создана пользователем onixex, 26 фев 2017.

  1. onixex

    onixex Нуб

    Добрый день, нужно подправить или написать новый скетч для ардуино.
    Есть ардуино UNo К которому подключен модуль RS-232 и GSM модуль M590. Нужно передавать данные поступившие по 232 на удаленный компьютер по Интернету. У удаленного компьютера статистический IP адрес. Вот скетч который пробовал написать.

    Код (C++):
    #include <SoftwareSerial.h>
    #include <avr/wdt.h>

    SoftwareSerial gsm(10, 11); // RX, TX

    unsigned long prev = 0;
    String inputString, l = "";
    boolean stringComplete = false;
    char bufferGPRS_Serial[200];
    int power = 5;

    int j, m, ip, p = 0;

    void setup() {
      Serial.begin(9600);delay(100);
      gsm.begin(9600);delay(100);
      wdt_reset();
      pinMode(power, OUTPUT);
      Serial.setTimeout(2);
      Serial.println("START");
      digitalWrite(power,0);
      delay(1000);
      digitalWrite(power,1);
      while (!(l.indexOf("+PBREADY") >= 0)) {
        if (millis() - prev >= 30000) {
          prev = millis();
          wdt_enable(WDTO_15MS);
          delay(100);
        }
        if (gsm.available() > 0) {
          while (gsm.available() > 0) {
            bufferGPRS_Serial[j++] = gsm.read();
          }
          bufferGPRS_Serial[j] = '\0';
          l = bufferGPRS_Serial;
        }
      }
      String s = bufferGPRS_Serial;
      clearBufferGPRS_Serial();
      Serial.println(s);
      m590("AT+XIIC?");
      if (ip == 0) {
        gprsconnect();
      }
      inputString.reserve(200);
      wdt_enable(WDTO_8S); // Время перезагрузки
    }

    void gprsconnect() {
      m590("AT+TCPCLOSE=0");
      byte count = 0;
      do{
        m590("AT+XISP=0");delay(500);
        m590("AT+CGDCONT=1,\"IP\",\"internet.megafon.ru\"");delay(500);
        m590("AT+XIIC=1");delay(500);
        m590("AT+XIIC?");
        delay(500);
        count++;
        if (count > 5) {
          wdt_enable(WDTO_15MS);
          delay(100);
        }
      }while(ip == 0);
      m590("AT+TCPSETUP=0,5.200.52.161,3113");// ip и port
    }

    void loop() {
      serialEvent();
      if (millis() - prev > 2000) {
        wdt_reset();
        Serial.println(inputString);
        //String request = "AT+TCPSEND=0," + String(sizeof(inputString));
        m590("AT+TCPSEND=0,5");
        //request = inputString;
        delay(1000);
        m590(inputString);delay(100);
        m590("\r\n");
        inputString = "";
        prev = millis();
      }/*
      if (gsm.available()) {
        char inChar = (char)gsm.read();
        Serial.println(inChar);
        wdt_reset();
      }*/

    }

    void serialEvent() {
      if (Serial.available()>0) {
      while (Serial.available()) {
        char inChar[2];
        Serial.readBytes(inChar, 2);
        Serial.println(inChar);
        inputString += inChar;
      }}
    }

    void clearBufferGPRS_Serial() {
      for (int t = 0; t < 100; t++) {
        // очищаем буфер,
        // присваивая всем индексам массива значение 0
        bufferGPRS_Serial[t] = 0;
      }
    }

    void m590(String at) {
      m = 0;
      // бесконечный цикл
      while (m == 0) {
        // ждём 1 секунду
        j = 0;
        // посылаем в GPRS Shield АТ-команду "AT"  
        gsm.println(at);
       
        delay(100);
        if (gsm.available() > 0) {
          while (gsm.available() > 0) {
            // пока идёт передача данных,
            // записываем каждый байт в символьный массив
            bufferGPRS_Serial[j++] = gsm.read();
          }
          // добавляем символ конца строки
          bufferGPRS_Serial[j] = '\0';
          //
          // посылаем АТ-команду "AT"; если GPRS Shield исправен,
          // он должен вернуть команду "AT";
          // сравниваем всё что находиться в буфере GPRS Shield
          // со строкой "AT\r\n\r\nOK\r\n"
          //String s = at+"\r\n\r\nOK\r\n";
             
        }
        String s = bufferGPRS_Serial;
        //Serial.println(s);
        /* else
        if (at == "AT" && s.indexOf("MODEM:STARTUP") >= 0) {
          p = 1;
        } */

        if (at == "AT+TCPSETUP=0,5.200.52.161,3113" && s.indexOf("OK") >= 0) {
          Serial.println("Client Connected");
        } else if (at == "AT+XIIC=1" && s.indexOf("OK") >= 0) {
          Serial.println("OKEY");
        } else if (at == "AT+XISP=0" && s.indexOf("OK") >= 0) {
          Serial.println("Okey");
        }
        String g = "+TCPSEND:0," + String(sizeof(inputString));
        if (at.indexOf("+TCPSETUP:0,OK") >= 0 && s.indexOf(g) >= 0)  {
          Serial.println("SEND");
        }
        /* else if (at == "AT+TCPSETUP=0,5.200.52.161,3113" || at == "AT+XIIC=1" || at == "AT+XISP=0"){
          wdt_enable(WDTO_15MS);
          delay(100);
        }*/

        if(s.indexOf("0.0.0.0") >= 0 && at == "AT+XIIC?"){
          Serial.println("NOT IP");
          ip = 0;
        } else if(s.indexOf("ERROR") >= 0 && at == "AT+XIIC?"){
          Serial.println("NOT CONNECTION");
          wdt_enable(WDTO_15MS);
          delay(100);
        } else if (at == "AT+XIIC?" && s.indexOf("1, ") >= 0) {
          Serial.println("IP EXISTS");
          ip = 1;
        }
        /*if () {
         
        }
       
        }
        if (at == "AT+XIIC?" && (bufferGPRS_Serial[24] == '0' && bufferGPRS_Serial[26] == '0' && bufferGPRS_Serial[28] == '0' && bufferGPRS_Serial[30] == '0')) {
          Serial.println("NOT IP");
          ip = 0;
        } else if (at == "AT+XIIC?") {
          Serial.println("IP EXIST");
          ip = 1;
        }*/

        // очищаем буфер GPRS Serial
        clearBufferGPRS_Serial();
        m++;
      }
    }
     
    Последнее редактирование: 27 фев 2017
  2. obuhanoe

    obuhanoe Гик

    оформите код как положено - нечитабельно ни разу, и какая функция у вас отвечает за отправку данных(void m590)?
    Могу помочь, у меня работает mega2560 с SIM800L ,отправка данных с помощью GPRS.
     
    onixex нравится это.
  3. ostrov

    ostrov Гуру

    [​IMG]
     
    obuhanoe нравится это.
  4. onixex

    onixex Нуб

    gsm.println();
    эта строка
     
  5. onixex

    onixex Нуб

    Спасибо.