GPRS термометр на Arduino MEGA 2560 и SIM800L

В этом примере создадим устройство, которое будет передавать показатели температуры и влажности со склада на сервер VizIoT каждые 5 минут. Для связи с интернетом используется GSM-модуль SIM800L, а для измерений — датчик SHT31-D.


Что потребуется

  • Микроконтроллер: Arduino MEGA 2560
  • GSM-модуль: SIM800L
  • Датчик: SHT31-D
  • Среда разработки: Arduino IDE

Добавление и настройка устройства в VizIoT

  1. Создайте новое устройство в VizIoT, например «Тест GPRS термометр».

  2. Добавьте параметры:

    • tem — тип Температура, °C
    • hum — тип Влажность, %
  3. В разделе «Основные настройки» скопируйте Ключ доступа и Пароль доступа — они понадобятся в прошивке.


Прошивка Arduino

1. Создайте новый проект в Arduino IDE

2. Скопируйте пример кода:

#define TINY_GSM_MODEM_SIM800

#include <TinyGsmClient.h>
#include <ArduinoHttpClient.h>
#include <Wire.h>
#include "Adafruit_SHT31.h" // https://github.com/adafruit/Adafruit_SHT31

#define SerialMon Serial
#define SerialAT Serial1

Adafruit_SHT31 sht31 = Adafruit_SHT31();

// Настройки точки доступа
const char apn[]  = "YourAPN";
const char user[] = "";
const char pass[] = "";

// Данные VizIoT устройства
String VizIoT_Device_key  = "................";
String VizIoT_Device_pass = "....................";

// Сервер VizIoT
const char server[] = "VizIoT.com";
const int  port     = 48656;

TinyGsm modem(SerialAT);
TinyGsmClient client(modem);
HttpClient http(client, server, port);

void setup() {
  SerialMon.begin(115200);
  delay(10);

  SerialAT.begin(115200);
  delay(3000);

  SerialMon.println(F("Инициализация модема..."));
  modem.restart();

  String modemInfo = modem.getModemInfo();
  SerialMon.print(F("Модем: "));
  SerialMon.println(modemInfo);

  Serial.println("Поиск датчика SHT31-D");
  if (!sht31.begin(0x44)) {
    Serial.println("Не удаётся найти SHT31-D (проверьте подключение)");
  }
}

void loop() {
  SerialMon.print(F("Ожидание сети..."));
  if (!modem.waitForNetwork()) {
    SerialMon.println(" fail");
    delay(10000);
    return;
  }
  SerialMon.println(" OK");

  SerialMon.print(F("Подключение к точке доступа "));
  SerialMon.print(apn);
  if (!modem.gprsConnect(apn, user, pass)) {
    SerialMon.println(" неудачно");
    delay(10000);
    return;
  }
  SerialMon.println(" OK");

  SerialMon.print(F("Отправка HTTP GET запроса... "));

  int err = http.get(getResource().c_str());
  if (err != 0) {
    SerialMon.println(F("ошибка соединения"));
    delay(10000);
    return;
  }

  http.stop();
  SerialMon.println(F("Отключились от сервера"));

  modem.gprsDisconnect();
  SerialMon.println(F("GPRS отключён"));

  delay(5 * 60 * 1000); // спать 5 минут
}

String getResource() {
  String resource = String("/update?key=") + VizIoT_Device_key +
                    "&pass=" + VizIoT_Device_pass;

  float t = sht31.readTemperature();
  float h = sht31.readHumidity();

  if (!isnan(t)) {
    Serial.print("Температура °C = ");
    Serial.println(t);
    resource += String("&tem=") + t;
  } else {
    Serial.println("Ошибка чтения температуры");
  }

  if (!isnan(h)) {
    Serial.print("Влажность % = ");
    Serial.println(h);
    resource += String("&hum=") + h;
  } else {
    Serial.println("Ошибка чтения влажности");
  }

  return resource;
}

3. Установите необходимые библиотеки

4. Укажите значения переменных в прошивке

  • apn — имя точки доступа GSM
  • user — пользователь APN
  • pass — пароль
  • VizIoT_Device_key — ключ доступа
  • VizIoT_Device_pass — пароль доступа

Подключение оборудования

Подключение датчика SHT31-D

Контакт датчика Контакт Arduino
VIN 3.3V
GND GND
SCL SCL
SDA SDA

Подключение SIM800L к Arduino MEGA 2560

⚠️ Важно! Модуль SIM800L нельзя питать напрямую от Arduino — нужен внешний источник 4.0V.

Контакт SIM800L Куда подключать
VIN +4V внешний источник
GND GND источник и GND Arduino
TX RX1 Arduino
RX TX1 Arduino через делитель

Схема делителя напряжения для RX:

Arduino GND ----[10kΩ]---+
                         +---- RX SIM800L
Arduino TX ----[10kΩ]----+

Подробнее о подключении: см. статью по SIM800L на Codius.ru.


Загрузка прошивки

Подключите Arduino к компьютеру, выберите порт и загрузите скетч.


Добавление виджетов в VizIoT

  1. Создайте панель, например: «Тест панель темп. влаж.»
  2. Добавьте виджеты:

a) Температура воздуха

  • Тип: График
  • Устройство: Тест GPRS термометр
  • Параметр: tem

b) Влажность воздуха

  • Тип: График
  • Устройство: Тест GPRS термометр
  • Параметр: hum

c) Изменения температуры и влажности

  • Тип: Гистограмма изменений
  • Параметры: tem и hum

Готово!

Устройство настроено — остаётся дождаться первого подключения к серверу VizIoT. После подключения вы начнёте получать данные температуры и влажности каждые 5 минут.