W dzisiejszym wpisie zaprezentuje bardzo prosty sposób, jak przy użyciu Arduino i usłudze smsAPI, wysyłać wiadomości sms w przypadku wykrycia ruchu. Oczywiście, możemy takie powiadomienia ustawiać dla dowolnych zdarzeń np.: wciśnięcie przycisku, zwiększenie temperatury na danym czujniku czy przy otwarciu okna lub drzwi. Dokładny opis jak podłączyć czujnik ruchu PIR HC-SR501 znajdziecie w tym wpisie.
Co nam będzie potrzebne?
- Arduino Uno
- Ethernet Shield
- Czujnik ruchu PIR HC-SR501
- Router, kabel ethernet
- Dioda led, rezystor
- Płytka prototypowa, kable połączeniowe (do testów)
- serwer z obsługą PHP (może być XAMPP)
- konto w serwisie smsAPI
Krótko o smsAPI:
Jest to usługa umożliwiająca wysyłanie smsów z powiadomieniami pod wskazany numer telefonu. Dzięki udostępnionym przez producenta bibliotekom, możliwa jest integracja z praktycznie każdym projektem. Przejrzysta dokumentacja i wsparcie techniczne sprawiają, że jest to jedno z lepszych rozwiązań dostępnych w Polsce. Konfiguracja jest bardzo prosta. Po dokonaniu rejestracji otrzymujemy klucz API, następnie pobieramy bibliotekę. Na końcu uzupełniamy plik konfiguracyjny podając numer telefonu odbiorcy oraz treść wiadomości jaka ma być wysłana. Pliki wrzucamy na nasz serwer www. Niestety smsy nie są darmowe. Koszt wysłania smsa to około 7 groszy. Na szczęście w celach testowych możemy wysłać około 50 smsów za darmo. Jeżeli usługa nam się spodoba, możemy doładować sobie konto na zasadzie pre-paid.
Schemat podłączenia:
Zasada działania jest prosta:
Sketch Arduino:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#include <Ethernet.h>; #include <SPI.h>; byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01 }; EthernetClient client; int czujnik =7; int val = 0; void setup() { pinMode(10, OUTPUT); pinMode(7, INPUT); Serial.begin(9600); if (Ethernet.begin(mac) == 0) { Serial.println("Failed to configure Ethernet using DHCP"); } } void loop(){ digitalRead(czujnik); val=digitalRead(czujnik); Serial.println(val); if (digitalRead(czujnik)==1){ digitalWrite(10, HIGH); } else { digitalWrite(10, LOW); } if(val>0){ if (client.connect("www.xxx.xx",80)) { //adres serwera client.println("GET /nazwapliku.php HTTP/1.1"); //nazwa pliku client.println("Host: www.xxx.xx"); // SERVER ADDRESS HERE TOO client.println("Connection: close"); } if (client.connected()) { client.stop(); // DISCONNECT FROM THE SERVER } } else{ Serial.println("brak danych do wyslania"); delay(300); } } |
Skrypt PHP wysyłający sms:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php require_once 'smsapi/Autoload.php'; $client = new \SMSApi\Client('login/email'); $client->setPasswordHash('hasłomd5'); $smsapi = new \SMSApi\Api\SmsFactory(); $smsapi->setClient($client); try { $actionSend = $smsapi->actionSend(); $actionSend->setTo('numer telefonu na ktory ma zostac wyslana wiadomosc'); $actionSend->setText('tekst wiadomosc'); $actionSend->setSender('INFOSMS'); //Pole nadawcy lub typ wiadomość 'ECO', '2Way' $response = $actionSend->execute(); foreach( $response->getList() as $status ) { echo $status->getNumber() . ' ' . $status->getPoints() . ' ' . $status->getStatus(); } } catch( \SMSApi\Exception\SmsapiException $e ) { echo 'ERROR: ' . $e->getMessage(); } ?> |
Krok po kroku:
- Rejestrujemy się w serwisie smsAPI, pobieramy biblioteki ze strony producenta
- Po rejestracji zapisujemy nasze hasło zapisane w MD5 – będzie potrzebne do pliku konfiguracyjnego
- Rozpakowujemy i wrzucamy pobraną bibliotekę na nasz serwer
- Kopiujemy skrypt PHP wysyłający sms oraz wpisujemy poprawne dane (login, hasło md5, numer telefonu, tekst wiadomość)
- Zapisujemy plik z rozszerzeniem *.php i wrzucamy na nasz serwer
- Budujemy układ na płytce prototypowej
- Sprawdzamy połączenie Arduino z internetem, testujemy układ
- Wrzucamy sketch, sprawdzamy poprawność ścieżek serwera
- Gotowe!