Я устанавливаю новое устройство, которое будет отправлять некоторые данные и координаты на сервер, используя GPRS / GPS, sim808 и arduino
Я загрузил приведенный ниже код, который используется для отправки данных на веб-сайтОднако он не сработал так, как ожидалось.
Этот код в основном зависит от отправки данных ультразвукового датчика, привязанного к ссылке местоположения устройства, на веб-сервер.Я пытался найти решение, но не смог найти решение, которое мне помогло.
#include "functionofUS.h"
#include "gprstest.h"
#include "sleepy.h"
#include "battery.h"
#include "transistor.h"
void setup() {
sim808.begin(9600);
Serial.begin(9600);
testdistance();
delay(50);
sendData("AT+CGNSPWR=1",1000,DEBUG);
delay(50);
sendData("AT+CGNSSEQ=RMC",1000,DEBUG);
delay(150);
}
void loop(){
open_device();
gsm_connect_gprs();
gsm_send_data();
gsm_disConnect_gprs();
testbattery();
close_device();
sleep_enable();
}
#include <SoftwareSerial.h>
SoftwareSerial sim808(2,3);
String data[5];
#define DEBUG true
String state,timegps,latitude,longitude;
void sendTabData(String command , const int timeout , boolean debug){
sim808.println(command);
long int time = millis();
int i = 0;
while((time+timeout) > millis()){
while(sim808.available()){
char c = sim808.read();
if (c != ',') {
data[i] +=c;
delay(100);
} else {
i++;
}
if (i == 5) {
delay(100);
goto exitL;
}
}
}exitL:
if (debug) {
state = data[1];
timegps = data[2];
latitude = data[3];
longitude =data[4];
}
}
String sendData (String command , const int timeout ,boolean debug){
String response = "";
sim808.println(command);
long int time = millis();
int i = 0;
while ( (time+timeout ) > millis()){
while (sim808.available()){
char c = sim808.read();
response +=c;
}
}
if (debug) {
Serial.print(response);
}
return response;
}
void offgps(void){
sendData( "AT+CGNSPWR=0",1000,true);
}
void getgps(void){
sendData( "AT+CGNSPWR=1",1000,true);
sendData( "AT+CGPSINF=0",1000,true);
sendTabData("AT+CGNSINF",1000,DEBUG);
if (state !=0) {
Serial.println("State :"+state);
Serial.println("Time :"+timegps);
Serial.println("Latitude :"+latitude);
Serial.println("Longitude :"+longitude);
} else {
Serial.println("GPS Initialising...");
}}
void gsm_send_data()
{
getgps();
Serial.println("Sending data.");
sim808.write("AT+HTTPINIT\r\n"); // Initialize HTTP
//Serial.print("AT+HTTPINIT\r\n");
delay(1000);
sim808.write("AT+HTTPPARA=\"URL\",\"http://shehanshaman.000webhostapp.com/?readingsensor=");
//URL/?readingsensor=98%&location=location=maps.google.com/maps?q=loc:longitude,latitude
delay(50);
//sim808.print("");
sim808.print(runussensor()); // Add percentage to the url
delay(150);
sim808.write("%");
delay(50);
sim808.write("&location=maps.google.com/maps?q=loc:");
//Serial.print("&location=");
delay(50);
sim808.print(longitude); // Add location to url
//Serial.print(location);
delay(50);
sim808.write(",");
delay(50);
latitude+='0';
sim808.print(latitude); // close url
delay(50);
sim808.write("\"\r\n"); // close url
//Serial.print("\"\r\n");
delay(2000);
sim808.write("AT+HTTPPARA=\"CID\",1\r\n"); // End the PARA
//Serial.print("AT+HTTPPARA=\"CID\",1\r\n");
delay(2000);
sim808.write("AT+HTTPACTION=0\r\n");
//Serial.print("AT+HTTPACTION=0\r\n");
delay(3000);
sim808.write("AT+HTTPTERM\r\n");
delay(3000);
Serial.print("data sent complete : ");
offgps();
}
void gsm_disConnect_gprs(){
sim808.write("AT+CGATT=0\r\n"); // Attach to GPRS
delay(2000);
Serial.println("GPRS off");
}
void gsm_connect_gprs(){
sim808.write("AT+CGATT=1\r\n"); // Attach to GPRS
delay(2000);
sim808.write("AT+SAPBR=1,1\r\n"); // Open a GPRS context
delay(2000);
//serialSIM808.write("AT+SAPBER=2,1\r\n"); // To query the GPRS context
//delay(2000);
Serial.println("GPRS on");
}
Я не знаю, где ошибка.