Умная банка на ESP8266 + Arduino: мониторинг наполненности в реальном времени
Компоненты и материалы
| Arduino UNO | 1 шт. |
| Ультразвуковой датчик HC-SR04 | 1 шт. |
| Макетная плата | 1 шт. |
| Резисторы 1 кОм | 4 шт. (делитель напряжения для ESP8266 RX) |
| ESP8266 ESP-01 (Wi-Fi модуль) | 1 шт. |
| Перемычки | ~15–20 шт. |
Программное обеспечение
- Arduino IDE
- Notepad++ / Sublime Text (для PHP)
- Локальный веб-сервер (XAMPP / Apache + MySQL)
О проекте
Прототип «умной банки» для кухни: ультразвуковой датчик измеряет уровень наполнения, Arduino опрашивает датчик, ESP8266 отправляет данные на локальный сервер (PHP + MySQL), веб-страница отображает текущее значение. Можно использовать для отслеживания запасов круп, кофе, корма для животных и т.д.
Шаг 1: Комплектующие
Список выше. Провода для ESP-01: питание 3.3 В (от Arduino 3.3В или отдельного LDO), TX→RX Arduino через делитель 1к/2к (или 1к+1к), RX ESP→TX Arduino напрямую (3.3В логика терпима).
Шаг 2: Подключение ESP-01 и HC-SR04
См. фото в оригинале. HC-SR04: Trig→D9, Echo→D10, VCC/GND→5V/GND. ESP-01: VCC/CH_PD→3.3V, GND→GND, TX→D2 (SoftwareSerial RX), RX→D3 через делитель напряжения.
Шаг 3: Скетч Arduino (SoftwareSerial + AT-команды)
#include <SoftwareSerial.h>
SoftwareSerial esp(2, 3); // RX, TX к ESP-01
long duration; int distance;
void setup() {
Serial.begin(9600); esp.begin(9600);
esp.println("AT"); response(3000);
esp.println("AT+CIOBAUD=9600"); response(1000);
esp.println("AT+CWMODE=1"); response(2000);
esp.println("AT+CWJAP=\"SSID\",\"PASSWORD\""); response(10000);
pinMode(9, OUTPUT); pinMode(10, INPUT);
}
void loop() {
digitalWrite(9, LOW); delayMicroseconds(2);
digitalWrite(9, HIGH); delayMicroseconds(10);
digitalWrite(9, LOW);
duration = pulseIn(10, HIGH);
distance = duration * 0.034 / 2; // см
esp.println("AT+CIPSTART=\"TCP\",\"YOUR_SERVER_IP\",80"); response(5000);
esp.println("AT+CIPSEND=80"); response(2000);
esp.print("GET /your_php_script.php?dist="); esp.print(distance); esp.println(" HTTP/1.1\r\nHost: YOUR_SERVER_IP\r\n\r\n");
response(5000);
delay(5000); // период отправки
}
void response(int waitTime) {
for (int i=0; i
Шаг 4: PHP — запись в БД (insert.php)
<?php
$server="localhost"; $user="root"; $pass=""; $db="smartjar";
$conn = new mysqli($server,$user,$pass,$db);
if($conn->connect_error) die("Connection failed: ".$conn->connect_error);
$dist = $_GET['dist'];
$sql = "INSERT INTO levels (distance, timestamp) VALUES ($dist, NOW())";
$conn->query($sql);
$conn->close();
?>
Шаг 5: PHP — отображение (view.php)
<?php
$conn = new mysqli("localhost","root","","smartjar");
$result = $conn->query("SELECT distance, timestamp FROM levels ORDER BY id DESC LIMIT 1");
$row = $result->fetch_assoc();
echo "Distance: ".$row['distance']." cm
Time: ".$row['timestamp'];
$conn->close();
?>
Шаг 6: База данных (phpMyAdmin)
CREATE DATABASE smartjar;
USE smartjar;
CREATE TABLE levels (
id INT AUTO_INCREMENT PRIMARY KEY,
distance INT NOT NULL,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);
Шаг 7: Тестирование
Проверьте baud rate ESP-01 (часто 115200 по умолчанию — измените через AT+CIOBAUD=9600). Откройте view.php в браузере — должно обновляться значение расстояния.
Авторы: Narendra Santhosh N, Ajay Karthik K, Subash C. Планы: Android-приложение, графический веб-интерфейс.
Код и ресурсы
GitHub репозиторий: github.com/santynaren/iotsmartjar (включает README, скетч, PHP-файлы).
Производственный процесс
- Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
- Точный мониторинг температуры и влажности с SHT15 на Windows 10 IoT Core
- Проект с датчиком DHT11: индикация температуры светодиодами и пьезо-динамиком на Arduino
- Создание ультразвукового левитатора на Arduino: пошаговое руководство
- Умный вольтметр на Arduino и смартфоне — простое DIY-проект
- IoT-монитор пульса в реальном времени на Arduino и MAX30100
- Интеграция ёмкостного сканера отпечатков DFRobot с Arduino или ESP8266
- Умный дом и система безопасности на базе 1Sheeld
- Измерение расстояния в реальном времени: Ардуино-сонар с визуализацией в Processing
- WiFi-умный замок на Arduino и ESP8266 — открывание с телефона