• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Точка доступа ESP8266 + JSON

Mestniy2496

Member
Спасибо вам большое - именно это я и имел ввиду. Не смею больше вас задерживать. Дальше я точно сам попробую доработать - стыдно перед вами.
Код:
#include <Arduino.h>
#include <ArduinoJson.h>
#ifdef ARDUINO_ARCH_ESP8266
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#define WebServerImpl ESP8266WebServer
#elif ARDUINO_ARCH_ESP32
#include <WiFi.h>
#include <WebServer.h>
#define WebServerImpl WebServer
#else
#error Unsupported architecture, use ARDUINO_ARCH_ESP8266 or ARDUINO_ARCH_ESP32
#endif
// Это ip адрес по которому будет доступен веб-сервер
IPAddress local_ip(192, 168,   4, 22);
// Это ip адрес шлюза, этот шлюз будут использовать wifi клиенты подключившиеся к точке доступа
IPAddress gateway (192, 168,   4,  9);
// Это маска подсети
IPAddress subnet  (255, 255, 255,  0);
// Экземпляр веб-сервера
WebServerImpl server(80);
// Статические переменные, отправляемые на каждом get запросе в котором присутствует нужная url
int volume_value = 0;
boolean on_value = false;
long time_value = 0;
int value_time = 0;
int device_state = 0;
// Это обработчик для всех запросов GET POST и т.д.
void handle_not_found() {
  // Предварительно установим код ответа
  int response_code = 404;
  // Обрабатываем только GET запросы, на все остальные отвечаем 404-м кодом
  if (server.method() == HTTP_GET) {
    if (server.uri().indexOf("/volume_increase") >= 0) {
      // TODO Вот тут что то делаем, был запрошен /volume_increase
      // Устанавливаем значение volume_value, чтоб как-то проинформировать
      // что обрабатывался запрос /volume_increase
      volume_value = valume_sound + 1 ;
      // Устанавливаем код ответа
      response_code = 200;
    } else if (server.uri().indexOf("/volume_decrease") >= 0) {
      // TODO
      volume_value = valume_sound - 1 ;
      response_code = 200;
    } else if (server.uri().indexOf("/device_on") >= 0) {
      // TODO
      int device_state = 1
      on_value = true;
      response_code = 200;
    } else if (server.uri().indexOf("/device_off") >= 0) {
      int device_state = 0
      on_value = false;
      // TODO
      response_code = 200;
    } else if (server.uri().indexOf("/timer_increase") >= 0) {
      // TODO
      value_time = value_time + 10;
     time_value = time_value + 10;
      response_code = 200;
    } else if (server.uri().indexOf("/timer_decrease") >= 0) {
      // TODO
      value_time = value_time - 10;
      time_value = time_value - 10;
      response_code = 200;
    } else if (server.uri().indexOf("/state") >= 0) {
      response_code = 200;
    }
  }
  // Код ответа ответа был установлен отличным от 404, значит нужно ответить статусом
  if (response_code != 404) {
    // Строим json документ
    StaticJsonDocument<256> doc;
    // Устанавливаем значение "volume"
    doc["volume"] = volume_value;
    // Устанавливаем значение "on"
    doc["on"] = on_value;
    // Устанавливаем значение "time"
    doc["time"] = time_value;
    // Серилизуем json документ в строку
    String output;
    serializeJson(doc, output);
    // Отправляем ответ
    server.send(response_code, "application/json", output);
  } else {
    // Отправляем ответ
    server.send(response_code, "text/plain", "File Not Found\n\n");
  }
}
void setup() {
  Serial.begin(115200);
  // Инициализируем wifi
  // Отключаем сохранение параметров во флеш
  WiFi.persistent(false);
  // Выключаем wifi совсем
  WiFi.mode(WIFI_OFF);
  // Устанавливаем параметры ip для интерфейса AP
  WiFi.softAPConfig(local_ip, gateway, subnet);
  // Выбираем режим работы wifi
  WiFi.mode(WIFI_AP);
  // Задаем идентификатор SSID
  WiFi.softAP("MY-ESP");
  // Настраиваем веб-сервер
  // Устанавливаем обработчик для всех запросов, определять методы и запрошенные url будем в нем
  server.onNotFound(handle_not_found);
  // Запускаем сервер
  server.begin();
}
void loop() {
  // Даем серверу обрабатывать запросы
  server.handleClient();
  Serial.println("sound"+volume_value);
  Serial.println("state"+device_state);
  Serial.println("time"+value_time);
  delay (1);
    if (Serial.available() > 0)  //если есть доступные данные
  {

    incomingByte = Serial.read();

  }
}
 

Mestniy2496

Member
Доброго вечера - вот что у меня получилось:
Код на арду:
Код:
#include <SoftwareSerial.h>//Подключаем ESP-шку
SoftwareSerial ESPport(11, 12);////////////////////// RX, TX
//Подключаем MP3
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
DFRobotDFPlayerMini myDFPlayer;
   int soundstate;
   int timing;
   int mytiming;
//Обозначаем пины для РЕЛЕ
#define RELE_PIN_1 7
#define RELE_PIN_2 8
#define RELE_PIN_3 9
//Обозначаем пины для кнопок
const int BUTTON_PIN_1 = 4;
const int BUTTON_PIN_2 = 5;
const int BUTTON_PIN_3 = 6;
int i = 0;
int x = 0;
int y = 0;
int button_old_1 = 1;
int button_old_2 = 1;
int button_old_3 = 1;

int sleeping = 91;
  
int button_old_a = 1;
int button_old_b = 1;
int button_old_c = 1;
int button_old_d = 1;
int button_old_e = 1;


int sec = 60;
void setup()
{

Serial.begin(9600); // Терминал
ESPport.begin(115200);    
pinMode(RELE_PIN_1, OUTPUT);
pinMode(RELE_PIN_2, OUTPUT);
pinMode(RELE_PIN_3, OUTPUT);
pinMode(BUTTON_PIN_1, INPUT_PULLUP);
pinMode(BUTTON_PIN_2, INPUT_PULLUP);
pinMode(BUTTON_PIN_3, INPUT_PULLUP);
digitalWrite(RELE_PIN_1, LOW);
digitalWrite(RELE_PIN_2, LOW);
digitalWrite(RELE_PIN_3, LOW);
myDFPlayer.disableLoopAll(); //stop loop all mp3 files.
  delay(1000);
}
void loop()
{ //Управление Андроид
    if ( ESPport.available() > 0)
  {
    char ch = ESPport.read();
    if (ch == '\r' || ch == '\n')
    {
     
      if (searching == "A")
      {
        if (soundstate <=30){
        soundstate = soundstate+3;
        myDFPlayer.volume(soundstate);
        }
      }
      //Реле 5
      if (searching == "B")
      {
        if (soundstate >= 0) {
        soundstate = soundstate-3;
        myDFPlayer.volume(soundstate);
        }
      }
      if (searching == "C")
      {
            digitalWrite(RELE_PIN_1, LOW);
    digitalWrite(RELE_PIN_2, LOW);
    digitalWrite(RELE_PIN_3, LOW);
    myDFPlayer.disableLoopAll(); //stop loop all mp3 files.
    delay(10);
      }
      //Стоп
      if (searching == "D")
      {
        digitalWrite(RELE_PIN_1, HIGH);
  myDFPlayer.volume(30);  //Set volume value. From 0 to 30
   myDFPlayer.loop(1);  //Play the first mp3
      }
         if (searching == "E")
      {
    
      }
      searching = "";
    }
    else searching += ch;
    Serial.write( ESPport.read());
  }
 
  //УПРАВЛЕНИЕ С КНОПОК
  int buttonState1 = digitalRead(BUTTON_PIN_1); // считываем состояние кнопки 1
  int buttonState2 = digitalRead(BUTTON_PIN_2); // считываем состояние кнопки 2
  int buttonState3 = digitalRead(BUTTON_PIN_3); // считываем состояние кнопки 3
if ((buttonState1==LOW)&&(button_old_1==1))
  {
    i = i + 1;
    if (i > 2)
    {
      i = 1;
    }
     if (i == 1)
  {
  digitalWrite(RELE_PIN_1, HIGH);
  myDFPlayer.volume(30);  //Set volume value. From 0 to 30
   myDFPlayer.loop(1);  //Play the first mp3
  }
   if (i == 2)
  {
    digitalWrite(RELE_PIN_1, LOW);
    digitalWrite(RELE_PIN_2, LOW);
    digitalWrite(RELE_PIN_3, LOW);
    myDFPlayer.disableLoopAll(); //stop loop all mp3 files.
    delay(10);
  }
  }
  button_old_1 = buttonState1;
  delay(10);
 
   if ((buttonState2==LOW)&&(button_old_2==1))
  {
    x = x + 1;
    if (x > 2)
    {
      x = 1;
    }
     if (x == 1)
  {
     myDFPlayer.loop(1)
   myDFPlayer.volume(30);
  }
   if (x == 2)
  {
    myDFPlayer.volume(0);
  }
  }
  button_old_2 = buttonState2;
  delay(10);
 
   if ((buttonState3==LOW)&&(button_old_3==1))
  {
    y = y + 1;
    if (y > 3)
    {
      y = 1;
    }
     if (y == 1)
  {
   digitalWrite(RELE_PIN_2, HIGH);
  }
   if (y == 2)
  {
   digitalWrite(RELE_PIN_3, HIGH);
  }
   if (y == 3)
  {
  digitalWrite(RELE_PIN_2, LOW);
    digitalWrite(RELE_PIN_3, LOW);
  }
  }
  button_old_3 = buttonState3;
  delay(10);

   
}
А вот для ЕСП:
Код:
#include <Arduino.h>
#include <ArduinoJson.h>
#ifdef ARDUINO_ARCH_ESP8266
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#define WebServerImpl ESP8266WebServer
#elif ARDUINO_ARCH_ESP32
#include <WiFi.h>
#include <WebServer.h>
#define WebServerImpl WebServer
#else
#error Unsupported architecture, use ARDUINO_ARCH_ESP8266 or ARDUINO_ARCH_ESP32
#endif
// Это ip адрес по которому будет доступен веб-сервер
IPAddress local_ip(192, 168,   4, 22);
// Это ip адрес шлюза, этот шлюз будут использовать wifi клиенты подключившиеся к точке доступа
IPAddress gateway (192, 168,   4,  9);
// Это маска подсети
IPAddress subnet  (255, 255, 255,  0);
// Экземпляр веб-сервера
WebServerImpl server(80);
// Статические переменные, отправляемые на каждом get запросе в котором присутствует нужная url
int volume_value = 0;
boolean on_value = false;
long time_value = 0;
int value_time = 0;
int device_state = 0;
int state_serial = 0;
int serial_char;
int timingonoff = 0;
char charTable[] = {'a','b','c','d','e'};

// Это обработчик для всех запросов GET POST и т.д.
void handle_not_found() {
  // Предварительно установим код ответа
  int response_code = 404;
  // Обрабатываем только GET запросы, на все остальные отвечаем 404-м кодом
  if (server.method() == HTTP_GET) {
    if (server.uri().indexOf("/volume_increase") >= 0) {
      // TODO Вот тут что то делаем, был запрошен /volume_increase
      // Устанавливаем значение volume_value, чтоб как-то проинформировать
      // что обрабатывался запрос /volume_increase
       state_serial = 1;
       serial_char = 0;
      volume_value = valume_sound + 1 ;
      // Устанавливаем код ответа
      response_code = 200;
    } else if (server.uri().indexOf("/volume_decrease") >= 0) {
      // TODO
      serial_char = 1;
      state_serial = 1;
      volume_value = valume_sound - 1 ;
      response_code = 200;
    } else if (server.uri().indexOf("/device_on") >= 0) {
      // TODO
      serial_char = 3;
      state_serial = 1;
      int device_state = 1
      on_value = true;
      response_code = 200;
    } else if (server.uri().indexOf("/device_off") >= 0) {
      serial_char = 2
      state_serial = 1;
      int device_state = 0
      on_value = false;
      // TODO
      response_code = 200;
    } else if (server.uri().indexOf("/timer_increase") >= 0) {
      state_serial = 1;
      // TODO
      value_time = value_time + 10;
     time_value = time_value + 10;
     timingonoff = 1;
      response_code = 200;
    } else if (server.uri().indexOf("/timer_decrease") >= 0) {
      // TODO
      state_serial = 1;
      value_time = value_time - 10;
      time_value = time_value - 10;
      timingonoff = 1;
      response_code = 200;
    } else if (server.uri().indexOf("/state") >= 0) {
      response_code = 200;
    }
  }
  // Код ответа ответа был установлен отличным от 404, значит нужно ответить статусом
  if (response_code != 404) {
    // Строим json документ
    StaticJsonDocument<256> doc;
    // Устанавливаем значение "volume"
    doc["volume"] = volume_value;
    // Устанавливаем значение "on"
    doc["on"] = on_value;
    // Устанавливаем значение "time"
    doc["time"] = time_value;
    // Серилизуем json документ в строку
    String output;
    serializeJson(doc, output);
    // Отправляем ответ
    server.send(response_code, "application/json", output);
  } else {
    // Отправляем ответ
    server.send(response_code, "text/plain", "File Not Found\n\n");
  }
}
void setup() {
  Serial.begin(115200);
  // Инициализируем wifi
  // Отключаем сохранение параметров во флеш
  WiFi.persistent(false);
  // Выключаем wifi совсем
  WiFi.mode(WIFI_OFF);
  // Устанавливаем параметры ip для интерфейса AP
  WiFi.softAPConfig(local_ip, gateway, subnet);
  // Выбираем режим работы wifi
  WiFi.mode(WIFI_AP);
  // Задаем идентификатор SSID
  WiFi.softAP("MY-ESP");
  // Настраиваем веб-сервер
  // Устанавливаем обработчик для всех запросов, определять методы и запрошенные url будем в нем
  server.onNotFound(handle_not_found);
  // Запускаем сервер
  server.begin();
}
void loop() {
  // Даем серверу обрабатывать запросы
  server.handleClient();
  if (state_serial == 1)
  {
    Serial.println(charTable[serial_char]);
  }
  else {
    state_serial = 0;
  }

    if (Serial.available() > 0)  //если есть доступные данные
  {

    incomingByte = Serial.read();

  }
  // таймер сна
  if (timingonoff == 1)
  {
    if (mytiming >= 10)
  {
    int gettiming = mytiming * 60;
    gettiming = gettiming * 1000;
    for (int clocktime = gettiming; clocktime > 0; clocktime--)
    {
      mytiming = clocktime;
      if (mytiming == 0)
      {
Serial.println("C");
      }
    }
  }
}
else
{
  timingonoff = 0;
  }
}
 

Mestniy2496

Member
Друзья. Доброго дня. Вернулся к этому проекту. Проблемка... Как сделать чтобы андроид и вифи находились в одной сети?
 

Mestniy2496

Member
Друзья. Доброго дня. Вернулся к этому проекту. Проблемка... Как сделать чтобы андроид и вифи находились в одной под сети?
 

Mestniy2496

Member
Друзья. Доброго дня. Вернулся к этому проекту. Проблемка... Как сделать чтобы андроид и вифи находились в одной под сети? Можно ли сделать чтобы маска под сети на андроиде была такой же как и на арде?
 

Mestniy2496

Member
Может быть нужно создать точку доступа на арде? И подключиться к ней с помощью андроид? Только не пойму как это сделать...
 
Сверху Снизу