Передача данных на сервер

Нет ответов
Akustbas
Offline
Зарегистрирован: 07.09.2019

Здравствуйте уважаемы пользователи форума !

Помогите пожалуйста !

Недавно на просторах интернета я нашел интересный проект по передачи данных на модуле sim-808 под управлением arduino

<span style="color: #5e6d03;"></span><span style="color: #000000;">
</span>
#include <SoftwareSerial.h>
SoftwareSerial GSMport(3, 2); // RX, TX

typedef struct {
    String latitude;
    String longitude;
    String datetime;
} MyDataGPS;

MyDataGPS dataGPS;
void gprs_init(void);
MyDataGPS getGPSLocation(void);
void gprs_send(String dataa, String datab, int dataA0, int dataA1);
String ReadGSM();

void setup() {

  Serial.begin(9600);
  GSMport.begin(9600);
  GSMport.println("AT+CLIP=1"); //устанавливаем чтобы номер входящего звонка определялся
  delay(300);
  GSMport.println("AT+DDET=1"); //устанавливаем прием DTMF
  delay(300);
  gprs_init();

  digitalWrite(A1,1); //подтяжка к 1
}

void loop() {
  char c;
  String str;

if (analogRead(A1)<100) {
  dataGPS = getGPSLocation();
  Serial.println("Level A1: "+String(analogRead(A1)));
  gprs_send(dataGPS.latitude, dataGPS.longitude, analogRead(A0), analogRead(A1));
}

  while (GSMport.available()) {  //отправляем данные с GSM в Serial
    c = GSMport.read();
    Serial.write(c);
    delay(10);
  }
  while (Serial.available()) {  //сохраняем входную от консоли строку в переменную str пока не конец строки
    c = Serial.read();
    GSMport.write(c);
    //str += c;
    //if (c == '\n') {
    // AnalyseCmd(&str);
    // str = "";
    delay(10);
  }
}


MyDataGPS getGPSLocation(void) {  //функция определения местоположения по GPS
  String v,v1,v2;
  String data[5];
  MyDataGPS d;
  int a = 0,b = 0;
  GSMport.println("AT+CGNSPWR=1");
  delay(1000);
  Serial.println(ReadGSM());
  GSMport.println("AT+CGNSINF");
  delay(400);
  delay(400);
  v = ReadGSM();
  Serial.println(v);
    
 for(int i=0;i<5;i++){ //парсинг данных между запятыми в массив строк
  a = v.indexOf(",",a);  //первое вхождение запятой
  if(a!=-1){
    b = v.indexOf(",",a+1);  //второе вхождение запятой после нашей первой запятой если a не -1
    data[i] = v.substring(a+1,b);
    Serial.println(String("Poluchennaya data: " + String(i)+" - "+ data[i]));
    a = b;
  }
 }
  d.datetime = data[1];
  d.latitude = data[2];
  d.longitude = data[3];
  return d;
}

void gprs_init(void) {  //Процедура начальной инициализации GSM модуля для GPRS
  int d = 500;
  Serial.println("---------------GPRS init start----------------");
  delay(d * 4);
  GSMport.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");  //Установка настроек подключения
  delay(d * 5);
  Serial.println(ReadGSM());  //показываем ответ от GSM модуля
  delay(d * 5);
  GSMport.println("AT+SAPBR=3,1,\"APN\",\"internet.ltmsk\""); //Установка APN
  delay(d);
  Serial.println(ReadGSM());  //показываем ответ от GSM модуля
  delay(d * 2);
  GSMport.println("AT+SAPBR=3,1,\"USER\",\"\""); //Установка имени пользователя для сети
  delay(d);
  Serial.println(ReadGSM());  //показываем ответ от GSM модуля

  GSMport.println("AT+SAPBR=3,1,\"PWD\",\"\""); //Установка пароля для сети
  delay(d);
  Serial.println(ReadGSM());  //показываем ответ от GSM модуля
  delay(d * 2);
  GSMport.println("AT+SAPBR=1,1");  //Устанавливаем соединение GPRS
  delay(d * 2);
  Serial.println(ReadGSM());  //показываем ответ от GSM модуля
  delay(d * 2);
  GSMport.println("AT+SAPBR=2,1"); //Проверяем как настроилось
  delay(d);
  Serial.println(ReadGSM());  //показываем ответ от GSM модуля
  delay(d * 5);

  Serial.println("----------------GPRS init complete-------------");
  Serial.println("");
}

void gprs_deinit(){
  
}

String ReadGSM() {  //функция чтения данных от GSM модуля
  char c;
  String str;
  while (GSMport.available()) {  //сохраняем входную строку в переменную str
    c = GSMport.read();
    str += c;
    delay(20);
  }
  str = "<<< " + str;
  return str;
}


void gprs_send(String dataa, String datab, int dataA0, int dataA1) {  //Процедура отправки данных на сервер
  //отправка данных на сайт
  String tempstr;
  Serial.println("Send start");
  GSMport.println("AT+HTTPINIT");
  delay(1000);
  Serial.println(ReadGSM());
  GSMport.println("AT+HTTPPARA=\"CID\",1");
  delay(1000);
  Serial.println(ReadGSM());
  Serial.println("setup url");
  tempstr = String("AT+HTTPPARA=\"URL\",\"адрес вэб сайта.ком/gps/write.php?a=" + dataa + "&b=" + datab + "&a0=" + String(dataA0) +"&a1=" + String(dataA1) +"\"");
  GSMport.println(tempstr);
  Serial.println(tempstr);
  delay(4000);
  Serial.println(ReadGSM());
  Serial.println("GET url");
  GSMport.println("AT+HTTPACTION=0");
  delay(5000);
  Serial.println(ReadGSM());
  Serial.println("Send done");
  GSMport.println("AT+HTTPTERM");
  delay(200);
  Serial.println(ReadGSM());
}

Данный скейч берет информацию с пинов 0 и 1

иу меня есть 2 датчика один датчик температуры другой датчик влажности почвы.

Вот онтних скейчи

Датчик влажноти

#define  SENSOR      A2                    // Определяем номер аналогового входа, к которому подключен датчик влажности почвы.
                                           // Датчик инверсный: больше влажность - меньше значение.
#define  MIN        630                    // Определяем минимальное показание датчика (в воздухе),
#define  MAX        330                    // определяем максимальное показание датчика (в воде),
uint16_t sensor;                           // создаем переменную для хранения адаптированных показаний,
void setup(){
  Serial.begin(9600);                      // Инициируем передачу данных по последовательному порту на скорости 9600 бот.
}
void loop(){
  sensor = analogRead(SENSOR);             // Читаем сырые данные с датчика,
  sensor = map(sensor, MIN, MAX, 0, 100);  // адаптируем значения от 0 до 100,
  Serial.println(sensor);                  // выводим текущую влажность почвы из датчика в последовательный порт,
  delay(500);                              // приостанавливаем выполнение программы на 0.5 секунд.
}

Датчик температуры

    #include <OneWire.h>
    OneWire ds(8); // Объект OneWire
    int temperature = 0; // Глобальная переменная для хранения значение температуры с датчика DS18B20
    long lastUpdateTime = 0; // Переменная для хранения времени последнего считывания с датчика
    const int TEMP_UPDATE_TIME = 1000; // Определяем периодичность проверок
    void setup(){
      Serial.begin(9600);
    }
    void loop(){
      detectTemperature(); // Определяем температуру от датчика DS18b20
      Serial.println(temperature); // Выводим полученное значение температуры
      // Т.к. переменная temperature имеет тип int, дробная часть будет просто отбрасываться
    }
    int detectTemperature(){
      byte data[2];
      ds.reset();
      ds.write(0xCC);
      ds.write(0x44);
      if (millis() - lastUpdateTime > TEMP_UPDATE_TIME)
      {
        lastUpdateTime = millis();
        ds.reset();
        ds.write(0xCC);
        ds.write(0xBE);
        data[0] = ds.read();
        data[1] = ds.read();
        // Формируем значение
        temperature = (data[1] << 8) + data[0]; temperature = temperature >> 4;
      }
    }

Тоест чтоб информация заместе тех упомянутых ранее пинов 0 , 1 выводилась информация температуры и влажности.

Помогите мне пажалуйста их скрестить !