Таки ви хочете сказать шо если я от NTP-сервера по UDP получаю ( а перед этим отправляю ) стандартные 48 байт, то я их не получу или получу не так ?
Нет, конечно получите. У меня дома четыре ESP8266 общаются бродкастными UDP-пакетами достаточно стабильно (для меня), но добиться 100%-ной отправки/получения пакетов я не могу (впрочем, уже и не хочу, надоело бороться с проблемами АТ-прошивки). Основной вывод я сделал следующий: чем реже и чем меньше посылаем, тем стабильнее работает.
Кстати, сейчас экспериментирую с LUA на NODEMCU - в общем пока та же фигня.
Вот еще какая штука выяснилась: если модуль находится в режиме AT+CIPMUX=0 или если модуль находится в режиме AT+CIPMUX=1 но tcp сервер не поднят, то отправка на web-сервер осуществляется практически без потерь. Иначе отправка происходит стабильно ,но в определенный момент начинают идти одни неудачные попытки.
1. А кто знает как на прошивке NODEMCU выполнить заливку произвольного файла (ну картинку жапег например) в файловую систему модуля?
2. Порывшись в операторах Lua обнаружил соответствующую команду для компиляции скрипта в байт-код. Не взлетело. Кто пробовал, получилось? Вопрос актуальнейший т.к. байт-код и работает быстрей и места много меньше занимает.
Serial - это аппаратный порт. Он жестко привязан к пинам 10 и 11.
Это что-то новенькое... А не к пинам 0 и 1 часом ?
В случае Меги есть еще "three additional serial ports: Serial1 on pins 19 (RX) and 18 (TX), Serial2 on pins 17 (RX) and 16 (TX), Serial3 on pins 15 (RX) and 14 (TX)."
Также замечу, что SoftwareSerial скоростей выше 19200 не поддерживает.
Это что-то новенькое... А не к пинам 0 и 1 часом ?
В случае Меги есть еще "three additional serial ports: Serial1 on pins 19 (RX) and 18 (TX), Serial2 on pins 17 (RX) and 16 (TX), Serial3 on pins 15 (RX) and 14 (TX)."
Также замечу, что SoftwareSerial скоростей выше 19200 не поддерживает.
Сорри, все так. Что-то у меня переклинило с этими портами.
Хочу поделиться результатами по проблеме отправки данных со связки arduino+esp8266(07) на web server.
Если на esp8266 не поднимать tcp server, то отправка происходит без потерь. Тестировал почти неделю, отправляя данные(показания температуры) раз в минуту.
Для остальных своих устройтв, на которых необходим был tcp server для приема GET запросов от web servera, пришлось делать проверку отправки сообщений и если она неудачна, то производить отправку снова.
Тока мне этот метод не очень нравится)!! Может у кого есть какие-то мысли по поводу, почкему поднятый на esp tcp server влияет на отправку сообщений на web-server. Может быть причина в прошиве?
Если убираю вывод в Serial, то в ответ от сервера всегда тишина, если убираю вроде бы лишние HTTP заголовки, запрос GET не выполняется, сервер отдаёт 400 ошибку.
В текущем виде схема работает не стабильно,- периодически от сервера приходят пустые ответы.
Кто-то использует подобную схему обмена данными с сервером? Удалось получить стабильный результат?
Прошивки перебрал все доступные, на 0.9.2.2 (ESP_8266_v0.9.2.2 AT Firmware.bin) работает менее стабильно, но зато стабилизатор 1117 греется терпимо, на 0.9.5.0 (AT21SDK95-2015-01-24.bin) стабилизатор в момент обмена данными греется градусов до 80...
Увеличение буфера проблему не решило,- по-прежнему если не дублировать команды в Serial, то от сервера ответов нет, если же дублировать, то иногда даже работает, но постоянно присутствует мусор и обрезанное эхо запроса, а иногда данные с сервера так и не доходят:
Загадочная зависимость от Serial, возможно, связана с тем, что ESP не всегда успевает ответить, а вывод в Serial дает ему необходимую задержку.Еще неплохо бы для контроля добавить после отправки (после строки 67) if ( wifi.find("SEND OK") ).
Далее, если сработало while (wifi.available()) - это не значит, что в приемном буфере уже находятся ВСЕ принятые данные. Дайте задержку, пусть ESP успеет до конца принять.
ESP не настолько быстр, работайте с ним не торопясь )). Команда "AT+CIPSEND" во всех АТ-прошивках имеет немалые проблемы, об этом немало написано. Так что особо не удивляйтесь трудностям.
Кстати, строка 58 явно лишняя, почитайте про Serial.find()
За счёт избавления от длинной строки и замены её размером постоянной части заголовков и размером добавляемой переменной удалось сэкономить 86 байт бинарного кода (строка 53):
unsigned int len = 127 + data_ok.length();
За счёт ввода дополнительного символа ("%") в данные, для отсечения возвращяемых сервером заголовков, удалось оставить размер RX буфера SoftwareSerial в размере 64 байт (строка 87):
if(wifi.find("%")){
Это позволило сэкономить 192 байта ОЗУ по сравнению с RX буфером 256 байт или 448 байт экономии при размере буфера 512 байт.
На протяжении 2,5 часов беспрерывной работы по отправке/получению данных 1 раз в 8 секунд не выявлено ни одного (!!!) сбоя!
Код требует ещё доработки для отлова зависания модуля, пропадания сети, хардресета в случае неудачного пуска, но уже юзабелен по сравнению с тем, что было ранее.
Прошивка 0.9.5 (AT21SDK95-2015-01-24.bin), скорость 9600, SoftwareSerial, питание от Arduino Uno.
Загадочная зависимость от Serial, возможно, связана с тем, что ESP не всегда успевает ответить, а вывод в Serial дает ему необходимую задержку.Еще неплохо бы для контроля добавить после отправки (после строки 67) if ( wifi.find("SEND OK") ).
/* вырезано */
Спасибо за свежие мысли, они очень пригодились в устранении нестабильной работы модуля!
А ведь я уже хотел забросить это неблагодарное дело и уйти на Ethernet Shield :)
День добрый,
Я вижу что эта вифи карточка вызывает некий ажиотаж.
Как я понял , подключается свего по 2 dig пинам к ардуино.
Какие у нее минусы/проблемы/недостатки/ограничения ?
Хочу в конечном итоге по вифи подключаться к ардуино с компа/смарфона , видеть состояние (освещение и мощьность освещения, температуру,... ) , а так же менять это всё....
С увеличением таймаута до 5000мс, количество ошибок установления соединения падает до 2, на 3 попытке соединение устанавливается, но общее время между результативными попытками больше, чем при таймауте 2000мс и 4 ошибках.
Код немного модифицирован по сравнение с ранее опубликованным:
И самое неприятное, что на работе с Linksys E4200 всё вроде бы более или менее стабильно работает, а дома с Apple AirPort Express начинаются ошибки соединения. Причём если подключаюсь к ESP8266 напрямую и отправляю АТ команды вручную, то в 99% проблем не наблюдаю. Иногда вылезает DNS Fail при AT+CIPSTART
Подключил 07, хватило GPIO15 на землю и CH_PD на VCC, через 10K, внешнее питание 3.3В и к компу через USB-TTL на CP2102. Пашет, перешил на SDK v1.0.0 AT v0.22. В сети появился, со смарта подключился нормально. Сначала накосячил, вместо GPIO15 подключал GPIO5 :) Не работало.
Пока больше ничего не тестил.
Теперь можно поиграться :)
Я понимаю, что это вход, потому пофиг на резистор. Однако для игр можно через кнопку на землю. Я вчера так игрался, чтобы питание не передергивать.
Плюс сделал по аналогии с другими пинами, что бы не париться.
Может быть, при использовании UDP таких проблем не будет, не знаю.
Я знаю - будут ))) Пробовал и TCP, и UDP, проблемы те же. Размер пакета - 32 байта, кстати.
Я знаю - будут ))) Пробовал и TCP, и UDP, проблемы те же. Размер пакета - 32 байта, кстати.
Таки ви хочете сказать шо если я от NTP-сервера по UDP получаю ( а перед этим отправляю ) стандартные 48 байт, то я их не получу или получу не так ?
Таки ви хочете сказать шо если я от NTP-сервера по UDP получаю ( а перед этим отправляю ) стандартные 48 байт, то я их не получу или получу не так ?
Нет, конечно получите. У меня дома четыре ESP8266 общаются бродкастными UDP-пакетами достаточно стабильно (для меня), но добиться 100%-ной отправки/получения пакетов я не могу (впрочем, уже и не хочу, надоело бороться с проблемами АТ-прошивки). Основной вывод я сделал следующий: чем реже и чем меньше посылаем, тем стабильнее работает.
Кстати, сейчас экспериментирую с LUA на NODEMCU - в общем пока та же фигня.
Вот еще какая штука выяснилась: если модуль находится в режиме AT+CIPMUX=0 или если модуль находится в режиме AT+CIPMUX=1 но tcp сервер не поднят, то отправка на web-сервер осуществляется практически без потерь. Иначе отправка происходит стабильно ,но в определенный момент начинают идти одни неудачные попытки.
Может у кого есть мысли на этот счет??
Нет, конечно получите. У меня дома четыре ESP8266 общаются бродкастными UDP-пакетами достаточно стабильно (для меня)
А вы не можете выложить кусок скетча с отправкой и получением UDP-пакетов ?
Может я что-то делаю не так.
Я уж и побайтно пытался считывать из сериала, и массово, толку ноль.
Коннект с NTP-сервером идет, данные туда отсылаются, а вот на приеме одна и та же слабочитаемая фигня.
Добро бы если фигня изменялась со времем ( надежда на то что я просто ее расшифровать не могу ), но приходит один и тот же мусор.
Вот тут : https://darkbyte.ru/2015/78/esp8266-debrick-after-ciupdate-fatal-exception/ какой-то профи показывает как прошить ESP-05, но я еще не настолько познал безначальное ДАО, чтобы выпаивать флеш-память и программировать ее, а потом обратно запаивать ))
1. А кто знает как на прошивке NODEMCU выполнить заливку произвольного файла (ну картинку жапег например) в файловую систему модуля?
2. Порывшись в операторах Lua обнаружил соответствующую команду для компиляции скрипта в байт-код. Не взлетело. Кто пробовал, получилось? Вопрос актуальнейший т.к. байт-код и работает быстрей и места много меньше занимает.
А вы не можете выложить кусок скетча с отправкой и получением UDP-пакетов ?
Может я что-то делаю не так.
Я уж и побайтно пытался считывать из сериала, и массово, толку ноль.
Коннект с NTP-сервером идет, данные туда отсылаются, а вот на приеме одна и та же слабочитаемая фигня.
Куски скетча выложу чуть позже.
Насчет NTP, если особых требований к точности нет, то для получения текущей даты/времени можно использовать такой способ:
1.Посылаете запрос, ну например на www.time.org.
2.Принимаете ответ и находите в нем строку вида "<title>Welcome To The WWW Clock (beta) - Thursday 5th of March 2015 5:45:04 AM GMT</title>"
3.Выпарсиваете из строки все, что нужно.
Тогда проще на любом своем сервере создать скрипт отдачи времени и даты в любом удобном формате.
Такой вариант может и не будет очень точным, но сэкономит ресурсы..
Вот куски скетча, как видите, ничего особенного для связи по UDP не нужно.
Вот куски скетча, как видите, ничего особенного для связи по UDP не нужно.
А какую модель Arduino Вы используете?
А какую модель Arduino Вы используете?
Одна Мега, одна Уно и две Нано. Обмен данными между ними четыремя. Приведенные куски кода у всех одинаковые.
Мега каждые пять секунд отправляет запросы поочередно каждой из трех остальных Ардуин, они отвечают на запросы.
всем привет.
потратил целый день но так и не смог добится от esp8266-07 (at 020) ответа на АТ команду "AT+RST" , и вывести её в Serial.print
ответ то приходит но я его вижу как стрякозябры , такое чувство что скорость порта не та стоит ,
хотя через терминальные проги на этой скорости ответы приходят нормальные
Фатальная ошибка в скетче.
Serial - это аппаратный порт. Он жестко привязан к пинам 10 и 11.
А Вы пытаитесь на него еще и прогамный порт навесить.
Возьмите для SoftwareSerial любые другие 2 пина и к ним подцепите терминал.
Для терминала скорость установите стандартную: 9600.
Фатальная ошибка в скетче.
Serial - это аппаратный порт. Он жестко привязан к пинам 10 и 11.
Это что-то новенькое... А не к пинам 0 и 1 часом ?
В случае Меги есть еще "three additional serial ports: Serial1 on pins 19 (RX) and 18 (TX), Serial2 on pins 17 (RX) and 16 (TX), Serial3 on pins 15 (RX) and 14 (TX)."
Также замечу, что SoftwareSerial скоростей выше 19200 не поддерживает.
я на разных пинах пробовал . на связке 2,3 результат токайже
в описании на софтсериал вроде написано скорость до 115200.
а как можно понизить скорость порта в ESP8266 в прошивке AT 20 или AT 21
я на разных пинах пробовал . на связке 2,3 результат токайже
в описании на софтсериал вроде написано скорость до 115200.
а как можно понизить скорость порта в ESP8266 в прошивке AT 20 или AT 21
1. Есть немало руководств по началу работы с ESP8266, например http://geektimes.ru/post/241054/
2. Да, написано, написано неверно. На самом деле до 19200. Погуглите, проверьте.
3. Для v0.21 есть команда AT+ UART, почитайте http://esp8266.ru/esp8266-at-commands-v021/
В случае Меги есть еще "three additional serial ports: Serial1 on pins 19 (RX) and 18 (TX), Serial2 on pins 17 (RX) and 16 (TX), Serial3 on pins 15 (RX) and 14 (TX)."
Также замечу, что SoftwareSerial скоростей выше 19200 не поддерживает.
Сорри, все так. Что-то у меня переклинило с этими портами.
на 21 прошивке и скорости 9600 заработало .
ответы ok\error\ready приходят нормально
а вот инфа из запрося AT+RST стрякозябрами даже в терминальных прогах ))
а вот инфа из запрося AT+RST стрякозябрами даже в терминальных прогах ))
У меня то же самое, там только в конце есть немного осмысленного текста.
Это сообщение бутлоадера, причем на китайском языке..
А есть уже софт или прошивка\библиотека для ESP8266, которая бы слушала GET запрос и передавала его содержимое в RxTx ?
Готового решения не видел (искал, есть подобная идея). Прошивка NodeMCU (описание API https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_ru) + язык Lua. Этими инструментами вполне реализуемо.
Всем очередной привет.
Хочу поделиться результатами по проблеме отправки данных со связки arduino+esp8266(07) на web server.
Если на esp8266 не поднимать tcp server, то отправка происходит без потерь. Тестировал почти неделю, отправляя данные(показания температуры) раз в минуту.
Для остальных своих устройтв, на которых необходим был tcp server для приема GET запросов от web servera, пришлось делать проверку отправки сообщений и если она неудачна, то производить отправку снова.
Тока мне этот метод не очень нравится)!! Может у кого есть какие-то мысли по поводу, почкему поднятый на esp tcp server влияет на отправку сообщений на web-server. Может быть причина в прошиве?
Скорее всего в прошивке что-то недоработано.. У меня в проекте esp8266 все работает одновременно и отлично..
Скорее всего в прошивке что-то недоработано.. У меня в проекте esp8266 все работает одновременно и отлично..
а какая у тебя версия прошики?
У меня своя версия прошивки :)
Скорее всего тут такое ограничение накладывается из-за одновременного использования UART..
У меня похожая задача,- нужно отправлять данные в GET запросе на сервер, а в ответ получать данные с сервера.
Ни одну неделю уже убил на борьбу с ESP8266 для реализации этого, однако, стабильной работы так добиться и не удалось...
Вот мой скетч:
Если убираю вывод в Serial, то в ответ от сервера всегда тишина, если убираю вроде бы лишние HTTP заголовки, запрос GET не выполняется, сервер отдаёт 400 ошибку.
В текущем виде схема работает не стабильно,- периодически от сервера приходят пустые ответы.
Кто-то использует подобную схему обмена данными с сервером? Удалось получить стабильный результат?
Прошивки перебрал все доступные, на 0.9.2.2 (ESP_8266_v0.9.2.2 AT Firmware.bin) работает менее стабильно, но зато стабилизатор 1117 греется терпимо, на 0.9.5.0 (AT21SDK95-2015-01-24.bin) стабилизатор в момент обмена данными греется градусов до 80...
У меня похожая задача,- нужно отправлять данные в GET запросе на сервер, а в ответ получать данные с сервера.
А как у Вас с размерами буферов UART (SERIAL_BUFFER_SIZE) для Hardware/Software Serial ? String cmd немаленькая ведь получается.
HardwareSerial буферы увеличены до 256
\Arduino\hardware\arduino\avr\cores\arduino\HardwareSerial.h
У SoftwareSerial буфер был 64, забыл про него совсем...
Увеличил до 256, буду тестить
\Arduino\hardware\arduino\avr\libraries\SoftwareSerial\SoftwareSerial.h
Увеличение буфера проблему не решило,- по-прежнему если не дублировать команды в Serial, то от сервера ответов нет, если же дублировать, то иногда даже работает, но постоянно присутствует мусор и обрезанное эхо запроса, а иногда данные с сервера так и не доходят:
Самая мистика в том, что без Serial.println(cmd); и Serial.print(readChar); вообще данные с сервера не получает...
Модифицировал скетч, так стало постабильнее данные возвращать:
Загадочная зависимость от Serial, возможно, связана с тем, что ESP не всегда успевает ответить, а вывод в Serial дает ему необходимую задержку.Еще неплохо бы для контроля добавить после отправки (после строки 67) if ( wifi.find("SEND OK") ).
Далее, если сработало while (wifi.available()) - это не значит, что в приемном буфере уже находятся ВСЕ принятые данные. Дайте задержку, пусть ESP успеет до конца принять.
ESP не настолько быстр, работайте с ним не торопясь )). Команда "AT+CIPSEND" во всех АТ-прошивках имеет немалые проблемы, об этом немало написано. Так что особо не удивляйтесь трудностям.
Кстати, строка 58 явно лишняя, почитайте про Serial.find()
За счёт избавления от длинной строки и замены её размером постоянной части заголовков и размером добавляемой переменной удалось сэкономить 86 байт бинарного кода (строка 53):
За счёт ввода дополнительного символа ("%") в данные, для отсечения возвращяемых сервером заголовков, удалось оставить размер RX буфера SoftwareSerial в размере 64 байт (строка 87):
Это позволило сэкономить 192 байта ОЗУ по сравнению с RX буфером 256 байт или 448 байт экономии при размере буфера 512 байт.
На протяжении 2,5 часов беспрерывной работы по отправке/получению данных 1 раз в 8 секунд не выявлено ни одного (!!!) сбоя!
Код требует ещё доработки для отлова зависания модуля, пропадания сети, хардресета в случае неудачного пуска, но уже юзабелен по сравнению с тем, что было ранее.
Прошивка 0.9.5 (AT21SDK95-2015-01-24.bin), скорость 9600, SoftwareSerial, питание от Arduino Uno.
Код скетча:
Загадочная зависимость от Serial, возможно, связана с тем, что ESP не всегда успевает ответить, а вывод в Serial дает ему необходимую задержку.Еще неплохо бы для контроля добавить после отправки (после строки 67) if ( wifi.find("SEND OK") ).
/* вырезано */
Спасибо за свежие мысли, они очень пригодились в устранении нестабильной работы модуля!
А ведь я уже хотел забросить это неблагодарное дело и уйти на Ethernet Shield :)
Никуда не уходите, у ESP8266 большой потенциал (и пока еще сырой SDK).
Никуда не уходите, у ESP8266 большой потенциал (и пока еще сырой SDK).
Не ухожу :)
Начинаю внедрять код и модуль в основной проект, текущая стабильность уже устраивает для моих задач.
День добрый,
Я вижу что эта вифи карточка вызывает некий ажиотаж.
Как я понял , подключается свего по 2 dig пинам к ардуино.
Какие у нее минусы/проблемы/недостатки/ограничения ?
Хочу в конечном итоге по вифи подключаться к ардуино с компа/смарфона , видеть состояние (освещение и мощьность освещения, температуру,... ) , а так же менять это всё....
IKIF, более конкретный вопрос получит больше ответов.
Никуда не уходите, у ESP8266 большой потенциал (и пока еще сырой SDK).
Всё-таки рано оказалось в продакшн его...
С таймаутом SoftwareSerial в 2000мс наблюдается следующая картина:
С увеличением таймаута до 5000мс, количество ошибок установления соединения падает до 2, на 3 попытке соединение устанавливается, но общее время между результативными попытками больше, чем при таймауте 2000мс и 4 ошибках.
Код немного модифицирован по сравнение с ранее опубликованным:
И самое неприятное, что на работе с Linksys E4200 всё вроде бы более или менее стабильно работает, а дома с Apple AirPort Express начинаются ошибки соединения. Причём если подключаюсь к ESP8266 напрямую и отправляю АТ команды вручную, то в 99% проблем не наблюдаю. Иногда вылезает DNS Fail при AT+CIPSTART
Вышел ESP8266 IoT SDK v1.0.0 AT v0.22
Читаем http://esp8266.ru/esp8266-iot-sdk-v1-0-0-at-v0-22/
Всем салют!
Вот, есть кое-какая документация
https://drive.google.com/folderview?id=0BwK3EhAfht8uWTdBdG55NEFCakE&usp=...
Подключил 07, хватило GPIO15 на землю и CH_PD на VCC, через 10K, внешнее питание 3.3В и к компу через USB-TTL на CP2102. Пашет, перешил на SDK v1.0.0 AT v0.22. В сети появился, со смарта подключился нормально. Сначала накосячил, вместо GPIO15 подключал GPIO5 :) Не работало.
Пока больше ничего не тестил.
Теперь можно поиграться :)
Осмелюсь утверждать, что 10K - необязательно.
Вышла Ардуино ИДЕ с поддержкой субьекта....
http://hackaday.com/2015/03/28/arduino-ide-support-for-the-esp8266/
Вышла Ардуино ИДЕ с поддержкой субьекта....
http://hackaday.com/2015/03/28/arduino-ide-support-for-the-esp8266/
Я правильно понял, что теперь можно шить с помощью ардуины и заливать туда ( в ESP8266 ) скетчи ?
Осмелюсь утверждать, что 10K - необязательно.
Я понимаю, что это вход, потому пофиг на резистор. Однако для игр можно через кнопку на землю. Я вчера так игрался, чтобы питание не передергивать.
Плюс сделал по аналогии с другими пинами, что бы не париться.
Я правильно понял, что теперь можно шить с помощью ардуины и заливать туда ( в ESP8266 ) скетчи ?
Поняли правильно, можно, но есть нюансы. Проект новый, весьма сырой и до ума еще не доведенный. Подробности - http://www.arduinesp.com/ , http://esp8266.ru/arduino-ide-esp8266/
Что-то разактивилась тема, подниму пожалуй.
Статья "Многофункциональный датчик температуры/влажности на ESP8266 или еще один шаг к «интернету вещей»". На базе прошивки NodeMCU.
Здесь: http://habrahabr.ru/post/255359/
Хорошая обертка + поддержка АТ 0.22 https://github.com/itead/ITEADLIB_Arduino_WeeESP8266
Не могу получить от esp8266 числа.
Есть домашний сервер на денвере, простая страница UTF8 которая отвечает на GET запрос числовыми значениями: время, температура.
Не могу распарсить ответ (перевести в числа int).
Учебный пример работает:
А вот в связке с ESP получаю нулевые значения:
Может и не надо уже - но отвечу на вопрос о синхронизации времени с NTP через esp8266.
Работа с esp8266 идет без библиотек, только с помощью AT-команд.
Все пашет, время приходит всегда.
Ниже - вырезка из основной программы настенных часов, только то, что отностится к синхронизации по NTP.
Да, написано для прошивки esp8266 0.21, в новой 0.22 команды расширились, но смысл тот же.