Отправьте JSON через POST на SIM900-экран с помощью AT-команд

Я пытаюсь отправить JSON POST в экран SIM900 с помощью AT-команд. После того, как я вызываю команду AT + HTTPACTION = 1 , она возвращает ошибку 601: + HTTPACTION: 1,601,0 .

Я видел здесь, что ошибка была 601 Network Error. Может кто-нибудь мне помочь? Следующий мой код.

void connectInternet() {
  if(digitalRead(9 != LOW)) {
    Serial.print("\r\n");
    Serial.print("------------------------------------------------- \r\n");
    Serial.print(" CONNECT ON INTERNET \r\n");
    Serial.print("------------------------------------------------- \r\n");
    Serial.print("\r\n");
    Serial.println("Connecting...\r");
    cmdAT("AT");
    cmdAT("AT+CIPSHUT");
    cmdAT("AT+CIPMUX=1");
    cmdAT("AT+CSTT=\"zap.vivo.com.br\",\"vivo\",\"vivo\"");
    cmdAT("AT+CIICR");
    cmdAT("AT+CDNSCFG=\"8.8.8.8\",\"8.8.4.4\"");
    Serial.print("IP Device: ");
    cmdAT("AT+CIFSR");
  }
}

void send2Api() {
  Serial.print("\r\n");
  Serial.print("------------------------------------------------- \r\n");
  Serial.print(" SEND TO API\r\n");
  Serial.print("------------------------------------------------- \r\n");
  Serial.print("\r\n");
  cmdAT("AT+CSQ");
  cmdAT("AT+CGATT?");
  cmdAT("AT+SAPBR=2,1");
 //Query if the connection is setup properly, if we get back a IP address then we can proceed
  cmdAT("AT+HTTPPARA=\"CID\",1");
 //Set the HTTP session.
  cmdAT("AT+HTTPPARA=\"URL\",\"http://api.com.br/endpoint\"");
 //set endPoint
  cmdAT("AT+HTTPPARA=\"CONTENT\",\"application/json\"");
 //set content json
  cmdAT("AT+HTTPDATA=100,5000");
 //POST session start
 //JSON payload
  cmdAT("{\"timestamp\":\"2016-03-08T19:36:45.000Z\",\"latitude\":\"-24.9458581\",\"longitude\":\"-53.4968357\"}");
  delay(100);
  cmdAT("AT+HTTPACTION=1");
 //POST session start
  cmdAT("AT+HTTPREAD");
 //Read the data of HTTP server
  cmdAT("AT+HTTPTERM");
 //terminate http
  ShowSerialData();
1
Ok @Gee Bee. Поэтому мне не нужно вызывать мою функцию connectInternet() . Должен ли я определить PDP в функции send2Api() ? благодаря
добавлено автор Bob Fanger, источник
Проверьте . Надеюсь, поможет:)
добавлено автор Ben, источник
Настройка контекста PDP отсутствует в вашем коде. То есть вам необходимо настроить соединение с GPRS APN, которое ваш поставщик сети GSM дает использовать в качестве шлюза в Интернет.
добавлено автор joeqwerty, источник

1 ответы

Настройка контекста PDP отсутствует в вашем коде. Много лет назад я понял, что эта последовательность инициализации работает (т. Е. Расширяет ваш connectToInternet):

        //--if autobauding was enabled, send a blank AT
        command:='AT';
        send_gprs;

        //--switch to minimal mode - this is required to reset the SIM card
        command:='AT+CFUN=0';
        send_gprs;

        //--set dce speed
        command:='AT+IPR=57600';
        send_gprs;

        //--turn off command echo
        command:='ATE0';
        send_gprs;

        //--turn off command echo again - sometimes the first command is ignored
        command:='ATE0';
        send_gprs;

        //--turn on extended error messages     
        command:='AT+CMEE=1';
        send_gprs;

        //--set module to full function 
        command:='AT+CFUN=1';
        send_gprs;

Тогда очень важно разблокировать SIM-карту. Самое простое решение - отключить запрос PIN-кода (установите SIM-карту на реальный телефон и используйте телефон, чтобы настроить это.) Убедитесь, что модуль может продолжить авторизацию SIM-карты:

        //--check pin 
        command:='AT+CPIN?';
        send_gprs;
        //--right answer is +CPIN: READY
        //--wrong answer is +CME ERROR: 772

Затем настройте APN. Это фактически инициирует асинхронный запрос APN, и вы не должны действовать до тех пор, пока AT + CSTT не вернется в режим OK:

    repeat
        //--reset connection
        command:='AT+CIPSHUT';
        send_gprs;

        //--set GPRS APN
        command:='AT+CSTT="internet.vodafone.net"';
        send_gprs;
    until is_ok=1;

И, наконец, откройте соединение GPRS:

    repeat
        //--Open gprs connection
        command:='AT+CIICR';
        send_gprs; 

        //--Get local address - for some reason this is required
        command:='AT+CIFSR';
        send_gprs;

        //--Suppress "SEND OK" after at+cipsend
        command:='AT+CIPSPRT=2';
        send_gprs;

    until is_ok=1;

(Хорошо, извините, этот код является паскалем и не особенно золотым, но вы поняли суть последовательности команд.)

Две очень важные вещи:

  • любая команда может выйти из строя - рекомендуется отправить ответ на AT-команду в окно консоли.
  • AT + CIFSR - это зло. Если вы не используете AT + CIFSR в правильной последовательности, сообщение просто не работает. Я использовал модули SIM900D. Хотя вы можете почувствовать, что не обязательно получать свой IP-адрес, на самом деле это по какой-то причине необязательно.

Я использовал AT + CIPSEND для фактической передачи данных. HTTP так просто, и лучше контролировать.

2
добавлено
Анархическая электроника
Анархическая электроника
1 510 участник(ов)

[около] электронные темы. без переходов на личности, стен стикеров, политики, непрошенной рекламы и всякого такого Основной чат у нас в @ru_electronics Общий информационный канал @ru_electronics_feed

Про электронику
Про электронику
1 461 участник(ов)

QA чат для решения вопросов, связанных с электроникой. без стикеров, непрошенной рекламы и игр в русский форум оформляйте вопрос в одно сообщение вопросы со словом «кто» игнорируются don't ask for ask Правила http://telegra.ph/ru-electronics-rulz-11-11

Embedded Group
Embedded Group
873 участник(ов)

Все про Embedded и электронику. Осторожно, бывают нотификейшены. #вопросподелу - Для поиска вопросов и ответов #devtools - фотки рабочих железок Работа: @rabotaembedded http://embedded.group http://vk.com/embedded_space

Hardware & Radio
Hardware & Radio
155 участник(ов)

Разговоры об электронике, микроконтроллерах, низкоуровневом программировании, реверс-инжиниринге, FPGA, квадрокоптерах, 3D-печати, Software Defined Radio, любительском радио, и всяком таком.

ARDUINO [RU]
ARDUINO [RU]
60 участник(ов)

Обсуждение Электронного конструктора Arduino. Проблемы и их решения. Ссылки на интересные статьи и проекты. ВК: https://vk.com/arduino_esp Realtek: http://vk.com/rtl8711 Чаты: IOT https://t.me/ProIOT esp8266 https://t.me/Proesp8266