Погодный 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#/ и не сказано, что нужно много.
1 ответ
Лучший ответ:
▲ 0
Библиотека Ethernet не поддерживает безопасное соединение (так называемое SSL, а теперь TLS). Для подключения к безопасному HTTP-транспорту HTTPS необходимо безопасное соединение. MCU AVR не имеет вычислительной мощности для вычисления ключей безопасности. А для менее популярных 32-битных микроконтроллеров еще никто не создал реализацию «SSL» для библиотеки Ethernet.
esp8266, esp32, MKR1010, Uno WiFi, Nano 33 IoT могут использовать HTTPS, но, насколько мне известно, только через WiFi.
,
@Juraj
Смотрите также:
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
что произойдет, если вы удалите последний блок «если»?, @jsotola
подключение... связанный, @Jason William Stone
Да, я думаю, что у Юрая есть ответ (спасибо): отсюда сюда не добраться. Может быть, это предлог, чтобы получить Raspberry Pi., @Jason William Stone