Построим проект решения одного варианта этой задачи:
а) подключим к плате "ESP32" датчик температуры и давления BMP180 и датчик
освещенности (фоторезистор):
b) напишем программу, согласно которой плата будет читать показания датчиков и
передавать их по каналам Bluetooth на экраны устройств
с Bluetooth
модулями-приемниками;
c) в этой программе организуем автоматическое
включение желтого
светодиода (или
реле) при уменьшении освещенности ниже определенного уровня И включение
красного
светодиода (или реле) при повышении температуры выше определенного
значения;
d) предусмотрим в программе также дистанционное включение и выключение
зеленого светодиода по командам с экранов устройств с
Bluetooth-модулями:
Программа (внимательно читайте комментарии):
Все приводимые в этом курсе программы бесплатные, разработаны
различными
энтузиастами, размещены на различных ресурсах с Интернете, ОПРОБОВАНЫ,
отредактированы и ДОПОЛНЕНЫ автором данного курса,
и предлагаются в качестве опоры при изучении основ программирования по методу -
'посмотри, пойми, повтори, сделай сам и по-своему'.
|
//32_BT-180-3leds.ino
#include <SoftwareSerial.h>
#include <Adafruit_BMP085.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
Adafruit_BMP085 bmp;
SoftwareSerial ESP_BT(2, 3); // RX, TX
// назначаем пины для светодиодов
const int led1 = 18; // g
const int led2 = 19; // r
const int led3 = 15; // y
void setup() {
pinMode(led1, OUTPUT); //g
pinMode(led2, OUTPUT); //r
pinMode(led3, OUTPUT); //y
Serial.begin(115200);
ESP_BT.begin("ESP32_LED"); //даем название BT
if (!bmp.begin()) { //инициируем датчик, если нет датчика выводим :
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
}
void loop() {
float sv = analogRead(34)/10; //датчик освещенности
if (sv > 215){
digitalWrite(led3, LOW);
} else { //если sv<215 -> зажигается желтый светодиод
digitalWrite(led3, HIGH);
}
//выводим данные на экран управляющего компьютера
Serial.print("t C= ");
Serial.print(bmp.readTemperature());
Serial.print(" |P mmHg= ");
Serial.println(bmp.readPressure() / 100.0F*0.7500634);
Serial.print(sv);
Serial.println(" lm");
//выводим данные на экран Bluetooth-устройства
ESP_BT.print("t_C= ");
ESP_BT.print(bmp.readTemperature());
ESP_BT.print(" |P(mm)= ");
ESP_BT.println(bmp.readPressure() / 100.0F*0.7500634);
ESP_BT.print(sv);
ESP_BT.println(" lm");
// управление зеленым светодиодом
int n1;
n1 = ESP_BT.read();
if(n1=='G') {digitalWrite(led1,HIGH); ESP_BT.println(" Gr is ON");}
// включаем светодиод:
if(n1=='g') {digitalWrite(led1,LOW); ESP_BT.println(" Gr is OFF");}
// вЫключаем светодиод:
// автоматическое включение red led, если температура >=29 //
if (bmp.readTemperature()>=29) {digitalWrite(led2, HIGH);}
else {digitalWrite(led2, LOW);};
///////////////////////////////////////////////////////////
delay(1500); //задержка 1,5 сек.
}
|
Пишем (переносим) эту программу в новый файл в "Arduino IDE":
Выбираем плату (ESP32 Dev Module), определяем и выбираем 'порт', запускаем
компиляцию и затем загрузку файла, после начала загрузки нажимаем и удерживаем
3-4 сек кнопку 'BOOT' на плате, если все нормально -> по окончании загрузки
увидим сообщение:
Теперь открываем "инструменты" и "Монитор порта" и видим данные датчиков
(температуры, давления и освещенности):
Те же данные мы можем увидеть, если раскроем одно из приложений
"Bluetooth-терминал" для мобильных Андроид-устройств, например,
или
В последнем приложении мы можем дистанционно включать и выключать зеленый
светодиод, посылая символы 'G' и 'g' с экрана Bluetooth-устройства.
|