首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SIM800H,羽毛FONA正在尝试制作http POST

SIM800H,羽毛FONA正在尝试制作http POST
EN

Stack Overflow用户
提问于 2020-03-20 05:08:59
回答 1查看 266关注 0票数 0

我正在尝试向elastic搜索服务器发出POST http请求,但是我得到了一个603状态并且失败了。这是我发出请求时的输出。芯片本身可以工作,示例中的get请求也可以工作。我可以发短信。问题出在代码本身,但我不知道在哪里。

代码语言:javascript
运行
复制
---> AT+HTTPTERM
<--- OK
---> AT+HTTPINIT
<--- OK
---> AT+HTTPPARA="CID"
<--- OK
---> AT+HTTPPARA="UA"
<--- OK
---> AT+HTTPPARA="URL"
<--- OK
---> AT+HTTPPARA="CONTENT"
<--- OK
---> AT+HTTPDATA=150,100000
<--- DOWNLOAD
<--- OK
---> AT+HTTPACTION=1
<--- OK
Status: 603
Len: 0
    ---> AT+HTTPREAD
    <--- OK
Failed!

以下是arduino代码,主要复制自FONA库中的FONA测试。

代码语言:javascript
运行
复制
#include "Adafruit_FONA.h"
#include "SoftwareSerial.h"

//FONA stuff
char replybuffer[255];
SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX);
SoftwareSerial *fonaSerial = &fonaSS;
Adafruit_FONA fona = Adafruit_FONA(FONA_RST);
uint8_t readline(char *buff, uint8_t maxbuff, uint16_t timeout = 0);

uint8_t type;


void setup() {
  while (!Serial);
  Serial.begin(115200);
  Serial.println(F("Initializing FONA"));
  Serial.println(F("Initializing....(May take 3 seconds)"));

  fonaSerial->begin(4800);
  if (! fona.begin(*fonaSerial)) {
    Serial.println(F("Couldn't find FONA"));
    while (1);
  }

  Serial.println(F("FONA is OK"));
  Serial.print(F("Found FONA 800H"));

  char imei[16] = {0}; // MUST use a 16 character buffer for IMEI!
  uint8_t imeiLen = fona.getIMEI(imei);
  if (imeiLen > 0) {
    Serial.print("Module IMEI: "); Serial.println(imei);
  }

  fona.setGPRSNetworkSettings(F("TM"));
  //fona.setHTTPSRedirect(true);

  fona.enableGPRS(false);
  while(!fona.enableGPRS(true));


  flushSerial();

  uint16_t vbat;  
  if (! fona.getBattPercent(&vbat)) {
    Serial.println(F("Failed to read Batt"));
  } else {
    Serial.print(F("VPct = ")); Serial.print(vbat); Serial.println(F("%"));
  }

}

void loop() {


  uint16_t vbat;  
  if (! fona.getBattPercent(&vbat)) {
    Serial.println(F("Failed to read Batt"));
  } else {
    Serial.print(F("VPct = ")); Serial.print(vbat); Serial.println(F("%"));
  }

  float humidityInside = dhtinside.readHumidity() -10;
  float temeratureInside = dhtinside.readTemperature();
  float humidityOutside = dhtoutside.readHumidity();
  float temeratureOutside = dhtoutside.readTemperature();

  uint16_t statuscode;
  int16_t length;
  char conversion[8];
  String data = "{\"outside.temperature\":" + 
              String(temeratureOutside) +
              "," + "\"outside.humidity\":" +
              String(humidityOutside) +
              "," + "\"inside.temperature\":" + 
              String(temeratureInside) + 
              "," + "\"inside.humidity\":" +
              String(humidityInside) + 
              "," + "\"timestamp\":" + 
              String(myRTC.year) + 
              "-0" +
              String(myRTC.month) + 
              "-" +
              String(myRTC.dayofmonth) +
              "T" + 
              String(myRTC.hours) +
              ":" + 
              String(myRTC.minutes) +
              ":" +
              String(myRTC.seconds) + 
              "\"," + "\"battery\":" +
              String(vbat) +
              "}";

  Serial.println(data); 

  char dataChar[152];

  data.toCharArray(dataChar, 151);

  flushSerial();

  Serial.println(F("****"));
  flushSerial();
  if (!fona.HTTP_POST_start("https://elastic:ZZFPKxXvZX1T@9195f7cad1252e0d4.eastus2.azure.elastic-cloud.com:9243/honeycomb/_doc", F("application/json"), (uint8_t *) dataChar, strlen(dataChar), &statuscode, (uint16_t *)&length)) {
    Serial.println("Failed!");
  }else{
    while (length > 0) {
    while (fona.available()) {
      char c = fona.read();

    #if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
        loop_until_bit_is_set(UCSR0A, UDRE0); // Wait until data register empty. 
        UDR0 = c;
    #else
        Serial.write(c);
    #endif

        length--;
        if (! length) break;
      }
    }
    Serial.println(F("\n****"));
    fona.HTTP_POST_end();

  }

  delay(10000);
}

void flushSerial() {
  while (Serial.available())
    Serial.read();
}
EN

回答 1

Stack Overflow用户

发布于 2020-03-21 03:30:57

我不知道c++,也不知道"Feather FONA",但我的"TTgo t-call sim800 v1.3“micropython板也遇到过类似的问题。

当我看到你发布的输出时,我会说你忘了启用HTTPS。再说一次,我不知道HTTPS,但如果"https://elastic:ZZFPKxXvZX1T@9195f7cad1252e0d4.eastus2.azure.elastic-cloud.com:9243/honeycomb/_doc“是你发出请求的网址,你必须首先启用HTTPS。

在你的输出中应该有一行:

代码语言:javascript
运行
复制
AT+HTTPSSL=1
OK

如果您尝试启用HTTPS,但得到如下错误:

代码语言:javascript
运行
复制
AT+HTTPSSL=1
ERROR

您的调制解调器可能不支持HTTPS。然后,您必须回退到HTTP。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60765080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档