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

Lion777
Offline
Зарегистрирован: 20.05.2016

А как же 5в не убьет модуль вайфай ? На ардуино на контактах тх и рх 5в?

---

Все, сегодня смог подключится по ЮАРТ, скорость выставил 115200 и пошло, еще не работало из-за того, что после набора команды нажимал ЕНТЕР на цифровой клаве, с ним не работало, запустил и с ардуино и с PL2303HX (питание 5В, дрова только до WIN7), питание подавал со стаба 3.3в, земля общая, запустился и на putty и на coolterm и на встроенном мониторе от ардуино, выставляйте также в мониторах перевод строки и возврат каретки, потом буду изучать модуль, а пока хоть после АТ увидел ОК )).

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

Baks пишет:

не получается запустить esp8266, вот что выдает монитор порта

warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed

при подачи питания 1 раз моргает светодеод на нем, и все, ничегоо в порт не шлет  и перепрошить не могу

подскажет кто что?

удалось частично запустить модуль, незнаю что помогло.. ковырялся в ide и нечайно удалил безвозврано все 3 версии в ключая библиотеки, после переустановки и замены блока питания модуль стал отзыватьсся на АТ команды. что очень порадовало...

но вот зайти на страничку с настройками (192.168.4.1) чегото не получается. пишет что не найден такой адрес, что посоветуете?

и у меня еще один вопрос самый важный ...

есть ардуинка, подключенная к esp8266  по uart (рх тх) ардуинка собирает строку и отправляет ее wifi модулю а та в свою очередь должна подключиться к интернету (к моему же роутеру который раздает интернет) если не подключена и послать строку мне на сайт

так вот кто обьяснит как что сделать с меньшими потерями и желательно без АТ команд, можно ли найти прошивку для esp8266  которая бы получала строку и пересылала бы ее по определенному адресу в интернете? а то что сайт ответит вернуть обратно ардуинке? слабоват я в этом буду рад любоу совету

вот кое что нашел пост 13  http://esp8266.ru/forum/threads/otpravka-get-zaprosa-na-sajt.406/

но не догоняю, откуда берется client.println();

что за клиент ? где обьявлен, какие пины работают с wifi модулем ... и да не совсем то так что доп нагрузка на ардуинку, неплохо было бы подгрузить этой задачей esp8266.

 

 

Lion777
Offline
Зарегистрирован: 20.05.2016

Пытаюсь АТ командами отправить запрос методом GET, но выдает busy s, подскажите как отправлять правильно запрос

AT+CIPSTART="TCP","www.google.com",80
OK
Linked
AT+CIPSEND=44 > GET / HTTP/1.1$0D$0AHost: www.google.com$0D$0A$0D$0A$0D$0A$0D$0A busy s...
 
SEND OK

и так

AT+CIPSTART="TCP","www.liga.net",80
OK
Linked
AT+CIPSEND=63 > GET / HTTP/1.1\r\nHost: www.liga.net\r\nConnection: close\r\n\r\n busy s...
 
SEND OK
 
+IPD,166:<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>

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

---

Значит решение, вся проблема, как я и предполагал, это в правильной отправке символов CR+LF или \r\n, другие мониторы порта как CoolTerm, Putty понимают \r\n просто как текст, я скачал терминал Terminal и с помощью него передаются служебные символы $0d это возврат каретки и $0a это перевод строки. В GET запросе не забывайте передавать хост.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

что у меня получилось...

получилось перепрошить модуль ESP

написал небольшой скетч для работы с вайфайем-- при включении конектится с вайфаем , и когда  от ардуинки получает строку то пересылает ее мне на сайт. то вся работа модуля которая мне нужна и мне этого хватает. Вроди работает нормально все но сделал небольшою фишку а тоесть (флаг-символ начала передали и так же конфа) все что между ними передаем дальше а остальное мусор и его удаляем.

так вроди все нормально пашет пока не дошло дело до передачи переменных

из ардуино передаю такую строку 

WiFiSerial.println("<t_t_k=20.6&t_t_r=0&h_ko=55.55&t_ko=22.55>");//конец передачи

все отлично проходит, 

если передаю строку принтами или собираю ее в целую а потом отправляю не проходит.

    StrWiFi = StrWiFi + " <h_ko=" ;
    StrWiFi = StrWiFi + 0.00; //H_DHT11 ;
    StrWiFi = StrWiFi + "&t_ko=" ;
    StrWiFi = StrWiFi + 0.00; //T_DHT11 ;
    StrWiFi = StrWiFi + '>' ;

  WiFiSerial.println(  StrWiFi );

в чем разница между этими двумя передачами? переменки не хочет принимать и цыфры тоже, а если сплошная строка то проходит.

pastry777
Offline
Зарегистрирован: 16.01.2014

для начала не ясно что вы пытаетесь здесь сделать:

StrWiFi = StrWiFi + 0.00; 

к строке приписать текст?тогда так StrWiFi = StrWiFi + "0.00"; 

вставить перенменную?тогда так к примеру StrWiFi = StrWiFi + temp;

в вашем случае лучше воспользоваться явным преобразованием

WiFiSerial.println((String)"<h_ko=" + humidity + "&t_ko=" + temp + ">");

 

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

Не знаю, поможет ли это Вам, но я в таких случаях люблю явно задавать преобразование в строку.

  StrWiFi += " <h_ko=" ;
  StrWiFi += String(0.00); // StrWiFi += String(H_DHT11) ;
  StrWiFi += "&t_ko=" ;
  StrWiFi += String(0.00); // StrWiFi += String(T_DHT11) ;
  StrWiFi += '>' ;

WiFiSerial.println(  StrWiFi );

 

pastry777
Offline
Зарегистрирован: 16.01.2014

аналогично =D

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

А если после сборки вывести в монитор последовательного порта ( Serial.println(StrWiFi); ), чтобы глазами увидеть результирующую строку ?

Кстати, как объявлена StrWiFi ?

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

Всем спасибо за помощ, в итоге у меня все получилось, и получилось только тогда когда удалил всю функцию и переписал ее руками без копирования, так и не понял в чем была проблема...

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

Строку просто обьявил String str = "";

а вот про явное преоброзование спасибо добавил, хотя и без него сейчас все работает :)

Lion777
Offline
Зарегистрирован: 20.05.2016

ребят, подскажите, пытаюсь с ардуино по сериал отправляю команду, а по софтсериал принимаю ответ, но ответ приходит какимето каракулями, частично правильно, частично каракули, скорость по софтсериал 115200, отправляю ардуино уно, напрямую приходит все верно... 

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

Считается, что Softserial не работает нормально со скоростями выше 57600, разные источники называют также 19200, 31250 и 38400.

Lion777
Offline
Зарегистрирован: 20.05.2016

я пробовал подключал есп по сериал, а ответ принимал по софтсериал на 9600, но то же глюки были, у вас все ровно и без ошибок приходит ?

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

Вообще говоря, фраза "с ардуино по сериал отправляю команду, а по софтсериал принимаю ответ", а равно и "подключал есп по сериал, а ответ принимал по софтсериал" мне не до конца понятна, лучше бы схему для наглядности, или скетч.

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

Я тоже не совсем понял, почему бы не принимать ответ по тому же аппаратному serial? Он же двунаправленный асинхронный.

Lion777
Offline
Зарегистрирован: 20.05.2016

я когда это писал )) так и подумал что не все поймут )), плохо выразился.

на плате ардуино подключал есп к сериал порту, а по софтсериал принимал на переходник pl2303 по монтору ответ от есп и наоборот, подключал есп к софтсериал, а ответ принимал на встроенный ch340g.

Смысл вот в чем, с ардуино по сериал, посылаю на есп команду, а что-бы посмотреть ответ, то ответ принимал  через софтсериал на монитор култерм, например, через pl2303

ну скетч тип такой


#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  String header = "GET /1/1.php?tmp=hj&hmd=20 HTTP/1.1\r\nHost: 192.168.1.109\r\nConnection: close\r\n\r\n";

  // set the data rate for the SoftwareSerial port
  mySerial.begin(115200);
  mySerial.print("AT\r\n");
  mySerial.print("AT+CIPSTART=\"TCP\",\"192.168.1.109\",80\r\n");
  delay(100);
  mySerial.print("AT+CIPSEND=");
  Serial.print(header.length());
  mySerial.println(header.length()+1);
  delay(500);
  mySerial.println(header);
}

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

 

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

Со скетчем стало гораздо понятнее, но в 16-й строке я по-прежнему вижу 115200. Может быть Вам стоит выставить (руками через консоль) на ESP скорость поменьше, например, AT+CIOBAUD=9600 и затем поменять в 16-й строке на 9600.

У меня ESP8266 (ESP-01 с АТ-прошивкой) на Мегах работают через "железные" последовательные порты, на Уно и Нано (нескольких) - через Softserial, везде на скорости 9600. Работают уже пару лет достаточно успешно.

Lion777
Offline
Зарегистрирован: 20.05.2016

это я так, набросал скетч на скорую руку, в том, что в ардуино, там 9600 стоит, а тут по ошибке написал 115200, скоро буду дома и буду разбиратся и посоветуйте прошивку, у меня esp201 там 0017 стоит, не менял так как через терминал на прямую норм работал, но в нем вроде скорость юарт не меняется, надо перепрошится. У меня цель - мониторить показания датчиков через интернет и управлять приборами иногда в ручном, иногда в автоматичном режиме относительно показаний датчков...

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

Увы, не посоветую, я сижу на достаточно старой прошивке AI-v0.9.5.0 AT Firmware по некоторым причинам.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

нужен совет коллеги, перепрошил свой модуль esp все нормально работает, но вот незадача в доступных wifi сетях вижу этот модуль и доступ к нему открыт(без пароля)  а установить пороль не могу, (подключаюсь к этой сети набираю 192.168.4.1 ) браузер пишет что нет такой страничички.

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

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

АТ прошивка?

Пароль устанаваливается при создании точки доступа (SoftAP):  AT+CWSAP_DEF=<идентификатор сети>,<пароль>,<канал>,<тип шифрования>

http://esp8266.ru/esp8266-at-commands-v022/

Lion777
Offline
Зарегистрирован: 20.05.2016

Кароч приключения ), решил перепрошится сегодня, но все чет пошло не так, при перепрошивке выдало ошибку 1792, все вроде делаю по инструкции, но никак...

---

А, не )), все таки прошился, не подходила чет прошивка, я взял с загрузчиком AT22SDK100-2015-03-20-boot1.2.bin вот эта пошла...

---

Нашел свою ошибку, оказывается нужно GPIO 00 просто сомкнуть кратковременно на землю до включения, а после включения разомкнуть и тогда прошиватся, а я оставлял постоянно замкнуто, так прошилась только одна прошивка.

Lion777
Offline
Зарегистрирован: 20.05.2016

откуда там должна появится страничка по адресу 192.168.4.1 ? У вас что сервер создан и на нем страничка висит ? 

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

Lion777 пишет:

откуда там должна появится страничка по адресу 192.168.4.1 ? У вас что сервер создан и на нем страничка висит ? 

нет сервера вот это беспокоит что доступ открыт, 

а сам модуль только получает строку подключается к роутеру и отправляет строку мне на сайт

Lion777
Offline
Зарегистрирован: 20.05.2016

ну правильно, так и должно быть, там странички нету, пароль меняется АТ командами, если у Вас АТ прошивка..

тип так AT+CWSAP="name","password" , ну смотря какая прошивка.

atech
Offline
Зарегистрирован: 06.06.2016

Здравствуйте!

Ситуация стандартная, но поиск решения проблемы не дал результатов.

Есть ESP-07.

AT+GMR
 
AT version:0.40.0.0(Aug  8 2015 14:45:58)
SDK version:1.3.0
Ai-Thinker Technology Co.,Ltd.
Build:1.3.0.2 Sep 11 2015 11:48:04
 
Пытаюсь отправить get запрос, в конце выдает следующую ошибку:
 
CONNECT

OK
AT+CIPSEND=78


OK
> CLOSED


busy s...

Recv 78 bytes
SEND FAIL
 

Искал везде по кроахам, но в итоге все равно вот такая ошибка. Не подскажите хотя бы источник, где можно почитать адекватную инструкцию, как отправлять get запросы с помощью at команд?

Lion777
Offline
Зарегистрирован: 20.05.2016

Выше есть пример отправки запроса методом GET и почитай про HTTP протокол.

78 байт чего ты отправил ? CLOSED ?

atech
Offline
Зарегистрирован: 06.06.2016

Да, спасибо, я видел примеры. 78 байт запроса. Он почему-то не отобразился. Есть ли нормальный перечень AT команд? Я пока видел только без GET запросов.

Lion777
Offline
Зарегистрирован: 20.05.2016

853 пост там как гет отправлять, по ат командам гугл в помощь

atech
Offline
Зарегистрирован: 06.06.2016

Lion777 пишет:

гугл в помощь

Спасибо!

Lion777
Offline
Зарегистрирован: 20.05.2016

У меня при использовании Ардуино как переходник ЮАРТ для подключения esp8266 в монитор сыпится мусор, предполагаю, что это из-за несовместимости 3,3в логики против 5в, кто что подскажет, иногда нормально приходит ответ, иногда мусор..  То прошивка затупила, перестал отвечать на АТ команды приходил всякий мусор, на сбросы и отключения питания не реагировал, перепрошился через FLASH_DOWNLOAD_TOOLS и pl2303 или это мой модуль какойто нежный - esp 201..

atech
Offline
Зарегистрирован: 06.06.2016

У меня мусор появляется при подключении. Подключаю вручную. Когда на логике было 5в, был только мусор.

Lion777
Offline
Зарегистрирован: 20.05.2016

ну, при подключении мусор приходит, скорее всего,  потому, что приходит служебная информация от есп на скорости 74880 бод или мусор при отправке команды?

atech
Offline
Зарегистрирован: 06.06.2016

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

atech
Offline
Зарегистрирован: 06.06.2016

Lion777 пишет:

я когда это писал )) так и подумал что не все поймут )), плохо выразился.

на плате ардуино подключал есп к сериал порту, а по софтсериал принимал на переходник pl2303 по монтору ответ от есп и наоборот, подключал есп к софтсериал, а ответ принимал на встроенный ch340g.

Смысл вот в чем, с ардуино по сериал, посылаю на есп команду, а что-бы посмотреть ответ, то ответ принимал  через софтсериал на монитор култерм, например, через pl2303

ну скетч тип такой


#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  String header = "GET /1/1.php?tmp=hj&hmd=20 HTTP/1.1\r\nHost: 192.168.1.109\r\nConnection: close\r\n\r\n";

  // set the data rate for the SoftwareSerial port
  mySerial.begin(115200);
  mySerial.print("AT\r\n");
  mySerial.print("AT+CIPSTART=\"TCP\",\"192.168.1.109\",80\r\n");
  delay(100);
  mySerial.print("AT+CIPSEND=");
  Serial.print(header.length());
  mySerial.println(header.length()+1);
  delay(500);
  mySerial.println(header);
}

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

 

кстати, этот код работает? Можно ли аналогично через serial1 сделать? только команды давать через serial1.print?

 

Lion777
Offline
Зарегистрирован: 20.05.2016

сам GET запрос в нем и подсчет байтов -  правильный, а работает ли он, точно не скажу, так как не проверял, я написал его на скорую руку, что-бы показать что я делаю. Там немного нужно доработать, добавить проверки ответов, а то будешь отправлять команды, а ответ может быть неверным, а команды будешь отправлять.. 21 строчка там вообще ненужна, это я смотрел как считает байты. Да можно через сериал1, если он у тебя есть. Уровни преобразовал на делителе?

atech
Offline
Зарегистрирован: 06.06.2016

на usb to ttl есть переключатель. а на мегу да, делители поставил. 

  mySerial.print("AT+CIPSEND=");
  Serial.print(header.length());
  mySerial.println(header.length()+1);
  delay(500);
  mySerial.println(header);
  

Serial.print(header.length());
mySerial.println(header.length()+1);

Эти строки что делают?

atech
Offline
Зарегистрирован: 06.06.2016

а, все, понял))

Lion777
Offline
Зарегистрирован: 20.05.2016

2 строчка ненужна, это так, а так отправляем запрос к серверу, тип так AT+CIPSEND=78, в 3 строчке считаем количество байт, что отправляем и ждем ответа ">" после этого отправляем сами данные "GET / HTTP/1.1\r\n\r\n" и т.д., ну то что в переменной header.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

господа вот я тоже думал работать точно так же как и вы с модулем esp но в итоге подумал и решил почему бы не поручить работу отправки самому модулю и не грузить тим ардуинку?

так я и поступил, написал скетч для esp и все что передаю отправляется мне на сайт 

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

также в скетче подключение к моему WIFI роутеру,  пока раборает неделю нормально..

вот скетч, кстати критика приветствуется

https://drive.google.com/folderview?id=0Bw55nc23As-3eWJJX3pHRTg1aDg&usp=drive_web&ddrp=1#

atech
Offline
Зарегистрирован: 06.06.2016

А можно подбробнее, как происходит взаимодействие с железом? Я бы тоже рад отправлять все напрямую с esp, но у меня много данных, которые я и отправляю, рождаются в ардуинке.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

В том то и дело что модую esp пофиг что переслать на сайт, ему нужно передать  <........строка......> 

 а все что ардуинка соберет то модуль и отправит главное чтобы это все было между символами начала и конца строки тоесть <  >

в ардуинке скетч такой ...

int tk = 45;

Serial1.print('<');// начало для передачи

Serial1.print("temp_kotel=");// то что хотим передать

Serial1.print( tk );// то что хотим передать переменная

Serial1.print('>');// конец для передачи

вот и все , в скетче для esp нужно изменить адрес сайта , и логин и пароль для wifi сети. вроди все!

atech
Offline
Зарегистрирован: 06.06.2016

Интересно. А не могли бы используемые библиотеки выложить?

Lion777
Offline
Зарегистрирован: 20.05.2016

зачем заключать строку в  "<" и ">" , это тип свой протокол ?))

Lion777
Offline
Зарегистрирован: 20.05.2016

это к ИДЕ Ардуино подключается среда разработки для esp8266 и можно писать скетчи напрямую в есп, все почти как и для ардуино.

---

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

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

да вы правы ссылка для установки досок есп прописал в скетче чтоб не потерять.

вот ссылка как устанавливается, посмотрите первое и второе видео https://www.youtube.com/watch?v=GDezCrN31KI&list=PLqquWc4xYgASLjCuRPLRQ0RZaMrPmk8SW наш коллека с форума выложил, за что ему благодарен!

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

Lion777 пишет:

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

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

Lion777
Offline
Зарегистрирован: 20.05.2016

А вы в курсе что этот модуль просто шлет ардуинку нафиг ? в нем памяти побольше чем в ардуино мега ?  ГПИО тоже не мало..

---

да, я кстати интересуюсь, зачем это ставите < > в запросе ?

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

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

а про память это конечно хорошо но большой минус в том что очень мало ног у модуля

и да это не запрос а 2 флага для модуля esp

atech
Offline
Зарегистрирован: 06.06.2016

Есть здесь кто-нибудь, кто умеет из терминала get запросы отправлять?

Lion777
Offline
Зарегистрирован: 20.05.2016

нужен терминал, который передает символы \r\n "Terminal" подойдет в 853 сообщении все написанно, что вписывать