Xinyuan-LilyGO / LilyGO-T-SIM7000G

LilyGO T-SIM7000G
https://pt.aliexpress.com/item/4000542688096.html
284 stars 123 forks source link

MQTT test code not working #178

Closed EsPuma2 closed 2 years ago

EsPuma2 commented 2 years ago

Hi all, I'm trying to do the final project for my studies, I use the Arduino IDE with the default config for the ESP 32. I'm testing with the MQTT test code and it isn't working, after a while (2/3 mins ) this happens:

Wait... Initializing modem... [32213] ### Unhandled: f`f [32213] ### TinyGSM Version: 0.11.5 [32213] ### TinyGSM Compiled Module: TinyGsmClientSIM7000 [32524] ### Modem: SIMCOM SIM7000G [32539] Modem Name: SIMCOM SIM7000G [32544] Modem Info: SIM7000G R1529 Waiting for network... success Network connected Connecting to internet.digimobil.es[34214] ### Daylight savings time state updated. [34218] ### Network time and time zone updated. success GPRS connected === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success === MQTT NOT CONNECTED === Connecting to broker.hivemq.com success Network disconnected [166983] ### Unhandled: 0, SEND FAIL Network re-connected === MQTT NOT CONNECTED === Connecting to broker.hivemq.com fail === MQTT NOT CONNECTED === Connecting to broker.hivemq.com fail === MQTT NOT CONNECTED === Connecting to broker.hivemq.com fail === MQTT NOT CONNECTED === Connecting to broker.hivemq.com fail === MQTT NOT CONNECTED === Connecting to broker.hivemq.com fail === MQTT NOT CONNECTED === Connecting to broker.hivemq.com fail === MQTT NOT CONNECTED === Connecting to broker.hivemq.com fail === MQTT NOT CONNECTED === Connecting to broker.hivemq.com fail === MQTT NOT CONNECTED === Connecting to broker.hivemq.com

This is the code:

define TINY_GSM_MODEM_SIM7000

// Set serial for debug console (to the Serial Monitor, default speed 115200)

define SerialMon Serial

// Set serial for AT commands (to the module) // Use Hardware Serial on Mega, Leonardo, Micro

define SerialAT Serial1

// See all AT commands, if wanted //#define DUMP_AT_COMMANDS

// Define the serial console for debug prints, if needed

define TINY_GSM_DEBUG SerialMon

// Add a reception delay, if needed. // This may be needed for a fast processor at a slow baud rate. // #define TINY_GSM_YIELD() { delay(2); }

// Define how you're planning to connect to the internet // These defines are only for this example; they are not needed in other code.

define TINY_GSM_USE_GPRS true

define TINY_GSM_USE_WIFI false

// set GSM PIN, if any

define GSM_PIN ""

// Your GPRS credentials, if any const char apn[] = "internet.digimobil.es"; const char gprsUser[] = ""; const char gprsPass[] = "";

// Your WiFi connection credentials, if applicable const char wifiSSID[] = "YourSSID"; const char wifiPass[] = "YourWiFiPass";

// MQTT details const char *broker = "broker.hivemq.com";

const char topicLed = "PumaClientTest/led"; const char topicInit = "PumaClientTest/init"; const char *topicLedStatus = "PumaClientTest/ledStatus";

include

include

include

include

include

// Just in case someone defined the wrong thing..

if TINY_GSM_USE_GPRS && not defined TINY_GSM_MODEM_HAS_GPRS

undef TINY_GSM_USE_GPRS

undef TINY_GSM_USE_WIFI

define TINY_GSM_USE_GPRS false

define TINY_GSM_USE_WIFI true

endif

if TINY_GSM_USE_WIFI && not defined TINY_GSM_MODEM_HAS_WIFI

undef TINY_GSM_USE_GPRS

undef TINY_GSM_USE_WIFI

define TINY_GSM_USE_GPRS true

define TINY_GSM_USE_WIFI false

endif

ifdef DUMP_AT_COMMANDS

include

StreamDebugger debugger(SerialAT, SerialMon); TinyGsm modem(debugger);

else

TinyGsm modem(SerialAT);

endif

TinyGsmClient client(modem); PubSubClient mqtt(client);

Ticker tick;

define uS_TO_S_FACTOR 1000000ULL // Conversion factor for micro seconds to seconds

define TIME_TO_SLEEP 60 // Time ESP32 will go to sleep (in seconds)

define UART_BAUD 115200

define PIN_DTR 25

define PIN_TX 27

define PIN_RX 26

define PWR_PIN 4

define SD_MISO 2

define SD_MOSI 15

define SD_SCLK 14

define SD_CS 13

define LED_PIN 12

int ledStatus = LOW;

uint32_t lastReconnectAttempt = 0;

void mqttCallback(char topic, byte payload, unsigned int len) {

SerialMon.print("Message arrived [");
SerialMon.print(topic);
SerialMon.print("]: ");
SerialMon.write(payload, len);
SerialMon.println();

// Only proceed if incoming message's topic matches
if (String(topic) == topicLed) {
    ledStatus = !ledStatus;
    digitalWrite(LED_PIN, ledStatus);
    SerialMon.print("ledStatus:");
    SerialMon.println(ledStatus);
    mqtt.publish(topicLedStatus, ledStatus ? "1" : "0");

}

}

boolean mqttConnect() { SerialMon.print("Connecting to "); SerialMon.print(broker);

// Connect to MQTT Broker
boolean status = mqtt.connect("GsmClientTest");

// Or, if you want to authenticate MQTT:
// boolean status = mqtt.connect("GsmClientName", "mqtt_user", "mqtt_pass");

if (status == false) {
    SerialMon.println(" fail");
    return false;
}
SerialMon.println(" success");
mqtt.publish(topicInit, "GsmClientTest started");
mqtt.subscribe(topicLed);
return mqtt.connected();

}

void setup() { // Set console baud rate Serial.begin(115200); delay(10);

// Set LED OFF
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH);

pinMode(PWR_PIN, OUTPUT);
digitalWrite(PWR_PIN, HIGH);
delay(300);
digitalWrite(PWR_PIN, LOW);

SPI.begin(SD_SCLK, SD_MISO, SD_MOSI, SD_CS);
if (!SD.begin(SD_CS)) {
    Serial.println("SDCard MOUNT FAIL");
} else {
    uint32_t cardSize = SD.cardSize() / (1024 * 1024);
    String str = "SDCard Size: " + String(cardSize) + "MB";
    Serial.println(str);
}

Serial.println("\nWait...");

delay(1000);

SerialAT.begin(UART_BAUD, SERIAL_8N1, PIN_RX, PIN_TX);

// Restart takes quite some time
// To skip it, call init() instead of restart()
Serial.println("Initializing modem...");
if (!modem.restart()) {
    Serial.println("Failed to restart modem, attempting to continue without restarting");
}

String name = modem.getModemName();
DBG("Modem Name:", name);

String modemInfo = modem.getModemInfo();
DBG("Modem Info:", modemInfo);

if TINY_GSM_USE_GPRS

// Unlock your SIM card with a PIN if needed
if (GSM_PIN && modem.getSimStatus() != 3) {
    modem.simUnlock(GSM_PIN);
}

endif

if TINY_GSM_USE_WIFI

// Wifi connection parameters must be set before waiting for the network
SerialMon.print(F("Setting SSID/password..."));
if (!modem.networkConnect(wifiSSID, wifiPass)) {
    SerialMon.println(" fail");
    delay(10000);
    return;
}
SerialMon.println(" success");

endif

if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_XBEE

// The XBee must run the gprsConnect function BEFORE waiting for network!
modem.gprsConnect(apn, gprsUser, gprsPass);

endif

SerialMon.print("Waiting for network...");
if (!modem.waitForNetwork()) {
    SerialMon.println(" fail");
    delay(10000);
    return;
}
SerialMon.println(" success");

if (modem.isNetworkConnected()) {
    SerialMon.println("Network connected");
}

if TINY_GSM_USE_GPRS

// GPRS connection parameters are usually set after network registration
SerialMon.print(F("Connecting to "));
SerialMon.print(apn);
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
    SerialMon.println(" fail");
    delay(10000);
    return;
}
SerialMon.println(" success");

if (modem.isGprsConnected()) {
    SerialMon.println("GPRS connected");
}

endif

// MQTT Broker setup
mqtt.setServer(broker, 1883);
mqtt.setCallback(mqttCallback);

}

void loop() {

// Make sure we're still registered on the network
if (!modem.isNetworkConnected()) {
    SerialMon.println("Network disconnected");
    if (!modem.waitForNetwork(180000L, true)) {
        SerialMon.println(" fail");
        delay(10000);
        return;
    }
    if (modem.isNetworkConnected()) {
        SerialMon.println("Network re-connected");
    }

if TINY_GSM_USE_GPRS

    // and make sure GPRS/EPS is still connected
    if (!modem.isGprsConnected()) {
        SerialMon.println("GPRS disconnected!");
        SerialMon.print(F("Connecting to "));
        SerialMon.print(apn);
        if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
            SerialMon.println(" fail");
            delay(10000);
            return;
        }
        if (modem.isGprsConnected()) {
            SerialMon.println("GPRS reconnected");
        }
    }

endif

}

if (!mqtt.connected()) {
    SerialMon.println("=== MQTT NOT CONNECTED ===");
    // Reconnect every 10 seconds
    uint32_t t = millis();
    if (t - lastReconnectAttempt > 10000L) {
        lastReconnectAttempt = t;
        if (mqttConnect()) {
            lastReconnectAttempt = 0;
        }
    }
    delay(100);
    return;
}

mqtt.loop();

}

Any help will be amazing, thank you so much.

LosBagros commented 4 months ago

Any update??? I have problems with mqtt too #258