почему ардуино не может писать на сервер?
Я пишу код для Arduino + SIM800 для подключения к серверу. но это не работает!
SerialGsm.println("AT+CIPSEND=63\r\n");
delay( 1000 );
receive_message();
SerialGsm.print( "GET http://sasasas.ir.ir/hadi/signal.php?value=10" );
delay( 10000 );
receive_message();
все верно, но "GET" не может повторить "OK". это ответ ардуино:
В
ОК
Вызов готов
СМС готово AT+CSTT="мтниранселл"
ОК AT+CIICR
ОК AT+CIFSR
100,65,157,1 AT+CIPSTART="TCP","processes.go",80
ОК
ПОДКЛЮЧИТЬ ОК AT+CIPSEND=63
ПОЛУЧИТЬ http://sasasas.ir/hadi/signal.php?value=10
"get" не имеет ответа. Что не так в этом коде?
@hadisamani1996, 👍0
Обсуждение1 ответ
Лучший ответ:
Во-первых, у вас есть только половина первой строки запроса GET. Во-вторых, та половина, которая у вас есть, плохо отформатирована.
Запрос GET НЕ выглядит следующим образом:
GET http://jalambadani.ir/hadi/signal.php?value=10
Запрос GET ДЕЙСТВИТЕЛЬНО выглядит следующим образом:
GET /hadi/signal.php?value=10 HTTP/1.1
Host: jalambadani.ir
Connection: close
[extra blank line]
Если вы отправите неправильные данные, вы не можете рассчитывать на ответ. Вы должны изучить основы того, что вы пытаетесь сделать, вместо того, чтобы просто бросать случайный текст на веб-сервер.
Вот полная расшифровка запроса GET к вашему URL:
$ telnet jalambadani.ir 80
Trying 185.211.56.148...
Connected to jalambadani.ir.
Escape character is '^]'.
GET /hadi/signal.php?value=10 HTTP/1.1
Host: jalambadani.ir
Connection: close
HTTP/1.1 200 OK
Date: Tue, 25 Jun 2019 22:47:07 GMT
Server: Apache/2
X-Powered-By: PHP/5.6.35
Upgrade: h2,h2c
Connection: Upgrade, close
Vary: User-Agent
Content-Length: 31
Content-Type: text/html; charset=UTF-8
New record created successfullyConnection closed by foreign host.
В коде это будет:
SerialGsm.print("AT+CIPSEND=83\r\n");
delay(1000); // I hate that. Look for a proper OK instead.
SerialGsm.print("GET /hadi/signal.php?value=15 HTTP/1.1\r\n");
SerialGsm.print("Host: jalambadani.ir\r\n");
SerialGsm.print("Connection: close\r\n");
SerialGsm.print("\r\n);
Спасибо за ваш ответ. я студент-электрик, и я не знаю о http... но я попытаюсь изучить его. я проверяю ваш ответ, но он еще не работает: | "ПОЛУЧИ" не отвечай мне. @Majenko, @hadisamani1996
PHP не имеет к этому никакого отношения. Вы говорите в HTTP., @Majenko
Вы пробовали предложение Маженко - похоже, оно работает - работает против вашего сервера - с помощью telnet ?? Как только вы увидите, как это работает, переведите это в свой код Arduino. Не стремитесь к окончательному решению с первой попытки, если оно слишком далеко. Делайте это шаг за шагом. Скопируйте пример telnet от majenko -> изучите протокол. Затем передайте протокол в свое приложение., @GMc
да, я использую предложение Маженко. SerialGsm.print("AT+CIPSEND=50\r\n"); задержка(3000); получить_сообщение(); SerialGsm.print("GET /hadi/signal.php?value=15 HTTP/1.1"); задержка(3000); получить_сообщение(); не работа., @hadisamani1996
@hadisamani1996 hadisamani1996 Как насчет заголовков Host: и Connection: вместе с дополнительной пустой строкой? Все они являются частью запроса. Вы должны отправить все запросы., @Majenko
я решаю это с вашей помощью @Majenko у меня 2 ошибка. сначала вы увидели, и когда я использую эту строку, она решена. ********** SerialGsm.print("GET /hadi/signal.php?value=150 HTTP/1.1\r\nHost: jalambadani.ir\r\n\r\n"); *********** два следующая из «команды GET» я использую небольшую задержку. я немного увеличиваю его и затем решил свою проблему Спасибо, @hadisamani1996
Поскольку Маженко помог вам, вы должны принять его ответ, щелкнув маленькую серую галочку (галочку) рядом с его ответом., @GMc
придирки: почему не println
?, @Juraj
В зависимости от системы println может заканчиваться на \n
, \r
или \r\n
. Здесь лучше быть откровенным., @Markus Deibel
Спецификация HTTP требует \r\n. Arduino println() добавляет \r\n на все ядра, @Juraj
@Juraj, это не может быть гарантировано. Конечно, все ядра *должны* делать это, но их так много написано разными людьми с разными наборами навыков, что нельзя гарантировать 100%-ную гарантию., @Majenko
Класс печати скопирован. в println менять нечего. если бы какое-то ядро изменило бы его, у него сразу бы возникла проблема в трекере. базовые примеры сетевых библиотек не будут работать, @Juraj
- Как получить данные из базы данных моего сервера в переменную в моем Arduino?
- Отправка данных Arduino через Ethernet на сервер PHP.
- Простая веб-страница с Ethernet-шилдом Arduino на SD-карте
- Arduino uno R4 против платы разработчика ESP32
- Как отправить HTTP-post данные в Node Express API с Arduino esp822 6?
- Можно ли использовать AWS и Arduino Uno для загрузки данных с Arduino на веб-сайт, работающий на моем локальном хосте?
- Esp8266 не отвечает на запрос от приложения для Android, созданного с помощью MIT App Inventor
- Как импортировать данные с SD-карты на Arduino на компьютер, используя последовательный/COM-порт Arduino?
Изучите правильный формат запроса GET., @Majenko