Статьи

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

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

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

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

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

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

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

iot_notification

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

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

Проект Arduino MKR1000 PIR

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

arduino_notification_firebase-1024x576

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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, то мы обнаружили движение и можем отправить уведомление.

Как отправить #IoT Push-уведомления? Следуйте этому руководству, чтобы узнать, как интегрировать # arduino …

MKR1000 WiFi соединение

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#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 на смартфон.

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

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

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

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

1
Host: fcm.googleapis.com

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

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

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

1
Content-Type: application/json

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

1
POST /fcm/send HTTP/1.1

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

1
2
3
4
5
6
7
{
   "to":"your_phone_key",
   "notification": {
     "body": "test message",
    "title" : "Title"
  }
}

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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.

В конце этого поста, надеюсь, вы получили новые знания об отправке push-уведомлений IoT.

Ссылка: IoT Push-уведомления: Arduino — Firebase — Android от нашего партнера по JCG Франческо Аццолы в блоге Surviving с Android .