Задался целью добавить возможность своей Arduino Nano отправлять данные на удалённый сервак. Для этого подсоединил ESP8266. Схему и прочие подробности не буду описывать - подключить получилось, отправить данные методом GET тоже. Но есть нерешённые проблемы: 1) Несмотря на то, что данные отправляются корректно, через монитор порта наблюдаю много "мусора", типа такого: При этом AT-команды отправляются и выполняются. При перезагрузке выдаёт что-то типа: Т.е. информация приходит с ESP8266, но с добавлением лишних символов. Пересмотрел очень много информации по подключению, и подобные "иероглифы" есть у большинства. С чем может быть связано наличие этих странных символов? Или это нормально вообще? 2) Очень неудобно работать с AT-командами. Может быть, есть какая-то библиотека, которая позволяет работать с Arduino Nano + ESP8266 через RX и TX? К сожалению, ничего подобного именно для Nano не нашёл. P.S. В Arduino новичок, на форуме тоже - сильно не ругайте, если что не так)) Скетч прикрепляю на всякий случай. Код (C++): #include <SoftwareSerial.h> #define RX 10 #define TX 11 String AP = "###"; String PASS = "###"; int countTimeCommand; unsigned long lastTimeMillis = 0; boolean found = false; SoftwareSerial ESP8266(RX,TX); void setup() { Serial.begin(9600); ESP8266.begin(115200); ESP8266.println("AT+RST"); // Перезагрузка esp8266 sendCommand("AT+CWMODE=1",5,"OK"); sendCommand("AT+CWJAP=\""+ AP +"\",\""+ PASS +"\"",20,"OK"); makeGetRequest("###.ru","/?a=1"); } void loop() { if (ESP8266.available()) { Serial.write(ESP8266.read()); } if (Serial.available()) { ESP8266.write(Serial.read()); } } void makeGetRequest(String host, String url){ ESP8266.println("AT+CIPMUX=1"); delay(1000); ESP8266.println("AT+CIPSTART=4,\"TCP\",\""+host+"\",80"); delay(1000); String cmd = "GET " + url + " HTTP/1.1\r\nHost:" + host + "\r\nConnection: close"; ESP8266.println("AT+CIPSEND=4," + String(cmd.length() + 4)); delay(1000); ESP8266.println(cmd); delay(1000); ESP8266.println(""); } void sendCommand(String command, int maxTime, char readReplay[]) { Serial.print("at command => "); Serial.print(command); Serial.print(" "); while(countTimeCommand < (maxTime*1)) { ESP8266.println(command);//at+cipsend if(ESP8266.find(readReplay))//ok { found = true; break; } } if(found == true) { Serial.println("Ok"); countTimeCommand = 0; } if(found == false) { Serial.println("Fail"); countTimeCommand = 0; } found = false; }
Открою Вам страшную тайну!esp-8266 прекрасно работает и без ардуино.Более того работает лучше и без косяков!И ещё один секрет-программируется в среде Ардуино IDE.И прекрасно понимает скетчи.Если Вы немного почитаете этот раздел и посмотрите примеры то сможете подправить Ваш скетч и загрузить его в esp-8266 напрямую.А ардуино сможете использовать для градусника например.
Да это не секрет для меня! Не мой вариант. У меня к ардуинке подключены и настроены датчики. Куда их прикручивать к ESP8266?) (только не предлагайте NodeMcu) И, да, я видел очень много схем использования Arduino Nano в качестве инструмента для прошивки. Но зачем? Может, я чего-то не понимаю, но это как использовать кайен для запуска соляриса.
Так Вы это и делаете.Управляете более производительным камнем менее производительным с помошью АТ команд да еще и програмным usart.15 GPIO на node mcu lua мало?
Обновите прошивку АТ модема.Используйте аппаратный usart.Это первое что приходит на ум если уж Вы без Ардуино никак.У Вас Ардуино и esp на разных бодрейтах работают это зачем?
А для чего обновлять? И на какую прошивку? Неужели нету какой-то библиотеки к Arduino, чтобы можно было задать RX, TX и скорость, а дальше простыми командами обратиться на удалённый сервер?
Не встречал такой библиотеки.Обычно esp всегда работает одна сама по себе.Вы опять вместо того чтоб почитать темы в разделе задаете много вопросов.Даже при всем желании я вряд ли смогу перессказать Вам все и сразу.
Перечитал не только темы в разделе, а уже перерыл кучу ресурсов. Вы даже сами говорите, что не встречали такой библиотеки - так смысл искать её тогда...
А без библиотеки слабо?И потом у Вас в коде Код (C++): Serial.begin(9600); ESP8266.begin(115200); Это нормально?У Вас они на разных скоростях общаются.esp прекрасно понимает и даже очень любит бод 9600.Как и все другие Модемы
Спасибо! Ещё один вопрос. Вот есть несколько датчиков, и есть необходимость передавать данные с датчиков на удалённый сервер через wifi с возможностью забрать ответ оттуда. На чем бы Вы реализовали это? NodeMcu? (понимаю, что вопрос очень условный, но всё же)
Попробуйте на разных скоростях главное чтоб у приемника и передатчика совпадали.А вообще откажитесь от ардуино-это лишнее и слабое звено.На esp можно делать замечательные вещи программируя в знакомой среде и используя те же библиотеки.
Да я уже NodeMcu использовал несколько раз. За Arduino+esp8266 взялся больше в образовательных целях. Спасибо за советы. В любом случае для себя подчерпнул много.
Да это не только в образовательных целях. 1 аналоговый вход, резкое уменьшение (из без того из малого) при использовании SPI и I2C входов/выходов. Увы, но такая связка имеет право на жизнь. https://habr.com/ru/company/masterkit/blog/394357/