Пользует ли кто WiFi-модули ESP8266 ? Поделитесь впечатлениями.

bes666x13
Offline
Зарегистрирован: 28.03.2015

KVadik пишет:

bes666x13 пишет:
Тогда как прошить ESP, без Ардуино и прошивальщика?! Как ваще понять что ESP живой? Как в ESP забить данные моей Wi-Fi сети?

Ну я бы рекомендовал иметь USB-TTL адаптер. Но можно и Вашу ардуинку для этого использовать. Адаптер у неё на борту. Пропишите в ардуинку любой скетч не использующий сериал-порт и подключив к RX ардуины RX esp8266, а к TX соответственно TX получите USB-TTL адаптер из ардуины. Ну и 3.3 вольта для esp8266 (обычно) надо. И учтите, что она достаточно прожорливая во время работы радиомодуля.

 

Адаптер заказал уже, едет он :)) Но сами знаете как у нас Китай+Почта России работают :))

Т.е. все таки ардуино не вытягивает по 3.3 вольтам потребление ESP? 

Тогда вопрос в том, где взять теперь 3.3 вольта и нужные мощности по токам? Что посоветуете?

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

Ну я для экспрементов использую такой комплект. А для боевого дежурства уже понижающую схему со стабилизатором достаточной мощьности и питанием или от аккумулятора или от USB/блока питания 5в.  

MikSer
Offline
Зарегистрирован: 27.01.2012

bes666x13 пишет:

Timon_1 пишет:

Ну тогда да. откуда берешь 3,3В? может источник не вытягивает?

3,3 вольт беру с Ардуино Уно. 

Запитай от отдельного источника питания. Уна может и не вытянуть.

bes666x13
Offline
Зарегистрирован: 28.03.2015

MikSer пишет:

bes666x13 пишет:

Timon_1 пишет:

Ну тогда да. откуда берешь 3,3В? может источник не вытягивает?

3,3 вольт беру с Ардуино Уно. 

Запитай от отдельного источника питания. Уна может и не вытянуть.

 

Оказывается UNO отдает 50 мА по 3.3 вольтам, а ESP-01 я так понимаю нужно 150-200 мА (если верить форумам).

Будем искать значит от чего запитаться. Или может чего посоветуете?

С прошивкой разобрался...Через UNO прошивается, ничего сложного.

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

bes666x13 пишет:

а ESP-01 я так понимаю нужно 150-200 мА (если верить форумам).

Форумам можно и не верить, а вот по даташиту самого чипа у него потреблядство до 215 мА на передаче.

art100
Offline
Зарегистрирован: 09.03.2014

bes666x13 пишет:

Оказывается UNO отдает 50 мА по 3.3 вольтам, а ESP-01 я так понимаю нужно 150-200 мА (если верить форумам).

Будем искать значит от чего запитаться. Или может чего посоветуете?

С прошивкой разобрался...Через UNO прошивается, ничего сложного.

Я тоже эту ветку и фотографии читать смотреть не буду. Столько времени прошло а одно и тоже. Глупость человеческая и безграмтность на одном уровне. Интересно Арарис тоже всвою ветку уже не заходит. День сурка блин.

Araris
Offline
Зарегистрирован: 09.11.2012

Заходит, конечно, хочет для себя нового-интересного чего найти. Тема действительно слишком большая, многа букафф, зачем ее читать, проще в очередной раз повыяснять, как же все-таки правильно питать ESP8266, сколько же все-таки миллиампер, и т. д., и т. п. День Сурка - хорошо сказано.

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Всем привет! Дошли и у меня руки поиграться с модулем ESP8266-01, прошивки пробовал разные но остановился на AT22SDK100-2015-03-20-boot1.3b.bin(взял на русском ресурсе ESP8266, но имя ее не верно, если зашить показывает версию 1.2), прошивка работает нормально. Пробовал AT22SDK100-2015-03-20-boot1.2.bin(показывает версию 1.3b, видимо попутаны названия), виснет она после ребута, вернее виснет uart у нее, приходитмя разрывать конект и соединять вновь.

Но это все предисловие, суть далее:
Модуль вожу в режим точки доступа или смешанный, настраиваю мультиподключение.
АТ командой поднимаю TCP сервер, IP стандартный 192.168.4.1, порт 80.
Конекчусь к точке, не важно открытая или с шифрованием, пробовал по разному.
Открываю любой браузер, пробовал разные и пытаюсь войти на сервер.
Модуль получает запрос клиента, в ответ передаю ответ сервера на отправку данных, указываю ID и длину передаваемых данных, после появления приглашения, отправляю строку HTML кода, всего 114 символов. Практически мгновенно получаю ответ модуля о успешной отправке.
Не зависимо отправляю данные с дуни или просто с переходника USB-UART, данные отображаются в браузере примерно через 2-3 минуты, то есть он все это время крутит и пытается отобразить страничку. Скорость передачи UART 115200. В чем засада? Так и должно быть? Так медленно передаются данные по воздуху?
Скорость WiFi соединения от 1 до 54мбит, модуль рядом с ноутом.

Araris
Offline
Зарегистрирован: 09.11.2012

Засада не в скорости, а в том, что именно отправляете (и что ожидает получить браузер), то есть, как браузер узнаёт, что он уже всё получил и ждать больше не надо. В общем, без текста скетча вопрос трудно ответить. Что там в 114-х символах ?

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Почти пустой шаблон HTML. Он отображается, но долго.

Вот шаблон: <HTML><HEAD><TITLE>ESP8266</TITLE></HEAD><BODY><H1>My_ESP8266</H1>This test My WiFi Server ESP8266</BODY></HTML>

После отправки модуль мгновенно отвечает SEND OK.

Смотрел передачу во воздуху, байтики очень медленно бегут.

Скетч тут ни при чем, так же происходит при отправке через переходник USB-UART.

Сейчас сменил канал, соседи оказались на одном, но особого прироста это не дало.

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Идет такой диалог, после него открывается страница в браузере, но очень долго:

AT+CIPMUX=1
OK
AT+CIPSERVER=1,80 
OK
0,CONNECT
+IPD,0,158:GET / HTTP/1.1
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.4.2; TM-9767 Build/KOT49H)
Host: 192.168.4.1
Connection: Keep-Alive
Accept-Encoding: gzip
1,CONNECT
+IPD,1,402:GET / HTTP/1.1
Host: 192.168.4.1
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Linux; Android 4.4.2; TM-9767 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Safari/537.36
Accept-Encoding: gzip,deflate
Accept-Language: ru-RU,en-US;q=0.8
X-Requested-With: com.android.browser
2,CONNECT
AT+CIPSEND=0,114
OK
><HTML><HEAD><TITLE>ESP8266</TITLE></HEAD><BODY><H1>My_ESP8266</H1>This test My WiFi Server ESP8266</BODY></HTML>
SEND OK

 

Araris
Offline
Зарегистрирован: 09.11.2012

"Connection: keep-alive" очень смущает...

У меня заголовок выглядит так:

const char http_OK_short[] PROGMEM = {
"HTTP/1.1 200 OK\r\n"
"Content-Type: text/html\r\n"
"Connection: close\r\n"
"\r\n"
"<html>"};

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

"Connection: keep-alive" Это нормальная строка выводимая при подключении и при ответе браузера.

С тормозами разобрался, причина тайминги, по дефолту 3 минуты, изменить можно только после подьема сервера.

kotwi
Offline
Зарегистрирован: 17.04.2015

Gres пишет:

"Connection: keep-alive" Это нормальная строка выводимая при подключении и при ответе браузера.

С тормозами разобрался, причина тайминги, по дефолту 3 минуты, изменить можно только после подьема сервера.

Gres, расскажите подробнее где и что/как настраивали, чтобы решить проблему задержки (тайминги)?

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Модуль по умолчанию после включения или перезагрузки выставляет тайм-аут 180 секунд. То есть сервер закроет соединение через 3 минуты, до этого момента браузер ждёт, по прошествии таймаута или отобразится страница или сообщение, что страница недоступна. Настраивается командой: AT+CIPSTO Установить таймаут сервера TCP/IP AT+CIPSTO=<таймаут> AT+CIPSTO? таймаут в секундах от 0 до 28800. Команда от работает только после запуска сервера, до этого момента выдаст ошибку.
Тоесть включаем сервер, настраиваем тайм-аут скажем на 3 секунды( главное, чтоб данные успели уйти), далее после запроса клиента, в ответ отправляем тип подключения, множественное и длинну передаваемых данных, в ответ на последующее приглашение шлем данные.
Для всего этого Дуня не нужна, можно воспользоваться ей лишь как переходником usb-uart, или взять переходник. Все команды можно слать в ручную в терминале и смотреть ответы, тогда станет понятно, как автоматизировать процесс уже с помощью Дуни.
Весь список АТ команд доступен скажем тут: http://esp8266.ru/esp8266-at-commands-v019/

Хотя, может я ещё чего то недопонимаю, только пару дней, как взял модуль в руки, ещё многое мне не понятно. С запросами клинент-сервер и обратно ещё не работал, сам учусь. Возможно соединение можно оборвать раньше командой, пока ещё не все понятно. Только наброски. Есть результат, а для полноценной отладки нужно время. У меня нет определённой задачи, есть интерес, это моё хобби, доставляющее кучу удовольствия в свободное время. :)

MaksMS
Offline
Зарегистрирован: 11.03.2013

Более верно - нужно передававать в заголовке Content-Length: , но его нужно высчитывать, а для этого нужно всю страничку загрузить в память, а памяти у ардуино на базе 328 чипа всего 1кб..т.е. не реально так сделать..Хватит на 200..300 байт странички.

bes666x13
Offline
Зарегистрирован: 28.03.2015

KVadik пишет:

bes666x13 пишет:

а ESP-01 я так понимаю нужно 150-200 мА (если верить форумам).

Форумам можно и не верить, а вот по даташиту самого чипа у него потреблядство до 215 мА на передаче.

Ну мы ж все по старинке, по русскому...методом тыка...а так не всегда получается.

kotwi
Offline
Зарегистрирован: 17.04.2015

День добрый!

Опишу свою проблему. Я не люблю городить огород, т.е. ставить ардуину+ЕSP, потому что с моей задачей справится и сам модуль. Задача такова. На устройство я ставлю ESP. При включении устройства создается открытая  Wi-Fi сеть "your ssid", устройство запускает сервак с определенным портом. Я с ноута подключаюсь к этой сети плюс я подключаюсь как КЛИЕНТ на адрес 192.168.4.1 на определенный порт. Все коннект установлен. Теперь работа: когда на GPIO2 ESP происходит смена логическо нуля на единицу, мне нужно незамедлительно послать сообщение (самое короткое) на ноут (на клиент), он его примет, расшифрует. Но вот проблема: если, к примеру на GPIO2 происходит быстрая смена логических уровней (ну, например, 3 раза в секунду, то на ноутбуке в программе Hercules я вижу что принимается всего например одно сообщение). Если быть кратким, то смвысл таков: в системе клиент(ноутбук, Hercules)-сервер(ESP) при возникновении события на ESP (чтение состояния GPIO) не удается, скажем, 4 раза в секунду (здесь именнно изменение состояния порта) послать какое-либо короткое сообщение, то есть есть потери. 

Скетч ниже. У меня вкрадывается сомнение, что чтение порта в ESP+IDE идет слишком долго, в этой связи все медленно. Была идея в терминал вывести время до команды чтения и время после. И еще меня тревожит то, что IDE для ESP весьма сырой.\

Кто что кажет?

#include <ESP8266WiFi.h>

const char* ssid = "your-ssid";
int odom=2;
int op=0;
WiFiServer server(8888);

void setup() {
  delay(7000);
  Serial.begin(115200);
  delay(10);
  pinMode(2, INPUT);
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.softAP(ssid);
  Serial.println("");
  Serial.println("WiFi connected");
  
  // Start the server
  server.begin();
  Serial.println("Server started");
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (client) {
    Serial.println("new client");
    while(client.connected()){
    if (digitalRead(odom)==1 && op==0) {
    client.print("21");
    //delay(1);
    }
    op=digitalRead(odom);
  delay(1);
  }
 Serial.println("Client disconnected!") ; 
  }
   
}

 

makaroff
Offline
Зарегистрирован: 13.06.2014

Доброго времени суток!

Вот подскажите... Есть погодная станция включающая в себя Arduino + Ethernet Shild W5100 + BMP180 + DHT22 + DS18B20 + i2c LCD. Информация собирается в виде Давление+ВлажностьВкомнате+ТемператураВкомнате+ТемператураНаУлице и выводиться:

а) на экран;

б) веб-страничка к которой могу подключиться из любой точки мира.

Хочу убрать W5100 и заменить его на ESP8266, чтобы избавится от сетевого провода идущего к корпусу станции. Дома естественно роутер с Wi-Fi.

Отсюда вопросы:

Как реализовать? Перенести код сервера с ардуино на esp, т.е. развернуть его на модуле, а модуль заставить слушать данные которые будет отдавать ардуино по UART? Например ввиде: "759, 54, 23, -15" ?

Прошу не бить, сильно - искал в сети, но так ничего и не нашёл.

 

Araris
Offline
Зарегистрирован: 09.11.2012

makaroff пишет:

Хочу убрать W5100 и заменить его на ESP8266...

...Перенести код сервера с ардуино на esp, т.е. развернуть его на модуле, а модуль заставить слушать данные которые будет отдавать ардуино по UART?

1. Поместится ли код Вашего сервера в ESP8266 - вот в чем вопрос.

2. Если все нормально работает на W5100, то гораздо проще заменить, client.print() на самописный esp8266send() , используя ESP8266 для приема-передачи через Wi-Fi.

NEGr
Offline
Зарегистрирован: 12.05.2014

Всем доброго времени суток.

Работую с модулем в связке с arduino. Не без трудов удалось наладить стабильную работу и на отправку и на прием. Необходимо строго прописывать login и пароль для сети в скетче для arduino. И тут возник такой вопрос. Можно ли как-то прошить arduino через Esp8266? Т.е. вначеле подключиться к esp8266 как к точке доступа, и потом отправить скетч для перепрошивки arduino, какм-то образом введя arduino в режим прошивки.

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Модуль при конекте выдаёт в терминал много информации о подключении, все это нужно чем то обрабатывать. Проще думаю программно реализовать на Дуне при приёме определённой команды от модуля записывать нужную информацию в свою епром, скажем также учётные данные и использовать их потом в коде при конекте считывая перед этим их из епром.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Открыл для себя самую малось функционала сабжа... И скажу я вам это прсто офигенно...

tesak47
Offline
Зарегистрирован: 22.01.2015

ВСем привет! Поднял Web Server на прошивке Node MCU. Использую Arduino nano + esp8266 01, по данному материалу: https://github.com/MHendricks/Esp8266-to-Arduino-WebServer-example.

Работает почти без нареканий. Но в процессе тестирования вылезли некоторые БАГИ!!!

Когда с ESP работает одно устройство (смартфон Galaxy s4), все нормально! Можно переподключиться к Esp спустя час и модуль все так же отправляет данные на Дуину. Но если подключить к ESP второй смарт работа продолжается, т.е. можно на одном смарте отправлять сигнал включить 13 пин, а на втором выключить и все будет работать. Но спустя пару минут обмен данными между ESP и дуиной прекращается. т.е. сеть работает, данные на ESP шлются, а на дуину данные не отсылаются, ком порт молчит. Отсюда складывается впечатление, что проблема с кодом для дуины. Вот только не знаю где именно его подправить.

Может кто сможет. На всякий случай прикрепляю код:

char inData[20]; // Allocate some space for the string
char inChar=-1; // Where to store the character read
byte index = 0; // Index into array; where to store the character
int led = 13; 
 
#include <SoftwareSerial.h>
// software serial #1: TX = digital pin 10, RX = digital pin 11
SoftwareSerial portOne(10,11);
 
void setup()
{
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);
  blinkLed(5, 250, 100, led);
  
  // Large delay seems to be required to allow the ESP time to boot before
  // the arduino starts listening over serial.
  delay(5000);
 // Open serial communications and wait for port to open:
 // Serial is being used for debugging it is not needed for ESP communication
 // though you could probably use hardware serial for communication.
  Serial.begin(9600);
  /*while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }*/
 
  // Start each software serial port
  portOne.begin(9600);
}
 
void loop()
{
  // Contrived example of how to read the data from software serial
  // and trigger something on the arduino.
   if (readData()) {
     if (!strcmp(inData, "open")) {
       Serial.println("Opening the Back");
       digitalWrite(led, HIGH);
     } else if (strcmp(inData, "close") == 0) {
       Serial.println("Closing the Back");
       digitalWrite(led, LOW);
     } else if (strcmp(inData, "startup") == 0) {
       Serial.println("Testing Startup sequences.");
       blinkLed(5, 250, 100, led);
       blinkLed(10, 50, 50, led);
       blinkLed(1, 500, 0, led);
     } else if (strcmp(inData, "stepAway") == 0) {
       Serial.println("Step Away from the suit.");
       blinkLed(20, 100, 100, led);
     } else if (strcmp(inData, "unibeam") == 0) {
       Serial.println("Firing Unibeam.");
       blinkLed(20, 25, 25, led);
     } else {
       Serial.print("Unknown:");
       Serial.print(inData);
       Serial.println(":");
     }
   }
   delay(100);
}
 
void blinkLed(int times, int onTime, int offTime, int ledPin) {
   for (int i=0; i < times; i++) {
     digitalWrite(ledPin, HIGH);
     delay(onTime);
     digitalWrite(ledPin, LOW);
     delay(offTime);
   } 
}
 
bool readData() {
    // By default, the last intialized port is listening.
    // when you want to listen on a port, explicitly select it:
    portOne.listen();
    bool hasData = portOne.available() > 1;
    for (int i=0;i<19;i++) {
        inData[i]=0;
    }
    while (portOne.available() > 0) // Don't read unless
                                   // there you know there is data
    {
        if(index < 19) // One less than the size of the array
        {
          inChar = portOne.read(); // Read a character
          if ((inChar == '\n') || (inChar == '\r')) {
            index = 0;
            return hasData;
          }
          inData[index] = inChar; // Store it
          index++; // Increment where to write next
          inData[index] = '\0'; // Null terminate the string
        }
    }
    //inData = inData.trim();
    index = 0;
    return hasData;
}
 
mcshel
Offline
Зарегистрирован: 17.10.2014

Посоветуйте хорошую схему AC->DC конвертора или готовый для питания ESP8266, желательно небольшого размера, чтобы все влезло в подрозетник.

Если у кого-то есть проверенный вариант, который не будет греться и относительно безопасен, напишите плиз.

avton
avton аватар
Offline
Зарегистрирован: 11.05.2014
mishgan
Offline
Зарегистрирован: 25.04.2014

Подключил такой модуль http://ru.aliexpress.com/item/1pcs-ESP8266-remote-serial-Port-WIFI-wireless-module-through-walls-best/32280714838.html к ардуино нано по такой схеме http://www.martyncurrey.com/arduino-to-esp8266-serial-commincation/ . Питание 3,3 в взял тоже с ардуино. Но работать как надо она откзывается. На команду AT выдает непонятные символы. Что я не так делаю....

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

mishgan пишет:

Что я не так делаю....

Вот это не правильно: Питание 3,3 в взял тоже с ардуино.

Причем об этом тут даже на этой странице есть.

MikSer
Offline
Зарегистрирован: 27.01.2012

Это карма форума. 100500 раз говорили в этой ветке!!! ВНЕШНЕЕ ПИТАНИЕ КАРЛ! Внешнее!

mishgan
Offline
Зарегистрирован: 25.04.2014

Подключил внешнее питание.... Нифига не помогло.... Менял строчку  ESPserial.begin(9600);  подстовлял различные скорости.... не помогает. Причем телефон видит эту плату как точку доступа под именем AI-THINKER_F93F1B

MikSer
Offline
Зарегистрирован: 27.01.2012

А прочесть весь топик религия не позволяет? Пробовали чере USB <-> TTL конвертер подключить к компу этот модуль и в терминале поработать? Какая версия прошивки? Где исходник? Что за ESPserial.begin(9600); Вы какую то библиотеку используете? А вдруг она не совместима с прошивкой модуля? 

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

Ну сцыль на исходник он дал, "ESPserial" это у него объект SoftwareSerial.

Некоторые прошивки могут требовать по умолчанию скорость и 115200, а SoftwareSerial на высоких скоростях не работает.

mishgan
Offline
Зарегистрирован: 25.04.2014

А если не через SoftwareSerial то как?

Araris
Offline
Зарегистрирован: 09.11.2012

1. Найдите USB <-> TTL конвертер, подключите ESP8266 к компьютеру.

2. Терминалом определите скорость, на которой в данный момент общается ESP8266. Узнайте версию прошивки.

3. Найдите для этой прошивки АТ-команду для изменения скорости порта, поставьте нужную (меньшую) скорость.

4. Подключите модуль к Ардуино и пользуйтесь SoftwareSerial.

P.S. Да, можно обойтись одной Ардуиной, но это гораздо геморнее будет.

metaforos
Offline
Зарегистрирован: 09.04.2012

Чего-то я читал, читал... Да вот не вычетал решения отправки данных с сервера на ESP. В принципе, суть вопроса такова. Есть Ардуина. Е ней подключены датчики (датчик тока, температуры и т.д.) К ардуине подключен esp. Нужно по запросу от сервера, отправлять ему ответ о состоянии датчиков. Без запроса, вручную, все получается. А вот как сделать обратную связь?

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

metaforos пишет:
Нужно по запросу от сервера, отправлять ему ответ о состоянии датчиков. Без запроса, вручную, все получается. А вот как сделать обратную связь?

Ну в таком случае уже ардуина будет сервером(!) и по запросу клиента(!) отправит ему состояние датчиков.

Из педивикии:

Се́рверное програ́ммное обеспечение (се́рверангл. server от to serve — служить; множественное число се́рверы, в разговорном языке также употребляется сервера́) — в информационных технологиях — программный компонент вычислительной системы, выполняющий сервисные (обслуживающие) функции по запросу клиента, предоставляя ему доступ к определённым ресурсам или услугам.

NEGr
Offline
Зарегистрирован: 12.05.2014

metaforos пишет:
Чего-то я читал, читал... Да вот не вычетал решения отправки данных с сервера на ESP. В принципе, суть вопроса такова. Есть Ардуина. Е ней подключены датчики (датчик тока, температуры и т.д.) К ардуине подключен esp. Нужно по запросу от сервера, отправлять ему ответ о состоянии датчиков. Без запроса, вручную, все получается. А вот как сделать обратную связь?

web сервер на arduino поднимать не обязательно.

с вашего веб сервера отправляете запрос на ардуино( пример на php):

$command="!".$command_val."$";	 //формируем текст комманды
$fp = fsockopen($ip, 80, $errno, $errstr);//открываем соединение с устройством
fwrite($fp,$command); //отправляем команду			
fclose($fp);

на ардуино считываете полученое сообщение и производите необходимые вам действия, по типу этого:

//блок с библиотеками 
//блок с определениями
#define SSID "xxxxxxxxx"              //имя сети
#define PASS "xxxxxxxxx"               //пароль
#define DST_IP "000.000.00.00"         //ip web сервера
#define START_CHAR '!'                //начальный символ принимаемого сообщения
#define END_CHAR '$'                  //конечный символ принимаесого сообщения
#define power_pin 9                   //пин включения вытяжки
#define hardReset 6                   //пин arduino, на котором весит ch_pd
//блок с константами
const String id="ar01";               //id устройства
//блок с переменными
String WiFiMessage="";                //принимаемое сообщение
unsigned int readChar;                //переменная для посимвольного чтения сообщения
boolean readingWiFi;                  //флаг чтения сообщения
static unsigned long time_fade_wifi;  //счетчик времени для wifi
boolean connected=false;              //флаг соединения WiFi 
bool flag_power = 0;                  //флаг включения

void setup()
{
    pinMode(hardReset, OUTPUT);
    Serial.begin(9600);
    Serial.setTimeout(5000);
    Serial1.begin(9600);
    Serial1.setTimeout(5000);
    digitalWrite(hardReset, LOW);
    delay(100);
    digitalWrite(hardReset, HIGH);
    pinMode(power_pin, OUTPUT);
    delay(5000);
    for(int i=0;i<10;i++)
    {
        if(connectWiFi(true))
        {
            connected = true;
            break;
        }
    }
    delay(2000);
}

void loop()
{
    if (Serial1.available() > 0 && !readingWiFi)
    {
        if (Serial1.read() == START_CHAR)
        {
            WiFiReadData();
        }
    }  
       	
    if(millis()>time_fade_wifi && !readingWiFi)
    {
       if(!SendControl("ping"))
       {
            connected = false;
            digitalWrite(hardReset, LOW);
            delay(100);
            digitalWrite(hardReset, HIGH); 
            for(int i=0;i<5;i++)
            {
                if(connectWiFi(true))
                {
                    connected = true;
                    break;
                }
            }
            //if (!connected){reset}                  
       }
       time_fade_wifi=millis()+600001;        
    }   
}
//функция чтения данных, пришедших от web-сервера
void WiFiReadData()
{
    WiFiMessage = "";
    readingWiFi = true;
    iniReading:
    if (Serial1.available() > 0)
    {
        readChar = Serial1.read();
        if (readChar == END_CHAR)
        {
            goto endReading;
        }
        else
        {
            WiFiMessage+=char(readChar);
            goto iniReading;
        }
    }
    goto iniReading;
    endReading:
    readingWiFi = false;
    ///здесь парсинг сообщения и последующие действия
     
}
/*функция отправки сообщения web-серверу*/
boolean sendMSG(String modul_id,String value)
{   
    String cmd = "AT+CIPSTART=1,\"TCP\",\"";
    cmd += DST_IP;
    cmd += "\",80";
    Serial1.println(cmd);
    Serial1.flush();
    delay(500);    
    String msg= "GET /ajax/ar.php?";
    msg+= "id=";
    msg+= modul_id;
    msg+= "&val=";
    msg+= value;
    msg+= "\r\n";
    Serial1.print("AT+CIPSEND=1,");
    Serial1.println(msg.length());
    if (Serial1.find(">"))
    {
        Serial1.print(msg);
        Serial1.flush();
    } 
    if(Serial1.find("OK"))
    {
        return true;
    }
    else
    {
        return false;
    }
}
/*функциЯ контролЯ отправки сообщениЯ*/
boolean SendControl(String value)
{
    boolean sended=false;     
    for(int i=0;i<5;i++)
    {
		if(sendMSG(id,value))
		{
			sended = true;
			break;
		}
        delay(200);
    }
    return sended; 
}
/*функция конекта к wifi сети*/
boolean connectWiFi(boolean TCP)
{
    Serial1.println("AT+CWMODE=1");
    String cmd="AT+CWJAP=\"";
    cmd+=SSID;
    cmd+="\",\"";
    cmd+=PASS;
    cmd+="\"";
    Serial.print("Connecting to ");
    Serial.println(SSID);
    Serial1.println(cmd);
    delay(1000);
    if(Serial1.find("OK"))
    {
        Serial.println("OK, Connected to WiFi.");
        ///включаем режим приема/передачи
        Serial1.println("AT+CIPMODE=0");
        Serial1.println("AT+CIPMUX=1");
        Serial1.flush();
        delay(1000); 
	if(TCP)
	{		
	    Serial.println("Starting TCP Server");
	    Serial1.println("AT+CIPSERVER=1,80"); 
	    Serial1.flush();
	    delay(1000);
	    if (Serial1.find("OK")){Serial.println("OK, Strart TCP Server");}else{Serial.println("Can not start TCP Server");}       
	    Serial1.println("AT+CIPSTO=120");  
	    Serial1.flush();
	    delay(1000);  
	}
        //отправлЯем информацию об устройстве при его старте
        Serial.println("Senting Startup info");   
        if(sendMSG(id,"start"))
        {
            Serial.println("Startup info was send");
            return true;
        }
        else
        {
            Serial.println("Startup info was not send");
            return false;   
        }
    }
    else
    {
        Serial.println("Can not connect to the WiFi.");
        return false;
    }
}

 

mishgan
Offline
Зарегистрирован: 25.04.2014

Вот нашел статейку связи ардуино и esp8266 http://iot-playground.com/2-uncategorised/31-esp8266-wifi-touch-screen-thermostat

В этой статье есть хорошая фишка - питание 3,3в с TFT шилда. Можно ли так делать или сгорит все нафик....?

avton
avton аватар
Offline
Зарегистрирован: 11.05.2014

Надо смотреть сколько кушает сам шилд от 3.3 вольта,думаю немного. Сгореть не должно .

mishgan
Offline
Зарегистрирован: 25.04.2014

У меня потреблении всей схемы 220mА. Соответственно экран потребляет меньше. Стабилизатор этот AMS1117-3.3. По даташиту написано 0 ≤ Iout ≤ 1A. ESP8266 потребляет 200-250mA  .... То я прихожу к выводу что будет все нормально....  

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Приветсвую всех. Вот тоже решил поюзать ESP8266. Взял себе парочку ESP-07 и уже готовые печатные платки под распайку модуля. Выглядит собранная конструкция вот так: http://www.electronic-circuits-diagrams.com/store/img-large/10-pcs-esp8266-esp-07-remote-serial-port-wifi-module-io-adapter-plate-expansion_271915610258.jpg

Подключаю: подаю питание 3,3В (5В USB через отдельный стабилизатор), подключаю TX/RX к переходнику на PL-2303HX, земли модуля и переходника соединены. Открываю терминал, ставлю скорость 115200. Набираю команду AT - в ответ возвращается АТ, набираю AT+RST - возвращается AT+RST, AT+GMR - аналогично. В общем, что бы не набирал - всегда возвращается тоже самое. Как будто замкнуты TX/RX, но я их прозвонил - они не замкнуты. Если выбрать другую скорость соединения - крякозябры. Если поменять местами RX/TX - вообще не отвечает. Проверил вывод CH_PD - подтянут к VCC через 10К, при вкл. на нём присутвует 3,3В.

При этом модуль успешно запускается. WiFi точка доступа появляется, смартфон к ней подключается. Пробовал на двух модулях - ведут себя одинаково.

Что это можеть быть? Почему модули не реагируют корректно на команды?

UPD: В момент подачи питания выводится сначала какой-то мусор, а потом "MEM CHECK FAIL!!!", "Ai-Thinker Technology Co. Ltd. ready". То есть, модуль таки пашет. Но получается корявая/битая прошивка? Или это аппаратный сбой памяти?

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

Jeka_M пишет:

Подключаю: подаю питание 3,3В (5В USB через отдельный стабилизатор), подключаю TX/RX к переходнику на PL-2303HX, земли модуля и переходника соединены. 

Я покупал в исполнении ESP-12. Подключал по схеме http://esp8266.ru/esp8266-podkluchenie-obnovlenie-proshivki/#full , та которая первая.

Когда брал питание от USB тоже не хотел работать, пришлось запитать от внешнего источника, далее стабилизатор 3.3В. Соединен с ардуино без каких либо согласований уровней. У блоков питания ESP и Arduino общий минус. Все работает.

Araris
Offline
Зарегистрирован: 09.11.2012

Jeka_M"сначала какой-то мусор" - это китайские иероглифы, а вот "MEM CHECK FAIL!!!" как бы намекает... Может быть Вам стоит перепрошить модуль ?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Ничего не понимаю... Перепрошил модуль двумя разными прошивками - не помогло. Команды AT также не обрабатывает. Хотя со смартфона нормально подключается, подхватывает IP адрес через DHCP. Только имя сети сменилось с AI-THINKER_FA29FC на ESP_FA29FC. У модуля адрес 192.168.4.1, скорость соединения 54Mbps.

Прошивал 0.9.5 и 0.9.2.2 (у которой UART на скорости 9600). На 0.9.5 при включении в терминал выводится "ready", на 0.9.2.2 "[System Ready, Vendor:www.ai-thinker.com]"

При вводе AT команд или любой абракадабры - возвращается в ответ тоже самое...

Единственное, что ещё я не пробовал - отдельный блок питания, но что-то сомневаюсь что поможет. Раз точка доступа запускается и держит соединение со смартфоном, не перезагружается, уровень сигнала хороший - значит питания с USB стационарного компа хватает. Чувствую, косяк где-то рядом, но вот найти не могу... И главное полазил по интернетам - похоже ни у кого такое не встречалось...

Araris
Offline
Зарегистрирован: 09.11.2012

IMHO, питание тут изначально ни при чем. Перепрошивали через тот же переходник ? Есть ли возможность подключить модуль к Ардуино ?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Araris пишет:

Перепрошивали через тот же переходник ? Есть ли возможность подключить модуль к Ардуино ?

Да, перепрошивал через тот же переходник. Ничего не пересоединял, только накинул землю на GPIO0 для входа в режим прошивки.

С дуиной ещё не пробовал. Пока не углублялся в код, хотел для начала через терминал потестить. Чтобы долго не рыскать, не подкините какой-нибудь example для atmega328? Попробую с ардуиной потестить. Спасибо.

Araris
Offline
Зарегистрирован: 09.11.2012

Я пользую такой :

#include <SoftwareSerial.h>

#define ESP8266_RX          7    //
#define ESP8266_TX          8    //

SoftwareSerial ESPSerial(ESP8266_RX,ESP8266_TX);

void setup()
{
ESPSerial.begin(9600);
ESPSerial.setTimeout(2000);
Serial.begin(9600);
Serial.println("ESP8266 Monitor");
ESPSerial.println("AT+RST");
}

void loop()
{
while ( Serial.available() )    { ESPSerial.write(Serial.read()); }
while ( ESPSerial.available() ) { Serial.write(ESPSerial.read()); }
} 

 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

За примерчик спасибо, попробую чуть позже.

Я тут достучался наконец-то до модуля через утилитку "ESP8266 Config". Отвечает как через нажатие кнопочек в GUI-интерфейсе, так и через тамошний терминал. AT = ОК, AT+GMR = 0018000902, AT+RST = перезагрузка модуля. То есть, всё работает. 

До этого пробовал в терминале Arduino, и довольно популярном Terminal v1.9b by Bray. Видимо где-то здесь собака порылась. То ли с кодировкой при отправке команд что-то, то ли ещё чего...

В общем я рад, что модуль оказался всё-таки рабочий, а не брак.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

После команд надо окончание строки CR+LF(\r\n), в терминале у Br@@y это настраивается. но не стоит по умолчанию...тоже долго бился в своё время)

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Yarik.Yar пишет:

После команд надо окончание строки CR+LF(\r\n), в терминале у Br@@y это настраивается. но не стоит по умолчанию...тоже долго бился в своё время)

Бинго! :) Настроил терминал в Arduino IDE (NL+CR) и Terminal 1.9 (CR+LF), всё заработало.

P.S. Сейчас проверил второй модуль, который не перепрошивал. Изначально в них была зашита свежая фирменная прошивка AI-THINKER:

AT+GMR AT version:0.25.0.0(Jun 5 2015 16:27:16)
SDK version:1.1.1
Ai-Thinker Technology Co. Ltd.
Jun 23 2015 23:23:50
 
При включении:
 
2nd boot version : 1.4(b1)
  SPI Speed      : 40MHz
  SPI Mode       : QIO
  SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000