如何使用 AdaFruit CC3000 库将我的 Uno JSON 传感器数据的简单 HTTP Post 发送到 Bluemix(节点红色)?

How do use the AdaFruit CC3000 library to send a simple HTTP Post of my Uno JSON sensor data to Bluemix (node red)?

一头雾水,绞尽脑汁想了一个星期。 背景:我对完美运行的 Arduino Uno 气象站和使用带有 CC3000 wifi 屏蔽的示例 wifi 草图的完美互联网连接的内存不足。 MQTT 样本也很好用,但是!我不适合 MQTT 客户端,所以需要简单的骨头。我认为 HTTP POST 是基于论坛中收到的一些建议的基本框架。

我只是不知道如何仅使用 AdaFruit CC3000 库将 HTTP POST 发送到我的 Bluemix Node Red 应用程序并显示我的 300 左右字符 JSON 格式的字符串 I想要每 5 分钟发送一次。我只希望这些字符串显示在节点红色调试区域中。完全不懂!!!

顺便说一下,这个发送到 AdaFruit 的 HTTP GET 代码(CC3000 webclient 示例)工作完美,如下所示,因此您知道我必须使用什么。我不明白相对于 Bluemix 应该使用什么凭证。真的很困惑,因为我一生中大部分时间都是硬件产品开发工程师,对其中的大部分内容都是陌生的。不过喜欢学习体验!

基本上想将该 GET 转换为 POST 并使用 Node Red 在 Bluemix 上成功拉入我的字符串。请帮助!

这是我的 Uno 上使用 AdaFruit 站点进行测试的基本功能 GET 代码。

#define WEBSITE      "www.adafruit.com"
#define WEBPAGE      "/testwifi/index.html" 
...
ip = 0;
  // Try looking up the website's IP address
  Serial.print(WEBSITE); Serial.print(F(" -> "));
  while (ip == 0) {
    if (! cc3000.getHostByName(WEBSITE, &ip)) {
      Serial.println(F("Couldn't resolve!"));
    }
    delay(500);
  }
...
Adafruit_CC3000_Client www = cc3000.connectTCP(ip, 80);
  if (www.connected()) {
    www.fastrprint(F("GET "));
    www.fastrprint(WEBPAGE);
    www.fastrprint(F(" HTTP/1.1\r\n"));
    www.fastrprint(F("Host: ")); www.fastrprint(WEBSITE); www.fastrprint(F("\r\n"));
    www.fastrprint(F("\r\n"));
    www.println();
  } else {
    Serial.println(F("Connection failed"));    
    return;
  }

  Serial.println(F("-------------------------------------"));

  /* Read data until either the connection is closed, or the idle timeout is reached. */ 
  unsigned long lastRead = millis();
  while (www.connected() && (millis() - lastRead < IDLE_TIMEOUT_MS)) {
    while (www.available()) {
      char c = www.read();
      Serial.print(c);
      lastRead = millis();
    }
  }
  www.close();

POST 的 HTTP spec 与 GET 的 HTTP spec 没有太大区别。

您需要添加一些额外的 headers,例如 Content-TypeContent-Length

但像这样的事情应该是一个很好的起点

...
Adafruit_CC3000_Client www = cc3000.connectTCP(ip, 80);
  if (www.connected()) {
    www.fastrprint(F("POST "));
    www.fastrprint(WEBPAGE);
    www.fastrprint(F(" HTTP/1.1\r\n"));
    www.fastrprint(F("Host: ")); 
    www.fastrprint(WEBSITE);
    www.fastrprint(F("\r\n"));
    www.fastprint(F("Content-Type: application/json\r\n"));
    www.fastprint(F("Content-Length: "));
    www.fastprint(payload.length));
    www.fastrprint(F("\r\n"));
    www.fastrprint(F("\r\n"));
    www.fastprint(payload);
    www.println();
...