Hej, w tym wpisie pokażę Ci jak połączyć Arduino z bazą danych MySQL. Bazy danych są niezbędne do przechowywania i analizowania dużych ilości informacji, a łączenie ich z platformami takimi jak Arduino umożliwia tworzenie bardziej zaawansowanych projektów.
Do realizacji tego projektu potrzebujemy serwera, na którym zainstalujemy Apache Web Server , MariaDB fork MySQL oraz PHP. Ja do tego celu użyje Raspberry Pi z zainstalowanym standardowym RpiOS , ale możesz użyć innego dowolnego serwera fizycznego czy też chmury. Całą instalację oraz konfigurację w systemie Linux przeprowadzimy w terminalu.
Arduino za pomocą zapytania HTTP będzie wysyłało dane z czujnika do skryptu PHP umieszczonym na serwerze Apache, następnie skrypt będzie łączył się z bazą danych i zapisywał w niej dane.
Tak wygląda ten projekt na papierze
Ze strony sprzętowej Arduino potrzebujemy:
1 x Arduino Uno | |
1 x Ethernet Shield dla Arduino | |
1 x Kabel USB 2.0 A/B | |
1 x Kabel Ethernet | |
1 x Czujnik DHT11 | |
1 x Zasilanie do Arduino UNO 9V (opcjonalnie) | |
1 x Płytka Prototypowa (opcjonalnie) |
To są linki afiliacyjne. Jeśli kupisz komponenty poprzez te linki, otrzymam prowizję bez dodatkowych kosztów dla Ciebie. Całość przeznaczam na nowe publikacje.
1. Instalacja konfiguracja serwera MariaDB na Raspberry Pi
Łączymy się z naszym serwerem, a następnie instalujemy MariaDB
1 2 |
sudo apt install mariadb-server |
Konfigurujemy podstawowe ustawienia bezpieczeństwa.
1 2 |
sudo mysql_secure_installation |








2. Konfiguracja bazy oraz użytkownika
Uruchom MariaDB w terminalu wpisz poniższą komendę następnie wpisz swoje hasło:
1 2 |
sudo mysql -u root -p |

Utwórz bazę danych w MariaDB , następnie przełącz się na nią.
1 2 3 |
CREATE DATABASE brodatech; USE brodatech; |

Stwórz tabele dla danych z czujnika w nowej bazie. Do przechowywania danych utworzymy 4 kolumny id – klucz główny, temperature dla temperatury, humidity dla wilgotności oraz date, która przechowuje czas i datę, gdy dane z czujnika zostały zapisane. Tabele nazwiemy dht11
1 2 3 4 5 6 7 |
CREATE TABLE dht11 ( id INT AUTO_INCREMENT PRIMARY KEY, temperature FLOAT NOT NULL, humidity FLOAT NOT NULL, date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ); |

Utwórz nowego użytkownika i nadaj mu uprawnienia:
1 2 |
GRANT ALL PRIVILEGES ON brodatech.* TO 'arduino'@'localhost' IDENTIFIED BY 'haslo'; |
W powyższej komendzie arduino to nazwa użytkownika, localhost to adres hosta, a haslo to hasło.

3. Instalacja i konfiguracja PHP i Apache, skrypt do zapisywania danych
Ok, zakończyliśmy konfigurację MariaDB, teraz zainstalujemy Apache HTTP serwer, oraz PHP i je skonfigurujemy. Na końcu stworzymy skrypt PHP, który będzie zapisywał dane do bazy.
Zainstaluj Apache
1 2 |
sudo apt-get install apache2 |
Zainstaluj PHP w najnowszej wersji.
1 2 |
sudo apt-get install php |
Potrzebny nam jeszcze pakiet php-mysql, który zawiera dodatek mysqli do PHP. Między innymi za pomocą tego dodatku będziemy łączyć się z naszą bazą danych.
1 |
sudo apt install php-mysql |

Teraz musimy wyedytować plik konfiguracji i włączyć dodatek mysqli, żeby to zrobić przechodzimy do folderu, w którym znajduje się plik konfiguracji php.ini i edytujemy go.
1 2 3 |
cd /etc/php/7.4/apache2 sudo nano php.ini |
W edytorze nano wciśnij kombinacje CTRL + W, aby szukać następnie wpisz mysqli i wciśnij Enter.

Usuń komentarz, aby włączyć dodatek – skasuj średnik przed extension=mysqli. Zapisz plik CTRL + S, wyjdź z edytora CTRL + X.

Zrestartuj usługę apache2
1 |
sudo service apache2 restart |
Na koniec sprawdź, czy serwer działa w przeglądarce, wpisz adres swojego urządzenia, powinieneś zobaczyć stronę powitalna Apache.

Przechodzimy do katalogu publicznego i w edytorze nano tworzymy skrypt, z którego będzie korzystało Arduino, aby wysłać dane z czujnika do bazy.
1 2 3 |
cd /var/www/html sudo nano zapisz.php |
Oto prosty skrypt, który będzie zapisywał dane do bazy. Zaczynamy od zadeklarowania zmiennych. Następnie tworzone jest połączenie z bazą danych na serwerze z użyciem danych logowania (nazwa użytkownika, hasło i nazwa bazy danych).
Jeśli połączenie jest pomyślne, dane temperatury i wilgotności są dodawane do tabeli w bazie danych. W przypadku błędu, skrypt wyświetla komunikat. Na koniec połączenie z bazą jest zamykane.
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 |
<?php // zmienne $temp = $_GET["temp"]; $hum = $_GET["hum"]; $server = "localhost"; $username = "arduino"; $password = "twoje_hasło"; $dbname = "twoja_baza_danych"; // Utwórz połaczenie $conn = mysqli_connect($server, $username, $password, $dbname); // Sprawdzanie połączenia if (!$conn) { die("Polaczenie nieudane: " . mysqli_connect_error()); } //Wstawianie danych do tabeli $sql = "INSERT INTO dht11 (temperature, humidity) VALUES ($temp, $hum)"; if (mysqli_query($conn, $sql)) { echo "Dopisano nowy rekord "; } else { echo "Błąd: " . $sql . "<br>" . mysqli_error($conn); } mysqli_close($conn); ?> |
Zapisujemy plik i wychodzimy z edytora CTRL +S, CTRL+X
4.Arduino UNO połączenie oraz programowanie.
Wciśnij Ethernet shield na Arduino jak na poniższym obrazku.

Połącz czujnik według poniższego schematu
Minus z czujnika do GND, Plus do zasilania 5V a sygnał do Pinu nr 7.

Podłącz Arduino do komputera kablem usb, następnie uruchom Arduino IDE i wybierz swoją płytkę.

W Menedżerze bibliotek znajdź i zainstaluj bibliotekę DHT sensor library od Adafruit.

Teraz wklej poniższy kod do swojego szkicu.
Jest to program, który wysyła dane z czujnika DHT11 do serwera Apache, upraszczając dopisuje do naszego skryptu zapisz.php ?temp= i &hum= z pobranymi wartościami. Kolejno w funkcji setup() inicjalizuje się połączenie szeregowe, połączenie z czujnikiem oraz Ethernet. W funkcji loop() program łączy się z serwerem, odczytuje dane z czujnika i wysyła je do serwera za pomocą zapytania HTTP. Po wysłaniu danych zamykamy połączenie i opóźniamy kolejny odczyt o 20 sekund.
Pamiętaj, żeby podmienić adres serwera oraz nadać adres IP ze swojego zakresu sieci
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 57 58 59 60 61 |
#include <DHT.h> #include <SPI.h> #include <Ethernet.h> // Parametry czujnika DHT11 #define DHTPIN 7 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); // Serwer Apache const char server[] = "adres_ip_twojego_serwera"; const int port = 80; // Randomowy ardes MAC byte mac[] = { 0xDE, 0xAD, 0xAE, 0xEF, 0xFE, 0xED }; // Tutaj nadaj adres IP ze swojej sieci IPAddress ip(192, 168, 0, 178); // Obiekt klienta Ethernet EthernetClient client; void setup() { // Ustawienia Początkowe Serial.begin(9600); dht.begin(); Ethernet.begin(mac, ip); delay(1000); Serial.println("Laczenie z baza..."); } void loop() { // Łączenie z serwerem Apache if (client.connect(server, port)) { Serial.println("Wysylanie danych..."); // Dane z czujnika float hum = dht.readHumidity(); float temp = dht.readTemperature(); // Zapytanie HTTP String query = "GET /zapisz.php?temp="; query += temp; query += "&hum="; query += hum; query += " HTTP/1.1\r\n"; query += "Host: "; query += server; query += "\r\n\r\n"; // Wysyłanie zapytania client.println(query); // Zamykanie klienta client.stop(); Serial.println("Wysłano dane do bazy"); } else { Serial.println("Polaczenie nieudane"); } // Opóźnienie 20s delay(20000); } |
Z menu Szkic wybieramy Prześlij, aby skompilować i wysłać program do Arduino.

Po chwili Arduino samo się zrestartuje, gdy tak się stanie z menu Narzędzia wybierz Monitor Portu Szeregowego.

W dolnej części programu otworzy nam się monitor upewnij się, że baud jest ustawiony na 9600. Program w pętli będzie wysyłał dane oraz informował o tym w monitorze portu. Czy rzeczywiście dane zapisywane są w bazie ?

5. Odczyt danych z bazy i wyświetlanie danych w przeglądarce
Sprawdźmy, czy jakiekolwiek dane trafiły do naszej bazy. Zalogujmy się do naszego serwera Linux, a następnie do MariaDB. Przejdź do swojej bazy i wyświetl wszystkie rekordy ze swojej tabeli
1 2 |
USE brodatech; SELECT * FROM dht11; |

Dane trafiają do naszej bazy, pełen sukces!!! Na deser napiszemy skrypt, który będzie wyświetlał dane w przeglądarce. W konsoli przejdź do folderu publicznego Apache, usuń stronę główną i utwórz nową w edytorze nano.
1 2 3 |
cd /var/html/www sudo rm index.html sudo nano index.php |
Wklej poniższy kod i zmień na swoje hasło oraz nazwę bazy. Zapisz plik i wyjdź z edytora.
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 |
<?php // Połączenie z bazą danych $servername = "localhost"; $username = "arduino"; $password = "twoje_haslo"; $dbname = "twoja_baza"; // Tworzenie połączenia $conn = mysqli_connect($servername, $username, $password, $dbname); // Sprawdzanie połączenia if (!$conn) { die("Połączenie nieudane: " . mysqli_connect_error()); } // Tworzenie zapytania $sql = "SELECT * FROM dht11"; $result = mysqli_query($conn, $sql); // Wypisywanie danych z bazy danych if (mysqli_num_rows($result) > 0) { while($row = mysqli_fetch_assoc($result)) { echo "Czas: " . $row["date"]. " - Temperatura: " . $row["tem> } } else { echo "Brak danych w bazie danych"; } // Zamykanie połączenia mysqli_close($conn); ?> |
Przejdź do strony głównej, w przeglądarce wpisz adres swojego serwera.
Oto dane temperatury oraz wilgotności. 😀

6. Podsumowanie
W tym tutorialu nauczyliśmy się jak wysyłać dane z Arduino do bazy danych MySQL na serwerze. Zaczynaliśmy od instalacji potrzebnych pakietów i uruchomienia serwera Apache na naszym komputerze. Następnie konfigurowaliśmy PHP oraz napisaliśmy skrypt do zapisu danych do bazy. W następnej części podłączyliśmy Arduino oraz napisaliśmy kod łączący wszystko i wysyłający dane do skryptu. W tym projekcie nie tylko nauczyliśmy się podstaw programowania w języku Arduino, ale także poznaliśmy trochę Linuxa i konfiguracje podstawowych usług serwera. To był świetny projekt i mam nadzieję, że tobie też się miło go budowało!
Do następnego! Cześć!
