В рамках данного проекта мы рассмотрим, как управлять выходами и принимать сигналы на входах микроконтроллера ESP32 через беспроводную связь Bluetooth с использованием специального приложения.
Код программы, который приведен далее, является вполне рабочим учебным кодом, который можно модифицировать под свои нужды. Он может отображать данные Bluetooth в последовательном мониторе. Можно, например, задействовать вход для управления светодиодом на плате ESP32. Это должно работать на любой плате ESP32 с возможностью подключения Bluetooth. Возможно, вам придется изменить номер назначения LED_BUILTIN, чтобы код соответствовал вашей конкретной плате.
Вам понадобится средство для подключения и связи с ESP32. Мы рекомендуем Bluetooth Serial Manager. Вам нужно будет настроить функциональные кнопки для вывода правильных данных. Нажмите и удерживайте функциональную клавишу и измените имя и значение 3 кнопок следующим образом:
[Имя] Led On [Значение] Led On
[Имя] Led Off [Значение] Led Off
[Имя] Toggle [Значение] Toggle
Значения, передаваемые в ESP32, чувствительны к регистру (это можно изменить в коде, чтобы любой регистр или связь регистров продолжали работать).
Код программы ESP32:
#include "BluetoothSerial.h"
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
#if !defined(CONFIG_BT_SPP_ENABLED)
#error Serial Bluetooth not available or not enabled. It is only available for the ESP32 chip.
#endif
BluetoothSerial SerialBT;
String text = "";
int LED_BUILTIN = 2;
bool LED_STATE = false;
enum BT {LED_ON, LED_OFF, TOGGLE, UNDEFINED };
int BT = LED_OFF;
void setup() {
Serial.begin(115200);
SerialBT.begin("ESP32test");
Serial.println("The device started, now you can pair it with bluetooth!");
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
if (Serial.available()) {SerialBT.write(Serial.read()); }
if (SerialBT.available() > 0) {
text = SerialBT.readStringUntil('\n');
text.trim();
if (text == "Led On"){ BT = LED_ON; }
else if (text == "Led Off"){ BT = LED_OFF; }
else if (text == "Toggle"){ BT = TOGGLE; }
else { BT = UNDEFINED; }
//Serial.println(text);
switch (BT) {
case 0 :
LED_STATE = true;
Serial.println("LED ON");
digitalWrite(LED_BUILTIN, LED_STATE);
break;
case 1 :
LED_STATE = false;
Serial.println("LED OFF");
digitalWrite(LED_BUILTIN, LED_STATE);
break;
case 2 :
LED_STATE = !LED_STATE;
Serial.println("TOGGLE LED");
digitalWrite(LED_BUILTIN, LED_STATE);
break;
case 3:
LED_STATE = false;
Serial.println("UNDEFINED INPUT");
digitalWrite(LED_BUILTIN, LED_STATE);
break;
default :
Serial.println("Unrecognised input received");
}
}
delay(20);
}
© digitrode.ru