通过arduino和sim900将传感器数据上传到互联网

时间:2014-11-25 17:44:56

标签: arduino sim900

我正在使用 arduino mega 2650 sim 900 GSM / GPRS模块和2个 xbee (版本2)模块。温度传感器在2 xbees无线之间发送数据,然后使用sim900将此数据上传到网页,但由于某种原因我无法使代码正常工作。

#include <SoftwareSerial.h>

SoftwareSerial gprsSerial(7, 8);

int temp;

void setup(){
  gprsSerial.begin(19200);
  Serial.begin(9600);
  Serial1.begin(19200);

  Serial1.println("Config SIM900...");
  delay(2000);
  Serial1.println("Done!...");
  gprsSerial.flush();
  Serial1.flush();

  // attach or detach from GPRS service 
  gprsSerial.println("AT+CGATT?");
  delay(100);
  toSerial();


  // bearer settings
  gprsSerial.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");
  delay(2000);
  toSerial();

  // bearer settings
  gprsSerial.println("AT+SAPBR=3,1,\"APN\",\"Umniah Internet\"");
  delay(2000);
  toSerial();

  // bearer settings
  gprsSerial.println("AT+SAPBR=1,1");
  delay(2000);
  toSerial();
};

void loop(){
  if (Serial.available() >= 21) {
    if (Serial.read() == 0x7E) {
      for (int i = 1; i < 19; i++) {
        byte discardByte = Serial.read();
      }
      int analogMSB = Serial.read();
      int analogLSB = Serial.read();
      int analogReading = analogLSB + (analogMSB * 256);
      temp = analogReading / 1023.0 * 1.23;
      temp = temp - 0.5;
      temp = temp / 0.01;
      Serial.print(temp);
      Serial.println(" degrees c");
       // initialize http service
   gprsSerial.println("AT+HTTPINIT");
   delay(2000); 
   toSerial();

   // set http param value
   gprsSerial.println("AT+HTTPPARA= \"URL\" ,\"http://ar.ahu.edu.jo/sensor.aspx?Sens1=10&Sens2=0&Sens3=0\"");
   delay(2000);
   toSerial();

   // set http action type 0 = GET, 1 = POST, 2 = HEAD
   gprsSerial.println("AT+HTTPACTION=0");
   delay(6000);
   toSerial();

   // read server response
   gprsSerial.println("AT+HTTPREAD"); 
   delay(1000);
   toSerial();

   gprsSerial.println("");
   gprsSerial.println("AT+HTTPTERM");
   toSerial();
   delay(300);

   gprsSerial.println("");
   delay(10000);
    }
  }
}

void toSerial()
{
  while(gprsSerial.available()!=0)
  {
    Serial1.write(gprsSerial.read());
  }
}

2 个答案:

答案 0 :(得分:0)

下面的代码块应该读取从GPRS调制解调器收到的任何内容。

void toSerial()
{
    while(gprsSerial.available()!=0)
    {
        Serial1.write(gprsSerial.read());
    }
}

您能告诉我们您在串口显示器上看到的内容吗?

答案 1 :(得分:0)

我很新,但错误可能出在端口选择上。端口 7 和 8 仅适用于 Arduino UNO。

在这种情况下,您应该使用端口 10 和 11:

SoftwareSerial gprsSerial(10, 11);