Начало работы с LILYGO TTGO T-A7670G ESP32 (4G, GPRS и GPS)

Начните работу с ESP32 и модулем T-A7670G 4G/GPS/GPRS. В этом руководстве мы будем использовать плату LILYGO TTGO T-A7670G ESP32, которая объединяет чип ESP32, модуль A7670G (или A7670E, A7670SA), слот для SIM-карты, microSD-карту, GPS, аккумулятор и зарядное устройство на одной плате. Помимо Wi-Fi и Bluetooth, вы можете обмениваться данными с этой платой ESP32 через SMS. Вы также можете подключить её к интернету, используя тарифный план вашей SIM-карты, и получать GPS-координаты.

Начало работы с LILYGO TTGO T-A7670G ESP32 4G GPRS и GPS

Совместимость

Вы должны выбрать правильную версию платы для вашего региона.

Необходимые условия

Это руководство посвящено программированию ESP32 с использованием ядра Arduino. Прежде чем продолжить, у вас должно быть установлено ядро ESP32 Arduino в вашей Arduino IDE. Следуйте следующему руководству, чтобы установить ESP32 в Arduino IDE, если вы этого ещё не сделали.

Знакомство с LILYGO TTGO T-A7670G ESP32 (с GPS)

LILYGO TTGO T-A7670G — это плата разработки ESP32 с модулем A7670G / A7670E / A7670SA. Это добавляет LTE-FDD, GSM и GPRS к вашей плате. Это означает, что с этой платой вы можете отправлять SMS и подключать её к интернету, используя тарифный план SIM-карты. Если вы купите версию с GPS, вы можете получать местоположение и время. Дополнительную информацию можно найти в официальном репозитории LilyGO-T-A76XX на GitHub.

Обзор платы ESP32 LILYGO TTGO T-A7670G

Помимо модуля A7670G, плата также имеет некоторые интересные функции, такие как держатель батареи для аккумулятора 18650, схему зарядки батареи, к которой можно подключить солнечные панели для подзарядки, и слот для microSD-карты, который может быть полезен для проектов журналирования данных или для сохранения настроек конфигурации.

Вот краткое описание характеристик платы LILYGO TTGO T-A7670G ESP32 (с GPS):

  • Напряжение питания: 3.3В DC или 5В DC

  • Чип ESP32 (модуль WROVER-B) (двухъядерный процессор 240 МГц)

  • Flash-память: 4 МБ

  • PSRAM: 8 МБ

  • Встроенный Wi-Fi

  • Встроенный Bluetooth

  • Преобразователь USB-Serial: CP2104 или CH9102 (драйверы)

  • Встроенный модуль SIMCOM A7670G

  • Встроенный слот для nano SIM-карты

  • Встроенный разъём для SIM-антенны

  • Доступна с GPS или без него

  • Встроенная схема зарядки Li-ion/Li-Po батареи:

    • Интерфейс зарядки от солнечной энергии для солнечной панели 4.4-6В

    • Встроенный держатель батареи 1x 18650

    • Встроенный разъём для солнечной панели 2p JST-PH

  • Встроенный слот для Micro SD карты

  • Переключатель вкл/выкл батареи

  • Кнопки Reset и Boot

  • Светодиоды состояния

Вот краткий обзор платы:

Обзор основных элементов платы ESP32 LILYGO TTGO T-A7670G

Для использования возможностей этой платы вам нужна nano SIM-карта с тарифным планом и кабель USB-C для загрузки кода на плату. В комплекте идёт внешняя антенна для LTE-соединения.

Плата ESP32 LILYGO TTGO T-A7670G с полнодиапазонной LTE антенной

Если вы купите плату LILYGO TTGO T-A7670G с GPS, в комплекте также будет GPS-антенна, которую можно подключить к плате следующим образом:

Плата ESP32 LILYGO TTGO T-A7670G с подключённой GPS антенной

Вы также можете подключить microSD-карту:

Плата ESP32 LILYGO TTGO T-A7670G с microSD картой и держателем батареи

Где купить LILYGO TTGO T-A7670G ESP32?

Перейдите по следующей ссылке:

Вы должны выбрать правильную версию платы для вашего региона.

Сравнение ESP32 LILYGO TTGO T-A7670G A7670E A7670SA

Распиновка LILYGO TTGO T-A7670G ESP32

На следующем изображении показана распиновка платы T-A7670G ESP32.

Распиновка платы ESP32 LILYGO TTGO T-A7670G

Источник изображения

В следующей таблице показаны соединения между ESP32 и чипом T-A7670G:

T-A7670G

ESP32

TX

GPIO 26

RX

GPIO 27

POWER

GPIO 4

Для связи с microSD-картой необходим протокол связи SPI. Вот используемые GPIO:

MicroSD Card (TF card)

ESP32

MOSI

GPIO 15

SCLK

GPIO 14

CS

GPIO 13

MISO

GPIO 2

AT-команды

AT-команды используются для управления модемами, как в случае с T-7670G. В случае ESP32 вы отправляете AT-команды через протокол последовательной связи. Затем модем отвечает также через последовательную связь.

Существует четыре типа AT-команд: test (тестовые); read (чтение); set (установка); execution (выполнение). Полный список AT-команд для T-7670G можно найти по следующей ссылке:

Вот некоторые AT-команды:

  • Проверка связи с модулем: AT

  • Проверка готовности SIM-карты: AT+CPIN?

  • Проверка статуса регистрации устройства: AT+CGREG?

Библиотеки

Как мы объяснили ранее, ESP32 взаимодействует с чипом T-7670G, отправляя AT-команды через последовательную связь. Библиотека вам не нужна, вы можете просто установить последовательную связь с модулем и начать отправлять AT-команды.

Однако может быть более практичным использовать библиотеку. Например, библиотека TinyGSM знает, какие команды отправлять, как обрабатывать AT-ответы, и оборачивает всё это в стандартный интерфейс Arduino Client.

ВАЖНО: для этого руководства мы не будем использовать официальную библиотеку TinyGSM от vshymanskyy. Мы будем использовать TinyGSM-fork от lewisxhe. Если у вас уже установлена библиотека TinyGSM от vshymanskyy, вы должны удалить её, чтобы использовать этот новый форк.

Установка библиотеки TinyGSM-fork

Библиотека TinyGSM-fork от lewisxhe недоступна для установки через менеджер библиотек Arduino, поэтому вам нужно скопировать файлы библиотеки в папку Libraries установки Arduino. В качестве альтернативы, в вашей Arduino IDE вы можете перейти в Sketch > Include Library > Add .zip Library и выбрать библиотеку, которую можно скачать ниже.

Подготовка платы LILYGO T-7670G ESP32

Эта плата поддерживает только nano SIM-карты. Для 4G и GPRS вам нужна SIM-карта. Для использования 4G и GPRS вам нужна SIM-карта с тарифным планом для передачи данных. Это может быть дорого в некоторых странах, поэтому может быть экономически нецелесообразным в зависимости от стоимости тарифного плана в вашей стране.

Там, где мы живём (Португалия), мы можем получить SIM-карту с тарифным планом, звонками и SMS (достаточно для проектов ESP32) примерно за $10. Мы рекомендуем использовать SIM-карту с предоплаченным или ежемесячным тарифным планом, чтобы вы точно знали, сколько потратите. Также существуют компании, специализирующиеся на SIM-картах для IoT-проектов.

Nano SIM-карта Vodafone

Перед подключением платы к компьютеру вам нужно выполнить следующие шаги:

1) Вставьте nano SIM-карту;

Плата ESP32 LILYGO TTGO T-A7670G с вставленной SIM-картой

2) Подключите полнодиапазонную LTE антенну к разъёму;

Плата ESP32 LILYGO TTGO T-A7670G с подключённой LTE антенной

3) Для программирования платы вы должны подать питание через кабель USB Type-C;

Плата ESP32 LILYGO TTGO T-A7670G с подключённым кабелем USB Type-C

4) Наконец, если вы не видите COM-порт на вашем компьютере, вам нужно установить драйвер USB-моста CH9102: Windows или Mac OS.

Настройки APN

Для подключения вашей SIM-карты к интернету вам нужны настройки APN вашего оператора. Вам нужны доменное имя, имя пользователя и пароль.

В моём случае я использую Vodafone Portugal. Если вы поищете «GPRS APN settings» с названием вашего оператора (в моём случае: «GPRS APN Vodafone Portugal»), вы обычно можете найти на форуме или на их сайте всю необходимую информацию.

Найти данные может быть немного сложно, если вы не используете известного оператора. Поэтому вам может потребоваться обратиться к ним напрямую.

Программирование LILYGO TTGO T-A7670G ESP32

Этот первый скетч, который вы запустите на плате, хорош для проверки всех соединений. Он запустит модем, подключится к сети APN и выполнит HTTPS GET запрос к веб-сайту.

  1. Скопируйте следующий код в вашу Arduino IDE:

/*
  Rui Santos & Sara Santos - Random Nerd Tutorials
  Complete project details at https://RandomNerdTutorials.com/lilygo-ttgo-t-a7670g-a7670e-a7670sa-esp32/
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
// set SIM card pin, if any
#define SIM_PIN ""

// It depends on the operator whether you need to set up an APN or not.
// With some operators if you do not set up an APN, the connection will be rejected when registering for the network.
#define NETWORK_APN "REPLACE_WITH_YOUR_NETWORK_APN"

// If the status code 715 is returned, you might need to update your SIMCOM firmware please see here: https://github.com/Xinyuan-LilyGO/LilyGO-T-A76XX/issues/117
// How to update the firmware: https://github.com/Xinyuan-LilyGO/LilyGO-T-A76XX/blob/main/docs/update_fw.md
// Some websites block the ESP32 connection, so it might return an error.
// The githubusercontent.com URL defined below has been tested and it returns the proper HTTPS GET request
const char *request_url[] = {
  "https://gist.githubusercontent.com/RuiSantosdotme/7db8537cef1c84277c268c76a58d07ff/raw/d3fe4cd6eff1ed43e6dbd1883ab7eba8414e2406/gistfile1.txt"
};

#define TINY_GSM_RX_BUFFER 1024 // Set RX buffer to 1Kb

#define LILYGO_T_A7670

#if defined(LILYGO_T_A7670)
  #define MODEM_BAUDRATE                      (115200)
  #define MODEM_DTR_PIN                       (25)
  #define MODEM_TX_PIN                        (26)
  #define MODEM_RX_PIN                        (27)
  // The modem boot pin needs to follow the startup sequence.
  #define BOARD_PWRKEY_PIN                    (4)
  #define BOARD_ADC_PIN                       (35)
  // The modem power switch must be set to HIGH for the modem to supply power.
  #define BOARD_POWERON_PIN                   (12)
  #define MODEM_RING_PIN                      (33)
  #define MODEM_RESET_PIN                     (5)
  #define BOARD_MISO_PIN                      (2)
  #define BOARD_MOSI_PIN                      (15)
  #define BOARD_SCK_PIN                       (14)
  #define BOARD_SD_CS_PIN                     (13)
  #define BOARD_BAT_ADC_PIN                   (35)
  #define MODEM_RESET_LEVEL                   HIGH
  #define SerialAT                            Serial1
  #define MODEM_GPS_ENABLE_GPIO               (-1)
  #define MODEM_GPS_ENABLE_LEVEL              (-1)
  #ifndef TINY_GSM_MODEM_A7670
    #define TINY_GSM_MODEM_A7670
  #endif
#endif

// YOU MUST USE THE TinyGSM-fork LIBRARY BY lewisxhe - https://github.com/lewisxhe/TinyGSM-fork
// If you already have the vshymanskyy/TinyGSM library installed, you must remove it and use the TinyGSM-fork version by lewisxhe mentioned above
#include <TinyGsmClient.h>

// See all AT commands, if wanted
//#define DUMP_AT_COMMANDS
#ifdef DUMP_AT_COMMANDS  // if enabled it requires the streamDebugger lib
  #include <StreamDebugger.h>
  StreamDebugger debugger(SerialAT, Serial);
  TinyGsm modem(debugger);
#else
  TinyGsm modem(SerialAT);
#endif

void HTTPSGetRequest() {
  for (int i = 0; i < sizeof(request_url) / sizeof(request_url[0]); ++i) {
    int retry = 3;
    while (retry--) {
      Serial.print("Request URL : ");
      Serial.println(request_url[i]);

      // Set GET URT
      if (!modem.https_set_url(request_url[i])) {
        Serial.print("Failed to request : "); Serial.println(request_url[i]);
        // Debug
        // modem.sendAT("+CSSLCFG=\"enableSNI\",0,1");
        // modem.waitResponse();
        delay(3000);
        continue;
      }

      // Send GET request
      int httpCode = 0;
      httpCode = modem.https_get();
      if (httpCode != 200) {
        Serial.print("HTTP get failed ! error code = ");
        Serial.println(httpCode);
        delay(3000);
        continue;
      }

      // Get HTTPS header information
      String header = modem.https_header();
      Serial.print("HTTP Header : ");
      Serial.println(header);
      delay(1000);

      // Get HTTPS response
      String body = modem.https_body();
      Serial.print("HTTP body : ");
      Serial.println(body);
      delay(3000);
      break;
    }
    Serial.println("-------------------------------------");
  }
}

void setup() {
  Serial.begin(115200);
  Serial.println("Init...");
  SerialAT.begin(115200, SERIAL_8N1, MODEM_RX_PIN, MODEM_TX_PIN);

  pinMode(BOARD_POWERON_PIN, OUTPUT);
  digitalWrite(BOARD_POWERON_PIN, HIGH);

  // Set modem reset pin, reset modem
  pinMode(MODEM_RESET_PIN, OUTPUT);
  digitalWrite(MODEM_RESET_PIN, !MODEM_RESET_LEVEL); delay(100);
  digitalWrite(MODEM_RESET_PIN, MODEM_RESET_LEVEL); delay(2600);
  digitalWrite(MODEM_RESET_PIN, !MODEM_RESET_LEVEL);

  pinMode(BOARD_PWRKEY_PIN, OUTPUT);
  digitalWrite(BOARD_PWRKEY_PIN, LOW);
  delay(100);
  digitalWrite(BOARD_PWRKEY_PIN, HIGH);
  delay(100);
  digitalWrite(BOARD_PWRKEY_PIN, LOW);

  // Check if the modem is online
  Serial.println("Start modem...");

  int retry = 0;
  while (!modem.testAT(1000)) {
    Serial.print(".");
    if (retry++ > 10) {
      digitalWrite(BOARD_PWRKEY_PIN, LOW);
      delay(100);
      digitalWrite(BOARD_PWRKEY_PIN, HIGH);
      delay(1000);
      digitalWrite(BOARD_PWRKEY_PIN, LOW);
      retry = 0;
    }
  }
  Serial.println();

  // Check if SIM card is online
  SimStatus sim = SIM_ERROR;
  while (sim != SIM_READY) {
    sim = modem.getSimStatus();
    switch (sim) {
      case SIM_READY:
        Serial.println("SIM card online");
        break;
      case SIM_LOCKED:
        Serial.println("The SIM card is locked. Please unlock the SIM card first.");
        modem.simUnlock(SIM_PIN);
        break;
      default:
        break;
    }
    delay(1000);
  }

  if (!modem.setNetworkMode(MODEM_NETWORK_AUTO)) {
    Serial.println("Set network mode failed!");
  }
  String mode = modem.getNetworkModeString();
  Serial.print("Current network mode : ");
  Serial.println(mode);

#ifdef NETWORK_APN
  Serial.printf("Set network apn : %s\n", NETWORK_APN);
  modem.sendAT(GF("+CGDCONT=1,\"IP\",\""), NETWORK_APN, "\"");
  if (modem.waitResponse() != 1) {
    Serial.println("Set network apn error !");
  }
#endif

  // Check network registration status and network signal status
  int16_t sq ;
  Serial.print("Wait for the modem to register with the network.");
  RegStatus status = REG_NO_RESULT;
  while (status == REG_NO_RESULT || status == REG_SEARCHING || status == REG_UNREGISTERED) {
    status = modem.getRegistrationStatus();
    switch (status) {
      case REG_UNREGISTERED:
      case REG_SEARCHING:
        sq = modem.getSignalQuality();
        Serial.printf("[%lu] Signal Quality:%d\n", millis() / 1000, sq);
        delay(1000);
        break;
      case REG_DENIED:
        Serial.println("Network registration was rejected, please check if the APN is correct");
        return ;
      case REG_OK_HOME:
        Serial.println("Online registration successful");
        break;
      case REG_OK_ROAMING:
        Serial.println("Network registration successful, currently in roaming mode");
        break;
      default:
        Serial.printf("Registration Status:%d\n", status);
        delay(1000);
        break;
    }
  }
  Serial.println();

  Serial.printf("Registration Status:%d\n", status);
  delay(1000);

  String ueInfo;
  if (modem.getSystemInformation(ueInfo)) {
    Serial.print("Inquiring UE system information:");
    Serial.println(ueInfo);
  }

  if (!modem.setNetworkActive()) {
    Serial.println("Enable network failed!");
  }
  delay(5000);

  String ipAddress = modem.getLocalIP();
  Serial.print("Network IP:"); Serial.println(ipAddress);

  // Initialize HTTPS
  modem.https_begin();

  HTTPSGetRequest();
}

void loop() {
  // Debug AT
  if (SerialAT.available()) {
    Serial.write(SerialAT.read());
  }
  if (Serial.available()) {
    SerialAT.write(Serial.read());
  }
  delay(1);
}

#ifndef TINY_GSM_FORK_LIBRARY
  #error "The correct library was NOT found. You must install TinyGSM-fork by lewisxhe - https://github.com/lewisxhe/TinyGSM-fork - No correct definition detected, Please copy all the [lib directories](https://github.com/Xinyuan-LilyGO/LilyGO-T-A76XX/tree/main/lib) to the arduino libraries directory , See README"
#endif

Просмотреть исходный код

  1. Вставьте PIN-код вашей SIM-карты, если он есть. В моём случае я отключил PIN.

#define SIM_PIN ""
  1. Вставьте данные APN вашей сети в следующую строку:

#define NETWORK_APN "t"

Например, в моём случае:

#define NETWORK_APN "net2.vodafone.pt"
  1. Перейдите в Tools > Board и выберите ESP32 Dev Module.

  2. Наконец, загрузите код на плату.

Кнопка загрузки Arduino 2.0

Откройте Serial Monitor на скорости 115200 бод. Нажмите кнопку RST на плате для перезапуска. Подождите некоторое время, пока плата подключится к сети (в моём случае это может занять 1-2 минуты).

Вы должны увидеть нечто подобное в Arduino IDE Serial Monitor.

Демонстрация HTTPS GET запроса на плате ESP32 LILYGO TTGO T-A7670G

Как работает код

Давайте кратко рассмотрим основные части кода.

Сначала вставьте PIN SIM-карты, данные APN и желаемый URL запроса (мы просто используем тестовый URL с GitHub, который мы создали для проверки соединения):

// set SIM card pin, if any
#define SIM_PIN ""

#define NETWORK_APN ""

const char *request_url[] = {
  "https://gist.githubusercontent.com/RuiSantosdotme/7db8537cef1c84277c268c76a58d07ff/raw/d3fe4cd6eff1ed43e6dbd1883ab7eba8414e2406/gistfile1.txt"
};

Затем вам нужно определить используемый модуль. Библиотека совместима со многими различными модулями. Для использования T-A7670 включите следующую строку (назначение выводов для других модулей T-A76XX):

#define LILYGO_T_A7670

Подключите библиотеку TinyGSM-fork от lewisxhe:

#include <TinyGsmClient.h>

Распиновка A-7670G

Следующие строки задают скорость передачи данных модуля и распиновку:

#define MODEM_BAUDRATE                      (115200)
#define MODEM_DTR_PIN                       (25)
#define MODEM_TX_PIN                        (26)
#define MODEM_RX_PIN                        (27)
// The modem boot pin needs to follow the startup sequence.
#define BOARD_PWRKEY_PIN                    (4)
#define BOARD_ADC_PIN                       (35)
// The modem power switch must be set to HIGH for the modem to supply power.
#define BOARD_POWERON_PIN                   (12)
#define MODEM_RING_PIN                      (33)
#define MODEM_RESET_PIN                     (5)
#define BOARD_MISO_PIN                      (2)
#define BOARD_MOSI_PIN                      (15)
#define BOARD_SCK_PIN                       (14)
#define BOARD_SD_CS_PIN                     (13)
#define BOARD_BAT_ADC_PIN                   (35)
#define MODEM_RESET_LEVEL                   HIGH
#define SerialAT                            Serial1
#define MODEM_GPS_ENABLE_GPIO               (-1)
#define MODEM_GPS_ENABLE_LEVEL              (-1)

Последовательная связь

Запустите последовательную связь с Serial Monitor для отладки и модемом для отправки AT-команд:

Serial.begin(115200);
Serial.println("Init...");
SerialAT.begin(115200, SERIAL_8N1, MODEM_RX_PIN, MODEM_TX_PIN);

Включение модема

В setup() вам всегда нужно включать следующую процедуру для включения и запуска модема:

pinMode(BOARD_POWERON_PIN, OUTPUT);
digitalWrite(BOARD_POWERON_PIN, HIGH);

// Set modem reset pin, reset modem
pinMode(MODEM_RESET_PIN, OUTPUT);
digitalWrite(MODEM_RESET_PIN, !MODEM_RESET_LEVEL); delay(100);
digitalWrite(MODEM_RESET_PIN, MODEM_RESET_LEVEL); delay(2600);
digitalWrite(MODEM_RESET_PIN, !MODEM_RESET_LEVEL);

pinMode(BOARD_PWRKEY_PIN, OUTPUT);
digitalWrite(BOARD_PWRKEY_PIN, LOW);
delay(100);
digitalWrite(BOARD_PWRKEY_PIN, HIGH);
delay(100);
digitalWrite(BOARD_PWRKEY_PIN, LOW);

// Check if the modem is online
Serial.println("Start modem...");

Подождите, пока модуль T-A7670 начнёт отвечать на AT-команды, что означает, что он работает правильно.

int retry = 0;
while (!modem.testAT(1000)) {
  Serial.print(".");
  if (retry++ > 10) {
    digitalWrite(BOARD_PWRKEY_PIN, LOW);
    delay(100);
    digitalWrite(BOARD_PWRKEY_PIN, HIGH);
    delay(1000);
    digitalWrite(BOARD_PWRKEY_PIN, LOW);
    retry = 0;
  }
}
Serial.println();

После этого проверьте, правильно ли вставлена SIM-карта, и разблокируйте её с помощью SIM_PIN, если это необходимо.

// Check if SIM card is online
SimStatus sim = SIM_ERROR;
while (sim != SIM_READY) {
  sim = modem.getSimStatus();
  switch (sim) {
    case SIM_READY:
      Serial.println("SIM card online");
      break;
    case SIM_LOCKED:
      Serial.println("The SIM card is locked. Please unlock the SIM card first.");
      modem.simUnlock(SIM_PIN);
      break;
    default:
      break;
  }
  delay(1000);
}

Установка режима сети

Установите режим сети и APN для подключения к интернету:

  if (!modem.setNetworkMode(MODEM_NETWORK_AUTO)) {
    Serial.println("Set network mode failed!");
  }
  String mode = modem.getNetworkModeString();
  Serial.print("Current network mode : ");
  Serial.println(mode);

#ifdef NETWORK_APN
  Serial.printf("Set network apn : %s\n", NETWORK_APN);
  modem.sendAT(GF("+CGDCONT=1,\"IP\",\""), NETWORK_APN, "\"");
  if (modem.waitResponse() != 1) {
    Serial.println("Set network apn error !");
  }
#endif

Затем запустите цикл, который проверяет качество сигнала и останавливается, когда плата установила успешное интернет-соединение.

// Check network registration status and network signal status
int16_t sq ;
Serial.print("Wait for the modem to register with the network.");
RegStatus status = REG_NO_RESULT;
while (status == REG_NO_RESULT || status == REG_SEARCHING || status == REG_UNREGISTERED) {
  status = modem.getRegistrationStatus();
  switch (status) {
    case REG_UNREGISTERED:
    case REG_SEARCHING:
      sq = modem.getSignalQuality();
      Serial.printf("[%lu] Signal Quality:%d\n", millis() / 1000, sq);
      delay(1000);
      break;
    case REG_DENIED:
      Serial.println("Network registration was rejected, please check if the APN is correct");
      return ;
    case REG_OK_HOME:
      Serial.println("Online registration successful");
      break;
    case REG_OK_ROAMING:
      Serial.println("Network registration successful, currently in roaming mode");
      break;
    default:
      Serial.printf("Registration Status:%d\n", status);
      delay(1000);
      break;
  }
}
Serial.println();

Serial.printf("Registration Status:%d\n", status);
delay(1000);

Получение информации о модеме

Вы можете выполнить эти команды для вывода информации о модеме в Serial Monitor.

String ueInfo;
if (modem.getSystemInformation(ueInfo)) {
  Serial.print("Inquiring UE system information:");
  Serial.println(ueInfo);
}

if (!modem.setNetworkActive()) {
  Serial.println("Enable network failed!");
}
delay(5000);

String ipAddress = modem.getLocalIP();
Serial.print("Network IP:"); Serial.println(ipAddress);

HTTPS GET запрос

Чтобы выполнить HTTPS GET запрос к переменной request_url, определённой в начале скетча, вам нужно запустить HTTPS-клиент:

modem.https_begin();

Наконец, вызовите HTTPSGetRequest() для выполнения HTTPS GET запроса. Эта функция выведет HTTP-код, HTTP-заголовок и HTTP-тело запроса:

HTTPSGetRequest();

HTTPSGetRequest()

Эта функция принимает один или несколько URL-адресов, затем делает 3 попытки получить действительный HTTPS-ответ от веб-сайта. Она выводит отладочную информацию в Serial Monitor, такую как HTTP-код, HTTP-заголовок и HTTP-тело из ответа.

void HTTPSGetRequest() {
  for (int i = 0; i < sizeof(request_url) / sizeof(request_url[0]); ++i) {
    int retry = 3;
    while (retry--) {
      Serial.print("Request URL : ");
      Serial.println(request_url[i]);

      // Set GET URT
      if (!modem.https_set_url(request_url[i])) {
        Serial.print("Failed to request : "); Serial.println(request_url[i]);
        // Debug
        // modem.sendAT("+CSSLCFG=\"enableSNI\",0,1");
        // modem.waitResponse();
        delay(3000);
        continue;
      }

      // Send GET request
      int httpCode = 0;
      httpCode = modem.https_get();
      if (httpCode != 200) {
        Serial.print("HTTP get failed ! error code = ");
        Serial.println(httpCode);
        delay(3000);
        continue;
      }

      // Get HTTPS header information
      String header = modem.https_header();
      Serial.print("HTTP Header : ");
      Serial.println(header);
      delay(1000);

      // Get HTTPS response
      String body = modem.https_body();
      Serial.print("HTTP body : ");
      Serial.println(body);
      delay(3000);
      break;
    }
    Serial.println("-------------------------------------");
  }
}

Советы по устранению неполадок

1. Код не компилируется

ВАЖНО: для этого руководства мы не используем официальную библиотеку TinyGSM от vshymanskyy. Мы используем TinyGSM-fork от lewisxhe. Если у вас уже установлена библиотека TinyGSM от vshymanskyy, вы должны удалить её.

Установка библиотеки TinyGSM-fork

Библиотека TinyGSM-fork от lewisxhe недоступна для установки через менеджер библиотек Arduino, поэтому вам нужно скопировать файлы библиотеки в папку Libraries установки Arduino. В качестве альтернативы, в вашей Arduino IDE вы можете перейти в Sketch > Include Library > Add .zip Library и выбрать библиотеку, которую можно скачать ниже.

2. HTTPS GET запрос возвращает код состояния 715

Если вы выполняете HTTPS GET запрос к веб-сайту и получаете код состояния 715, вам может потребоваться обновить прошивку SIMCOM. Вы можете узнать больше об этой проблеме здесь.

Обратите внимание, что некоторые веб-сайты блокируют соединение ESP32, поэтому может возвращаться HTTP-ошибка. URL githubusercontent.com, определённый в этом проекте, был протестирован и возвращает правильный HTTPS GET ответ.

3. Невозможно загрузить код, потому что COM-порт не отображается

Для программирования платы вы должны подать питание через кабель USB Type-C, если вы используете другой USB-порт, он не позволит вам программировать ESP32.

Вам также необходимо установить на компьютер драйвер USB-моста CH9102: Windows или Mac OS.

Плата ESP32 LILYGO TTGO T-A7670G с подключённым кабелем USB Type-C

Заключение

В этом руководстве вы узнали, как начать работу с платой LILYGO TTGO T-A7670G ESP32, распиновку и её основные функции. Это руководство также можно применить, если вы используете «обычный» ESP32, подключённый к внешнему модулю SIM7670G. Этот модуль поддерживает 4G, что может быть очень полезно для IoT и проектов домашней автоматизации. Вы также узнали, как подключить плату к интернету и выполнить HTTPS GET запрос.

Плата LILYGO TTGO T-A7670G ESP32 также имеет слот для microSD-карты, который может быть полезен для проектов журналирования данных или для сохранения настроек конфигурации. Кроме того, она поставляется с держателем батареи и схемой зарядки батареи для использования с солнечными панелями. Таким образом, она подходит для использования в удалённых местах. Для дополнительных примеров вы можете изучить официальную страницу LILYGO T-A76XX на GitHub.

Вам также могут быть полезны следующие руководства:

Узнайте больше об ESP32 с нашими ресурсами:

Примечание

Это перевод статьи Getting Started with LILYGO TTGO T-A7670G ESP32 (4G, GPRS, and GPS) с сайта Random Nerd Tutorials. Авторы оригинала: Rui Santos & Sara Santos.