将GPS屏蔽数据发送至GPRS Shiled(Sim900)

将GPS屏蔽数据发送至GPRS Shiled(Sim900),gps,arduino-uno,gsm,sim900,Gps,Arduino Uno,Gsm,Sim900,我在做一个车辆遥测项目。为此,我尝试从GPS屏蔽获取GPS数据,并使用Sim900 GSM/GPRS shield get命令将其发送到thingspeak。我正在使用的板是Arduino Uno 问题是我使用的GSM/GPRS屏蔽在使用http时只能以4800波特率工作。我的GPS的波特率是9600。我使用了两个屏蔽,在单独的操作中(GSM/GPRS和GPS)设备都工作得很好。在集成测试中(将两个屏蔽连接到Arduino Uno时),GPS数据不会通过GSM/GPRS屏蔽发送到thingspe

我在做一个车辆遥测项目。为此,我尝试从GPS屏蔽获取GPS数据,并使用Sim900 GSM/GPRS shield get命令将其发送到thingspeak。我正在使用的板是Arduino Uno

问题是我使用的GSM/GPRS屏蔽在使用http时只能以4800波特率工作。我的GPS的波特率是9600。我使用了两个屏蔽,在单独的操作中(GSM/GPRS和GPS)设备都工作得很好。在集成测试中(将两个屏蔽连接到Arduino Uno时),GPS数据不会通过GSM/GPRS屏蔽发送到thingspeak。我还尝试在代码中获取GPS数据。这对我没用!代码如下

PS-我在同一主题下阅读了这篇旧文章,但AltSoftSerial不适合我

#include <SoftwareSerial.h>
#include <String.h>
#include "TinyGPS++.h"

int fixed = 0;
int led = 13;
TinyGPSPlus gps;
SoftwareSerial mySerial(4, 5); //GSM
SoftwareSerial SoftSerial(2, 3); //GPS
float longi = gps.location.lng();
float lati = gps.location.lat();


void setup() {
  SoftSerial.begin(9600); //Start GPS
  mySerial.begin(4800); //Start GSM
  Serial.begin(4800); //Start Serial Monitor
  delay(10000);
}

void loop() {
  longi = gps.location.lng();
  lati = gps.location.lat();
  GPSCord();
  Send2Think();


  if(mySerial.available()){
    Serial.write(mySerial.read());
  }
}

void Send2Think(){



  mySerial.println("AT");
  delay(500);
  //SoftSerial.println("HELLO");

  mySerial.println("AT+CPIN?");
  delay(500);
  //SoftSerial.println("HELLO");

  mySerial.println("AT+CREG?");
  delay(500);

  mySerial.println("AT+CGATT?");
  delay(500);

  mySerial.println("AT+CIPSHUT");
  delay(500);

  mySerial.println("AT+CIPSTATUS");
  delay(500);

  mySerial.println("AT+CIPMUX=0");
  delay(500);

  ShowSerialData();

  mySerial.println("AT+CSTT=\"hutch3g\"");//start task and setting the APN,
  delay(1000);
  SoftSerial.println("HELLO");

  ShowSerialData();

  mySerial.println("AT+CIICR");//bring up wireless connection
  delay(3000);

  ShowSerialData();

  mySerial.println("AT+CIFSR");//get local IP adress
  delay(2000);

  ShowSerialData();

  mySerial.println("AT+CIPSPRT=0");
  delay(3000);

  ShowSerialData();

  mySerial.println("AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",\"80\"");//start up the connection
  delay(6000);

  ShowSerialData();

  mySerial.println("AT+CIPSEND");//begin send data to remote server
  delay(4000);
  ShowSerialData();

  String str1="GET https://api.thingspeak.com/update?api_key=FF19NVWMPZEWX0XK&field2=" + String(lati)+ "&field3=" + String(longi);
  mySerial.println(str1);//begin send data to remote server

  delay(4000);
  ShowSerialData();

  mySerial.println((char)26);//sending
  delay(5000);//waitting for reply, important! the time is base on the condition of internet 
  mySerial.println();
  ShowSerialData();

  mySerial.println("AT+CIPSHUT");//close the connection
  delay(100);
  ShowSerialData();
}

void ShowSerialData()
{
  while(mySerial.available()!=0)
    Serial.write(mySerial.read());
}

void GPSCord(){
  while (SoftSerial.available() > 0)
  gps.encode(SoftSerial.read());

  if (gps.location.isUpdated())
  {
    fixed = 1;
    Serial.print("LAT="); Serial.print(gps.location.lat(), 6);
    Serial.print(" LNG="); Serial.println(gps.location.lng(), 6);
  }

  if(fixed ==0)
  {
     digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
     delay(300);               // wait for a second
     digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
     delay(300);  
  }
  if (gps.altitude.isUpdated())
  {
    Serial.print("Altitude:");
    Serial.println(gps.altitude.meters());
  }
}
#包括
#包括
#包括“TinyGPS++.h”
int固定=0;
int led=13;
TinyGPSPlus gps;
软件序列mySerial(4,5)//GSM
软件系列软件系列(2,3)//全球定位系统
float longi=gps.location.lng();
float-lati=gps.location.lat();
无效设置(){
SoftSerial.begin(9600);//启动GPS
mySerial.begin(4800);//启动GSM
Serial.begin(4800);//启动串行监视器
延迟(10 000);
}
void循环(){
longi=gps.location.lng();
lati=gps.location.lat();
GPSCord();
Send2Think();
if(mySerial.available()){
Serial.write(mySerial.read());
}
}
void Send2Think(){
mySerial.println(“AT”);
延迟(500);
//SoftSerial.println(“你好”);
println(“AT+CPIN?”);
延迟(500);
//SoftSerial.println(“你好”);
mySerial.println(“AT+CREG?”);
延迟(500);
println(“AT+CGATT?”);
延迟(500);
mySerial.println(“AT+CIPSHUT”);
延迟(500);
mySerial.println(“AT+CIPSTATUS”);
延迟(500);
mySerial.println(“AT+CIPMUX=0”);
延迟(500);
ShowSerialData();
mySerial.println(“AT+CSTT=\“hutch3g\”);//启动任务并设置APN,
延迟(1000);
SoftSerial.println(“你好”);
ShowSerialData();
mySerial.println(“AT+CIICR”);//打开无线连接
延迟(3000);
ShowSerialData();
mySerial.println(“AT+CIFSR”);//获取本地IP地址
延迟(2000年);
ShowSerialData();
mySerial.println(“AT+CIPSPRT=0”);
延迟(3000);
ShowSerialData();
mySerial.println(“AT+CIPSTART=\“TCP\”、\“api.thingspeak.com\”、\“80\”);//启动连接
延迟(6000);
ShowSerialData();
mySerial.println(“AT+CIPSEND”);//开始向远程服务器发送数据
延迟(4000);
ShowSerialData();
String str1=“获取https://api.thingspeak.com/update?api_key=FF19NVWMPZEWX0XK&field2=“+String(lati)+”&field3=“+String(longi);
mySerial.println(str1);//开始向远程服务器发送数据
延迟(4000);
ShowSerialData();
mySerial.println((char)26);//正在发送
延迟(5000);//等待回复,很重要!时间取决于互联网条件
mySerial.println();
ShowSerialData();
mySerial.println(“AT+cipchut”);//关闭连接
延迟(100);
ShowSerialData();
}
void ShowSerialData()
{
while(mySerial.available()!=0)
Serial.write(mySerial.read());
}
void GPSCord(){
while(SoftSerial.available()>0)
gps.encode(SoftSerial.read());
if(gps.location.isUpdated())
{
固定=1;
Serial.print(“LAT=”);Serial.print(gps.location.LAT(),6);
Serial.print(“LNG=”);Serial.println(gps.location.LNG(),6);
}
如果(固定==0)
{
数码写入(led,高);//打开led(高是电压电平)
延迟(300);//等一下
digitalWrite(led,低);//通过降低电压关闭led
延迟(300);
}
如果(gps.altitude.IsUpdate())
{
连续打印(“高度:”);
Serial.println(gps.altime.meters());
}
}

请阅读-总结是,这不是向志愿者讲话的理想方式,可能会对获得答案产生反作用。请不要将此添加到您的问题中。21日是提交我的项目的截止日期,兄弟!很好,还有4天为什么AltSoftSerial不为你工作?使用SoftwareSerial一次只能从一台设备接收数据。为什么要使用
字符串
?只需打印片段,而不是制作一个大的
字符串
来打印。不工作无助于兄弟。请指定使用
AltSoftSerial
时得到的内容。