Arduina + esp
- Войдите на сайт для отправки комментариев
Чт, 08/09/2016 - 16:57
Доброго, есть задумка передавать через ESP данные типа a, d, g и тд.... в arduino, то есть в браузере набираю запрос типа 192.168.1.103/a ESP как веб сервер принемает a и передает arduino. Первую часть вроде как реализовал (вернее урезал готовый пример)
#include <ESP8266WiFi.h> const char* ssid = "************"; const char* password = "**********"; WiFiServer server(80); void setup() { Serial.begin(115200); delay(10); // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // Start the server server.begin(); Serial.println("Server started"); // Print the IP address Serial.println(WiFi.localIP()); } void loop() { // Check if a client has connected WiFiClient client = server.available(); if (!client) { return; } // Wait until the client sends some data Serial.println("new client"); while(!client.available()){ delay(1); } // Read the first line of the request String req = client.readStringUntil('\r'); client.flush(); client.flush(); // Prepare the response String s = "<!DOCTYPE HTML>\r\n<html>\r"; s += req; s += "</html>\n"; // Send the response to the client client.print(s); delay(1); Serial.println(req); }
Единственная проблема в браузере и в окне мониторинга COM порта вылазит такое GET /test HTTP/1.1 а нужно чтоб выводило просто test, подскажите где подправить чтоб убрать лишнее?
2.Далее нужно значение test передать в arduino, я так понимаю надо открыть любой pin на вход, а что дальше? как прописать чтоб принять переменную?
В строке 49 Вы читаете первую строку запроса и её и возвращаете в строке 58. А Ваше "test" сидит, скорее всего в третьей строке запроса, которую Вы не читаете вовсе.
Ну, а по второму вопросу, я даже не знаю как отвечать. Вы её как в ардуино принимать-то собираетесь? Через какой протокол? Как у Вас связана ESP с Ардуино. КТо ж Вас знает?
А можно узнать, зачем? ESP мощный 32-х битный 80МГц процессор, программируемый на C так же, как и адруино. Это не ардуино должно им руководить, а ESP использовать ардуино в качестве контроллера ввода/вывода.
В строке 49 Вы читаете первую строку запроса и её и возвращаете в строке 58. А Ваше "test" сидит, скорее всего в третьей строке запроса, которую Вы не читаете вовсе.
Он же даже написал, где у него test:GET /test HTTP/1.1
Как и положено, сразу после GET и до протокола.
В общем разобрался, соединяю arduino + ESP так TX->RX и RX->TX в arduino в код добавил только одну строку val = Serial.read(); и в val приходит переменная без лишнего GET /***** HTTP/1.1 единственное что иногда не срабатывает но это возможно браузер кеширует?
ptr, все правильно так и есть, темболее это просто эксперементы без определенной цели
Или так, если ведущий слеш не нужен:
А куда он вставляется и что делает? Я не совсем понимаю что это ( не тот уровень еще :-)
В строке 49 Вы читаете первую строку запроса и её и возвращаете в строке 58. А Ваше "test" сидит, скорее всего в третьей строке запроса, которую Вы не читаете вовсе.
Он же даже написал, где у него test:GET /test HTTP/1.1
Как и положено, сразу после GET и до протокола.
А, так тест - не запрос, а имя файла. Фу-ты, блин! :(
А, так тест - не запрос, а имя файла. Фу-ты, блин! :(
Даже не файл, а просто часть URL после имени сервера )
А куда он вставляется и что делает? Я не совсем понимаю что это ( не тот уровень еще :-)
Вместо отквоченной строки.
Теперь бы запитать отдельно ESP от arduina если я правильно понимаю то это минус на GND плюс на 3.3v ?
Так получилось что хотел?
А по правилам, землю надо все пины GND завести, а питание на все пины 3.3V
Или есть шансы, что сгорит при большом потреблении на фиг.
Так получилось что хотел?
А по правилам, землю надо все пины GND завести, а питание на все пины 3.3V
Или есть шансы, что сгорит при большом потреблении на фиг.
Да все супер, работает, у меня одним запросом в браузере можно одну лампу отключить вторую включить или две сразу включить, единственное так и не понял куда питание подавать чтоб запитать ESP отдельно а не через USB
Теперь бы запитать отдельно ESP от arduina
Уж сколько раз говорилось, что ESP надо питать отдельно, а не от ардуины. Ардуиновский стабилизатор может не потянуть, у ESP пиковые нагрузки большие. По крайней мере многие жаловались на всякие глюки, когда питали от ардуино. И ещё уровни TR/RX желательно согласовать, если ардуина пятивольтовая. Вход RX у ESP вроде толерантен к 5В, но советуют не рисковать.
UPD: Если у Вас плата такая, как выше на фото - то стабилизатор на 3,3В там уже стоит. Можно подавать 5В на пин 5В (VIN).
А! Так он уже на плате. Тогда достаточно 3.3 и GND или 5V и GND, если использовать стабилизатор на плате. Все нужные ноги там уже соединены, как следует еще под экраном модуля ESP-12F уже припаянного к плате.
Ардуиновский стабилизатор может не потянуть, у ESP пиковые нагрузки большие.
При WiFi передаче по datasheet 170ма. Но указывается это почему то для 17dBm, а максимальная мощность передатчика 19.5dBm. Так как при 15dBm указано 140ма, я бы ориентировался не меньше, чем на 200ма
Запитывать полюбому буду отдельно от блока питания, как то не стабильно все работает, с планшета вообще почти не включается, с пк один можно включить другой выключится, может в коде че не так?
ESP код
Arduino код
delay() бы убрать. А то грузите 80МГц числодробилку на 100%
Есть догадка что может оперативная память забивается предыдущими значениями поэтому работает как хочет, после рестара модулей начинает вроде как норм работать а потом опять не понятно как, можно как то после каждого прохода освобождать память?
Возможно.
Добавь:
Я так понимаю в самом конце программы это добавить в ESP + в arduino?
Возможно.
Добавь:
И вот об этом можно пожайлуста пояснения или ссылку где почитать
И ещё уровни TR/RX желательно согласовать, если ардуина пятивольтовая. Вход RX у ESP вроде толерантен к 5В, но советуют не рисковать.
Я так понимаю в самом конце программы это добавить в ESP + в arduino?
И вот об этом можно пожайлуста пояснения или ссылку где почитать
В коде ардуины у Вас никаких объектов не создается, так что там не надо ничего. В коде ESP неявно вызывается конструктор для перечисленных трех объектов. Уверенности, что для этих объектов был вызван деструктор при выходе из функции у меня нет. C++ для AVR сильно урезан, потому и предлагаю попробовать явно вызвать деструкторы этих объектов.
На PC объекты класса String по умолчанию создаются в стеке и удалять их не надо. Если это так и на AVR - то и деструктор у них пустой. А что за класс WiFiClient я вообще без понятия.
Ясно, спасибо буду пробывать
У класса WiFiClient есть деструктор нашел я его исходники:
И у String тоже нашел:
У класса WiFiClient есть деструктор нашел я его исходники:
И у String тоже нашел:
ясно значит буду заново переделывать, но для начала думаю надо придумать хорошее питание платам каждой отдельно а не двум от ноута по USB, даже возможно в будующем лучше будет ESP использовать как клиент и парсить значения с веб сервера
И вот об этом можно пожайлуста пояснения или ссылку где почитать
ESP8266 питается от 3.3В, логические уровни ножки TX тоже 0В-3,3В. Ардуина питается от 5В, поэтому логические уровни ножки TX уже 0В-5В. То есть больше, чем у ESP8266. Фраза, что ESP8266 "толерантна" к логическим уровням 5В означает, что по-идее она выдержит повышенное напряжение на ножке RX (от TX ардуины) и там ничего не должно погореть. Но чтобы не рисковать, с помощью некоей схемы делают согласование логических уровней. То есть, когда из ардуины (ножка TX) выходит 5В - на ESP8266 (ножка RX) приходит 3,3В. В обратную сторону не обязательно, т.к. 3,3В от ESP8266 (ножка TX) нормально распознаются ардуиной (ножка RX).
http://chipenable.ru/index.php/how-connection/item/91-soglasovanie-logicheskih-urovney.html
http://we.easyelectronics.ru/Shematech/soglasovanie-logicheskih-urovney-5v-i-33v-ustroystv.html
http://we.easyelectronics.ru/Shematech/devyatikanalnyy-soglasovatel-urovney.html
UPD: Возможно на плате NodeMCU это уже реализовано. Вон там какие-то два транзистора возле D6, D8 стоят.