Доброго дня! Не первый день бьюсь над проблемой. Собрал на базе ардуино Мега и ESP8266 12E подобие умного дома с датчиками, реле и управлением через wifi. И все бы здорово, но иногда ESP творит очень непонятную мне штуку. При прошивке / перезагрузке модуль зависает и не реагирует вообще ни на какие действия. На AT команды не приходит никакого ответа. Перезагружал как только мог! Отключал все - модуль, все питание на 3.3В, ардуину. все вместе. Даже отдохнув на следующий день не работает ) Опытным путем неожиданно выяснил что его можно оживить переткнув провод на ардуине с RX1 на RX0, а потом выкл/вкл питание ESP. Я, конечно, могу наколхозить. Но хотелось бы разобраться в чем может быть дело. Подключение к ардуине такое: vcc 3.3B gnd на землю CH_PD через 10кОм к 3.3B RST через 10кОм к 3.3B GPIO15 через 10кОм к земле RX на ESP через делитель(чтобы было 3.3) на RX ардуины TX на ESP на TX ардуины Питание для ESP от блока питания на 2А. Думаю что дело не в скетче. Перепробовал много простых примеров. На всех может зависнуть. Подозреваю что при внезапном обрыве связи по Serial происходит какая-то хрень. А как потом завести модуль я не знаю. Пример кода который вешает модуль: Код (C++): #define DEBUG true void setup() { Serial.begin(115200); ///////For Serial monitor Serial1.begin(115200); ///////ESP Baud rate pinMode(11,OUTPUT); /////used if connecting a LED to pin 11 digitalWrite(11,LOW); sendData("AT+RST\r\n",2000,DEBUG); // reset module sendData("AT+CWMODE=2\r\n",1000,DEBUG); // configure as access point sendData("AT+CIFSR\r\n",1000,DEBUG); // get ip address sendData("AT+CIPMUX=1\r\n",1000,DEBUG); // configure for multiple connections sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // turn on server on port 80 } float sensetemp() ///////function to sense temperature. { int val = analogRead(A0); float mv = ( val/1024.0)*5000; float celcius = mv/10; return(celcius); } int connectionId; void loop() { if(Serial1.available()) { /////////////////////Recieving from web browser to toggle led if(Serial1.find("+IPD,")) { delay(300); connectionId = Serial1.read()-48; if(Serial1.find("pin=")) { Serial.println("recieving data from web browser"); int pinNumber = (Serial1.read()-48)*10; pinNumber += (Serial1.read()-48); digitalWrite(pinNumber, !digitalRead(pinNumber)); } /////////////////////Sending data to browser else { String webpage = "<h1>Hello World</h1>"; espsend(webpage); } if(sensetemp() != 0) { String add1="<h4>Temperature=</h4>"; String two = String(sensetemp(), 3); add1+= two; add1+="℃"; //////////Hex code for degree celcius espsend(add1); } else { String c="sensor is not conneted"; espsend(c); } String closeCommand = "AT+CIPCLOSE="; ////////////////close the socket connection////esp command closeCommand+=connectionId; // append connection id closeCommand+="\r\n"; sendData(closeCommand,3000,DEBUG); } } } //////////////////////////////sends data from ESP to webpage/////////////////////////// void espsend(String d) { String cipSend = " AT+CIPSEND="; cipSend += connectionId; cipSend += ","; cipSend +=d.length(); cipSend +="\r\n"; sendData(cipSend,1000,DEBUG); sendData(d,1000,DEBUG); } //////////////gets the data from esp and displays in serial monitor/////////////////////// String sendData(String command, const int timeout, boolean debug) { String response = ""; Serial1.print(command); long int time = millis(); while( (time+timeout) > millis()) { while(Serial1.available()) { char c = Serial1.read(); // read the next character. response+=c; } } if(debug) { Serial.print(response); //displays the esp response messages in arduino Serial monitor } return response; } Плиз хэлп!
Вы не подумайте, я написал это не просто так, в ранее предложенной мной теме Вам помогут больше, чем в этой. И.........Удачи
Такое варварское использование esp 8266в качестве модема?Спорим код не Ваш? 1Обновить прошивку esp8266 2Переписать Говнокод в новом коде использовать аппаратный USART (Serial) 3Убрать Ардуино Мега как лишнее звено.Если мало выводов можно использовать расширитель портов. 4В разделе тем esp 8266 почитать ИгоряК. Тогда усе вопросы отпадут сами по себе.Этот пункт лучше сделать первым.
Код не мой. Он для примера. От моего кода у вас и кровь из глаз политься может Я не профи ни в програмировании, ни в микроэлектронике. С чего-то надо начинать. Спасибо за советы. Пойду читать ИгоряК. И попробую залить новую прошивку.