В этом примере создадим устройство, которое будет передавать показатели температуры и влажности со склада на сервер VizIoT каждые 5 минут. Для связи с интернетом используется GSM-модуль SIM800L, а для измерений — датчик SHT31-D.
Создайте новое устройство в VizIoT, например «Тест GPRS термометр».
Добавьте параметры:
В разделе «Основные настройки» скопируйте Ключ доступа и Пароль доступа — они понадобятся в прошивке.
#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;
}
apn — имя точки доступа GSMuser — пользователь APNpass — парольVizIoT_Device_key — ключ доступаVizIoT_Device_pass — пароль доступа| Контакт датчика | Контакт Arduino |
|---|---|
| VIN | 3.3V |
| GND | GND |
| SCL | SCL |
| SDA | SDA |
⚠️ Важно! Модуль SIM800L нельзя питать напрямую от Arduino — нужен внешний источник 4.0V.
| Контакт SIM800L | Куда подключать |
|---|---|
| VIN | +4V внешний источник |
| GND | GND источник и GND Arduino |
| TX | RX1 Arduino |
| RX | TX1 Arduino через делитель |
Arduino GND ----[10kΩ]---+
+---- RX SIM800L
Arduino TX ----[10kΩ]----+
Подробнее о подключении: см. статью по SIM800L на Codius.ru.
Подключите Arduino к компьютеру, выберите порт и загрузите скетч.
temhumtem и humУстройство настроено — остаётся дождаться первого подключения к серверу VizIoT. После подключения вы начнёте получать данные температуры и влажности каждые 5 минут.