Мини-кейс 1: Удалённый термометр

Пример работы. Устройство отправляет данные в сервис dweet.io.

IOT, «INTERNET OF THINGS» — ИНТЕРНЕТ ВЕЩЕЙ Это громкое словосочетание означает концепцию связи большого количества устройств (вещей) в общую сеть. Устройства общаются между собой через Интернет: передают друг другу информацию, а затем обрабатывают её. Не просто так, а принося пользу людям. Например, собирают данные о погоде со всех концов Земли, управляют офисными зданиями или сообщают пути объезда, если впереди на дороге образовалась пробка. Рой устройств в единой сети создаёт полную картину происходящего вокруг, повышает комфорт и позволяет улучшить качество жизни людей.

Соберём устройство для наблюдения за температурой через интернет. Сервис dweet.io умеет строить красивый график по принимаемым данным. Будем отправлять ему данные о температуре.

Каждую секунду сервис получает информацию от тысяч устройств. Чтобы различать устройства между собой, они должны сообщить свой уникальный ключ, по которому можно однозначно определить отправителя. Ключ нужно придумать самому. Он должен состоять только из латинских букв и цифр, без пробелов.

Для выполнения мини-кейса у вас должна быть AT прошивка на модуле и настроена плата как WIFI модуль!

После этого вы должны настроить плату как WI-FI модуль.

Что делаем?

  1. Подключите аналоговый термометр в A4. Можете подключить в другой слот и указать в TEMP_PIN другой слот.

  2. Скопируйте в Arduino IDE код ниже и поменяйте настройки.

    /*
    Подключаем необходимые библиотеки: ESP8266.h для работы с Wi-Fi модулем
    и SoftwareSerial.h для использования программного UART.
    Библиотека math.h потребуется для расчета логарифма.
    Кавычки вида <> означают, что мы используем библиотеку, встроенную в
    Arduino IDE. Кавычки вида " " — что мы используем внешнюю библиотеку.
    */
    #include "ESP8266.h"
    #include <SoftwareSerial.h>
    #include <math.h>
    
    #define WIFI_SSID "dimdimdim" // Указываем SSID и пароль Wi-Fi сети, с которой будем выходить в интернет
    #define WIFI_PASSWORD "" // Спрашиваем у препода
    #define TEMP_PIN A4 // ПИН, с которого считываем показания Troyka-модуля термистора (датчик температуры).
    
    SoftwareSerial mySerial(4, 5); // TX и RX WI-FI модуля
    ESP8266 wifi(mySerial);
    
    String dweet_name = "my_iot"; // Задаём "my_iot" для dweet.io.
    
    void setup(void) {
      Serial.begin(9600); // Запускаем аппаратный UART на скорости 9600 бод. Он потребуется для вывода информации в Serial Monitor.
      while(!wifi.joinAP(WIFI_SSID, WIFI_PASSWORD)) {
        Serial.println("Wi-Fi connection error");
      }
      Serial.println("Wi-Fi connect.");
      Serial.println("https://dweet.io/follow/" + dweet_name);
    }
    
    void loop(void) {
      float v_temp = 1023.0 / analogRead(TEMP_PIN) - 1.0;
      float temp = 1.0 / (-log(v_temp) / 3977.0 + 1.0 / 295.0) - 273.0;
      if (wifi.createTCP("www.dweet.io", 80)) { //Открываем TCP-соединение к серверу dweet.io. Если соединение установится, выполним запрос к dweet.io. Если нет — в Serial Monitor появится сообщение «create TCP error».
        // «Собираем» HTTP-запрос и внутрь вставляем значение датчика температуры.
        String data = "GET /dweet/for/" + dweet_name + "?";
        data += "temp=" + String(temp) + " HTTP/1.1\r\n";
        data += "Host: dweet.io\r\n\r\n";
        // Отправляем запрос на сервер. Закрываем TCP соединение. 
        wifi.send(data.c_str(), data.length());
        wifi.releaseTCP();
      } else {
        Serial.println("create TCP error");
      }
      delay(1000); // Задержка цикла
    }
  3. Выберите правильную плату Arduino Uno и порт. Прошейте код в плату.

  4. Перейдите по адресу, который указан в мониторе порта.

Подключаемся к Wi-Fi сети.

Если подключение пройдёт успешно, в Serial Monitor появится ссылка на страницу с графиком температуры.

В случае ошибки подключения в Serial Monitor появится сообщение «Wi-Fi connection error». В этом случае проверьте правильность написания названия точки доступа и пароля. Также попробуйте перезапустить ардуинку.

Сервис dweet.io позволяет отправлять данные не чаще 1 раза в секунду, поэтому нет смысла делать задержку между отправками меньше 1000 миллисекунд.

Доп. задание:

Добавить ещё Troyka модуль - датчик освещённости (фоторезистор), выводить в dweet.io показание с него (выводить в люксах - ищите в интернете формулы для преобразования или скачайте библиотеку для этого датчика), дополнительно к показаниям температуры.

Подсказка:

Вы должны переписать следующую строку. Добавьте в строку параметр и значение. Параметры разделяются амперсантом (&).

data += "temp=" + String(temp) + " HTTP/1.1\r\n";

Last updated