我使用 Heltec WIFI LoRa 32 (V2) 连接到模块 Sim800A 以使用 GPRS 并将数据从传感器发送到 Thingsboard。但代码似乎不起作用。
#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的调制解调器信息。