• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь ESP8266 at команды

ДимДим

New member
Здравствуйте. Подключил ESP8266 к ардуино нано, модуль заработал и реагирует на AT команды отправляемые в монитор порта. К примеру:
PHP:
AT+CWMODE=2 — выбираем режим точки доступа AP;
AT+RST — перезапускаем модуль;
AT+CIPMUX=1 — устанавливаем несколько соединений;
AT+CIPSERVER=1,8080— настраиваем сервер TCP, устанавливаем номер порта;
AT+CIFSR — смотрим адрес IP для режима AP, примерно такой: APIP, “192.168.4.1”;
AT+CIOBAUD=9600 — устанавливаем скорость передачи последовательного порта на 9600 бод.
Но вот как сделать что бы при старте модуля эти команды сами отправлялись. Пробовал залить скетч -не работает. И команды уже в мониторе порта не отправляются (отправляются но нет ответа).
Скетч:
PHP:
#include <SoftwareSerial.h> //Подключаем библиотеку работы с Последовательным портом
SoftwareSerial mySerial(0, 1);
#define SPEED 115200
void setup()
{
Serial.begin(SPEED);
//Serial.setTimeout(500);

// set the data rate for the SoftwareSerial port
mySerial.begin(SPEED); //Открываем последовательный порт Esp, устанавливаем скорость 9600. Внимание!! убедитесь что Esp работает именно на этой скорости!!
mySerial.println("AT"); // Отправляем тестовую команду АТ в созданный порт, если всё работает в ответе должно прийти ОК (оно не приходит)

Serial.println("Start working!!!");
}

void loop() // run over and over
{
if (mySerial.available()){
  Serial.println(mySerial.readString());
}

String txt_in="";

if (Serial.available()) {
  txt_in=Serial.readString();
  Serial.println(txt_in);
  mySerial.println(txt_in);

}
}
Схема:
схема для прошивки esp8266 ESP-01.PNG
Как можно исправить?
 

CodeNameHawk

Moderator
Команда форума
Но вот как сделать что бы при старте модуля эти команды сами отправлялись.
Сами они не отправляются, но вы можете сами их оправить, поместив их в Setup.
Чтобы работало, надо добавить магии, примерно так
Код:
mySerial.println("AT\n\r");
 

ДимДим

New member
Я не сомневаюсь что это правильное решение. Но после заливки скетча ни чего не происходить, даже если в ручную отправлять команды в монитор порта.
 

CodeNameHawk

Moderator
Команда форума
Но после заливки скетча ни чего не происходить, даже если в ручную отправлять команды в монитор порта.
Что за скетч никто кроме вас не знает.
Начните с переделки схемы, потом установите скорость порта ниже.
Код:
if (Serial.available()) {
  txt_in=Serial.readString();
  Serial.println(txt_in);
  mySerial.println(txt_in)
Вы пробуете читать строку, а надо бы читать по одному символу.

По ссылке выше есть нормальный код для общения через ардуино.
Код:
void loop() {
  if ( espSerial.available() )
    Serial.write( espSerial.read() );
  if ( Serial.available() )
    espSerial.write( Serial.read() );
}
И ясное дело, что послав в Setup команду mySerial.println("AT\n\r"); вы не увидите ответ, пока не напишите код для этого.
 

ДимДим

New member
@Юрий Ботов спасибо за наводку. Я то чудак второй день прошиваю esp, и удивляюсь чего это она перестаёт отвечать на ат команды. Залил скетч в уно - заработало )
PHP:
#include <SoftwareSerial.h> //Подключаем библиотеку работы с Последовательным портом
SoftwareSerial mySerial(9, 10);

void setup()
{
  Serial.begin(9600);
  //Serial.setTimeout(500);
  mySerial.begin(115200); //Открываем последовательный порт Esp, устанавливаем скорость 115200. Внимание!! убедитесь что Esp работает именно на этой скорости!!
  mySerial.println("AT"); // Отправляем тестовую команду АТ в созданный порт, если всё работает в ответе должно прийти ОК
  Serial.println("Start working!!!");
}

void loop() // run over and over
{
  if (mySerial.available())
    {
      Serial.println(mySerial.readString());
    }
  String txt_in="";
  if (Serial.available())
    {
      txt_in=Serial.readString();
      Serial.println(txt_in);
      mySerial.println(txt_in);
    }
}
Но на этом мои искания не закончились.
Я думал что прошив esp скетчем в котором есть подключение к сети и т.п. таким образом заставлю его работать с 5v реле (с которым он и был приобретён в комплекте).
12.png
Но как оказывается без ардуинки он работать не будет или я ошибаюсь?
 

ДимДим

New member
Да, заработало и без ардуинки. Попробовал зажечь светодиод, подключив его к пину 2 и залив в есп скетч:
PHP:
 /**
* WiFi розетка. Версия 1.0
* Copyright (C) 2015 http://samopal.pro
*/
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

// GPIO, куда подцелено реле
uint8_t PowerPin = 2;
bool    PowerOn  = false;

// Имя хоста
const char* host = "esp8266-power";
// Вместо звездочек свои параметры WiFi сети
const char* ssid = "***";
const char* password = "****";

ESP8266WebServer server(80);

void setup() {
// Последовательный порт для отладки
  Serial.begin(115200);
  Serial.printf("\n\nFree memory %d\n",ESP.getFreeHeap());

  // Инициализация выхода реле
  pinMode(PowerPin , OUTPUT);
  digitalWrite(PowerPin , PowerOn);

// Подлючение к WiFi

  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(ssid, password);
  if(WiFi.waitForConnectResult() == WL_CONNECTED){
// Запуск WEB-сервера
     MDNS.begin(host);
     server.on ( "/", HTTP_handleRoot );
     server.onNotFound ( HTTP_handleRoot );
     server.begin();   
     //Serial.printf( "HTTP server ok! Open http://%s.local in your browser\n", host);
     Serial.println(WiFi.localIP());
  }
  else {
     Serial.printf("WiFi started is fail");
  }
    
}


void loop() {
  server.handleClient();
   delay(50);
}


/*
* Оработчик главной страницы сервера
*/
void HTTP_handleRoot(void) {
  bool stat = false;

  if( server.hasArg("stat") ){
     if( strncmp(server.arg("stat").c_str(),"1",1) == 0 )stat = true;
  }
  else {
     stat = PowerOn;
  }
 
  String out = "";

  out =
"<html>\
  <head>\
    <meta charset=\"utf-8\" />\
    <title>WiFi розетка</title>\
    <style>\
      body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
    </style>\
  </head>\
  <body>\
    <h1>WiFi розетка. Версия 1.0</h1>\n";

  if( stat ){
      out+="\
    <h2>Состояние: Включено</br>\
    <a href=\"/?stat=0\">Выключить</a></h2>\
    ";
  }
  else {
      out+="\
    <h2>Состояние: Выключено</br>\
    <a href=\"/?stat=1\">Включить</a><h2>\
    ";           
  }
   out+= "\
  </body>\
</html>";
   server.send ( 200, "text/html", out );
   if( stat != PowerOn ){
      PowerOn = stat;
      digitalWrite(PowerPin , PowerOn);
      if( PowerOn )Serial.println("Power is ON");
      else Serial.println("Power is OFF");
   }
  
}
Включается и выключается через веб интерфейс. Но стоит собрать модуль воедино (есп и реле), реле не щелкает (вкл/выкл), но светодиод на плате есп по прежнему реагирует на команды (загорается/тухнет). Видимо что то производители не так наваяли на схеме релюшки?
 

ДимДим

New member
Решено:
Код:
// GPIO, куда подцелено реле
uint8_t PowerPin = 0;
Пин на плате реле не 2 а 0.
 
Сверху Снизу