Рассмотрим пример который отправляет температуру и влажность на складе раз в 5 минут.
Что нам потребуется:
Добавление и настройка устройства:
Прошивка Arduino:
#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 // Использовать физический Serial порт для Mega, Leonardo, Micro #define SerialAT Serial1 // или программный Serial для Uno, Nano //#include//SoftwareSerial SerialAT(2, 3); // RX, TX Adafruit_SHT31 sht31 = Adafruit_SHT31(); // Настройки точки доступа GPRS const char apn[] = "YourAPN"; const char user[] = ""; const char pass[] = ""; //Ключ и пароль доступа VizIoT Устройства (можно узнать в настройках устройства) String VizIoT_Device_key = "................"; String VizIoT_Device_pass = "...................."; //Адрес и Порт сервера const char server[] = "VizIoT.com"; const int port = 48656; TinyGsm modem(SerialAT); TinyGsmClient client(modem); HttpClient http(client, server, port); void setup() { // Установите скорость передачи для Serial Monitor SerialMon.begin(115200); delay(10); // Установите скорость передачи для GSM module 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)) { // укажите 0x45 для альтернативного i2c адреса датчика 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 отключен")); //Спать 5 минут delay(5 * 60 * 1000); } 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("Hum. % = "); Serial.println(h); resource += String("&hum=") + h; } else { Serial.println("Ошибка при чтении влажности"); } return resource; }
Arduino GND-----[10Ком]---+ +--------RX SIM800L Arduino TX------[10Ком]---+Подробнее можно прочитать здесь.
Добавления виджетов:
Теперь вы все настроили и осталось дождаться подключения вашего устройства на сервер.