В этой статье познакомимся с одним из самых интересных сайтов, которые смогут облегчить жизнь начинающему iot разработчику.
Сайт ifttt.com
IFTTT – If That Than This. Сайт, который по определенному событию, может что-то сделать. Отправить сообщение на Email, в соцсеть, сохранить определенный файл или сделать пост вам на странице и это очень малая часть всех способностей данных "костылей" . Остановимся на соцсетях, мы можем отправлять сообщения, делать посты и т.д. в Twitter или Facebook, но в данной статье рассмотрим соцсеть Twitter. Разобраться самостоятельно насчет Email или Facebook можно будет самостоятельно после нашего опыта.
Мы попробуем передать значение света нашей комнаты в Twitter, чтобы можно было получать данные находясь на другом конце света, не выходя из любимого приложения.
Итак, для начала рассмотрим сам сайт ifttt.com, в начале вам нужно будет создать свой аккаунт.
Заходим на ifttt.com. И нажимаем на кнопку "My Applets"
Нажимаем кнопку "New Applet"
Нажимаем кнопку "+this"
Ищем в поисковике "Webhooks"
Выбираем действие "Receive a web request"
В "Event Name" пишем название "Message" (это слово будет в нашем коде) и создаем триггер.
Теперь мы создали условие. Компонент Webhooks принимает http запросы от Ардуино и после принятие передает информацию другому компоненту ifttt. Этот другой компонент может быть любым, в зависимости от возможностей ресурса ifttt. В нашемы случае это будет Twitter.
Нажимаем на "+that". В поисковой системе ищем Twitter и выбираем его.
Выбираем функцию "sent a direct message to yourself"
В сообщении пишем "Свет в (любой вашем месте, где вы поставите прибор) =". А дальше нажимаем на кнопку "Add ingredient", в ней мы можем добавить в сообщение данные, которые пришли с webhooks, а значит нашу температуру. Нажимаем на "value 1" и создаем наш "костыль"
В webhooks есть специальный ключ, специальный адресс, на который вы отправляете данные. Нужно зайти во вкладку "Webhooks"
Жмем на кнопку "Documentation"
И копируем ключ, его надо будет вставить в основной код.
Если вы закончили с сайтом, то пара преступить к созданию устройства.
Комплектующие
Для нашего проекта нам понадобятся:
- Arduino Uno
- Тактовая кнопка
- Фоторезистор
- ESP 8266
- Два резистора на 1кОм
Я буду работать с уже готовыми модулями. Тройка-слот-шилд, тройка-кнопка, тройка-фоторезистор и более удобный esp8266 модуль.
Схема соединения
Соединяем все вместе. Если вы не знаете, как подключить те или иные модули, то посмотрите прошлые статьи.
Код для проекта
Напишем код, по которому при нажатии кнопки, отправляется запрос на сайт ifttt, который с нашими данными напишет нам сообщение в Twitter, с нашими показателями на датчике. Все действия будут информироваться в Serial соединении. В случае, если модуль не подключился к wi-fi или не удалось образовать TCP - соединение, то вас проинформируют в Serial - порту.
Ссылка на библиотеку и сам код ниже.
#include "ESP8266.h" // для работы с esp8266 #include <SoftwareSerial.h> // чтобы добавить больше пинов UART #include <math.h> // чтобы высчитать логарифм #define SSID "Arduino" // имя вашего wi-fi #define PASSWORD "12345678" // пароль вашего wi-fi #define LIGHT_PIN A0 // пин подключения фоторезистора SoftwareSerial mySerial(4, 5); // пины подключения по UART ESP8266 wifi(mySerial); // говорим esp8266, что она будет работать через пины UART int reading = 9; // пин, который считывает значение с кнопки ` boolean currentButton = 0 ; // настоящее значение кнопки boolean but = 0; // прошлое значение кнопки String maker_ID = "kYVzddd-4SGWuUGQzhxtAPwwBbcssddZ8lJfaYss8ffaAnib7mIk4eGX8Z"; // ваш ключ от сайта dweet.io void setup() { Serial.begin(9600); // открываем serial соединение if (wifi.joinAP(SSID, PASSWORD)) { // если мы подключились к нашей сети Serial.println("Press the button"); //пишем в мониторе порта, чтобы нажали на кнопку } else { Serial.println("Wi-Fi connection error"); //в случае, если мы не подключимся к сети, нам выдадут ошибку } } float Light () // функция, которая возвращает значение света в люксах { float r_light = 10.0/(1023.0/analogRead(LIGHT_PIN) - 1.0); float light = 10.0*pow(14.0/r_light, 1.6); return (light); } boolean Button( boolean got ) // функция, которая принимает предыдущее значение нажатия кнопки и отправляет текущие значение { boolean current = digitalRead(reading); if( !got == current) { delay(10); current = digitalRead(reading); } return(current); } void loop() { currentButton = Button(but);// находм состояние кнопки if (currentButton == 1 && but ==0) // если кнопка была нажата и отжата { String value1 = String(Light ());// создаем строковую переменную нашего света sendTwitter (value1);// отправляем ее Serial.println("Data sent"); //пишим. что данные отправлены } but = currentButton; //запоминаем текущее состояние кнопки } void sendTwitter( String value1) { if (wifi.createTCP("maker.ifttt.com", 80)) { // если нам удалось создать TCP соединение String request = "GET /trigger/Message/with/key/" + maker_ID + "?value1=" + value1 + " HTTP/1.1\r\n"; // создаем переменную request в виде строки (заполняем GET-запрос) request += "Host: maker.ifttt.com\r\n\r\n"; // закрываем GET-запрос в строке wifi.send(request.c_str(), request.length()); // отправляем данные в массиве (строка с-стиля) и общее количество байтов wifi.releaseTCP(); // закрываем TCP соеденение } else { Serial.println("create tcp error"); // в случае, если мы не создали TCP соеденение, нам выдадут ошибку } }
Финальный результат
И теперь, если вы все сделали правильно, при подключении питания и нажатия на кнопку, на ваш аккаунт в Twitter должно прийти сообщение, которое проинформирует вас о световой характеристике вашей комнаты.
Если у вас получилось, то попробуйте поменять фоторезистор на термистор или добавить больше переменных, характеризующих вашу комнату, с помощью добавочных данных value 2 и value 3. Или изменить соцсеть на другую, убрать кнопку и организовать отправку информации каждые 3 часа, с помощью модуля часов реального времени. В общем лишь дополнительная практика закрепит ваш успех.
В следующий раз поговорим о создании бота в Telegram. Попробуем управлять нашим домом через команды, отправленные нашему боту. Удачи вам и становитесь умнее вместе с вашим домом!