完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我是 ESP8266 的新手。我想通过使用 Openweathermap 和 0.96 英寸 oled 来尝试一个小气象站。当我尝试编译代码时,出现此错误。怎么了?
调用使用属性错误声明的“HTTPClient::begin”:过时的 API,使用 ::begin(WiFiClient, url) |
|
相关推荐
1个回答
|
|
这个错误是因为HTTPClient库最近进行了更新,使用旧版API会导致错误。您需要更新您的代码,以使用新的HTTPClient API。您可以使用以下代码:
```c++ #include #include #include #include #include #define OLED_RESET 0 #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; String city = "your_city_name"; // the city name you want weather data for String country = "your_country_code"; // the country code of the city you want weather data for, e.g. "US" void setup() { Serial.begin(115200); WiFi.begin(ssid, password); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); display.println("Weather for"); display.setCursor(0,10); display.println(city); display.setCursor(0,20); display.println(country); display.setCursor(0,30); display.println("Loading..."); display.display(); } void loop() { HTTPClient http; String url = "http://api.openweathermap.org/data/2.5/weather?q=" + city + "," + country + "&units=metric&APPID=your_API_key"; http.begin(url); int httpCode = http.GET(); if (httpCode > 0) { String payload = http.getString(); Serial.println(payload); display.clearDisplay(); display.setCursor(0,0); display.println("Temp:" + (String) getTemperature(payload) + "C"); display.setCursor(0, 10); display.println("Humidity:" + (String) getHumidity(payload) + "%"); display.setCursor(0, 20); display.println("Pressure:" + (String) getPressure(payload) + "hPa"); display.setCursor(0, 30); display.println("Weather:" + getWeather(payload)); display.display(); } else { Serial.println("Error getting weather data."); } http.end(); delay(60000); // update every minute } float getTemperature(String payload) { int start = payload.indexOf(""temp":") + 7; int end = payload.indexOf(",",start); return (payload.substring(start,end).toFloat()); } float getHumidity(String payload) { int start = payload.indexOf(""humidity":") + 11; int end = payload.indexOf(",",start); return (payload.substring(start,end).toFloat()); } float getPressure(String payload) { int start = payload.indexOf(""pressure":") + 11; int end = payload.indexOf(",",start); return (payload.substring(start,end).toFloat()); } String getWeather(String payload) { int start = payload.indexOf("description":"") + 14; int end = payload.indexOf(""",start); return payload.substring(start,end); } ``` 注意,您需要替换代码中的“your_SSID”和“your_PASSWORD”以与您的网络连接匹配,还需要将“your_city_name”和“your_country_code”更改为您所需的城市和国家代码。您还需要提供一个Openweathermap API密钥,可以在Openweathermap网站上注册以获取此密钥。替换“your_API_key”以使用您的API密钥。 这段代码使用HTTPClient库从Openweathermap API获取实时天气数据,并将其显示在0.96英寸OLED屏幕上。代码中的getTemperature,getHumidity,getPressure和getWeather函数从API响应中提取相应的值。此代码将每分钟更新一次屏幕内容,以获取最新的天气信息。 |
|
|
|
只有小组成员才能发言,加入小组>>
1030 浏览 1 评论
562浏览 6评论
470浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
454浏览 5评论
454浏览 4评论
428浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 01:43 , Processed in 0.943340 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号