自从过去数周以来,我一直在进行一个涉及使用GPRS模块与数据库通信的项目。
当Arduino连接到计算机时,测试进行得很好,但是当我断开连接并使用适配器将其插入墙上时,它什么也没做(网站上没有数据)。
#include <SoftwareSerial.h>
#include <Wire.h>
#include <ds3231.h>
struct ts t;
SoftwareSerial mySerial(7, 8); //Tx & Rx sont connectés aux broches Arduino #7 et #8
void setup()
{
Wire.begin();
DS3231_init(DS3231_INTCN);
//Commence la communication Serie
Serial.begin(9600);
//Commence la communication Serie Arduino-Shield GPRS
mySerial.begin(9600);
Serial.println("Initialisation...");
delay(1000);
mySerial.println("AT"); //Handshaking
updateSerial();
mySerial.println("AT+UPSDA=2,0"); //Reset connexion
updateSerial();
delay(2000);
mySerial.println("AT+UPSD=2,1,\"sl2sfr\""); //Establissement de connexion avec l'APN
updateSerial();
delay(2000);
mySerial.println("AT+UPSDA=2,3");
updateSerial();
delay(2000);
mySerial.println("AT+UPSND=2,0");
updateSerial();
delay(2000);
}
void loop()
{
DS3231_get(&t);
String heure = String(t.hour);
heure += ":";
heure += String(t.min);
heure += ":";
heure += String(t.sec);
String Date = String(t.year);
Date += "-";
Date += String(t.mon);
Date += "-";
Date += String(t.mday);
String Equipement = "STAINS";
String Direction = "SUD-EST";
mySerial.println("AT+UHTTP=0");
updateSerial();
delay(2000);
mySerial.println("AT+UHTTP=2,1,\"www.projetwmr.site\""); // Parametrage URL d'acces
updateSerial();
delay(2000);
String command = "AT+UHTTPC=2,5,\"/add.php\",\"post.ffs\",\"vite="; // Commande d'envoi des donnes via POST sur PHP
float Windspeed = 80; // Recuperation des données ANALOGIQUES
// convertion valeurs en String - Chaîne de caractères
command += String(Windspeed);
// or convertion précise
// command += String(Windspeed, 2);
command += "&equipement=";
command += String(Equipement);
command += "&time=";
command += String(heure);
command += "&date=";
command += String(Date);
command += "&dire=";
command += String(Direction);
command += "\",0"; //Fin de la commande PHP POST
mySerial.println(command);
updateSerial();
delay(1000);
delay(10000);
}
void updateSerial()
{
delay(500);
while (Serial.available())
{
mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port
}
while(mySerial.available())
{
Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port
}
}
答案 0 :(得分:0)
实际上,我无法完全确定您对GPRS模块的操作,也发现您的代码存在一些问题,例如,在updateSerial
中,您要检查两次串行可用性。>
无论如何,断开Arduino与PC的连接不会改变任何东西,除了使用串行端口时,这是不可用的。因此,您的代码可以运行,但如果与PC断开连接,则无法正常工作。这是因为您使用的是默认的Arduino硬件序列号,该序列号应与外部设备通信(就像您的PC一样)。在您的updateSerial
函数中,您正在使用while (Serial.available())
检查序列的可用性,当断开序列时,它将变成false
,也许它会解释“不起作用” < / strong>。