陌上明知山 2024-01-06 11:31 采纳率: 100%
浏览 13
已结题

ESP32使用HTTPClient库时出错

用platfromIO,做ESP32用HTTPClient库实现同步天气,但是在创建HTTPClient对象时总是出错,有谁知道为什么吗

#include <Arduino.h>
#include <WiFi.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
#include <ArduinoJson.h>
#include <HttpClient.h>
#define MAX_CONN 35

const char *ssid = "***";
const char *password = "**************************";
const String My_URL = "https://api.seniverse.com/v3/weather/now.json?key=***&location=qingdao&language=zh-Hans&unit=c";

int WiFi_CONN = 0;
bool WiFi_CONNECT = 1;

WiFiUDP ntpUDP; // 创建UDP实例
NTPClient timeClient(ntpUDP, "cn.pool.ntp.org", 3600 * 8, 60000);


void setup()
{
    Serial.begin(115200); // 初始化串口
    WiFi.begin(ssid, password);
   
    while (WiFi.status() != WL_CONNECTED)
    {
        delay(500);
        Serial.print(".");
        tft.print(".");
        WiFi_CONN++;
        if (WiFi_CONN == MAX_CONN)
        {
            WiFi_CONNECT = 0;
            break;
        }
    }
    if (WiFi_CONNECT == 0)
    {
        Serial.println("WIFi连接失败");
        tft.println("WIFI is disconnect.");
    }
    else
    {
        Serial.println("WIFi连接成功");
        tft.println("WIFI is connect.");
        delay(1000);
    }
    delay(1000);

}
void loop()
{
    HttpClient http; // 声明HTTPClient对象

    http.begin(My_URL);        // 准备启用连接
    int httpcode = http.get(); // 发送get请求,并赋值用于判断状态
    if (httpcode > 0)          // 如果状态码>0证明无问题
    {
        if (httpcode == 200) // 请求被服务器正常相应
        {String weather_info = http.getString();
        Serial.print(weather_info);
        }
        else
        {
            Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpcode).c_str());
        }

        http.end(); // 结束当前连接

        delay(10000);

        }

}


报错为:no matching function for call to 'HttpClient::HttpClient()'
  • 写回答

14条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-01-06 11:37
    关注

    您使用的似乎是HttpClient库,但是在ESP32平台编程中,我们通常使用HTTPClient库,两者不完全相同。
    您可能需要将HttpClient改为HTTPClient。
    在ESP32中,HTTPClient库主要负责创建HTTP连接并收发数据,而HttpClient可能并不适用ESP32。
    这是一个已经修改过的,使用HTTPClient库来获取信息的代码段,您可以查看并参考:

    #include <Arduino.h>
    #include <WiFi.h>
    #include <HTTPClient.h>
    
    // 身份凭据
    const char* ssid = "*ssid*";
    const char* password = "*password*";
    
    // 请求的URL
    String My_URL = "https://api.seniverse.com/v3/weather/now.json?key=***&location=qingdao&language=zh-Hans&unit=c";
    
    void setup() {
        Serial.begin(115200);
    
        // 连接到 WiFi
        WiFi.begin(ssid, password);
        while (WiFi.status() != WL_CONNECTED) {
            delay(1000);
            Serial.println("Connecting to WiFi...");
        }
        Serial.println("Connected to WiFi");
    }
    
    void loop() {
        if (WiFi.status() == WL_CONNECTED) { //检查WiFi连接
            HTTPClient http; //Object of class HTTPClient
    
            http.begin(My_URL); //Specify request destination
            int httpCode = http.GET();  //发送GET请求
    
            //Check the returning code
            if (httpCode > 0) { 
    
                String payload = http.getString();  // 获取响应正文
                Serial.println(payload); 
            }
    
            http.end();  //关闭连接
        }
    
        delay(10000);   // 在下一次请求之前,请等待10秒
    }
    
    

    注意的是如果My_URL的https不是有效证书的话,可能要使用http.begin(*client, url)的这种形式来建立连接,并且需要关闭证书验证。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(13条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月11日
  • 已采纳回答 1月11日
  • 赞助了问题酬金15元 1月6日
  • 创建了问题 1月6日

悬赏问题

  • ¥15 python怎么在已有视频文件后添加新帧
  • ¥20 虚幻UE引擎如何让多个同一个蓝图的NPC执行一样的动画,
  • ¥15 fluent里模拟降膜反应的UDF编写
  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵