Почтовый запрос HTTP в формате JSON с использованием модуля SIM900
Я попытался отправить HTTP-запросы на сервер в формате JSON с помощью модуля SIM900. Но код не публикует данные. При публикации данных я получаю ответ об ошибке при инициализации сервера с помощью команды:
{("AT+HTTPPARA=\"URL\",\"http://test.server/insert-path")}
Я не знаю, что это за ошибка и как ее исправить. Пожалуйста, помогите мне это исправить.
#include<SoftwareSerial.h>
SoftwareSerial client(2,3);
String testReading="{ \"testID\" : 1, \"testLevel\" : 1, }";
void setup() {
Serial.begin(9600);
client.begin(9600);
delay(1000);
if(client.available()) {
Serial.print("Connected");
} else {
Serial.print("Not Connected");
}
checkSignal();
connectGPRS();
postData();
delay(1000);
}
void loop() {
if(client.available()) {
checkSignal();
connectGPRS();
postData();
delay(1000);
}
}
void connectGPRS() {
client.println("AT+CGATT?");
delay(1000);
ShowSerialData();
client.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");
delay(1000);
ShowSerialData();
client.println("AT+SAPBR=3,1,\"APN\",\"www\"");
//Использование индийской стандартной SIM-карты Vodafone, поэтому APN — это www
delay(1000);
ShowSerialData();
client.println("AT+SAPBR=1,1");
delay(1000);
ShowSerialData();
client.println("AT+SAPBR=2,1");
delay(1000);
ShowSerialData();
}
void checkSignal() {
client.println("AT+CSQ");
delay(1000);
ShowSerialData();
}
void ShowSerialData() {
while(client.available()!=0)
Serial.write(client.read());
}
void postData() {
client.println("AT+HTTPINIT");
delay(1000);
ShowSerialData();
client.println("AT+HTTPPARA=\"CID\",1");
delay(1000);
ShowSerialData();
client.println("AT+HTTPPARA=\"URL\",\"http://test.server/insert-path");
delay(1000);
ShowSerialData();
client.println("AT+HTTPPARA=\"CONTENT\",\"application/json");
delay(1000);
ShowSerialData();
client.println("AT+HTTPDATA=99,10000");
delay(1000);
ShowSerialData;
client.println(testReading);
delay(1000);
ShowSerialData;
client.println("AT+HTTPACTION=1");
delay(10000);
while(!client.available());
ShowSerialData();
}
2 ответа
▲ 2
Привет всем, используйте этот код ниже для установки HTTP-соединения с сервером. И чтобы игнорировать ошибку 601 или 504, используйте правильный формат публикации. Здесь я использую формат JSON. Я просто дал ручные данные. Игнорируйте эти ошибки в HTTPINIT, AT+SAPBR=2,1. Данные будут отправлены на сервер
#include<SoftwareSerial.h>
SoftwareSerial client(2,3);
String reading="{ \" : 1, \"latitude\" : 12.983027, \"longitude\" : 80.2594, \"timestamp\" : 100, }";
void setup()
{
Serial.begin(9600);
client.begin(9600);
delay(500);
if(client.available())
{
Serial.print("Connected");
}
else
{
Serial.print("NotConnected");
}
//инициализироватьSIM();
connectGPRS();
connectHTTP();
}
void loop()
{
}
void connectGPRS()
{
client.println("AT+SAPBR=3,1,\"Contype\",\"GPRS\"");
delay(1000);
ShowSerialData();
client.println("AT+SAPBR=3,1,\"APN\",\"www\"");//APN
delay(1000);
ShowSerialData();
client.println("AT+SAPBR=1,1");
delay(1000);
ShowSerialData();
client.println("AT+SAPBR=2,1");
delay(1000);
ShowSerialData();
}
void connectHTTP()
{
client.println("AT+HTTPINIT");
delay(1000);
ShowSerialData();
client.println("AT+HTTPPARA=\"CID\",1");
delay(1000);
ShowSerialData();
client.println("AT+HTTPPARA=\"URL\",\"http://xxx.xxx.xx/Listener/\"");//IP-адрес общедоступного сервера
client.println("AT+HTTPPARA=\"URL\",\"http://testServer/Listener/\"");//Адрес общедоступного сервера
delay(1000);
ShowSerialData();
client.println("AT+HTTPPARA=\"CONTENT\",\"application/json\"");
delay(1000);
ShowSerialData();
client.println("AT+HTTPDATA=" + String(reading.length()) + ",100000");
delay(1000);
ShowSerialData();
client.println(reading);
delay(1000);
ShowSerialData;
client.println("AT+HTTPACTION=1");
delay(1000);
ShowSerialData();
client.println("AT+HTTPREAD");
delay(1000);
ShowSerialData();
client.println("AT+HTTPTERM");
delay(1000);
ShowSerialData;
}
void ShowSerialData()
{
while(client.available()!=0)
{
Serial.write(client.read());
delay(100);
}
}
,
@Chitraveer Akhil
▲ 1
client.println(reading);
delay(1000);
ShowSerialData;
Приведенная выше строка кода приведет к ошибке.
,
@notical
Смотрите также:
- Как публиковать запросы HTTP POST на моем веб-сайте?
- HTTP GET запрос с использованием Arduino Uno и ESP8266
- GSM-модуль Sim800l не может подключить данные gprs
- Отправить HTTP get запрос от GSM SIM800c и Arduino
- Как отправить HTTP-post данные в Node Express API с Arduino esp822 6?
- Запрос POST (HTTPClient) с ESP8266, не работающим на локальном хосте (код http = -1)
- ESP8266 HTTPS post запрос тела сообщения с WifiClientSecure
- ошибка 404 в запросе HTTP GET с Arduino Uno и ESP8266 с использованием AT-команд
Дайте нам подсказку - как далеко это заходит? Что оно делает?, @Mark Smith
Этот код отправит введенные вручную данные в Arduino на сервер. Это всего лишь пример кода. Я использую SIM-карту 900 для установки GPRS-соединения., @Chitraveer Akhil
Между SIM-картой и Arduino устанавливаются соединения, иногда GPRS подключается, но данные не отправляются на сервер., @Chitraveer Akhil
Можно ли публиковать на сервер с ПК (не в локальной сети сервера)? Вы уверены, что сервер работает и доступен? Журналы сервера показывают неудачные соединения? Мы ищем проблему с подключением или проблему с данными, которые он отправляет?, @Mark Smith
Стоит отметить, что если вы полагаетесь на свою функцию
ShowSerialData()
, чтобы знать, что происходит, она может быть ненадежной. Последовательные данные не появляются сразу. Ваш код основан на гонке — данные поступают достаточно быстро, чтобы всегда быть в буфере. Вы можете взломать его, добавивdelay(1000)
прямо в началеShowSerialData()
., @Mark SmithСпасибо.. Я отложил это.. Ошибка при инициализации URL.. Когда я отправляю команду {("AT+HTTPPARA=\"URL\",\"http://test.server/insert-path" )}.. Я получаю ответ ERROR.. Я даже задержал время отправки данных и инициализации HTTP.. Но все равно получаю ответ ERROR.., @Chitraveer Akhil
Не могли бы вы отредактировать свой вопрос, чтобы включить эту информацию, пожалуйста? Я подозреваю, что не смогу решить его за вас, но чем яснее вы сформулируете вопрос, тем больше вероятность того, что это сделает кто-то другой., @Mark Smith
Спасибо, Марк, за вашу помощь. Если у вас есть идея решить эту проблему, пожалуйста, отправьте мне пинг., @Chitraveer Akhil