Связываем Ардуино проекты умного дома с интернетом для передачи данных полученных от разных источников на расстоянии.
Выход в интернет
Чтобы связать наши проекты с интернетом можно использовать 10-ки способов, но мы пока остановимся на модуле, о котором я еще говорил еще в самой первой статье, ESP 8266. Arduno UNO не может работать с интернетом. Обычная плата без дополнений и модулей не может передавать информацию на расстоянии.
Но с помощью UART интерфейса на Arduino мы можем получать информацию, обрабатывать ее и отправлять данные обратно. С помощью него, UNO может работать с Bluetooth и Wi-fi модулями, которые уже и дают нашей системе дополнительные функции.
Давайте поговорим об интернете поподробнее. Я думаю, вы знаете, что интернет — это не магия и не просто радиоволны, а гигантская сеть между тысячами различных устройств с помощью беспроводной связи.
Сайты, с которыми мы каждый день сталкиваемся — это информация, переданная нам с сервера. Весь тот текст, картинки, анимация - все это хранится на сервере, пока клиент, мы, не захочет, чтобы ему передали эту информацию.
Но это все не будет работать без связи нашей платы с сайтами и приложениями. Есть два решения, подключится к другому сайту (серверу), который будет обрабатывать информацию полученную либо от самой платы, либо от пользователя, чтобы управлять приборами на расстоянии или создать свой сервер, где будет лежать лично наш написанный сайт. Мы все это попробуем сделать в будущем.
Передача данных от Ардуино
Сначала мы заставим нашу ардуину передавать данные на отдельный сайт, который будет изображать данные, полученные с датчиков ардуино. Для этого прекрасно подойдет сайт для интернет вещей - dweet.io
Попробуем на него передавать данные изменения температуры нашей комнаты.
Можно обойтись без создания собственного ключа, и в коде (где нужно вставить ключ), можно записать все что угодно и сайт все равно вам выведет на экран график изменения отправленных данных по времени. Но для того, чтобы в дальнейшем создать сеть онлайн устройств, придется более серьезно отнестись к данному сайту.
На главной странице можно посмотреть возможные варианты работы данного сайта
Также создать свой аккаунт и сеть ключей для разных устройств, чтобы вы могли не беспокоится за безопасность данных и могли из любого устройства узнать, что происходит в вашем доме.
Схема подключения
Разберем электрическую схему подключения esp 8266. Нам потребуется только пины Rx, Tx, Gnd и Vcc. Данный модуль питается от 3,3 вольт.
И общую электрическую схему, в которой нам пригодится ардуино, esp и термистор.
Код проекта
Итак, приступим наконец-то к проекту. Основная часть нашего проекта будет в коде. Для библиотеки по использованию нашего модуля предусмотрено пара новых функций (ссылку на библиотеку можно найти в первой статье):
- ESP8266 wifi(Serial) - Подключаем esp8266 через Serial соединение.
- wifi.joinAP(a,b); - Подключение к wifi, где а - это название точки доступа, а b - пароль к этой точки доступа.
- wifi.createTCP(a,b) - Открытие TCP соединения, где "a" - DNC сайта (www.dweet.io), а "b" - сетевой порт (порт 80).
- wifi.send(a,b) - отправляем данные, где "a" - данные в массиве (строка с-стиля), а "b" - общее количество отправленных байтов.
- wifi.releaseTCP() - Закрытие TCP соединения.
#include "ESP8266.h" // для работы с esp8266 #include <SoftwareSerial.h> // чтобы добавить больше пинов UART #include <math.h> // чтобы высчитать логарифм #define SSID "Arduino" // имя вашего wi-fi #define PASSWORD "12345678" //пароль вашего wi-fi #define Thermistor_PIN A0 // пин подключения термистора SoftwareSerial mySerial(2, 3); // пины подключения по UART ESP8266 wifi(mySerial); // говорим esp8266, что она будет работать через пины UART String name = "MyEyse"; // ваш ключ от сайта dweet.io void setup() { Serial.begin(9600); // открываем serial соединение if (wifi.joinAP(SSID, PASSWORD)) { // если мы подключились к нашей сети Serial.println("https://dweet.io/follow/" + name); // пишем в мониторе порта адресс сайта } else { Serial.println("Wi-Fi connection error"); // в случае, если мы не подключимся к сети, нам выдадут ошибку } } void loop() { float volt_temp = 1023.0 / analogRead(Thermistor_PIN) - 1.0; // высчитываем температуру float temperatur = 1.0 / ( -log(volt_temp) / 3977.0 + 1.0 / 295.0 ) - 273.0; if (wifi.createTCP("www.dweet.io", 80)) { // если нам удалось создать TCP соединение String data = "GET /dweet/for/" + name + "?"; // создаем переменную data в виде строки (заполняем GET-запрос) data += "temperatur_C=" + String(temperatur) + " HTTP/1.1\r\n"; data += "Host: dweet.io\r\n\r\n"; // закрываем GET-запрос в строке wifi.send(data.c_str(), data.length()); // отправляем данные в массиве (строка с-стиля) и общее количество байтов wifi.releaseTCP(); // закрываем TCP соеденение } else { Serial.println("create TCP error"); // в случае, если мы не создали TCP соеденение, нам выдадут ошибку } delay(1000); // ждем секунду (dweet.io обрабатывает данные 1 секунду, нет смысла отправлять данные раньше) }
Итоговый результат
Если код вы записали правильно, с правильным паролем и именем от вашего wifi, который исправно работает, то в монитор порта будет отправлена ссылка, которую необходимо вставить в адресную строку браузера. Изображение должно выглядеть так
А теперь вы можете подключить ардуино к источнику питания и убрать провод подключения ардуино - компьютер. И узнавать температуру в вашем доме, находясь на другом конце города. Все зависит только от вашей фантазии.
В следующий раз попробуем разобрать еще один проект, который поможет больше раскрыть все возможности интернет модуля. В дальнейшем попробуем создать свой сервер и сайт, а также поговорим о соединении с соцсетями. Увеличить возможности сделать ваш дом умным.