W dzisiejszym wpisie zaprezentuje łatwy sposób jak połączyć Arduino i Mysql aby zwiększyć jego możliwości. Pokażę jak wrzucić odczytane dane do bazy MySQL a następnie wyświetlić je w przejrzystej i responsywnej stronie www. Jako przykład posłuży nam czujnik ruchu PIR HC-SR501. Będziemy wysyłać na serwer informację o wykrytym ruchu, lecz w zależności od potrzeb można wysyłać różne dane np: pomiary temperatury, użycie kart RFid czy naciśnięcie przycisku podłączonego do arduino. Aby wysyłać dane na zewnętrzny serwer niezbędne będą następujące elementy:
- Arduino Uno
- Ethernet Shield
- Czujnik ruchu PIR HC-SR501
- Router, kabel ethernet
- Dioda led, rezystor
- Płytka prototypowa, kable połączeniowe
- serwer z obsługą PHP i MySQL
Problem można rozwiązać na kilka sposobów. Pierwszy sposób – Arduino łączy się bezpośrednio z bazą danych MySQL i wysyła dane do odpowiedniej tabeli. Drugi sposób polega na tym, że Arduino uruchamia wcześniej przygotowany skrypt PHP i przesyła dane w zmiennej $POST. Nie jestem ekspertem od bezpieczeństwa i nie wiem która metoda jest bezpieczniejsza. Wydaje mi się, że bezpieczniej jest uruchomić zdalnie skrypt PHP (drugi sposób), niż przesyłać dane do serwera za każdym żądaniem wrzucenia danych do tabeli.
![Opis procesu](https://homeguard24.pl/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif)
Opis procesu:
- Arduino monitoruje stan pinu do którego jest podpięty czujnik ruchu, czujnik działa cyfrowo więc wysyła stan 0 lub 1.
- Jeżeli został wykryty ruch, na pinie 6 pojawia się stan wysoki czyli „1”. Jest to warunek aby nawiązać połączenie z serwerem.
- W przypadku gdy na pinie 6 jest stan niski – nie łączymy się z serwerem. Dzięki temu ograniczamy pasmo i ilość wysłanych danych.
- Arduino po nawiązaniu połączenia z serwerem uruchamia skrypt PHP i przekazuje zmienną informującą o wykryciu ruchu.
- Skrypt pobiera zmienną i zapisuje do bazy. Dodatkowo w bazie danych MySQL została użyta funkcja CURRENT_TIMESTAMP, która automatycznie dopisuje datę i godzinę pomiaru.
- Odczekujemy kilka sekund aby nie wpisywać tego samego wykrycia do bazy.
Szkic Arduino: (POBIERZ)
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
#include <Ethernet.h> #include <SPI.h> byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01 }; EthernetClient client; int czujnik =6; int val = 0; String conf = "tak"; String data; void setup() { pinMode(6, INPUT); pinMode(7, OUTPUT); Serial.begin(9600); if (Ethernet.begin(mac) == 0) { Serial.println("Failed to configure Ethernet using DHCP"); } data = ""; } void loop(){ digitalRead(czujnik); val=digitalRead(czujnik); Serial.println(val); if (digitalRead(czujnik)==1) { digitalWrite(7, HIGH); } else { digitalWrite(7, LOW); } data = "ruch1"+ conf; if(val>0){ if (client.connect("www.xxxxx.xxx",80)) { // REPLACE WITH YOUR SERVER ADDRESS client.println("GET add2.php HTTP/1.1"); client.println("Host: xxx.xxx.xxx"); // SERVER ADDRESS HERE TOO client.println("Content-Type: application/x-www-form-urlencoded"); client.print("Content-Length: "); client.println(data.length()); client.println(); client.print(data); } if (client.connected()) { client.stop(); // DISCONNECT FROM THE SERVER } delay(3000); // WAIT FIVE MINUTES BEFORE SENDING AGAIN } else{ Serial.println("brak danych do wyslania"); delay(300); } } |
Schemat układu:
![układ](https://homeguard24.pl/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif)
Jak widać schemat jest bardzo prosty. Dioda led została umieszczona tylko w celach diagnostycznych, aby mieć pewność że czujnik działa prawidłowo. Do układu ethernet shield został podpięty kabel ethernet. Jest to niezbędne aby Arduino otrzymało komunikację z internetem.
Musimy utworzyć bazę danych i tabelę która będzie przechowywać pomiary. Polecam do tego użycie narzędzia phpMyAdmin i opcję importu. Plik z gotową bazą do importu można pobrać stąd.
Kolejnym krokiem jest wrzucenie na serwer skryptów PHP, które umożliwią zapisanie danych do bazy MySQL i wyświetlenie ich w czytelnej formie. Gotowy skrypt można pobrać tutaj.
Następnym krokiem jest uzupełnienie danych w pliku connect2.php. Musimy podać dane naszego serwera takie jak adres, nazwa użytkownika, hasło oraz nazwę bazy danych.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php function Connection(){ $server="localhost"; $user="xxxxxxxxxxx"; $pass="xxxxxxxxxxx"; $db="xxxxxxxxxxxxx"; $connection = mysql_connect($server, $user, $pass); if (!$connection) { die('MySQL ERROR: ' . mysql_error()); } mysql_select_db($db) or die( 'MySQL ERROR: '. mysql_error() ); return $connection; } ?> |
Ostatnim etapem jest wgranie poprawionych plików na nasz serwer www. Aplikację uruchamiamy podając ścieżkę nazwaserwera/index.php
Widok aplikacji:
![widok pomiarów](https://homeguard24.pl/wp-content/plugins/wp-fastest-cache-premium/pro/images/blank.gif)
Jeszcze raz krok po kroku:
- Budowa układu Arduino + Ethernet Shield wraz z czujnkiem ruchu
- Podłączenie Ethernet shield do sieci LAN
- Wgranie sketcha, test na diodzie LED
- Utworzenie bazy danych
- Podmiana danych do serwera, wrzucenie na właściwy serwer PHP
- Uruchomienie skryptu index.php
Gdyby były problemy z uruchomieniem, jestem do Waszej dyspozycji.
Miłego majsterkowania!