Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

ESP8266:Примеры/Отображение данных на freeboard.io, поступающих от чипа ESP8266 и датчика DHT11/DHT22

Материал из Онлайн справочника
Перейти к: навигация, поиск

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Отображение данных на freeboard.io, поступающих от чипа ESP8266 и датчика DHT11/DHT22

В этом примере демонстрируется отображение данных на freeboard.io, поступающих от чипа ESP8266 и датчика DHT11/DHT22.

Последовательность действий

Выполнение данного примера разобьем на два этапа:

Этап №1: Отправка данных в сервис dweet.io

  • Установить аддон ESP8266 для IDE Arduino;
  • Установить библиотеку DHT;
  • Собрать схему и подключить конвертер USB FTDI к компьютеру, но не подключайте пока перемычку идущую на вывод VCC модуля ESP-01;
  • Вставить код программы в Arduino IDE;
  • Выбрать в меню Иструменты->Порт: соответствующий COM-порт;
  • Выбрать в меню "Инструменты->Плата" плату "Generic ESP8266 Module";
  • Нажать кнопку "Загрузка";
  • Подключить перемычку идущую на вывод VCC модуля ESP-01. Т.к. вывод GPIO0 подключен к земле, модуль при включении перейдет в режим загрузки;
  • Дождаться загрузки;
  • Открываем браузер и переходим по адресу https://dweet.io/follow/TESTID, где вместо TESTID укажите свой уникальный идентификатор, который вы задали в коде. Если данные еще не поступают, то страница будет пустой. Как только ваша плата успешно отправит данные, они будут отображаться на странице и обновляться каждые 10 секунд;
  • В мониторе последовательного порта будет отображаться ответ сервера dweet.io;
Dweet io - Share your thing- like it ain't no thang .png
  • Примечание: Если вы перезагрузили модуль и обнаружили в мониторе порта иероглифы, проверьте отключили ли вы перемычку идущую от GPIO0 к земле(желательно подключить GPIO0 через 10кОм резистор к 3.3В). Отключите перемычку и снова перезагрузите модуль.

Этап №2: Отображение данных на freeboard.io

  • Создайте аккаунт на freeboard.io;
  • Заходим в аккаунт и создаем новую приборную панель с помощью кнопки "Create New", предварительно указав название в текстовом поле:
Freeboardio esp01 1.png
  • После нажатия кнопки "Create New" нас перенаправит на страницу редактирования приборной панели:
Freeboardio esp01 2.png
  • Теперь зададим источник данных для приборной панели, для чего в разделе "DATASOURCES" кликнем по ссылке "ADD":
Freeboardio esp01 3.png
  • В всплывающем окне, в раскрывающемся списке укажем тип источника "Dweet.io":
Freeboardio esp01 4.png
  • В всплывающем окне необходимо заполнить поля:
    • NAME - указываем любое название(например: esp8266)
    • THING NAME - здесь указываем тот идентификатор/имя, которое вы указали в коде вместо TESTID

Теперь кликаем по кнопке SAVE.

Freeboardio esp01 5.png
  • У вас должен появится в приборной панели в разделе "DATASOURCES" один источник данных:
Freeboardio esp01 6.png
  • Теперь добавим приборы на нашу приборную панель. Для этого кликаем по "+ ADD PANE":
Freeboardio esp01 7.png
  • У вас должна появится пустая область для виджетов:
Freeboardio esp01 8.png
  • Чтобы добавить виджет измерительного прибора, кликните по кнопке "+":
Freeboardio esp01 9.png
  • В всплывающем окне, в раскрывающемся списке выбираем "Gauge"(виджет измерительного прибора):
Freeboardio esp01 10.png
  • В всплывающем окне необходимо заполнить поля:
  • TITLE - заголовок виджета(например: температура);
  • VALUE - здесь необходимо указать источник данных(смотрите ниже);
  • UNITS - единица измерения(например: C или %);
  • MINIMUM - укажите минимальное значение, которое вы будете отображать;
  • MAXIMUM - укажите максимально значение, которое вы будете отображать;

Справа от поля "VALUE", кликаем по "+ DATASOURCE" и выбираем название источника данных, которое вы указали при его создании:

Freeboardio esp01 11.png

После этого выбираем, что именно мы будем отображать:

Freeboardio esp01 12.png

Допустим мы будем отображать температуру, тогда у вас должно получится примерно так:

Freeboardio esp01 13.png

Кликаем по кнопке SAVE.

  • В результате у вас должен появится на панели виджет измерительного прибора с получаемыми значениями(при условии что вы отправляете на сервер данные):
Freeboardio esp01 14.png
  • Аналогичным образом вы можете добавить в панель виджет для измерительного прибора влажности:
Freeboardio esp01 15.png
  • Действуя по аналогии, но выбрав вместо "Gauge" виджет "Sparkline", вы сможете строить графики для отображения истории изменения значений:
Freeboardio esp01 16.png

Необходимые компоненты

Схема

Esp-01 dht11 rest api 1.png


Pinout ESP8266.jpg

Код

  1. #include <ESP8266WiFi.h>                                        // Подключаем библиотеку ESP8266WiFi
  2. #include "DHT.h"                                                // Подключаем библиотеку DHT
  3.  
  4. #define DHTPIN 2                                                // Номер вывода GPIO, в данном случае используем GPIO2
  5. #define DHTTYPE DHT11                                           // Тип используемого датчика
  6.  
  7. const char* ssid     = "имя вашей точки доступа";               // Укажите здесь в кавычках название вашей точки доступа
  8. const char* password = "пароль вашей точки доступа";            // Укажите здесь в кавычках пароль вашей точки доступа
  9.  
  10. const char* host     = "dweet.io";                              // Адрес сервера на который будем отправлять данные
  11.  
  12. DHT dht(DHTPIN, DHTTYPE);                                       // Создаем объект датчика
  13.  
  14. void setup() {
  15.   Serial.begin(115200);                                         // Инициализируем последовательный порт
  16.   delay(10);
  17.  
  18.   dht.begin();                                                  // Инициализируем датчик
  19.  
  20.   // Подключаемся к точке доступа WiFi
  21.   Serial.println();
  22.   Serial.println();
  23.   Serial.print("Connecting to ");
  24.   Serial.println(ssid);
  25.   WiFi.begin(ssid, password);
  26.   while (WiFi.status() != WL_CONNECTED) {
  27.     delay(500);
  28.     Serial.print(".");
  29.   }
  30.  
  31.   Serial.println("");
  32.   Serial.println("WiFi connected");
  33.   Serial.println("IP address: ");
  34.   Serial.println(WiFi.localIP());
  35. }
  36.  
  37. void loop() {
  38.   delay(10000);                                                 // Задержка между повторными измерениями 10 секунд
  39.  
  40.   Serial.print("Connecting to ");
  41.   Serial.println(host);
  42.  
  43.   // Создаем TCP соединение при помощи класса WiFiClient
  44.   WiFiClient client;
  45.   const int httpPort = 80;
  46.   if (!client.connect(host, httpPort)) {
  47.     Serial.println("connection failed");
  48.     return;
  49.   }
  50.  
  51.   float h = dht.readHumidity();                                 // Считываем данные влажности
  52.   float t = dht.readTemperature();                              // Считываем данные температуры
  53.  
  54.   // Отправляем запрос на сервер
  55.   // Внимание!!!
  56.   // Здесь, вместо TESTID, укажите любой идентификатор, желательно уникальный(например: bestcat11 или batman12018 ;))
  57.   client.print(String("GET /dweet/for/TESTID?temperature=") + String(t) + "&humidity=" + String(h) + " HTTP/1.1\r\n" +
  58.                "Host: " + host + "\r\n" +
  59.                "Connection: close\r\n\r\n");
  60.   delay(10);
  61.  
  62.   // Получаем все строки ответа сервера и отправляем их в последовательный порт
  63.   while (client.available()) {
  64.     String line = client.readStringUntil('\r');
  65.     Serial.print(line);
  66.   }
  67.  
  68.   Serial.println();
  69.   Serial.println("closing connection");
  70. }

См.также

Внешние ссылки