На фото написано Mini HC-SR505, но на самом деле показан датчик AM312. Техническая характеристика AM312 (AS312):
Датчик PIR-sensor: AS312
Микросхема PIR controller: нет
Угол обнаружения: 100°
Дистанция обнаружения: от 3 до 5 метров
Сигнал на выходе (OUT): Высокие(1) и низкие(0) уровни в 3.3V TTL логике
Длительность сигнала при обнаружении (OUT): 2 сек
Напряжение питания модуля: 2,7 – 12V
Ток потребления в режиме ожидания: менее 50мкА
Ток потребления: 0,1 мА
Размер модуля : 25 x 13 x 13 мм
Размер модуля без гребенки: 19 x 13 x 13 мм
Расстояние обнаружения движения указано 3-5 метров, но он надежно обнаруживает перемещение объекта в пределах всего полутора - двух метров.
Подключение PIR Sensor'а AM312 к плате ESP32 S2 mini
На плате ESP32 S2 mini распаял крайнюю 8-контактную гребенку. Датчик AM312 подключается тремя проводами: контакт VCC (на плате датчика рядом со стабилизатором с тремя выводами) подключается к шине VBUS (+5В) на плате ESP32 S2 mini, средний контакт DATA датчика подключается к контакту 16 на плате ESP32 S2 mini, крайний контакт GND датчика подключается к контакту GND на плате ESP32 S2 mini рядом с контактом VBUS. На плате ESP32 S2 mini все три провода оказываются рядом. Аналогично подключается и PIR Sensor HC-SR501.
Для проекта PIR Sensor использовалась среда Arduino IDE 2.2.1 в Windows 10. Также для платы ESP32 S2 mini вам надо скачать и установить в Windows драйвер CP2102. Как это сделать, описано в [5]. После установки драйвера при подключении платы к компьютеру в Диспетчере устройств должен появиться виртуальный порт COM3, COM4 или подобный.
После скачивания и установки среды Arduino IDE 2.2.1 или новее вам нужно её настроить для плат ESP32. Для этого в среде Arduino IDE идем Файл -> Параметры и в окне в строке Дополнительные ссылки для Менеджера плат вставьте ссылку https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json и нажмите Ok.
Далее идем Инструменты -> Плата -> Менеджер плат и слева в окне в строке поиска наберите ESP32 и нажмите Enter. Система найдет и предложит подходящие пункты для установки. Выберите esp32 от Espressif Systems и нажмите Установка. У меня всё это уже установлено и доступна кнопка UPDATE. Также эта настройка в Arduino IDE 2.0 описана в [6].
После этого вы можете попробовать плату ESP32 S2 mini в работе, например скачать и загрузить стандартный скетч Blink (мигание встроенным светодиодом). Для скетча в Менеджере плат выберите плату LOLIN S2 Mini.
В качестве исходного для проекта PIR Sensor взял скетч из [1]. В нем демонстрируется вывод показаний температуры на веб-страницу. Для эмуляции показания температуры берется случайное число в пределах от 0 до 10000 и затем преобразуется в показание температуры в пределах от 0 до 100 °C с двумя знаками после запятой. Показания на веб-странице обновляются каждые 4 секунды. Вместо показаний температуры решил выводить на веб-страницу сообщения о срабатывании PIR Sensor'а: Person detected! (Обнаружен человек!) или None (Нет никого) при отсутствии сработки.
Проект состоит из двух файлов - самого скетча PIR_to_Web_page_2.ino и файла index.h. Файл index.h включает в себя содержимое веб-страницы, которое выводится в браузере. Файл index.h должен находиться в одной папке со скетчем. Срабатывание датчика фиксируется на 4 секунды, также на 4 секунды загорается встроенный в плату светодиод.
Наверное, код можно упростить, но я не очень хорошо разбираюсь в кодировании, поэтому в скетче и коде веб-страницы index.h сделал минимум изменений дабы ничего не сломать.
Для работы скетча необходимо подключить библиотеку ESPAsyncWebServer.h. Идем Скетч -> Подключить библиотеку -> Управление библиотеками ...
Слева вверху в строке поиска Управление библиотеками наберите ESPAsyncWebServer. Система подберет вам подходящие библиотеки. Выберите ESPAsyncWebServer от lacamera и нажмите УСТАНОВКА. Будет выдано окно с предупреждением о том, что не все зависимости установлены. Нажмите INSTALL ALL (Установить все).
Скетч PIR_to_Web_page_2.ino
/*
* This ESP32 code is created by esp32io.com
*
* This ESP32 code is released in the public domain
*
* For more detail (instruction and wiring diagram), visit https://esp32io.com/tutorials/esp32-web-server
*/
#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#include "index.h" // Include the index.h file
String temperatureStr;
const char* ssid = "*******"; // CHANGE IT
const char* password = "***************"; // CHANGE IT
AsyncWebServer server(80);
void setup() {
pinMode(16, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
// Connect to Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Print the ESP32's IP address
Serial.print("ESP32 Web Server's IP address: ");
Serial.println(WiFi.localIP());
// Serve the HTML page from the file
server.on("/", HTTP_GET, [](AsyncWebServerRequest* request) {
Serial.println("ESP32 Web Server: New request received:"); // for debugging
Serial.println("GET /"); // for debugging
request->send(200, "text/html", webpage);
});
// Define a route to get the temperature data
server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest* request) {
Serial.println("ESP32 Web Server: New request received:"); // for debugging
Serial.println("GET /"); // for debugging
// Format the temperature with two decimal places
//String temperatureStr = String(temperature, 2);
digitalWrite(LED_BUILTIN, LOW);
int temperature = digitalRead(16);
if (temperature == 1) {
temperatureStr = ("Person detected!");
digitalWrite(LED_BUILTIN, HIGH);
} else {
temperatureStr = ("None");
}
Serial.println(temperatureStr);
//String temperatureStr = String("Person detected!");
request->send(200, "text/plain", temperatureStr);
});
// Start the server
server.begin();
}
void loop() {
// Your code here
}
index.h
/*
* This ESP32 code is created by esp32io.com
*
* This ESP32 code is released in the public domain
*
* For more detail (instruction and wiring diagram), visit https://esp32io.com/tutorials/esp32-web-server
*/
#ifndef WEBPAGE_H
#define WEBPAGE_H
const char* webpage = R"=====(
/*
* This ESP32 code is created by esp32io.com
*
* This ESP32 code is released in the public domain
*
* For more detail (instruction and wiring diagram), visit https://esp32io.com/tutorials/esp32-web-server
*/
#ifndef WEBPAGE_H
#define WEBPAGE_H
const char* webpage = R"=====(
<!DOCTYPE html>
<html>
<head>
<title>ESP32 Temperature</title>
</head>
<body>
<h1>ESP32 PIR Sensor</h1>
<p>Object: <span style="color: red;"><span id="temperature">Loading...</span> </span></p>
<script>
function fetchTemperature() {
fetch("/temperature")
.then(response => response.text())
.then(data => {
document.getElementById("temperature").textContent = data;
});
}
fetchTemperature();
setInterval(fetchTemperature, 4000); // Update temperature every 4 seconds
</script>
</body>
</html>
)=====";
#endif
Скачать скетч и библиотеку
Откройте скетч PIR_to_Web_page_2.ino в Arduino IDE. Введите название своей Wi-Fi сети и пароль. Запустите компиляцию скетча (—>). Если компилятор выдает ошибку ... mbedtls_md5_starts_ret' was not declared in this scope ..., то скорее всего причина в самой библиотеке ESPAsyncWebServer. Нашел в интернете в [8] другую библиотеку ESPAsyncWebServer-master (длина zip-файла 286845 байт). Она сработала без ошибок. В Каталоге файлов это файл ESPAsyncWebServer-master(2).zip. Для установки библиотеки пройдите Скетч -> Подключить библиотеку -> Добавить ZIP библиотеку...
Если после установки этой библиотеки компилятор выдает ошибку – установлено несколько библиотек ESPAsyncWebServer, то тогда удалите прежнюю библиотеку. Можно просто в папке libraries удалить каталог ESPAsyncWebServer, но оставить новый каталог ESP_Async_WebServer.
После завершения компиляции скетч начнет загружаться на плату. Щелкните по вкладке Монитор порта, чтобы открыть окно монитора или нажмите Ctrl+Shift+M. Если вы не успели разглядеть выдаваемые сообщения, то прокрутите окно назад. При запуске скетча в окно монитора будет выдан IP адрес. Если окно пустое и ничего не выдается, то нажмите кнопку RST (RESET) на платке ESP32 S2 mini. Плата будет перезагружена и в окно начнут выдаваться сообщения. Запишите выданный IP адрес.
Теперь вам нужно на каком-либо устройстве (смартфоне, десктопе, ноутбуке или планшете) вашей локальной сети в браузере открыть веб-страницу с указанным IP адресом. На экране вы должны увидеть сообщение о срабатывании (Person detected!) или несрабатывании (None) PIR сенсора. Срабатывание фиксируется на четыре секунды и в это время горит встроенный светодиод.
Важно! Скетч будет нормально работать, если где-либо в сети открыта эта веб-страница, так как задержка set interval в 4 секунды формируется в браузере на самой веб-странице.
Использованные ресурсы
1. https://esp32io.com/tutorials/esp32-web-server
2. https://www.wemos.cc/en/latest/s2/s2_mini.html
3. https://www.studiopieters.nl/esp32-s2/
4. https://sdelalsamkak.ru/mini-infrakrasnyj-modul-dvizenia-am312-dla-arduino
5. https://myrobot.ru/downloads/driver-cp2102-esp32.php?ysclid=lrnfh6h0vt622147002
6. https://randomnerdtutorials.com/installing-esp32-arduino-ide-2-0/
7. https://blog.squix.org/2016/05/esp8266-peripherals-mini-pir-motion-sensor.html
8. https://github.com/blackhack/ESPAsyncWebServer
|