Ви не увійшли.
Сторінки 1
Dessan пише:я не знаю как подключить модули String и stdio в ардуино, в стандартных библиотеках его нет.
В студии нет stdio.h ??? А если найду? Пиши #include <stdio.h> и не выпендривайся.
Ок, оно должно подсвечиваться как-то?Почему все модули красным цветом а #include <stdio.h> чёрным?Или это ни на что не влияет?
Не форум, а сборище флудеров. Если не знаете как решить задачу, так и не пишите ваши крайне умные мысли ни о чём. Хорошо, что у меня есть рабочее решение через функцию и даже без цикла while (что особенно приятно).
Avazart, за код спасибо, но он не подходит. Более того, длина HTTP запроса зависит от браузера и принимающего сервера и там точно не 127 символов. Через хром можно и 2000+ передать, а вот сколько может обработать сервер arduino за раз я не знаю. Но мне вполне хватит и 500 символов для всех целей.
Моя главная проблема в том, что я не знаю как подключить модули String и stdio в ардуино, в стандартных библиотеках его нет. На западных форумах нашёл, что их качают и устанавливают. Зачем они мне нужны? Хочу понимать как они работают. Вроде что-то скачал, но они не подсвечены совсем в коде красным цветом, как остальные модули и я не знаю так должно быть или нет. К тому же я не понимаю как работают строки, почему вдруг они являются массивами и как из строки сделать цельное слово. Спросить не у кого. На форумах одни юмористы и умники.
Скачал Visual Studio - изучаю строки в С++, а там видно будет.
Я делаю примерно так:
//------------------------------------------------------------------------------
Как мне объяснил народ, плохая идея забивать сначала всё что приходит в буфер а потом парсить, потому что буфер слишком маленький и если будет много данных, то всё зависнет. Нужно парсить на лету
Я б на Вашому місці створив дві змінні username та password а тоді б парсив GET запит присвоюючи змінним знайдені результати.
Наприклад:
String answer = client.readStringUntil('\r'); //Присвоєння зчитаних даних рядковій змінній answer
Далі у Вашому випадку:
if (answer.indexOf("username") != -1){
//Тут код для присвоєння на початку об`явленій змінній String username знайденого значення
}
if (answer.indexOf("password") != -1){
//Тут код для присвоєння на початку об`явленій змінній String password знайденого значення
}
Тут вопрос в том, что все данные могут быть разными. То есть вместо username может быть любой текст, как и вместо password
А эта функция sscanf(...) разве не только для числовых значений формата int? А то у меня числа с буквами вместе стоят
А это форум не для обсуждения разве? Я не знал, что тут только предлагают работу нормальным программистам. Хотя для нормального программиста тут вообще нечего делать
Добрый день,
На сервер Arduino отправляется get запрос вида:
GET /?username=Dessan&password=12345 HTTP/1.1
Сервер Ардуино принимает запрос и выводит в порт:
GET /?username=Dessan&password=12345 HTTP/1.1
Host: 192.168.0.177:5000
Connection: keep-alive
Accept: application/json, text/javascript, */*; q=0.01
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 YaBrowser/19.9.3.314 Yowser/2.5 Safari/537.36
Origin: null
Accept-Encoding: gzip, deflate
Accept-Language: uk,ru;q=0.9,en;q=0.8
Я хочу, чтоб в результате get запроса я получал отдельно username, отдельно Dessan, отдельно password и отдельно 12345 и мог с этими данными что-то делать, например сравнивать и выполнять какое-либо действие.
Весь get запрос записывается в переменную tempChar но она имеет свой непонятный мне формат и как я не пытался сделать её строковой у меня ничего не вышло. Я создал другую строковую переменную readString и присвоил ей содержимое tempChar. Насколько я понял, строковые переменные в Arduino являются сами по себе массивами. После манипуляций с indexOf и substring мне удалось распарсить нужную мне строку, однако она выводит не полностью слово , к примеру, username а начинает вывод по буквам.
Вот код парсинга строки:
String readString;
...
while (client.connected()) {
if (client.available()) {
tempChar = client.read();
//Serial.write(tempChar);
if (readString.length() < 100 ) {
readString += tempChar;
//Serial.print(readString.length());
ind1 = readString.indexOf("?");
ind2 = readString.indexOf("=");
teststring = readString.substring(ind1, ind2);
teststring.replace("?", " ");
teststring.trim();
...
Вот результат парсинга (значение в teststring):
u
us
use
user
usern
userna
usernam
username
username
username
username
username
username
username
и далее ещё штук 20 таких вот username
Получается , что если делать проверки содержит ли переменная username , то дальнейший код реагирует и на username и на u и на us и на use и т.д. В принципе оно работает, но хочется иметь нормальный код более менее а не совсем уже говнокод.
Сторінки 1