ESP32/ESP8266: Запись данных в базу данных MySQL с помощью PHP и Arduino IDE
В этом проекте вы создадите клиент на ESP32 или ESP8266, который отправляет HTTP POST запрос к PHP-скрипту для записи данных (показаний датчиков) в базу данных MySQL.
Также у вас будет веб-страница, которая отображает показания датчиков, временные метки и другую информацию из базы данных. Вы сможете визуализировать свои данные из любой точки мира, обращаясь к собственному серверу.
В качестве примера мы будем использовать датчик BME280, подключённый к плате ESP32 или ESP8266. Вы можете изменить предоставленный код для отправки показаний другого датчика или использования нескольких плат.
Для создания и реализации этого проекта вам понадобятся следующие технологии:
Хостинг-сервер и доменное имя
PHP-скрипт для записи данных в MySQL и их отображения на веб-странице
База данных MySQL для хранения показаний
Содержание
Проект разделён на следующие основные разделы:
1. Размещение PHP-приложения и базы данных MySQL
Цель этого проекта — иметь собственное доменное имя и хостинг-аккаунт, позволяющий хранить показания датчиков ESP32 или ESP8266. Вы сможете просматривать показания из любой точки мира, обращаясь к своему серверному домену. Вот общая схема:
Рекомендуется использовать один из следующих хостинг-сервисов, которые соответствуют всем требованиям проекта:
Bluehost (удобный с cPanel): бесплатное доменное имя при подписке на 3-летний план. Рекомендуется выбрать вариант с неограниченным количеством сайтов;
Digital Ocean: Linux-сервер, управляемый через командную строку. Этот вариант рекомендуется только для опытных пользователей.
Эти два сервиса я использую лично и рекомендую, но вы можете использовать любой другой хостинг-сервис. Любой хостинг, предоставляющий PHP и MySQL, подойдёт для этого руководства. Если у вас нет хостинг-аккаунта, рекомендуется зарегистрироваться на Bluehost.
При покупке хостинг-аккаунта вам также нужно будет приобрести доменное имя. Именно это делает проект интересным: вы сможете перейти на своё доменное имя (https://example-domain.com) и увидеть показания датчиков ESP32 или ESP8266.
Примечание
Вы также можете запустить LAMP-сервер (Linux, Apache, MySQL, PHP) на Raspberry Pi для доступа к данным в локальной сети. Однако цель данного руководства — публикация показаний на собственном доменном имени, к которому можно получить доступ из любой точки мира. Это позволяет легко просматривать показания ESP без зависимости от сторонней IoT-платформы.
2. Подготовка базы данных MySQL
После регистрации хостинг-аккаунта и настройки доменного имени вы можете войти в cPanel или аналогичную панель управления. После этого выполните следующие шаги для создания базы данных, имени пользователя, пароля и SQL-таблицы.
Создание базы данных и пользователя
1. Введите «database» в строке поиска и выберите «MySQL Database Wizard».
2. Введите желаемое имя базы данных. В моём случае имя базы данных — esp_data. Затем нажмите кнопку «Next Step»:
Примечание
Позже вам нужно будет использовать имя базы данных с префиксом, который выдаёт ваш хостинг. Далее я буду ссылаться на него как example_esp_data.
3. Введите имя пользователя базы данных и задайте пароль. Обязательно сохраните все эти данные, так как они понадобятся позже для установки соединения с базой данных в PHP-коде.
Готово! Ваша новая база данных и пользователь успешно созданы. Сохраните все данные, так как они понадобятся позже:
Имя базы данных: example_esp_data
Имя пользователя: example_esp_board
Пароль: ваш пароль
Создание SQL-таблицы
После создания базы данных и пользователя вернитесь на панель управления cPanel и найдите «phpMyAdmin».
На левой панели выберите имя вашей базы данных example_esp_data и откройте вкладку «SQL».
Важно
Убедитесь, что вы открыли базу данных example_esp_data. Затем нажмите вкладку SQL. Если вы не выполните эти точные шаги и запустите SQL-запрос, вы можете создать таблицу в неправильной базе данных.
Скопируйте SQL-запрос из следующего фрагмента:
CREATE TABLE SensorData (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
sensor VARCHAR(30) NOT NULL,
location VARCHAR(30) NOT NULL,
value1 VARCHAR(10),
value2 VARCHAR(10),
value3 VARCHAR(10),
reading_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
Вставьте его в поле SQL-запроса (выделено красным прямоугольником) и нажмите кнопку «Go» для создания таблицы:
После этого вы должны увидеть вновь созданную таблицу SensorData в базе данных example_esp_data, как показано на рисунке ниже:
3. PHP-скрипт HTTP POST — запись данных в базу данных MySQL
В этом разделе мы создадим PHP-скрипт, который отвечает за приём входящих запросов от ESP32 или ESP8266 и запись данных в базу данных MySQL.
Если вы используете хостинг-провайдера с cPanel, найдите «File Manager»:
Затем выберите опцию public_html и нажмите кнопку «+ File» для создания нового файла .php.
Примечание
Если вы следуете этому руководству и не знакомы с PHP или MySQL, рекомендуется создавать файлы с точно такими же именами. В противном случае вам нужно будет изменить скетч ESP с другими URL-путями.
Создайте новый файл в /public_html с таким именем и расширением: post-esp-data.php
Отредактируйте вновь созданный файл (post-esp-data.php) и скопируйте следующий код:
<?php
/*
Rui Santos
Complete project details at https://RandomNerdTutorials.com/esp32-esp8266-mysql-database-php/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*/
$servername = "localhost";
// REPLACE with your Database name
$dbname = "REPLACE_WITH_YOUR_DATABASE_NAME";
// REPLACE with Database user
$username = "REPLACE_WITH_YOUR_USERNAME";
// REPLACE with Database user password
$password = "REPLACE_WITH_YOUR_PASSWORD";
// Keep this API Key value to be compatible with the ESP32 code provided in the project page.
// If you change this value, the ESP32 sketch needs to match
$api_key_value = "tPmAT5Ab3j7F9";
$api_key= $sensor = $location = $value1 = $value2 = $value3 = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$api_key = test_input($_POST["api_key"]);
if($api_key == $api_key_value) {
$sensor = test_input($_POST["sensor"]);
$location = test_input($_POST["location"]);
$value1 = test_input($_POST["value1"]);
$value2 = test_input($_POST["value2"]);
$value3 = test_input($_POST["value3"]);
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO SensorData (sensor, location, value1, value2, value3)
VALUES ('" . $sensor . "', '" . $location . "', '" . $value1 . "', '" . $value2 . "', '" . $value3 . "')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
}
else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
}
else {
echo "Wrong API Key provided.";
}
}
else {
echo "No data posted with HTTP POST.";
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
Перед сохранением файла необходимо изменить переменные $dbname, $username и $password на ваши собственные данные:
// Your Database name
$dbname = "example_esp_data";
// Your Database user
$username = "example_esp_board";
// Your Database user password
$password = "YOUR_USER_PASSWORD";
После добавления имени базы данных, имени пользователя и пароля сохраните файл и продолжайте работу с руководством. Если вы попробуете обратиться к вашему доменному имени по следующему URL-пути, вы увидите следующее:
https://example-domain.com/post-esp-data.php
4. PHP-скрипт — отображение содержимого базы данных
Создайте ещё один PHP-файл в каталоге /public_html, который будет отображать всё содержимое базы данных на веб-странице. Назовите новый файл: esp-data.php
Отредактируйте вновь созданный файл (esp-data.php) и скопируйте следующий код:
<!DOCTYPE html>
<html><body>
<?php
/*
Rui Santos
Complete project details at https://RandomNerdTutorials.com/esp32-esp8266-mysql-database-php/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*/
$servername = "localhost";
// REPLACE with your Database name
$dbname = "REPLACE_WITH_YOUR_DATABASE_NAME";
// REPLACE with Database user
$username = "REPLACE_WITH_YOUR_USERNAME";
// REPLACE with Database user password
$password = "REPLACE_WITH_YOUR_PASSWORD";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, sensor, location, value1, value2, value3, reading_time FROM SensorData ORDER BY id DESC";
echo '<table cellspacing="5" cellpadding="5">
<tr>
<td>ID</td>
<td>Sensor</td>
<td>Location</td>
<td>Value 1</td>
<td>Value 2</td>
<td>Value 3</td>
<td>Timestamp</td>
</tr>';
if ($result = $conn->query($sql)) {
while ($row = $result->fetch_assoc()) {
$row_id = $row["id"];
$row_sensor = $row["sensor"];
$row_location = $row["location"];
$row_value1 = $row["value1"];
$row_value2 = $row["value2"];
$row_value3 = $row["value3"];
$row_reading_time = $row["reading_time"];
// Uncomment to set timezone to - 1 hour (you can change 1 to any number)
//$row_reading_time = date("Y-m-d H:i:s", strtotime("$row_reading_time - 1 hours"));
// Uncomment to set timezone to + 4 hours (you can change 4 to any number)
//$row_reading_time = date("Y-m-d H:i:s", strtotime("$row_reading_time + 4 hours"));
echo '<tr>
<td>' . $row_id . '</td>
<td>' . $row_sensor . '</td>
<td>' . $row_location . '</td>
<td>' . $row_value1 . '</td>
<td>' . $row_value2 . '</td>
<td>' . $row_value3 . '</td>
<td>' . $row_reading_time . '</td>
</tr>';
}
$result->free();
}
$conn->close();
?>
</table>
</body>
</html>
После добавления $dbname, $username и $password сохраните файл и продолжайте работу с проектом.
// Your Database name
$dbname = "example_esp_data";
// Your Database user
$username = "example_esp_board";
// Your Database user password
$password = "YOUR_USER_PASSWORD";
Если вы попробуете обратиться к вашему доменному имени по следующему URL-пути, вы увидите следующее:
https://example-domain.com/esp-data.php
Готово! Если вы видите пустую таблицу в браузере, значит всё готово. В следующем разделе вы узнаете, как вставлять данные с ESP32 или ESP8266 в базу данных.
5. Настройка ESP32 или ESP8266
Этот проект совместим как с платами ESP32, так и с ESP8266. Вам нужно лишь собрать простую схему и загрузить предоставленный скетч для записи температуры, влажности, давления и других данных в базу данных каждые 30 секунд. Скетч немного отличается для каждой платы.
Необходимые компоненты
Для этого примера мы будем получать показания с датчика BME280. Вот список деталей, необходимых для сборки схемы:
Плата ESP32 (читайте Лучшие платы разработки ESP32)
Альтернатива — плата ESP8266 (читайте Лучшие платы разработки ESP8266)
Схемы подключения
Модуль датчика BME280, который мы используем, общается по протоколу I2C, поэтому его нужно подключить к пинам I2C ESP32 или ESP8266.
Подключение BME280 к ESP32
Пины I2C на ESP32:
GPIO 22: SCL (SCK)
GPIO 21: SDA (SDI)
Соберите схему, как показано на следующей диаграмме (полное руководство ESP32 с BME280).
Рекомендуемое чтение: Справочник по распиновке ESP32
Подключение BME280 к ESP8266
Пины I2C на ESP8266:
GPIO 5 (D1): SCL (SCK)
GPIO 4 (D2): SDA (SDI)
Соберите схему, как показано на следующей диаграмме, если вы используете плату ESP8266 (полное руководство ESP8266 с BME280).
Рекомендуемое чтение: Справочник по распиновке ESP8266
Установка библиотек
Мы будем программировать ESP32/ESP8266 в Arduino IDE, поэтому у вас должно быть установлено дополнение ESP32/ESP8266 в Arduino IDE. Следуйте одному из руководств в зависимости от используемой платы:
Код для ESP32
Следуйте этому разделу, если вы используете ESP32. Для ESP8266 перейдите к разделу Код для ESP8266.
После установки необходимых дополнений и библиотек скопируйте следующий код в Arduino IDE, но пока не загружайте его. Сначала нужно внести некоторые изменения.
/*
Rui Santos
Complete project details at https://RandomNerdTutorials.com/esp32-esp8266-mysql-database-php/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*/
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// REPLACE with your Domain name and URL path or IP address with path
const char* serverName = "https://example.com/post-esp-data.php";
// Keep this API Key value to be compatible with the PHP code provided in the project page.
// If you change the apiKeyValue value, the PHP file /post-esp-data.php also needs to have the same key
String apiKeyValue = "tPmAT5Ab3j7F9";
String sensorName = "BME280";
String sensorLocation = "Office";
/*#include <SPI.h>
#define BME_SCK 18
#define BME_MISO 19
#define BME_MOSI 23
#define BME_CS 5*/
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println("Connecting");
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
// (you can also pass in a Wire library object like &Wire2)
bool status = bme.begin(0x76);
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring or change I2C address!");
while (1);
}
}
void loop() {
//Check WiFi connection status
if(WiFi.status()== WL_CONNECTED){
WiFiClientSecure *client = new WiFiClientSecure;
client->setInsecure(); //don't use SSL certificate
HTTPClient https;
// Your Domain name with URL path or IP address with path
https.begin(*client, serverName);
// Specify content-type header
https.addHeader("Content-Type", "application/x-www-form-urlencoded");
// Prepare your HTTP POST request data
String httpRequestData = "api_key=" + apiKeyValue + "&sensor=" + sensorName
+ "&location=" + sensorLocation + "&value1=" + String(bme.readTemperature())
+ "&value2=" + String(bme.readHumidity()) + "&value3=" + String(bme.readPressure()/100.0F) + "";
Serial.print("httpRequestData: ");
Serial.println(httpRequestData);
// You can comment the httpRequestData variable above
// then, use the httpRequestData variable below (for testing purposes without the BME280 sensor)
//String httpRequestData = "api_key=tPmAT5Ab3j7F9&sensor=BME280&location=Office&value1=24.75&value2=49.54&value3=1005.14";
// Send HTTP POST request
int httpResponseCode = https.POST(httpRequestData);
// If you need an HTTP request with a content type: text/plain
//https.addHeader("Content-Type", "text/plain");
//int httpResponseCode = https.POST("Hello, World!");
// If you need an HTTP request with a content type: application/json, use the following:
//https.addHeader("Content-Type", "application/json");
//int httpResponseCode = https.POST("{\"value1\":\"19\",\"value2\":\"67\",\"value3\":\"78\"}");
if (httpResponseCode>0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
// Free resources
https.end();
}
else {
Serial.println("WiFi Disconnected");
}
//Send an HTTP POST request every 30 seconds
delay(30000);
}
Настройка сетевых учётных данных
Вам нужно изменить следующие строки, указав свои сетевые учётные данные: SSID и пароль. В коде чётко указаны комментарии, где именно нужно внести изменения.
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
Настройка serverName
Вам также нужно ввести своё доменное имя, чтобы ESP отправлял показания на ваш сервер.
const char* serverName = "https://example-domain.com/post-esp-data.php";
Теперь вы можете загрузить код на плату.
Примечание
Большинство серверов требуют выполнения HTTPS-запросов. Приведённый выше код выполняет HTTPS-запросы для соответствия требованиям большинства современных облачных серверов.
Ваш сервер не поддерживает HTTPS? Используйте этот код.
Как работает код
Краткое описание работы кода:
Импорт всех необходимых библиотек;
Установка переменных, которые вы можете изменить (apiKeyValue, sensorName, sensorLocation);
apiKeyValue — это просто случайная строка, которую вы можете изменить. Она используется для безопасности, чтобы только тот, кто знает ваш API-ключ, мог публиковать данные в базу данных;
Инициализация последовательной связи для отладки;
Установление Wi-Fi соединения с маршрутизатором;
Инициализация BME280 для получения показаний;
Инициализация защищённого WiFi-клиента.
Затем в цикле loop() выполняется HTTP POST запрос каждые 30 секунд с последними показаниями BME280:
// Your Domain name with URL path or IP address with path
http.begin(client, serverName);
// Specify content-type header
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
// Prepare your HTTP POST request data
String httpRequestData = "api_key=" + apiKeyValue + "&sensor=" + sensorName
+ "&location=" + sensorLocation + "&value1=" + String(bme.readTemperature())
+ "&value2=" + String(bme.readHumidity()) + "&value3=" + String(bme.readPressure()/100.0F) + "";
int httpResponseCode = http.POST(httpRequestData);
Вы можете закомментировать переменную httpRequestData выше, которая объединяет все показания BME280, и использовать переменную httpRequestData ниже для тестирования:
String httpRequestData = "api_key=tPmAT5Ab3j7F9&sensor=BME280&location=Office&value1=24.75&value2=49.54&value3=1005.14";
Подробнее об HTTPS-запросах с ESP32: ESP32 HTTPS Requests (Arduino IDE).
Код для ESP8266
Следуйте этому разделу, если вы используете ESP8266. Для ESP32 смотрите раздел выше.
После установки необходимых дополнений и библиотек скопируйте следующий код в Arduino IDE, но пока не загружайте его. Сначала нужно внести некоторые изменения.
/*
Rui Santos
Complete project details at https://RandomNerdTutorials.com/esp32-esp8266-mysql-database-php/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*/
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// REPLACE with your Domain name and URL path or IP address with path
const char* serverName = "https://example.com/post-esp-data.php";
// Keep this API Key value to be compatible with the PHP code provided in the project page.
// If you change the apiKeyValue value, the PHP file /post-esp-data.php also needs to have the same key
String apiKeyValue = "tPmAT5Ab3j7F9";
String sensorName = "BME280";
String sensorLocation = "Office";
/*#include <SPI.h>
#define BME_SCK 18
#define BME_MISO 19
#define BME_MOSI 23
#define BME_CS 5*/
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println("Connecting");
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
// (you can also pass in a Wire library object like &Wire2)
bool status = bme.begin(0x76);
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring or change I2C address!");
while (1);
}
}
void loop() {
//Check WiFi connection status
if(WiFi.status()== WL_CONNECTED){
std::unique_ptr<BearSSL::WiFiClientSecure>client(new BearSSL::WiFiClientSecure);
// Ignore SSL certificate validation
client->setInsecure();
//create an HTTPClient instance
HTTPClient https;
// Your Domain name with URL path or IP address with path
https.begin(*client, serverName);
// Specify content-type header
https.addHeader("Content-Type", "application/x-www-form-urlencoded");
// Prepare your HTTP POST request data
String httpRequestData = "api_key=" + apiKeyValue + "&sensor=" + sensorName
+ "&location=" + sensorLocation + "&value1=" + String(bme.readTemperature())
+ "&value2=" + String(bme.readHumidity()) + "&value3=" + String(bme.readPressure()/100.0F) + "";
Serial.print("httpRequestData: ");
Serial.println(httpRequestData);
// You can comment the httpRequestData variable above
// then, use the httpRequestData variable below (for testing purposes without the BME280 sensor)
//String httpRequestData = "api_key=tPmAT5Ab3j7F9&sensor=BME280&location=Office&value1=24.75&value2=49.54&value3=1005.14";
// Send HTTP POST request
int httpResponseCode = https.POST(httpRequestData);
// If you need an HTTP request with a content type: text/plain
//http.addHeader("Content-Type", "text/plain");
//int httpResponseCode = https.POST("Hello, World!");
// If you need an HTTP request with a content type: application/json, use the following:
//http.addHeader("Content-Type", "application/json");
//int httpResponseCode = https.POST("{\"value1\":\"19\",\"value2\":\"67\",\"value3\":\"78\"}");
if (httpResponseCode>0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
// Free resources
https.end();
}
else {
Serial.println("WiFi Disconnected");
}
//Send an HTTP POST request every 30 seconds
delay(30000);
}
Настройка сетевых учётных данных (ESP8266)
Вам нужно изменить следующие строки, указав свои сетевые учётные данные: SSID и пароль. В коде чётко указаны комментарии, где именно нужно внести изменения.
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
Настройка serverName (ESP8266)
Вам также нужно ввести своё доменное имя, чтобы ESP отправлял показания на ваш сервер.
const char* serverName = "https://example-domain.com/post-esp-data.php";
Теперь вы можете загрузить код на плату.
Примечание
Большинство серверов требуют выполнения HTTPS-запросов. Приведённый выше код выполняет HTTPS-запросы для соответствия требованиям большинства современных облачных серверов.
Ваш сервер не поддерживает HTTPS? Используйте этот код.
Подробнее об HTTPS-запросах с ESP8266: ESP8266 NodeMCU HTTPS Requests (Arduino IDE).
Демонстрация
После выполнения всех шагов дайте вашей плате ESP собрать несколько показаний и опубликовать их на сервер.
Если всё правильно, вот что вы должны увидеть в Serial Monitor Arduino IDE:
Если вы откроете своё доменное имя по следующему URL-пути:
https://example-domain.com/esp-data.php
Вы должны увидеть все показания, сохранённые в базе данных. Обновите веб-страницу, чтобы увидеть последние показания:
Вы также можете зайти в phpMyAdmin для управления данными, хранящимися в таблице SensorData. Вы можете удалять, редактировать данные и т.д.
Заключение
В этом руководстве вы узнали, как публиковать данные датчиков в базу данных на собственном серверном домене, к которому можно получить доступ из любой точки мира. Для этого необходимо иметь собственный сервер и доменное имя (для локального доступа можно использовать Raspberry Pi).
Приведённый пример максимально прост, чтобы вы поняли, как всё работает. Разобравшись с ним, вы можете изменить внешний вид таблицы, публиковать другие показания датчиков, отправлять данные с нескольких плат ESP и многое другое.
Вам также может быть интересно:
Визуализация показаний датчиков из любой точки мира (ESP32/ESP8266 + MySQL + PHP)
Облачная метеостанция DIY с ESP32/ESP8266 (MySQL Database и PHP)
ESP32: публикация показаний датчиков в Google Sheets (совместимо с ESP8266)
Примечание
Данная статья является переводом оригинальной публикации с сайта Random Nerd Tutorials.