GSM/GPRS модем NEOWAY M590, выходим в интернет, работаем с FTP и narodmon.ru

Примеры из видео

Примеры не тестированы, не является готовым проектом и написаны для демонстрации работы с модемом.

pdf со списоком АТ команд Neoway M590 AT Command Sets_V3.0

код ниже отправляет массив в файл на FTP сервере

//#include <SoftwareSerial.h>
#include <dht11.h>
#define DHT11PIN 11  // пин DHT11

#define gsm Serial1

//SoftwareSerial gsm(7, 8); // RX, TX
dht11 DHT11;

int i = 0;

  // функция отправляет данные на фтп сервер
void gprssend(){  
     // читаем данные с градусника
    DHT11.read(DHT11PIN);  
     // собераем массив для отправки
      char val[47]; 
     snprintf(val, sizeof(val), "#FFFFFFFFFFFF#ardESP\n#H1DHT11#%d\n#T1DHT11#%d\n##",
          DHT11.humidity, DHT11.temperature);

      // проверяем соединины ли с интернетом
    gsm.flush(); 
    gsm.println("at+xiic?");
    delay(100);  
    if (gsm.find("0.0.0.0")) gprsconnect(); // если нет, то подключаемся
     gsm.flush();       
     
 gsm.println("AT+FTPLOGOUT"); // на всякий случай разлогиниваемся
 delay(1000);
 gsm.flush(); 
      // соединяемся с FTP и отправляем массив в файл
 gsm.println("AT+FTPLOGIN=ip,login,pass");   // соединяемся с FTP, УКАЗЫВАЕМ СВОЙ СЕРВЕР!
 
 while(!gsm.find("+FTPLOGIN"));             // в цикле ждем ответ
   delay(100);
   
   gsm.println("AT+FTPPUT=test.txt,1,2,47");  // открываем файл
   delay(1000); 
   gsm.println(val);                          // пишим в файл массив   
   delay(100);
   
    while(!gsm.find("+FTPPUT:")){              // ждем ответ
      Serial.print(".");
      delay(1000);    
   } 
  Serial.print("FTP send");                    // отписываемся что отправили
  delay(1000);
  gsm.println("AT+FTPLOGOUT");                 // разлогиниваемся
 

}

 
    // отправляем настройки GPRS и подключаемся. 
void gprsconnect(){

  gsm.println("AT+CGDCONT=1,\"IP\",\"internet.beeline.ru\"");   
  delay(100);
  gsm.println("AT+XGAUTH=1,1,\"beeline\",\"beeline\"");   
  delay(100);
  gsm.println("AT+CUSD=1,\"*99***1#\",15");  
  delay(100);
  gsm.println("AT+XISP=0");  // включаем РРР
  delay(100);
  gsm.println("at+xiic=1");   
  delay(100);
  do{             // ждем IP
    gsm.println("at+xiic?");         
    Serial.print(".");
    delay(300);  
  }while(gsm.find("0.0.0.0"));

       
}

void setup() {
  Serial.begin(9600);
  gsm.begin(9600);  
    while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  /*     while(!gsm.find("+PBREADY")){     // при включении ждем готовность модема         Serial.print(". ");ad        delay(100);        }   */
       do{             // проверяем готовность модема
        gsm.println("AT+CPAS");         
        Serial.print(".");
        delay(100);  
      }while(!gsm.find("0"));
      
      do{              
        gsm.println("AT+CREG?");        
        Serial.print(":");
        delay(100);  
      }while(!gsm.find("+CREG: 0,1"));
 
 
  delay(100); 

  gsm.flush();
  
gprsconnect(); // соединяемся с инетом
gprssend();    // отправляем данные

 
}

void loop() {
 /*   // read from port 1, send to port 0:  if (Serial1.available()) {    int inByte = Serial1.read();    Serial.write(inByte);  }  // read from port 0, send to port 1:  if (Serial.available()) {    int inByte = Serial.read();    Serial1.write(inByte);  }*/
  delay(6000);  
  gprssend();
}

 

этот код отправляет данные на народный мониторинг

//#include <SoftwareSerial.h>
#include <dht11.h>
#define DHT11PIN 11  // пин DHT11

#define gsm Serial1

//SoftwareSerial gsm(7, 8); // RX, TX
dht11 DHT11;

int i = 0;

void gprssend(){
    DHT11.read(DHT11PIN); // читаем данные с градусника

//  if(!digitalRead(6)){     // если нажали кнопку 

     char val[48]; 
     snprintf(val, sizeof(val), "#FFFFFFFFFFFF#ardlab\n#H1DHT11#%d\n#T1DHT11#%d\n##",
          DHT11.humidity, DHT11.temperature);


     gsm.println("AT+TCPCLOSE=0");  // закрываем соединение, на всякий случай 
              
  while(1){ // в цикле соединяемся с сервером народмон
    gsm.println("AT+TCPSETUP=0,91.122.49.168,8283");   
    delay(2500);
    if (gsm.find("+TCPSETUP:0,OK")) break; // если соединились, выходим из цикла
    Serial.println("tcp_err"); 
                   // если нет, проверяем соединины ли с интернетом
    gsm.flush(); 
    gsm.println("at+xiic?");
    delay(100);  
    if (gsm.find("0.0.0.0")){
      gprsconnect(); // если нет, то подключаемся      
      delay(2000);
    }
  }
            // отправляем 47 байт 
  gsm.println("at+tcpsend=0,47");  
  delay(100); 
  gsm.println(val);  
  delay(250);
  if (gsm.find("+TCPSEND")) Serial.println("sendOK");
  else Serial.println("sendERROR");
  
  gsm.println("AT+TCPCLOSE=0");  // закрываем соединение
  Serial.print("!!!");
}

//// соединяемся с интернетом
void gprsconnect(){

  gsm.println("AT+CGDCONT=1,\"IP\",\"internet.beeline.ru\"");   
  delay(100);
  gsm.println("AT+XGAUTH=1,1,\"beeline\",\"beeline\"");   
  delay(100);
  gsm.println("AT+CUSD=1,\"*99***1#\",15");  
  delay(100);
  gsm.println("AT+XISP=0");  // включаем РРР
  delay(100);
  gsm.println("at+xiic=1");   
  delay(100);
  do{             // проверяем выдали ли нам IP
    gsm.println("at+xiic?");         
    Serial.print(".");
    delay(300);  
  }while(gsm.find("0.0.0.0"));

       
}

void setup() {
  Serial.begin(9600);
  gsm.begin(9600);  
    while (!Serial1) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  pinMode(6, INPUT_PULLUP); 
  /*     while(!gsm.find("+PBREADY")){             // при включении ждем отклик от модема        Serial.print(". ");        delay(100);        }   */
       do{             // проверяем готовность модема
        gsm.println("AT+CPAS");         
        Serial.print(".");
        delay(100);  
      }while(!gsm.find("0"));
      
      do{             // проверяем готовность модема
        gsm.println("AT+CREG?");        
        Serial.print(":");
        delay(100);  
      }while(!gsm.find("+CREG: 0,1"));

      
  gsm.println("ATE0");      // выключаем эхо
  gsm.println("AT+XISP=0");  // включаем РРР
  delay(100); 

  gsm.flush();
  
gprsconnect();
gprssend();

 
}

void loop() {
   while (Serial.available() > 0) { // смотрим что ответил есп после отправки
      char i = Serial.read();
      if (i == 's') gprssend();
      else if (i == 'c') gprsconnect();
      else Serial.write(i); 
  }
 
   
 
 /*    // read from port 1, send to port 0:  if (Serial1.available()) {    int inByte = Serial1.read();    Serial.write(inByte);  }  // read from port 0, send to port 1:  if (Serial.available()) {    int inByte = Serial.read();    Serial1.write(inByte);  }   */
}