// This sketch demonstrates connecting and sending telemetry // using ThingsBoard SDK and GSM modem, such as SIM808 // // Hardware: // - Arduino Uno // - SIM808 Arduino shield connected to Arduino Uno // Select your modem: //#define TINY_GSM_MODEM_SIM800 #define TINY_GSM_MODEM_SIM808 // #define TINY_GSM_MODEM_SIM900 // #define TINY_GSM_MODEM_UBLOX // #define TINY_GSM_MODEM_BG96 // #define TINY_GSM_MODEM_A6 // #define TINY_GSM_MODEM_A7 // #define TINY_GSM_MODEM_M590 // #define TINY_GSM_MODEM_ESP8266 #include #include #include #include "ThingsBoard.h" // Your GPRS credentials // Leave empty, if missing user or pass const char apn[] = "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 "YOUR_ACCESS_TOKEN" #define THINGSBOARD_SERVER "demo.thingsboard.io" #define THINGSBOARD_PORT 80 // Baud rate for debug serial #define SERIAL_DEBUG_BAUD 115200 // Serial port for GSM shield SoftwareSerial serialGsm(7, 8); // RX, TX pins for communicating with modem // Uncomment to see StreamDebugger output in serial monitor //#define DUMP_AT_COMMANDS 1 #ifdef DUMP_AT_COMMANDS #include 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; HTU21D sensor; void setup() { // Set console baud rate Serial.begin(SERIAL_DEBUG_BAUD); Serial.println("-------SETUP------"); // Set GSM module baud rate serialGsm.begin(115200); 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); // 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); sensor.begin(); // 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()); }