ESP8266 и https соединение с firebase - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь отправить push-уведомление на устройство Android от esp8266. У меня есть мини доска Wemos D1. мой код выглядит следующим образом:

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>

#ifndef STASSID
//#define STASSID "XXXXXX"
//#define STAPSK  "XXXXXX"
#endif

const char* ssid = STASSID;
const char* password = STAPSK;
const char* host = "fcm.googleapis.com";
const int httpsPort = 80;
// Use web browser to view and copy // SHA1 fingerprint of the certificate
const char fingerprint[] PROGMEM = "0fd9151c4d4a317b647e87713bd7226b8b4fcbda";
WiFiClient client;

void setup() 
{
  Serial.begin(115200);
  Serial.println();
  Serial.print("connecting to ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
}

Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());

//Use WiFiClientSecure class to create TLS connection
WiFiClientSecure client;
Serial.print("connecting to ");
Serial.println(host);
Serial.printf("Using fingerprint '%s'\n", fingerprint);
client.setFingerprint(fingerprint);
if (!client.connect(host, httpsPort)) {
Serial.println("connection failed");
return;
}
sendDataToFirebase();
}

void loop() {
}

void sendDataToFirebase() {
String data = "{" ;
data = data + "\"to\": \"XXXXXXXXXXXXXXX\"," ;
data = data + "\"notification\": {";
data = data + "\"body\": \"Motion detected\",";
data = data + "\"title\" : \"Alarm\" ";
data = data + "} }";
client.println("POST /fcm/send HTTP/1.1");
client.println("Authorization: key=XXXXXXXXXXXXXXXXXX,");
client.println("Content-Type: application/json");
client.println("Host: fcm.googleapis.com");
client.print("Content-Length: ");
client.println(data.length());
client.print("\n");
client.print(data);
Serial.println("Data sent...Reading response..");
//while (client.available()) {
//char c = client.read();
//Serial.print(c);
    String line = client.readStringUntil('\n');
    Serial.println(line);
//}
Serial.println("Finished!");
client.flush();
client.stop();
}

Теперь моя проблема в том, что подключение к серверу fcm не установлено. мое лучшее предположение, это для отпечатка пальца. Я скопировал отпечаток с https://firebase.google.com/., но соединение все еще не установлено. Не могли бы вы помочь?

1 Ответ

0 голосов
/ 24 октября 2019

HTTPS использует порт 443, а не порт 80. Измените

const int httpsPort = 80;

на

const int httpsPort = 443;
...