Погодный API Ардуино

#include <SPI.h>
#include <Ethernet.h>

// Введите MAC-адрес вашего контроллера ниже.
// Более новые экраны Ethernet имеют MAC-адрес, напечатанный на наклейке на экране.
byte mac[] = {my mac };
char serverName[] = "api.weather.gov";

// Инициализируем клиентскую библиотеку Ethernet
// с IP-адресом и портом сервера
// к которому вы хотите подключиться (порт 80 по умолчанию для HTTP):
EthernetClient client;

void setup() {
 // Открытие последовательной связи и ожидание открытия порта:
  Serial.begin(9600);
   while (!Serial) {
    ; // ждем подключения последовательного порта. Нужен только для Леонардо
  }


  // запускаем соединение Ethernet:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // нет смысла продолжать, так что ничего не делайте навсегда:
    while(true);
  }
  // даем Ethernet Shield секунду для инициализации:
  delay(1000);
  Serial.println("connecting...");

  // если вы установили соединение, сообщите об этом через последовательный порт:
  int ret = client.connect(serverName,443);
  if (ret==1) {
    Serial.println("connected");
    // Делаем HTTP-запрос:
    client.println("GET /stations/KGSO/observations/latest");
    client.println("accept: application/geo+json,*/*");
    client.println("user-agent: arduino, [email protected]");
    client.println("host: api.weather.gov");
    client.println();
  }
  else {
    // если вы не получили соединение с сервером:
    Serial.println("connection failed");
    Serial.println(ret);
    Serial.println(client.status());
  }
}

void loop()
{
  // если есть доступные входящие байты
  // с сервера, прочитать их и распечатать:

  if (client.available()) {
    Serial.print("\ngotsome\n");
    char c = client.read();
    Serial.print(c);
  }

  // если сервер отключен, останавливаем клиент:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // ничего не делать навсегда:
    while(true);
  }
}

Когда я запускаю это, я получаю:

подключение... подключен

отключение.

Почему я не получаю данные? Я думал, что это было о информации заголовка. Но я посмотрел на https://www.weather.gov/documentation/services-web-api#/ и не сказано, что нужно много.

, 👍0

Обсуждение

что произойдет, если вы удалите последний блок «если»?, @jsotola

подключение... связанный, @Jason William Stone

Да, я думаю, что у Юрая есть ответ (спасибо): отсюда сюда не добраться. Может быть, это предлог, чтобы получить Raspberry Pi., @Jason William Stone


1 ответ


Лучший ответ:

0

Библиотека Ethernet не поддерживает безопасное соединение (так называемое SSL, а теперь TLS). Для подключения к безопасному HTTP-транспорту HTTPS необходимо безопасное соединение. MCU AVR не имеет вычислительной мощности для вычисления ключей безопасности. А для менее популярных 32-битных микроконтроллеров еще никто не создал реализацию «SSL» для библиотеки Ethernet.

esp8266, esp32, MKR1010, Uno WiFi, Nano 33 IoT могут использовать HTTPS, но, насколько мне известно, только через WiFi.

,