将GPS屏蔽数据发送至GPRS Shiled(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屏蔽发送到thingspeak。我还尝试在代码中获取GPS数据。这对我没用!代码如下 PS-我在同一主题下阅读了这篇旧文章,但AltSoftSerial不适合我将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
#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
时得到的内容。