使用 Heltec WIFI LoRa 32 (V2) 和 Sim800A 模块时无法通过 GPRS 连接网络

时间:2021-05-18 08:27:08

标签: esp32 arduino-ide sim800

我使用 Heltec WIFI LoRa 32 (V2) 连接到模块 Sim800A 以使用 GPRS 并将数据从传感器发送到 Thingsboard。但代码似乎不起作用。

代码(使用 Arduino IDE):

#include <TinyGsmClient.h>
#include "ThingsBoard.h"

#define TINY_GSM_MODEM_SIM800
#define serialGsm Serial2
const int RX_PIN = 16;
const int TX_PIN = 17;


// Your GPRS credentials
// Leave empty, if missing user or pass
const char apn[]  = "v-internet";
const char user[] = "";
const char pass[] = "";

// See https://thingsboard.io/docs/getting-started-guides/helloworld/
// to understand how to obtain an access token
#define TOKEN               "-TOKEN-"
#define THINGSBOARD_SERVER  "demo.thingboard.io"
#define THINGSBOARD_PORT    80


// Baud rate for debug serial
#define SERIAL_DEBUG_BAUD   115200
// Serial port for GSM shield


// Uncomment to see StreamDebugger output in serial monitor
//#define DUMP_AT_COMMANDS 1

#ifdef DUMP_AT_COMMANDS
  #include <StreamDebugger.h>
  StreamDebugger debugger(serialGsm, Serial);
  TinyGsm modem(debugger);
#else
  // Initialize GSM modem
  TinyGsm modem(serialGsm);
#endif

// Initialize GSM client
TinyGsmClient client(modem);

// Initialize ThingsBoard instance
ThingsBoardHttp tb(client, TOKEN, THINGSBOARD_SERVER, THINGSBOARD_PORT);

// Set to true, if modem is connected
bool modemConnected = false;
void setup() {
  // Set console baud rate

  Serial.begin(SERIAL_DEBUG_BAUD);
  
  Serial.println("-------SETUP------");

  // Set GSM module baud rate
  serialGsm.begin(115200, SERIAL_8N1, RX_PIN, TX_PIN);
  delay(3000);

  // Lower baud rate of the modem.
  // This is highly practical for Uno board, since SoftwareSerial there
  // works too slow to receive a modem data.

  serialGsm.write("AT+IPR=9600\r\n");
  serialGsm.end();
  serialGsm.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN);

  // Restart takes quite some time
  // To skip it, call init() instead of restart()
  Serial.println(F("Initializing modem..."));
  modem.restart();

  String modemInfo = modem.getModemInfo();
  Serial.print(F("Modem: "));
  Serial.println(modemInfo);

  // Unlock your SIM card with a PIN
  //modem.simUnlock("1234");
}
void loop() {
  delay(1000);

  if (!modemConnected) {
    Serial.print(F("Waiting for network..."));
    if (!modem.waitForNetwork()) {
        Serial.println(" fail");
        delay(10000);
        return;
    }
    Serial.println(" OK");

    Serial.print(F("Connecting to "));
    Serial.print(apn);
    if (!modem.gprsConnect(apn, user, pass)) {
        Serial.println(" fail");
        delay(10000);
        return;
    }

    modemConnected = true;
    Serial.println(" OK");
  }

  // Uploads new telemetry to ThingsBoard using HTTP.
  // See https://thingsboard.io/docs/reference/http-api/#telemetry-upload-api
  // for more details

  Serial.println("Sending temperature data...");
  tb.sendTelemetryFloat("temperature", sensor.readTemperature());

  Serial.println("Sending humidity data...");
  tb.sendTelemetryFloat("humidity", sensor.readHumidity());
}

串行监视器:

-------SETUP------
Initializing modem...
Modem:
Waiting for network... fail

但是当使用 SoftwareSerial 时,此代码在 Arduino Uno R3 上仍然正常工作。 那是因为Heltec板的Uart通信吗?并且串口监视器无法打印模块sim800A的调制解调器信息。

0 个答案:

没有答案