В работе модуль ESP32 WROOM, на борту которого и WiFi и Bluetooth.
Задача: уметь работать с платой из среды Arduino IDE. Для этого настроим Arduino IDE и напишем простые программы.
Добавить ссылку на источник информации по ESP32 платам
File > Preferences > "Additional boards manager URLs" - открыть окно редактирования и в новую строку вставить:
https://espressif.github.io/arduino-esp32/package_esp32_index.json
В окне нажать ОК.
Выбор рабочей платы
Tools > Board > ESP32 > "ESP32-WROOM-DA Module"
Выбор порта
Tools > Port - выбираем порт, где ваша плата
Простой веб сервер (работа с WiFi)
Здесь простой Веб сервер.
Логика работы модуля будет такая: модуль подключается к заданной в коде WiFi сети, выводит свой IP адрес в Serial port (Serial Monitor), по которому можно обратиться к модулю, поднимает порт 80 на прослушивание. При обращении из под WiFi сети по выведенному IP адресу на порт 80, в ответ получим веб страницу от модуля:
На веб странице можно нажать ссылки, в качестве реакции будет выведена соответствующая информация на Serial Monitor (Serial Port).
Таким образом получаем подключенное устройство ESP32 к WiFi сети. Это устройство может работать в этой WiFi сети, в нашем примере, поднимается веб-сервер, но также можно обращаться к другим узлам сети, работать с интернетом и т.д.
В начале кода укажите имя WiFi сети, куда модуль будет подключаться, а также укажите пароль для этого подключения.
После заливки прошивки на ESP32 перезагрузите его, нажав на кнопку RST на плате.
Перед нажатием на кнопку RST рекомендую открыть Serial Monitor в Arduino IDE, чтобы увидеть информацию, выводимую устройством ESP32 в момент загрузки.
#include <WiFi.h>
const char* ssid = "YourWiFiNetworkName";
const char* password = "YourWiFiNetworkPassword";
WiFiServer server(80);
void setup()
{
Serial.begin(115200);
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
}
void loop(){
WiFiClient client = server.available(); // listen for incoming clients
if (client) { // if you get a client,
Serial.println("New Client."); // print a message out the serial port
String currentLine = ""; // make a String to hold incoming data from the client
while (client.connected()) { // loop while the client's connected
if (client.available()) { // if there's bytes to read from the client,
char c = client.read(); // read a byte, then
Serial.write(c); // print it out the serial monitor
if (c == '\n') { // if the byte is a newline character
// if the current line is blank, you got two newline characters in a row.
// that's the end of the client HTTP request, so send a response:
if (currentLine.length() == 0) {
// HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
// and a content-type so the client knows what's coming, then a blank line:
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println();
// the content of the HTTP response follows the header:
client.print("<b>Hello</b><br>");
client.print("Click <a href=\"/A\">here</a> to write A on serial port.<br>");
client.print("Click <a href=\"/B\">here</a> to write B on serial port.<br>");
// The HTTP response ends with another blank line:
client.println();
// break out of the while loop:
break;
} else { // if you got a newline, then clear currentLine:
currentLine = "";
}
} else if (c != '\r') { // if you got anything else but a carriage return character,
currentLine += c; // add it to the end of the currentLine
}
// Check to see if the client request was "GET /A" or "GET /B":
if (currentLine.endsWith("GET /A")) {
Serial.println("");
Serial.println("Button A was pressed.");
}
if (currentLine.endsWith("GET /B")) {
Serial.println("");
Serial.println("Button B was pressed.");
}
}
}
// close the connection:
client.stop();
Serial.println("Client Disconnected.");
}
}
Коммуникация Телефон-ESP32 или компьютер-ESP32 (работа с Bluetooth)
Опробируем простую коммуникацию Компьютер/телефон и ESP32 через Bluetooth.
После заливки прошивки на ESP32 перезагрузите его, нажав на кнопку RST на плате.
Перед нажатием на кнопку RST рекомендую открыть Serial Monitor в Arduino IDE, чтобы увидеть информацию, выводимую устройством ESP32 в момент загрузки.
#include "BluetoothSerial.h"
String device_name = "ESP32-BT-Slave";
BluetoothSerial SerialBT;
void setup() {
Serial.begin(115200);
SerialBT.begin(device_name); //Bluetooth device name
Serial.printf("The device with name \"%s\" is started.\nNow you can pair it with Bluetooth!\n", device_name.c_str());
}
void loop() {
if (Serial.available()) {
SerialBT.write(Serial.read());
}
if (SerialBT.available()) {
Serial.write(SerialBT.read());
}
delay(20);
}
После прошивки ESP32, можно выполнить сопряжение с ним. Для опробирования коммуникации потребуется приложение для работы с Bluetooth последовательным портом, на телефон Android это может быть приложение "Bluetooth Terminal".
Коммуникация между сопряженными устройствами будет осуществляться в виде подобия чата, между окнами Serial Monitor (Ardiono IDE) со стороны ESP32 и приложением Bluetooth Terminal телефона.
Таким образом мы опробировали простую коммуникацию между телефоном и ESP32 через канал передачи данных Bluetooth.
Купить