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

Нужна помощь Esp8266+Uno+Oled+RTC

Yakov

New member
День добрый,
Приобрел esp8266-01 и сейчас осваиваю с Ардоино Уно.
Так же имеются модули :RTC 3231 and Oled LCD Display 0.96''.
Пытался собрать такую схему :
Время считывается и выводиться на LCD и так же через esp8266 , который должен подключаться к домашнему раутеру, наблюдается по web.

Сложности с которыми я столкнулся (не решенные) :

На esp8266 дефолтаная прошивка... Не получается сконфигурировать esp8266 на подключение к дом. роутера и чтобы он при этом как сервер работал.

Так же пытался (без успеха) , чтобы esp8266 управлялся из прописаного кода (конфигурации, setup, init) , ну и так же , чтобы я мог с Serial Monitor давать ему команды и видеть их выполнения в этом же Serial Monitor. Реально ли такое или я загнул ?

Когда брал простой пример для esp8266 (рабочий) , и добавлял к нему LCD с RTC 3231 (тоже рабочий код (считывает время и пишет на LCD ) ) , то вместе , часть кода для esp8266 работает не корректно .

Заранее благодарю за помощь.
 

Victor

Administrator
Команда форума
На esp8266 дефолтаная прошивка... Не получается сконфигурировать esp8266
Первый путь
1. для начала - наладьте связь с ESP8266 через USB-TTL в терминал, поиграйтесь AT командами вручную
2. Прошейте свежую прошивку, повторите п.1
3. Поиграйтесь AT командами уже из скетча ардуины (тут лучше брать ардуину с двумя портами, если с одним, то SoftSerial на дебаг терминал)
4. собираете уже все вместе с OLED

Второй путь
1. Заменить ESP-01 на ESP-12 (ESP-07), убрать из схемы Arduino вообще.
2. Arduino IDE для ESP8266 и делаете свою прошивку под вашу задачу

Третий - не использовать AT, попробовать NodeMCU

Ну и четвертый - сделать свою Piccolino по их подобию

и это еще не все - вариантов просто масса!
 

Yakov

New member
Первый путь
1. для начала - наладьте связь с ESP8266 через USB-TTL в терминал, поиграйтесь AT командами вручную
2. Прошейте свежую прошивку, повторите п.1
3. Поиграйтесь AT командами уже из скетча ардуины (тут лучше брать ардуину с двумя портами, если с одним, то SoftSerial на дебаг терминал)
4. собираете уже все вместе с OLED
USB-TTLя нет , поэтому поигрался уже с АТ командами через Ардуино , и как клиент и как точка доступа. Нашел кое какой Web сервер на режиме "точка доступа" , и тот работал через 1 место и не со всех браузеров.
Что мне даст обновление прошивки (на моём начальном этапе экспериментов) ?

Я таки предполагаю использовать 8266 именно через Ардуино , так как, конечная задумка будет на Ардуино с 5-канальным шим освещением , управлением N-ым количеством релюшек , ну и датчики всякие. А 8266 будет связывать Ардоино с телефоном для обзора статуса и изменения настроек.

Так вот , для обучающего процесса , пытаюсь считать время с RTC ,отобразить время на ОЛЕД и через 8266 на компе , и так же зажечь СД на Ардуино с той же странички отображающей время.
 

Yakov

New member
Спасибо.
ESP к ardulino - это круто,
это как мотор от мерседеса на телегу прикрутить.
еще не хватает детекторного приемника чтобы wifi принимать.
я бы выкинул ardulino, но у меня его нет.
вариант надцатый
купить за 400 рублей devkit на ESP и выкинуть ardulino
Есть Ардуино и ESP8266 и с этим я собираюсь строить поставленную задачу. Я же не спрашивал что мне купить ...
 

JustACat

Moderator
Команда форума
это как мотор от мерседеса на телегу прикрутить.
Ой таки и любите же вы передергивать. Но спорить с вами не будем, просто промолчим.
Есть Ардуино и ESP8266 и с этим я собираюсь строить поставленную задачу
Верно говорите, если вам так проще, или у вас задача так стоит - то так и делайте, все норм.
Вот только вы бы расписывали все как-то по подробнее. А то я вот толком не понял, что у вас конкретно из описанного работает, а что нет?
Вот все, что вы там описали с Ардуино, часами, экраном и т.п. только без ESP - работает уже?
И отдельно Arduino с ESP без всего остального - работает?
Это я намекаю на то, что задачу все же лучше частями решать, а не пытаться надергать кусков кода из кучи примеров, сразу все подключить и пытаться найти - что не работает. Это слишком сложная задача выходит.

А так, поддержу @Victor'а: даже если вы хотите для начала поработать именно с AT прошивкой - то ее все равно сразу однозначно под обновление на последнюю. Как обновить - у нас написано в документации, примеров много.

Далее из личного опыта скажу: на стандартных прошивках (на AT) поднимать на ESP веб-сервер - дело неблагодарное.
То есть это возможно в принципе, но во-первых, весь процессинг приходящего/уходящего для web вам придется делать на Arduino (а ресурсов на ней кот наплакал, тем более, если вам еще дисплей с графикой нужен).
Тут кто-то делал такое, и вполне работало, но, использовался не Ардуино на мелкой АВР, а целый STM32 - у которого куда больше ресурсов.
А во-вторых, это будет работать через раз. В общем, это подходит только для обучения, чтобы в общем понимать лучше, как это все может работать.
Отказываться сразу от этого может и не стоит. Попробуйте, хуже точно не будет. Просто имейте ввиду, что дальше, скорее всего, придется перейти в ESP на какую-то стороннюю прошивку, либо вообще написать свою.
Гляньте в ссылке на документацию (у меня в подписи) есть множество ссылок с примерами реализации разного, в т.ч, и на AT с ардуино (там пометки есть).
А так же тут на форуме где-то была выложена реализация часов на Ардуино с RTC + ESP для забирания точного времени с инета по NTP.

Вот. А когда и если наиграетесь с AT - то дальше много путей.
Можно искать и пробовать чужие готовые прошивки (например, попробовать разобраться с прошивкой малого веб-сервера от @pvvx), можно сварганнить что-то небольшое на Lua, закачав на ESP прошивку NodeMCU, можно написать свою прошивку под ESP (для этого у нас тут на форуме тоже много всего: и UDK, и Sming, и Arduino IDE).

Пробуйте, читайте, задавайте вопросы!
Только большая просьба: задавайте вопросы правильно. Четко формулируйте, как можно короче, и чтобы ответить можно было коротко. Иначе отвечать многие просто не захотят.
 

nikolz

Well-known member
добрый день,
я думал, что чел хочет сделать устройство дешево быстро и качественно.
Но если задача состоит в том, чтобы соединить вместе все ,
что лежит в ящике , тогда пардон.
 

Yakov

New member
Ой таки и любите же вы передергивать. Но спорить с вами не будем, просто промолчим.

Верно говорите, если вам так проще, или у вас задача так стоит - то так и делайте, все норм.
Вот только вы бы расписывали все как-то по подробнее. А то я вот толком не понял, что у вас конкретно из описанного работает, а что нет?
Вот все, что вы там описали с Ардуино, часами, экраном и т.п. только без ESP - работает уже?
И отдельно Arduino с ESP без всего остального - работает?
Это я намекаю на то, что задачу все же лучше частями решать, а не пытаться надергать кусков кода из кучи примеров, сразу все подключить и пытаться найти - что не работает. Это слишком сложная задача выходит.

А так, поддержу @Victor'а: даже если вы хотите для начала поработать именно с AT прошивкой - то ее все равно сразу однозначно под обновление на последнюю. Как обновить - у нас написано в документации, примеров много.

Далее из личного опыта скажу: на стандартных прошивках (на AT) поднимать на ESP веб-сервер - дело неблагодарное.
То есть это возможно в принципе, но во-первых, весь процессинг приходящего/уходящего для web вам придется делать на Arduino (а ресурсов на ней кот наплакал, тем более, если вам еще дисплей с графикой нужен).
Тут кто-то делал такое, и вполне работало, но, использовался не Ардуино на мелкой АВР, а целый STM32 - у которого куда больше ресурсов.
А во-вторых, это будет работать через раз. В общем, это подходит только для обучения, чтобы в общем понимать лучше, как это все может работать.
Отказываться сразу от этого может и не стоит. Попробуйте, хуже точно не будет. Просто имейте ввиду, что дальше, скорее всего, придется перейти в ESP на какую-то стороннюю прошивку, либо вообще написать свою.
Гляньте в ссылке на документацию (у меня в подписи) есть множество ссылок с примерами реализации разного, в т.ч, и на AT с ардуино (там пометки есть).
А так же тут на форуме где-то была выложена реализация часов на Ардуино с RTC + ESP для забирания точного времени с инета по NTP.

Вот. А когда и если наиграетесь с AT - то дальше много путей.
Можно искать и пробовать чужие готовые прошивки (например, попробовать разобраться с прошивкой малого веб-сервера от @pvvx), можно сварганнить что-то небольшое на Lua, закачав на ESP прошивку NodeMCU, можно написать свою прошивку под ESP (для этого у нас тут на форуме тоже много всего: и UDK, и Sming, и Arduino IDE).

Пробуйте, читайте, задавайте вопросы!
Только большая просьба: задавайте вопросы правильно. Четко формулируйте, как можно короче, и чтобы ответить можно было коротко. Иначе отвечать многие просто не захотят.
Спасибо за разъяснение,
Я попробовал 8266 в "ручном" режиме; вроде все работает нормально:
Код:
  if (Serial.available() > 0) {
    char ch = Serial.read();
    Serial1.print(ch);
  }
  if (Serial1.available() > 0) {
    char ch = Serial1.read();
    Serial.print(ch);
  }
После попробовал код такого плана , который полностью бежал с Ардуино. Это только часть кода... В setup конфигурируется 8266 как сервер. Код рабочий.
Код:
      delay(1000);
      int connectionId = Serial1.read() - 48; // subtract 48 because the read() function returns
      // the ASCII decimal value and 0 (the first decimal number) starts at 48

      String webpage = "<h1>Hello</h1>&lth2>World!</h2><button>LED1</button>";

      String cipSend = "AT+CIPSEND=";
      cipSend += connectionId;
      cipSend += ",";
      cipSend += webpage.length();
      cipSend += "\r\n";

      sendData(cipSend, 1000, DEBUG);
      sendData(webpage, 1000, DEBUG);

      webpage = "<button>LED2</button>";

      cipSend = "AT+CIPSEND=";
      cipSend += connectionId;
      cipSend += ",";
      cipSend += webpage.length();
      cipSend += "\r\n";

      sendData(cipSend, 1000, DEBUG);
      sendData(webpage, 1000, DEBUG);

      String closeCommand = "AT+CIPCLOSE=";
      closeCommand += connectionId;
      closeCommand += "\r\n";
      sendData(closeCommand, 3000, DEBUG);

Код Олед и RTC рабочий и выглядит так:
Код:
  int second, minute, hour, date, month, year, temperature;
  second = Clock.getSecond();
  minute = Clock.getMinute();
  hour = Clock.getHour(h12, PM);
  date = Clock.getDate();
  month = Clock.getMonth(Century);
  year = Clock.getYear();
  temperature = Clock.getTemperature();

  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(0, 0);
  display.print("20");
  display.print(year, DEC);
  display.print('-');
  display.print(month, DEC);
  display.print('-');
  display.print(date, DEC);
  display.print('\n');
  if (hour < 10)
  {
    display.print("0");
    display.print(hour, DEC);
  }
  else
  {
    display.print(hour, DEC);
  }
  display.print(':');
  if (minute < 10)
  {
    display.print("0");
    display.print(minute, DEC);
  }
  else
  {
    display.print(minute, DEC);
  }
  display.print(':');

  if (second < 10)
  {
    display.print("0");
    display.print(second, DEC);
  }
  else
  {
    display.print(second, DEC);
  }
  display.print('\n');
  display.setTextSize(1);
  display.print("Temperature=");
  display.print(temperature);
  display.print(" C");
  display.print('\n');

  display.display();
  //delay(1000);
После соединение этих двух рабочих частей , получил , что 8266 работает не корректно (Даже не выполняется Setup как положено).
Это весь код целиком:
Код:
#include <Wire.h>
#include <DS3231.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SoftwareSerial.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define DEBUG true

bool Century = false;
bool h12, PM;
byte year, month, date, DoW, hour, minute, second;

DS3231 Clock;
SoftwareSerial Serial1(10, 11);

void setup() {
  Wire.begin();
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 0.96" 128X64 OLED LCD Display)I2C АДРЕС.

  Serial.begin(9600);
  Serial1.begin(9600);
  delay(3000);
  Serial.print("Init\n");
  sendData("AT+RST\r\n", 2000, DEBUG); // reset module
  sendData("AT+CWMODE=2\r\n", 1000, DEBUG); // configure as access point
  sendData("AT+CIFSR\r\n", 1000, DEBUG); // get ip address
  sendData("AT+CIPMUX=1\r\n", 1000, DEBUG); // configure for multiple connections
  sendData("AT+CIPSERVER=1,80\r\n", 1000, DEBUG); // turn on server on port 80
  delay(5000);
}

void loop() {
  if (Serial.available() > 0) {
    char ch = Serial.read();
    Serial1.print(ch);
  }
  while (Serial1.available()) {
    if (Serial1.find("+IPD,"))
      delay(1000);
    int connectionId = Serial1.read() - 48; // subtract 48 because the read() function returns
    // the ASCII decimal value and 0 (the first decimal number) starts at 48

    String webpage = "<h1>Hello</h1>&lth2>World!</h2><button>LED1</button>";

    String cipSend = "AT+CIPSEND=";
    cipSend += connectionId;
    cipSend += ",";
    cipSend += webpage.length();
    cipSend += "\r\n";

    sendData(cipSend, 1000, DEBUG);
    sendData(webpage, 1000, DEBUG);

    webpage = "<button>LED2</button>";

    cipSend = "AT+CIPSEND=";
    cipSend += connectionId;
    cipSend += ",";
    cipSend += webpage.length();
    cipSend += "\r\n";

    sendData(cipSend, 1000, DEBUG);
    sendData(webpage, 1000, DEBUG);

    String closeCommand = "AT+CIPCLOSE=";
    closeCommand += connectionId; // append connection id
    closeCommand += "\r\n";

    sendData(closeCommand, 3000, DEBUG);
  }
}

int second, minute, hour, date, month, year, temperature;
second = Clock.getSecond();
minute = Clock.getMinute();
hour = Clock.getHour(h12, PM);
date = Clock.getDate();
month = Clock.getMonth(Century);
year = Clock.getYear();
temperature = Clock.getTemperature();

display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(0, 0);
display.print("20");
display.print(year, DEC);
display.print('-');
display.print(month, DEC);
display.print('-');
display.print(date, DEC);
display.print('\n');
if (hour < 10) {
  display.print("0");
  display.print(hour, DEC);
}
else {
  display.print(hour, DEC);
}
display.print(':');
if (minute < 10) {
  display.print("0");
  display.print(minute, DEC);
}
else {
  display.print(minute, DEC);
}
display.print(':');

if (second < 10) {
  display.print("0");
  display.print(second, DEC);
}
else {
  display.print(second, DEC);
}
display.print('\n');
display.setTextSize(1);
display.print("Temperature=");
display.print(temperature);
display.print(" C");
display.print('\n');
display.display();
//delay(1000);
}

String sendData(String command, const int timeout, boolean debug) {
  String response = "";
  Serial1.print(command); // send the read character to the esp8266
  long int time = millis();
  while ( (time + timeout) > millis())  {
    while (Serial1.available() > 0)    {
      // The esp has data so display its output to the serial window
      char c = Serial1.read(); // read the next character.
      response += c;
    }
  }
  if (debug)  {
    Serial.print(response);
  }
  return response;
}
Почему такая фигня ?
 

JustACat

Moderator
Команда форума
Yakov, ну и нужно смотреть в ту либу, которая у вас для работы с ESP используется...
Лично я у себя, к примеру, выяснил, что работать с ESP на delay и Serial.find - невозможно... То есть оно работает, но никакой надежности и повторимости. Чуть где что запнулось - и весь скрипт летит к чертям.
Так что если и работать с AT прошивками на ESP с Arduino - то нужно все четко самому прописывать в части управления ESP и анализа ответов от нее. Учитывать все возможные падения и тормоза посреди данного процесса и еще кучу всяких условий.
В общем, пописав в том ключе некоторое время, я плюнул на это гиблое дело :-Р и начал писать прямо под ESP - это оказалось проще...
 

Victor

Administrator
Команда форума

Yakov

New member
Понравилось )) , да погорячился я с "Это что ?", читаю....
А на смотреть на свободную память при помощи нашего примера правильнее будет в процессе работы программы в разное время и место кода ? Правильно я понял ?

Yakov, ну и нужно смотреть в ту либу, которая у вас для работы с ESP используется...
Лично я у себя, к примеру, выяснил, что работать с ESP на delay и Serial.find - невозможно... То есть оно работает, но никакой надежности и повторимости. Чуть где что запнулось - и весь скрипт летит к чертям.
Так что если и работать с AT прошивками на ESP с Arduino - то нужно все четко самому прописывать в части управления ESP и анализа ответов от нее. Учитывать все возможные падения и тормоза посреди данного процесса и еще кучу всяких условий.
В общем, пописав в том ключе некоторое время, я плюнул на это гиблое дело :-Р и начал писать прямо под ESP - это оказалось проще...
Ок. Спасибо , я также заметил что find в варианте (RTC+OLED+8266) делало не пойми чего ..... Я думаю последовать вашему совету и часть задач по связи перенести в 8266.
 

Yakov

New member
День добрый,
Вчера потратил часа 3 на обновление прошивки : делал через Ардуино (с ресетом на gnd). Пробовал ставил 21, 22 и 23 и на всех та же проблема - АТ+RST приводит к зависанию... На АТ отвечает ОК, на АТ+GMR тоже отвечает нормально , а на АТ+RST иногда таки выдает немного кода с Ready в конце , а чаще всего наглухо виснет.
Код:
OK
AT


OK
AT+RST


OK

ets Jan  8 2013,rst cause:4, boot mode:(3,7)

wdt reset
load 0x40100000, len 23248, room 16
tail 0
chksum 0xda
load 0x3ffe8000, len 3020, room 8
tail 4
chksum 0x4e
load 0x3ffe8bd0, len 7272, room 4
tail 4
chksum 0xa6
csum 0xa6

Error wifi_config! Clear.
l

OpenLoaderSDK v1.0
nv version:VER1

ready
AT+GMR

AT version:0.23.0.0(Apr 24 2015 21:11:01)
SDK version:1.0.1
http://esp8266.ru/

OK
AT+RST


OK

ets Jan  8 2013,rst cause:4, boot mode:(3,7)

wdt reset
load 0x40100000, len 23248, room 16
tail 0
chksum 0xda
load 0x3ffe8000, len 3020, room 8
tail 4
chksum 0x4e
load 0x3ffe8bd0, len 7272, room 4

Далее висит , иногдa на первой строчке зависает ("ets Jan 8 2013,rst")
 
Последнее редактирование:

JustACat

Moderator
Команда форума
Yakov, питание?
Общение не через ардуино попробуйте.
PS: пожалуйста, прячьте код под спойлер (устаешь колесико мыши крутить до нужного места), спасибо.
 

Victor

Administrator
Команда форума
[inline]Error wifi_config! Clear.[/inline]
Не забывайте, что прошивка v0.23 экспериментальная. Для того, чтобы убедится, что дело не в прошивке - попробуйте стабильную, проверенную версию AT v0.22 SDK 1.0.0 20.03.2015 загрузчик v1.2 и описание команд к ней ESP8266 AT команды v0.22
 

Yakov

New member
Питание с ардо 5 В через ЛМ1117.
Общение не через ардуино попробуйте.
TTL-USB еще не доехал. Через что ещё возможно?

Не забывайте, что прошивка v0.23 экспериментальная. Для того, чтобы убедится, что дело не в прошивке - попробуйте стабильную, проверенную версию AT v0.22 SDK 1.0.0 20.03.2015 загрузчик v1.2 и описание команд к ней ESP8266 AT команды v0.22
Пробовал и 21 и 22 так же.
 

JustACat

Moderator
Команда форума
Питание с ардо 5 В
Скорее всего питания не хватает, т.к. на ардуинку оно же с USB идет... Возьмите отдельное питание, например, от какого-то мощного БП (от ПК или еще чего), хотя бы на 1 ампер, а лучше на два - с него подайте на 1117 - с нее уже на ESP. Не забудьте только земли соединить у всего этого добра.
Через что ещё возможно?
Тогда подождите USB-UART. И через ардуинку вы напрямую с ПК общаетесь, замыкая Reset ардуинки, или через нее через скетч пустой?
 
Сверху Снизу