I am attempting to read the weather feed from Environment Canada using the AsyncWebServer_STM32 library. My code is based on the WebClient example included in the library. I only made the minimum changes necessary.
This is a file that is periodically updated by Environment Canada and made available at this location:
https://dd.weather.gc.ca/citypage_weath ... 0573_e.xml
This is the output when running the code:
Code: Select all
Start WebClient on NUCLEO_F767ZI with LAN8742A built-in Ethernet
AsyncWebServer_STM32 v1.3.0
You're connected to the network, IP = 192.168.2.122
Starting connection to server...
Connected to server
HTTP/1.1 301 Moved Permanently
Date: Mon, 10 May 2021 19:28:09 GMT
Server: Apache
Strict-Transport-Security: max-age=63072000; preload
Location: https://dd.weather.gc.ca/citypage_weather/xml/ON/s0000573_e.xml
Content-Length: 271
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://dd.weather.gc.ca/citypage_weather/xml/ON/s0000573_e.xml">here</a>.</p>
</body></html>
Disconnecting from server...
Code: Select all
#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiUdp.h>
#include <WiFiServer.h>
/****************************************************************************************************************************
WebClient.h - Dead simple AsyncWebServer for STM32 LAN8720 or built-in LAN8742A Ethernet
For STM32 with LAN8720 (STM32F4/F7) or built-in LAN8742A Ethernet (Nucleo-144, DISCOVERY, etc)
AsyncWebServer_STM32 is a library for the STM32 with LAN8720 or built-in LAN8742A Ethernet WebServer
Based on and modified from ESPAsyncWebServer (https://github.com/me-no-dev/ESPAsyncWebServer)
Built by Khoi Hoang https://github.com/khoih-prog/AsyncWebServer_STM32
Licensed under MIT license
Version: 1.3.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.2.3 K Hoang 02/09/2020 Initial coding for STM32 for built-in Ethernet (Nucleo-144, DISCOVERY, etc).
Bump up version to v1.2.3 to sync with ESPAsyncWebServer v1.2.3
1.2.4 K Hoang 05/09/2020 Add back MD5/SHA1 authentication feature.
1.2.5 K Hoang 28/12/2020 Suppress all possible compiler warnings. Add examples.
1.2.6 K Hoang 22/03/2021 Fix dependency on STM32AsyncTCP Library
1.3.0 K Hoang 14/04/2021 Add support to LAN8720 using STM32F4 or STM32F7
*****************************************************************************************************************************/
/*
Currently support
1) STM32 boards with built-in Ethernet (to use USE_BUILTIN_ETHERNET = true) such as :
- Nucleo-144 (F429ZI, F767ZI)
- Discovery (STM32F746G-DISCOVERY)
- STM32 boards (STM32F/L/H/G/WB/MP1) with 32K+ Flash, with Built-in Ethernet,
- See How To Use Built-in Ethernet at (https://github.com/khoih-prog/EthernetWebServer_STM32/issues/1)
2) STM32F/L/H/G/WB/MP1 boards (with 64+K Flash) running ENC28J60 shields (to use USE_BUILTIN_ETHERNET = false)
3) STM32F/L/H/G/WB/MP1 boards (with 64+K Flash) running W5x00 shields
4) STM32F4 and STM32F7 boards (with 64+K Flash) running LAN8720 shields
*/
#include "defines.h"
char server[] = "dd.weather.gc.ca";
// Initialize the Web client object
EthernetClient client;
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(115200);
while (!Serial);
Serial.print("\nStart WebClient on "); Serial.print(BOARD_NAME);
Serial.print(" with "); Serial.println(SHIELD_TYPE);
Serial.println(ASYNC_WEBSERVER_STM32_VERSION);
// start the ethernet connection and the server
// Use random mac
uint16_t index = millis() % NUMBER_OF_MAC;
// Use Static IP
// Use DHCP dynamic IP and random mac
Ethernet.begin(mac[index]);
// you're connected now, so print out the data
Serial.print(F("You're connected to the network, IP = "));
Serial.println(Ethernet.localIP());
Serial.println();
Serial.println(F("Starting connection to server..."));
// if you get a connection, report back via serial
if (client.connect(server, 80))
{
Serial.println(F("Connected to server"));
// Make a HTTP request
client.println(F("GET /citypage_weather/xml/ON/s0000573_e.xml HTTP/1.1"));
client.println(F("Host: dd.weather.gc.ca"));
client.println(F("Connection: close"));
client.println();
}
}
void printoutData(void)
{
// if there are incoming bytes available
// from the server, read them and print them
while (client.available())
{
char c = client.read();
Serial.write(c);
}
}
void loop()
{
printoutData();
// if the server's disconnected, stop the client
if (!client.connected())
{
Serial.println();
Serial.println(F("Disconnecting from server..."));
client.stop();
// do nothing forevermore
while (true);
}
}
Any ideas what I could be doing wrong?