Статьи

Push-уведомления IoT: Arduino, Firebase и Android

В этом руководстве описывается, как реализовать push-уведомления IoT. Используя push-уведомления IoT, мы можем отправлять уведомления на другие устройства. В этом случае мы хотим отправлять push-уведомления IoT со смарт-объекта (например, Arduino MKR1000) на мобильный смартфон (например, смартфон Android). Этот проект объединяет различные экосистемы (IoT и Android) и может иметь несколько реализаций. Например, мы можем отправить push-уведомление на наш смартфон при появлении предупреждения:

  • Утечка газа.
  • Обнаружение движения.
  • Более высокая или более низкая температура.
  • Общий сбой систем.

В качестве примера, чтобы показать, как использовать уведомления IoT, мы будем использовать датчик обнаружения движения. Другими словами, есть Arduino MKR1000, подключенный к датчику (ИК-датчик). Когда датчик запускает событие, MKR1000 выполняет вызов к серверу Firebase с использованием API Firebase. Смарт-объект отправляет push-уведомление IoT на смартфон Android. Мы можем использовать то же самое для отправки уведомлений на другие устройства, такие как iOS и так далее.

Идея, стоящая за этим проектом, показана ниже:

Как видите, этот проект использует API Firebase по-другому, смешивая разные миры!

В прошлой статье мы описали, как использовать API Firebase для создания push-уведомлений , и в этой статье мы хотим расширить его и интегрировать с Arduino.

Более того, мы уже видели в последнем посте, как создать приложение для Android, которое обрабатывает push-уведомления, и как настроить его в консоли Firebase. Если вы новичок в Firebase, я предлагаю прочитать предыдущий пост, чтобы у вас было четкое представление о том, как все работает.

Этот проект использует приложение, которое мы разработали в предыдущем посте. Вы можете скачать его, если хотите протестировать проект.

Проект Arduino MKR1000 PIR

Первым шагом является подключение Arduino MKR1000 к ИК-датчику. На рисунке ниже показано, как подключить датчик к MKR1000.

Схема очень простая. Чтобы узнать, обнаружил ли ИК-датчик движение, нужно проверить, равен ли сигнал 1. Эскиз очень прост:

int inputPin = 2;
int pirState = LOW;

void setup() {
    pinMode(inputPin, INPUT);
    Serial.begin(9600);
}

void loop() {
    int val = digitalRead(inputPin);
    if (val == HIGH) {
        if (pirState == LOW) {
            Serial.println("Motion detected");
            pirState = HIGH;
            // Motion detected
        }
    }
  else {
    if (pirState == HIGH) {
        Serial.println("Motion ended!");
        pirState = LOW;
        // Motion ended
        }
    }
    delay(5000);
}

Мы должны прочитать сигнал на входном контакте и проверить, равен ли он 1. Если он равен 1, то мы обнаружили движение и можем отправить уведомление.

MKR1000 Wi-Fi соединение

Перед отправкой уведомления мы должны подключить Arduino MKR1000 к Интернету через Wi-Fi. Мы можем немного изменить приведенный выше код и добавить соединение Wi-Fi:

#include <SPI.h>
#include <WiFi101.h>

int inputPin = 2;
int pirState = LOW;

char ssid[] = "Vodafone-xxxxx"; // your network SSID (name)
char pass[] = "yyyyyyyy"; // your network password
int status = WL_IDLE_STATUS;

WiFiClient client;
void setup() {
    pinMode(inputPin, INPUT);
    Serial.begin(9600);

    // attempt to connect to Wifi network:
    while ( status != WL_CONNECTED) {
        Serial.print("Attempting to connect to WPA SSID: ");
        Serial.println(ssid);
        // Connect to WPA/WPA2 network:
        status = WiFi.begin(ssid, pass);
        // wait 10 seconds for connection:
        delay(10000);
    }
    // you're connected now, so print out the data:
    Serial.println("You're connected to the network");
}

Все сделано! Теперь все готово, и мы можем сосредоточить наше внимание на самой интересной части: отправка push-уведомлений IoT на смартфон.

Отправка IoT Push-уведомлений

Чтобы отправить push-уведомление, мы используем Firebase API. Мы предполагаем, что вы уже создали проект в консоли Firebase, если нет, вернитесь к предыдущей статье и прочитайте, как настроить проект Firebase .
Чтобы отправить push-уведомление с помощью Firebase, необходимо:

  1. Аутентифицировать нашего клиента.
  2. Создайте тело сообщения в формате JSON.
  3. Отправьте сообщение на смартфон.

Необходимо отправить некоторые параметры заголовка HTTP и сообщение JSON. Первым делом нужно установить хост Firebase:

Host: fcm.googleapis.com

затем для аутентификации нашего клиента мы используем секретный ключ, который вы получаете из консоли Firebase:

Authorization: key=AIzaSyC1mHfa_G89CDoNoq2zWhh1iL9---------

тогда мы должны установить тип контента:

Content-Type: application/json

и, наконец, мы указываем метод HTTP и сервис, который мы хотим вызвать:

POST /fcm/send HTTP/1.1

Тело в формате JSON и очень простое:

{
    "to":"your_phone_key",
    "notification": {
        "body": "test message",
        "title" : "Title"
    }
}

Это все!! Мы должны сделать этот запрос, используя HTTP-библиотеку Arduino:

void sendDataToFirebase() {
    String data = "{" ;
    data = data + "\"to\": \"your_smartphone_id\"," ;
    data = data + "\"notification\": {" ;
    data = data + "\"body\": \"Motion detected\"," ;
    data = data + "\"title\" : \"Alarm\" " ;
    data = data + "} }" ;

    Serial.println("Send data...");
    if (client.connect(fcmServer, 80)) {
        Serial.println("Connected to the server..");
        client.println("POST /fcm/send HTTP/1.1");
        client.println("Authorization: key=auth_key");
        client.println("Content-Type: application/json");
        client.println("Host: fcm.googleapis.com");
        client.print("Content-Length: ");
        client.println(data.length());
        client.print("\n");
        client.print(data);
    }
    Serial.println("Data sent...Reading response..");
    while (client.available()) {
        char c = client.read();
        Serial.print(c);
    }
    Serial.println("Finished!");
    client.flush();
    client.stop();
}

Так что отправлять push-уведомления IoT очень просто, и мы интегрировали две разные экосистемы. Что вы будете строить, используя push-уведомления? Комментарий ниже и дайте мне знать ваш опыт. Надеемся, что в конце этого поста вы получили новые знания об отправке push-уведомлений IoT.