【问题标题】:How to read data from websites on Particle如何从 Particle 上的网站读取数据
【发布时间】:2019-08-14 23:33:56
【问题描述】:

我正在开发一个使用 Particle 设备的项目(如在particle.io 中 - 考虑到它的名称如此含糊,很难搜索这些东西)。我一直在做教程,但我找不到任何关于通过蜂窝网络访问 HTTPS 网站的信息。我找到了这个https://build.particle.io/libs/HttpClient/0.0.5/tab/HttpClient.cpp,但它不适用于 https。

我需要为一个项目(不是家庭作业)阅读一个可公开访问的 HTTPS 网站并在此基础上设置变量。我该怎么做,在这个确切的问题上我找不到任何资源吗?非常感谢。

【问题讨论】:

    标签: https arduino cellular-network particle.io particle-electron


    【解决方案1】:

    要进行 HTTPS 调用,您需要一个支持 SSL 的客户端。一个例子是 Glowfish 使用 matrixSSL 制作的httpsclient-particle

    你可以这样使用它:

    // This #include statement was automatically added by the Particle IDE.
    #include <httpsclient-particle.h>
    
    static int anomalyLed = D7;
    static int heartbeatLed = D7;
    
    const bool g_https_trace = true;  // This controls debug info print to Serial
    const char host [] = "www.timeapi.org";
    const char endpoint [] = "/utc/now/";
    const int g_port = 443; // DoNOT change this unless you know what's up
    static unsigned int freemem;
    bool g_https_complete;
    uint32 g_bytes_received;
    
    TCPClient client;
    
    unsigned char httpRequestContent[] = "GET %s HTTP/1.0\r\n"
      "User-Agent: MatrixSSL/" MATRIXSSL_VERSION "\r\n"
      "Host: www.timeapi.org\r\n"
      "Accept: */*\r\n"
      "Content-Type: application/json\r\n"
      "Content-Length: %d\r\n\r\n%s";
    
    void setup() {
      if (g_https_trace) {
        Serial.begin(9600);
      }
      pinMode(anomalyLed, OUTPUT);
      httpsclientSetup(host, endpoint);
    }
    
    unsigned int nextTime = 0;    // Next time to contact the server
    int g_connected;
    void loop() {
      if (nextTime > millis()) return;
      g_connected = client.connect(host, g_port);
      if (!g_connected) {
        client.stop();
        // If TCP Client can't connect to host, exit here.
        return;
      }
      g_https_complete = false;
      g_bytes_received = 0;
      if (g_https_trace) {
        freemem = System.freeMemory();
        Serial.print("free memory: ");
        Serial.println(freemem);
      }
      int32 rc;
      if ((rc = httpsClientConnection(httpRequestContent, 0, NULL) < 0)) {
        // TODO: When massive FAIL
        httpsclientCleanUp();
        digitalWrite(anomalyLed, HIGH);
        delay(500);
        digitalWrite(anomalyLed, LOW);
        delay(500);
        digitalWrite(anomalyLed, HIGH);
        delay(500);
        digitalWrite(anomalyLed, LOW);
      } else {
        digitalWrite(heartbeatLed, HIGH);
        delay(250);
        digitalWrite(heartbeatLed, LOW);
      }
      client.stop();
      nextTime = millis() + 5000;
    }
    

    【讨论】:

    • 你搞定了吗?它总是会导致 Particle 上的 SOS 状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-11
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    相关资源
    最近更新 更多