Найти в Дзене

статус соединения ESP8266+Nano3

Приветствую читателей.
В этой статье речь не пойдет о PHP & JS. Так вышло.
Я сегодня экспериментирую с двумя модулями: ESP8066MOD и Arduino Nano3
Сегодня мне интересно было соединить их по UART (Tx\Rx) порту, в качестве передаваемой информации должна стать информация о соединении телефона с первым (ESP8266) модулем.
// первый код для ESP8266
#include <ESP8266WiFi.h> const char* ssid = "ESP8266_Test"; const char* password = "12345678"; WiFiServer server(80); WiFiClient client; bool device_connected = false; String current_status = "DISCONNECTED"; void setup() { Serial.begin(9600); // UART pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW); WiFi.softAP(ssid, password); Serial.println("Access Point Started"); server.begin(); } void loop() { // Обработка WiFi клиента if (!client || !client.connected()) { client = server.available(); if (client) { device_connected = true; Serial.println("CONNECTED"); digitalWrite(LED_BUILTIN, HIGH); } } else { if (!client.connected()) { client.s

Приветствую читателей.
В этой статье речь не пойдет о
PHP & JS. Так вышло.
Я сегодня экспериментирую с двумя модулями: ESP8066MOD и Arduino Nano3
Сегодня мне интересно было соединить их по UART (Tx\Rx) порту, в качестве передаваемой информации должна стать информация о соединении телефона с первым (ESP8266) модулем.

ESP8266MOD
ESP8266MOD


// первый код для ESP8266
#include <ESP8266WiFi.h>

const char* ssid = "ESP8266_Test";

const char* password = "12345678";

WiFiServer server(80);

WiFiClient client;

bool device_connected = false;

String current_status = "DISCONNECTED";

void setup() {

Serial.begin(9600); // UART

pinMode(LED_BUILTIN, OUTPUT);

digitalWrite(LED_BUILTIN, LOW);

WiFi.softAP(ssid, password);

Serial.println("Access Point Started");

server.begin();

}

void loop() {

// Обработка WiFi клиента

if (!client || !client.connected()) {

client = server.available();

if (client) {

device_connected = true;

Serial.println("CONNECTED");

digitalWrite(LED_BUILTIN, HIGH);

}

} else {

if (!client.connected()) {

client.stop();

device_connected = false;

Serial.println("DISCONNECTED");

digitalWrite(LED_BUILTIN, LOW);

} else {

// Обработка входящих команд от телефона

if (client.available()) {

String request = client.readStringUntil('\n');

// Проверка, если запрос - "STATUS"

request.trim(); // Удаление пробелов

if (request == "STATUS") {

// Отправить текущий статус

client.println(current_status);

}

// Можно добавить обработку других команд

}

}

}

// Обработка команд от Nano3 по UART

if (Serial.available()) {

String cmd = Serial.readStringUntil('\n');

cmd.trim();

if (cmd == "CONNECTED") {

current_status = "CONNECTED";

} else if (cmd == "DISCONNECTED") {

current_status = "DISCONNECTED";

}

}

}
============= END ===============
В код добавлена отладочная информация, - транслируется статус соединения модуля с телефоном.

Второй код для Nano3:

const int ledPin = 13;

String receivedData = "";

bool blinking = false;

unsigned long lastBlinkTime = 0;

unsigned long blinkInterval = 250; // 2 Гц — 0.5 сек, значит мигание каждые 250 мс

bool ledState = LOW;

unsigned long previousMillis = 0;       // Время последнего запроса

const long interval = 9000;             // Интервал между запросами (в миллисекундах)

void setup() {

pinMode(ledPin, OUTPUT);

Serial.begin(9600);

}

void loop() {

// Чтение данных из UART

while (Serial.available()) {

char c = Serial.read();

if (c == '\n') {

processMessage(receivedData);

receivedData = "";

} else {

receivedData += c;

}

}

unsigned long currentMillis = millis();

if (currentMillis - previousMillis >= interval) {

previousMillis = currentMillis; // Обновляем время последнего запроса

// Отправляем запрос

Serial.println("STATUS");

}

// Чтение ответа

if (Serial.available()) {

String status = Serial.readStringUntil('\n');

status.trim();

Serial.print("Статус ESP8266: ");

Serial.println(status);

}

// Мигалка, если активирована

if (blinking) {

if (millis() - lastBlinkTime >= blinkInterval) {

lastBlinkTime = millis();

ledState = !ledState;

digitalWrite(ledPin, ledState);

}

} else {

// Если мигалка выключена, выключить светодиод

digitalWrite(ledPin, LOW);

}

}

void processMessage(String msg) {

msg.trim();

if (msg == "CONNECTED") {

Serial.print('CONNECTED');

// Включить мигание

blinking = true;

ledState = LOW;

digitalWrite(ledPin, LOW);

} else if (msg == "DISCONNECTED") {

Serial.print('DISCONNECTED');

// Выключить мигание

blinking = false;

digitalWrite(ledPin, LOW);

}

}

--------------------------
По проводам:
питание приходит на Nano3, на плате есть выход +5,
так как ESP рассчитана на питание +3,3, то
на вход пит. VIN подаю +5 с платы Nano3.
Tx\Rx на плате Nano3 (D0 & D1) перекрёстно подключены на аналогичные подписанные пины платы ESP8266

В итоге в мониторе порта (подключенной Nano3) нужно получить
Статус ESP8266: CONNECTED
- миссия выполнена!