Тогда как прошить ESP, без Ардуино и прошивальщика?! Как ваще понять что ESP живой? Как в ESP забить данные моей Wi-Fi сети?
Ну я бы рекомендовал иметь USB-TTL адаптер. Но можно и Вашу ардуинку для этого использовать. Адаптер у неё на борту. Пропишите в ардуинку любой скетч не использующий сериал-порт и подключив к RX ардуины RX esp8266, а к TX соответственно TX получите USB-TTL адаптер из ардуины. Ну и 3.3 вольта для esp8266 (обычно) надо. И учтите, что она достаточно прожорливая во время работы радиомодуля.
Адаптер заказал уже, едет он :)) Но сами знаете как у нас Китай+Почта России работают :))
Т.е. все таки ардуино не вытягивает по 3.3 вольтам потребление ESP?
Тогда вопрос в том, где взять теперь 3.3 вольта и нужные мощности по токам? Что посоветуете?
Ну я для экспрементов использую такой комплект. А для боевого дежурства уже понижающую схему со стабилизатором достаточной мощьности и питанием или от аккумулятора или от USB/блока питания 5в.
Оказывается UNO отдает 50 мА по 3.3 вольтам, а ESP-01 я так понимаю нужно 150-200 мА (если верить форумам).
Будем искать значит от чего запитаться. Или может чего посоветуете?
С прошивкой разобрался...Через UNO прошивается, ничего сложного.
Я тоже эту ветку и фотографии читать смотреть не буду. Столько времени прошло а одно и тоже. Глупость человеческая и безграмтность на одном уровне. Интересно Арарис тоже всвою ветку уже не заходит. День сурка блин.
Заходит, конечно, хочет для себя нового-интересного чего найти. Тема действительно слишком большая, многа букафф, зачем ее читать, проще в очередной раз повыяснять, как же все-таки правильно питать ESP8266, сколько же все-таки миллиампер, и т. д., и т. п. День Сурка - хорошо сказано.
Всем привет! Дошли и у меня руки поиграться с модулем 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мбит, модуль рядом с ноутом.
Засада не в скорости, а в том, что именно отправляете (и что ожидает получить браузер), то есть, как браузер узнаёт, что он уже всё получил и ждать больше не надо. В общем, без текста скетча вопрос трудно ответить. Что там в 114-х символах ?
Модуль по умолчанию после включения или перезагрузки выставляет тайм-аут 180 секунд. То есть сервер закроет соединение через 3 минуты, до этого момента браузер ждёт, по прошествии таймаута или отобразится страница или сообщение, что страница недоступна. Настраивается командой: AT+CIPSTO Установить таймаут сервера TCP/IP AT+CIPSTO=<таймаут> AT+CIPSTO? таймаут в секундах от 0 до 28800. Команда от работает только после запуска сервера, до этого момента выдаст ошибку.
Тоесть включаем сервер, настраиваем тайм-аут скажем на 3 секунды( главное, чтоб данные успели уйти), далее после запроса клиента, в ответ отправляем тип подключения, множественное и длинну передаваемых данных, в ответ на последующее приглашение шлем данные.
Для всего этого Дуня не нужна, можно воспользоваться ей лишь как переходником usb-uart, или взять переходник. Все команды можно слать в ручную в терминале и смотреть ответы, тогда станет понятно, как автоматизировать процесс уже с помощью Дуни.
Весь список АТ команд доступен скажем тут: http://esp8266.ru/esp8266-at-commands-v019/
Хотя, может я ещё чего то недопонимаю, только пару дней, как взял модуль в руки, ещё многое мне не понятно. С запросами клинент-сервер и обратно ещё не работал, сам учусь. Возможно соединение можно оборвать раньше командой, пока ещё не все понятно. Только наброски. Есть результат, а для полноценной отладки нужно время. У меня нет определённой задачи, есть интерес, это моё хобби, доставляющее кучу удовольствия в свободное время. :)
Более верно - нужно передававать в заголовке Content-Length: , но его нужно высчитывать, а для этого нужно всю страничку загрузить в память, а памяти у ардуино на базе 328 чипа всего 1кб..т.е. не реально так сделать..Хватит на 200..300 байт странички.
Опишу свою проблему. Я не люблю городить огород, т.е. ставить ардуину+Е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!") ;
}
}
Вот подскажите... Есть погодная станция включающая в себя Arduino + Ethernet Shild W5100 + BMP180 + DHT22 + DS18B20 + i2c LCD. Информация собирается в виде Давление+ВлажностьВкомнате+ТемператураВкомнате+ТемператураНаУлице и выводиться:
а) на экран;
б) веб-страничка к которой могу подключиться из любой точки мира.
Хочу убрать W5100 и заменить его на ESP8266, чтобы избавится от сетевого провода идущего к корпусу станции. Дома естественно роутер с Wi-Fi.
Отсюда вопросы:
Как реализовать? Перенести код сервера с ардуино на esp, т.е. развернуть его на модуле, а модуль заставить слушать данные которые будет отдавать ардуино по UART? Например ввиде: "759, 54, 23, -15" ?
Прошу не бить, сильно - искал в сети, но так ничего и не нашёл.
...Перенести код сервера с ардуино на esp, т.е. развернуть его на модуле, а модуль заставить слушать данные которые будет отдавать ардуино по UART?
1. Поместится ли код Вашего сервера в ESP8266 - вот в чем вопрос.
2. Если все нормально работает на W5100, то гораздо проще заменить, client.print() на самописный esp8266send() , используя ESP8266 для приема-передачи через Wi-Fi.
Работую с модулем в связке с arduino. Не без трудов удалось наладить стабильную работу и на отправку и на прием. Необходимо строго прописывать login и пароль для сети в скетче для arduino. И тут возник такой вопрос. Можно ли как-то прошить arduino через Esp8266? Т.е. вначеле подключиться к esp8266 как к точке доступа, и потом отправить скетч для перепрошивки arduino, какм-то образом введя arduino в режим прошивки.
Модуль при конекте выдаёт в терминал много информации о подключении, все это нужно чем то обрабатывать. Проще думаю программно реализовать на Дуне при приёме определённой команды от модуля записывать нужную информацию в свою епром, скажем также учётные данные и использовать их потом в коде при конекте считывая перед этим их из епром.
Работает почти без нареканий. Но в процессе тестирования вылезли некоторые БАГИ!!!
Когда с 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
Подключил внешнее питание.... Нифига не помогло.... Менял строчку ESPserial.begin(9600); подстовлял различные скорости.... не помогает. Причем телефон видит эту плату как точку доступа под именем AI-THINKER_F93F1B
А прочесть весь топик религия не позволяет? Пробовали чере USB <-> TTL конвертер подключить к компу этот модуль и в терминале поработать? Какая версия прошивки? Где исходник? Что за ESPserial.begin(9600); Вы какую то библиотеку используете? А вдруг она не совместима с прошивкой модуля?
Чего-то я читал, читал... Да вот не вычетал решения отправки данных с сервера на ESP. В принципе, суть вопроса такова. Есть Ардуина. Е ней подключены датчики (датчик тока, температуры и т.д.) К ардуине подключен esp. Нужно по запросу от сервера, отправлять ему ответ о состоянии датчиков. Без запроса, вручную, все получается. А вот как сделать обратную связь?
Нужно по запросу от сервера, отправлять ему ответ о состоянии датчиков. Без запроса, вручную, все получается. А вот как сделать обратную связь?
Ну в таком случае уже ардуина будет сервером(!) и по запросу клиента(!) отправит ему состояние датчиков.
Из педивикии:
Се́рверное програ́ммное обеспечение (се́рвер, англ.server от to serve — служить; множественное число се́рверы, в разговорном языке также употребляется сервера́) — в информационных технологиях — программный компонент вычислительной системы, выполняющий сервисные (обслуживающие) функции по запросу клиента, предоставляя ему доступ к определённым ресурсам или услугам.
Чего-то я читал, читал... Да вот не вычетал решения отправки данных с сервера на 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;
}
}
У меня потреблении всей схемы 220mА. Соответственно экран потребляет меньше. Стабилизатор этот AMS1117-3.3. По даташиту написано 0 ≤ Iout ≤ 1A. ESP8266 потребляет 200-250mA .... То я прихожу к выводу что будет все нормально....
Подключаю: подаю питание 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". То есть, модуль таки пашет. Но получается корявая/битая прошивка? Или это аппаратный сбой памяти?
Когда брал питание от USB тоже не хотел работать, пришлось запитать от внешнего источника, далее стабилизатор 3.3В. Соединен с ардуино без каких либо согласований уровней. У блоков питания ESP и Arduino общий минус. Все работает.
Ничего не понимаю... Перепрошил модуль двумя разными прошивками - не помогло. Команды 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 стационарного компа хватает. Чувствую, косяк где-то рядом, но вот найти не могу... И главное полазил по интернетам - похоже ни у кого такое не встречалось...
Перепрошивали через тот же переходник ? Есть ли возможность подключить модуль к Ардуино ?
Да, перепрошивал через тот же переходник. Ничего не пересоединял, только накинул землю на GPIO0 для входа в режим прошивки.
С дуиной ещё не пробовал. Пока не углублялся в код, хотел для начала через терминал потестить. Чтобы долго не рыскать, не подкините какой-нибудь example для atmega328? Попробую с ардуиной потестить. Спасибо.
Я тут достучался наконец-то до модуля через утилитку "ESP8266 Config". Отвечает как через нажатие кнопочек в GUI-интерфейсе, так и через тамошний терминал. AT = ОК, AT+GMR = 0018000902, AT+RST = перезагрузка модуля. То есть, всё работает.
До этого пробовал в терминале Arduino, и довольно популярном Terminal v1.9b by Bray. Видимо где-то здесь собака порылась. То ли с кодировкой при отправке команд что-то, то ли ещё чего...
В общем я рад, что модуль оказался всё-таки рабочий, а не брак.
Ну я бы рекомендовал иметь USB-TTL адаптер. Но можно и Вашу ардуинку для этого использовать. Адаптер у неё на борту. Пропишите в ардуинку любой скетч не использующий сериал-порт и подключив к RX ардуины RX esp8266, а к TX соответственно TX получите USB-TTL адаптер из ардуины. Ну и 3.3 вольта для esp8266 (обычно) надо. И учтите, что она достаточно прожорливая во время работы радиомодуля.
Адаптер заказал уже, едет он :)) Но сами знаете как у нас Китай+Почта России работают :))
Т.е. все таки ардуино не вытягивает по 3.3 вольтам потребление ESP?
Тогда вопрос в том, где взять теперь 3.3 вольта и нужные мощности по токам? Что посоветуете?
Ну я для экспрементов использую такой комплект. А для боевого дежурства уже понижающую схему со стабилизатором достаточной мощьности и питанием или от аккумулятора или от USB/блока питания 5в.
Ну тогда да. откуда берешь 3,3В? может источник не вытягивает?
3,3 вольт беру с Ардуино Уно.
Запитай от отдельного источника питания. Уна может и не вытянуть.
Ну тогда да. откуда берешь 3,3В? может источник не вытягивает?
3,3 вольт беру с Ардуино Уно.
Запитай от отдельного источника питания. Уна может и не вытянуть.
Оказывается UNO отдает 50 мА по 3.3 вольтам, а ESP-01 я так понимаю нужно 150-200 мА (если верить форумам).
Будем искать значит от чего запитаться. Или может чего посоветуете?
С прошивкой разобрался...Через UNO прошивается, ничего сложного.
а ESP-01 я так понимаю нужно 150-200 мА (если верить форумам).
Форумам можно и не верить, а вот по даташиту самого чипа у него потреблядство до 215 мА на передаче.
Оказывается UNO отдает 50 мА по 3.3 вольтам, а ESP-01 я так понимаю нужно 150-200 мА (если верить форумам).
Будем искать значит от чего запитаться. Или может чего посоветуете?
С прошивкой разобрался...Через UNO прошивается, ничего сложного.
Я тоже эту ветку и фотографии читать смотреть не буду. Столько времени прошло а одно и тоже. Глупость человеческая и безграмтность на одном уровне. Интересно Арарис тоже всвою ветку уже не заходит. День сурка блин.
Заходит, конечно, хочет для себя нового-интересного чего найти. Тема действительно слишком большая, многа букафф, зачем ее читать, проще в очередной раз повыяснять, как же все-таки правильно питать ESP8266, сколько же все-таки миллиампер, и т. д., и т. п. День Сурка - хорошо сказано.
Всем привет! Дошли и у меня руки поиграться с модулем 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мбит, модуль рядом с ноутом.
Засада не в скорости, а в том, что именно отправляете (и что ожидает получить браузер), то есть, как браузер узнаёт, что он уже всё получил и ждать больше не надо. В общем, без текста скетча вопрос трудно ответить. Что там в 114-х символах ?
Почти пустой шаблон HTML. Он отображается, но долго.
Вот шаблон: <HTML><HEAD><TITLE>ESP8266</TITLE></HEAD><BODY><H1>My_ESP8266</H1>This test My WiFi Server ESP8266</BODY></HTML>
После отправки модуль мгновенно отвечает SEND OK.
Смотрел передачу во воздуху, байтики очень медленно бегут.
Скетч тут ни при чем, так же происходит при отправке через переходник USB-UART.
Сейчас сменил канал, соседи оказались на одном, но особого прироста это не дало.
Идет такой диалог, после него открывается страница в браузере, но очень долго:
"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>"};
"Connection: keep-alive" Это нормальная строка выводимая при подключении и при ответе браузера.
С тормозами разобрался, причина тайминги, по дефолту 3 минуты, изменить можно только после подьема сервера.
"Connection: keep-alive" Это нормальная строка выводимая при подключении и при ответе браузера.
С тормозами разобрался, причина тайминги, по дефолту 3 минуты, изменить можно только после подьема сервера.
Gres, расскажите подробнее где и что/как настраивали, чтобы решить проблему задержки (тайминги)?
Модуль по умолчанию после включения или перезагрузки выставляет тайм-аут 180 секунд. То есть сервер закроет соединение через 3 минуты, до этого момента браузер ждёт, по прошествии таймаута или отобразится страница или сообщение, что страница недоступна. Настраивается командой: AT+CIPSTO Установить таймаут сервера TCP/IP AT+CIPSTO=<таймаут> AT+CIPSTO? таймаут в секундах от 0 до 28800. Команда от работает только после запуска сервера, до этого момента выдаст ошибку.
Тоесть включаем сервер, настраиваем тайм-аут скажем на 3 секунды( главное, чтоб данные успели уйти), далее после запроса клиента, в ответ отправляем тип подключения, множественное и длинну передаваемых данных, в ответ на последующее приглашение шлем данные.
Для всего этого Дуня не нужна, можно воспользоваться ей лишь как переходником usb-uart, или взять переходник. Все команды можно слать в ручную в терминале и смотреть ответы, тогда станет понятно, как автоматизировать процесс уже с помощью Дуни.
Весь список АТ команд доступен скажем тут: http://esp8266.ru/esp8266-at-commands-v019/
Хотя, может я ещё чего то недопонимаю, только пару дней, как взял модуль в руки, ещё многое мне не понятно. С запросами клинент-сервер и обратно ещё не работал, сам учусь. Возможно соединение можно оборвать раньше командой, пока ещё не все понятно. Только наброски. Есть результат, а для полноценной отладки нужно время. У меня нет определённой задачи, есть интерес, это моё хобби, доставляющее кучу удовольствия в свободное время. :)
Более верно - нужно передававать в заголовке Content-Length: , но его нужно высчитывать, а для этого нужно всю страничку загрузить в память, а памяти у ардуино на базе 328 чипа всего 1кб..т.е. не реально так сделать..Хватит на 200..300 байт странички.
а ESP-01 я так понимаю нужно 150-200 мА (если верить форумам).
Форумам можно и не верить, а вот по даташиту самого чипа у него потреблядство до 215 мА на передаче.
Ну мы ж все по старинке, по русскому...методом тыка...а так не всегда получается.
День добрый!
Опишу свою проблему. Я не люблю городить огород, т.е. ставить ардуину+ЕSP, потому что с моей задачей справится и сам модуль. Задача такова. На устройство я ставлю ESP. При включении устройства создается открытая Wi-Fi сеть "your ssid", устройство запускает сервак с определенным портом. Я с ноута подключаюсь к этой сети плюс я подключаюсь как КЛИЕНТ на адрес 192.168.4.1 на определенный порт. Все коннект установлен. Теперь работа: когда на GPIO2 ESP происходит смена логическо нуля на единицу, мне нужно незамедлительно послать сообщение (самое короткое) на ноут (на клиент), он его примет, расшифрует. Но вот проблема: если, к примеру на GPIO2 происходит быстрая смена логических уровней (ну, например, 3 раза в секунду, то на ноутбуке в программе Hercules я вижу что принимается всего например одно сообщение). Если быть кратким, то смвысл таков: в системе клиент(ноутбук, Hercules)-сервер(ESP) при возникновении события на ESP (чтение состояния GPIO) не удается, скажем, 4 раза в секунду (здесь именнно изменение состояния порта) послать какое-либо короткое сообщение, то есть есть потери.
Скетч ниже. У меня вкрадывается сомнение, что чтение порта в ESP+IDE идет слишком долго, в этой связи все медленно. Была идея в терминал вывести время до команды чтения и время после. И еще меня тревожит то, что IDE для ESP весьма сырой.\
Кто что кажет?
Доброго времени суток!
Вот подскажите... Есть погодная станция включающая в себя Arduino + Ethernet Shild W5100 + BMP180 + DHT22 + DS18B20 + i2c LCD. Информация собирается в виде Давление+ВлажностьВкомнате+ТемператураВкомнате+ТемператураНаУлице и выводиться:
а) на экран;
б) веб-страничка к которой могу подключиться из любой точки мира.
Хочу убрать W5100 и заменить его на ESP8266, чтобы избавится от сетевого провода идущего к корпусу станции. Дома естественно роутер с Wi-Fi.
Отсюда вопросы:
Как реализовать? Перенести код сервера с ардуино на esp, т.е. развернуть его на модуле, а модуль заставить слушать данные которые будет отдавать ардуино по UART? Например ввиде: "759, 54, 23, -15" ?
Прошу не бить, сильно - искал в сети, но так ничего и не нашёл.
Хочу убрать W5100 и заменить его на ESP8266...
...Перенести код сервера с ардуино на esp, т.е. развернуть его на модуле, а модуль заставить слушать данные которые будет отдавать ардуино по UART?
1. Поместится ли код Вашего сервера в ESP8266 - вот в чем вопрос.
2. Если все нормально работает на W5100, то гораздо проще заменить, client.print() на самописный esp8266send() , используя ESP8266 для приема-передачи через Wi-Fi.
Всем доброго времени суток.
Работую с модулем в связке с arduino. Не без трудов удалось наладить стабильную работу и на отправку и на прием. Необходимо строго прописывать login и пароль для сети в скетче для arduino. И тут возник такой вопрос. Можно ли как-то прошить arduino через Esp8266? Т.е. вначеле подключиться к esp8266 как к точке доступа, и потом отправить скетч для перепрошивки arduino, какм-то образом введя arduino в режим прошивки.
Модуль при конекте выдаёт в терминал много информации о подключении, все это нужно чем то обрабатывать. Проще думаю программно реализовать на Дуне при приёме определённой команды от модуля записывать нужную информацию в свою епром, скажем также учётные данные и использовать их потом в коде при конекте считывая перед этим их из епром.
Открыл для себя самую малось функционала сабжа... И скажу я вам это прсто офигенно...
ВСем привет! Поднял 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 шлются, а на дуину данные не отсылаются, ком порт молчит. Отсюда складывается впечатление, что проблема с кодом для дуины. Вот только не знаю где именно его подправить.
Может кто сможет. На всякий случай прикрепляю код:
Посоветуйте хорошую схему AC->DC конвертора или готовый для питания ESP8266, желательно небольшого размера, чтобы все влезло в подрозетник.
Если у кого-то есть проверенный вариант, который не будет греться и относительно безопасен, напишите плиз.
как вариант http://www.ebay.com/itm/AC-DC-Power-Supply-Module-Isolation-Input-AC90-240V-to-Output-3-3V-500mA-/321353592906?pt=LH_DefaultDomain_0&hash=item4ad22ab04a
Подключил такой модуль 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 выдает непонятные символы. Что я не так делаю....
Что я не так делаю....
Вот это не правильно: Питание 3,3 в взял тоже с ардуино.
Причем об этом тут даже на этой странице есть.
Это карма форума. 100500 раз говорили в этой ветке!!! ВНЕШНЕЕ ПИТАНИЕ КАРЛ! Внешнее!
Подключил внешнее питание.... Нифига не помогло.... Менял строчку ESPserial.begin(9600); подстовлял различные скорости.... не помогает. Причем телефон видит эту плату как точку доступа под именем AI-THINKER_F93F1B
А прочесть весь топик религия не позволяет? Пробовали чере USB <-> TTL конвертер подключить к компу этот модуль и в терминале поработать? Какая версия прошивки? Где исходник? Что за ESPserial.begin(9600); Вы какую то библиотеку используете? А вдруг она не совместима с прошивкой модуля?
Ну сцыль на исходник он дал, "ESPserial" это у него объект SoftwareSerial.
Некоторые прошивки могут требовать по умолчанию скорость и 115200, а SoftwareSerial на высоких скоростях не работает.
А если не через SoftwareSerial то как?
1. Найдите USB <-> TTL конвертер, подключите ESP8266 к компьютеру.
2. Терминалом определите скорость, на которой в данный момент общается ESP8266. Узнайте версию прошивки.
3. Найдите для этой прошивки АТ-команду для изменения скорости порта, поставьте нужную (меньшую) скорость.
4. Подключите модуль к Ардуино и пользуйтесь SoftwareSerial.
P.S. Да, можно обойтись одной Ардуиной, но это гораздо геморнее будет.
Чего-то я читал, читал... Да вот не вычетал решения отправки данных с сервера на ESP. В принципе, суть вопроса такова. Есть Ардуина. Е ней подключены датчики (датчик тока, температуры и т.д.) К ардуине подключен esp. Нужно по запросу от сервера, отправлять ему ответ о состоянии датчиков. Без запроса, вручную, все получается. А вот как сделать обратную связь?
Ну в таком случае уже ардуина будет сервером(!) и по запросу клиента(!) отправит ему состояние датчиков.
Из педивикии:
Се́рверное програ́ммное обеспечение (се́рвер, англ. server от to serve — служить; множественное число се́рверы, в разговорном языке также употребляется сервера́) — в информационных технологиях — программный компонент вычислительной системы, выполняющий сервисные (обслуживающие) функции по запросу клиента, предоставляя ему доступ к определённым ресурсам или услугам.
web сервер на arduino поднимать не обязательно.
с вашего веб сервера отправляете запрос на ардуино( пример на php):
на ардуино считываете полученое сообщение и производите необходимые вам действия, по типу этого:
Вот нашел статейку связи ардуино и esp8266 http://iot-playground.com/2-uncategorised/31-esp8266-wifi-touch-screen-thermostat
В этой статье есть хорошая фишка - питание 3,3в с TFT шилда. Можно ли так делать или сгорит все нафик....?
Надо смотреть сколько кушает сам шилд от 3.3 вольта,думаю немного. Сгореть не должно .
У меня потреблении всей схемы 220mА. Соответственно экран потребляет меньше. Стабилизатор этот AMS1117-3.3. По даташиту написано 0 ≤ Iout ≤ 1A. ESP8266 потребляет 200-250mA .... То я прихожу к выводу что будет все нормально....
Приветсвую всех. Вот тоже решил поюзать 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". То есть, модуль таки пашет. Но получается корявая/битая прошивка? Или это аппаратный сбой памяти?
Подключаю: подаю питание 3,3В (5В USB через отдельный стабилизатор), подключаю TX/RX к переходнику на PL-2303HX, земли модуля и переходника соединены.
Я покупал в исполнении ESP-12. Подключал по схеме http://esp8266.ru/esp8266-podkluchenie-obnovlenie-proshivki/#full , та которая первая.
Когда брал питание от USB тоже не хотел работать, пришлось запитать от внешнего источника, далее стабилизатор 3.3В. Соединен с ардуино без каких либо согласований уровней. У блоков питания ESP и Arduino общий минус. Все работает.
Jeka_M, "сначала какой-то мусор" - это китайские иероглифы, а вот "MEM CHECK FAIL!!!" как бы намекает... Может быть Вам стоит перепрошить модуль ?
Ничего не понимаю... Перепрошил модуль двумя разными прошивками - не помогло. Команды 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 стационарного компа хватает. Чувствую, косяк где-то рядом, но вот найти не могу... И главное полазил по интернетам - похоже ни у кого такое не встречалось...
IMHO, питание тут изначально ни при чем. Перепрошивали через тот же переходник ? Есть ли возможность подключить модуль к Ардуино ?
Перепрошивали через тот же переходник ? Есть ли возможность подключить модуль к Ардуино ?
Да, перепрошивал через тот же переходник. Ничего не пересоединял, только накинул землю на GPIO0 для входа в режим прошивки.
С дуиной ещё не пробовал. Пока не углублялся в код, хотел для начала через терминал потестить. Чтобы долго не рыскать, не подкините какой-нибудь example для atmega328? Попробую с ардуиной потестить. Спасибо.
Я пользую такой :
За примерчик спасибо, попробую чуть позже.
Я тут достучался наконец-то до модуля через утилитку "ESP8266 Config". Отвечает как через нажатие кнопочек в GUI-интерфейсе, так и через тамошний терминал. AT = ОК, AT+GMR = 0018000902, AT+RST = перезагрузка модуля. То есть, всё работает.
До этого пробовал в терминале Arduino, и довольно популярном Terminal v1.9b by Bray. Видимо где-то здесь собака порылась. То ли с кодировкой при отправке команд что-то, то ли ещё чего...
В общем я рад, что модуль оказался всё-таки рабочий, а не брак.
После команд надо окончание строки CR+LF(\r\n), в терминале у Br@@y это настраивается. но не стоит по умолчанию...тоже долго бился в своё время)
После команд надо окончание строки CR+LF(\r\n), в терминале у Br@@y это настраивается. но не стоит по умолчанию...тоже долго бился в своё время)
Бинго! :) Настроил терминал в Arduino IDE (NL+CR) и Terminal 1.9 (CR+LF), всё заработало.
P.S. Сейчас проверил второй модуль, который не перепрошивал. Изначально в них была зашита свежая фирменная прошивка AI-THINKER: