170 lines
5.7 KiB
C++
170 lines
5.7 KiB
C++
#include <Arduino.h>
|
|
#include <esp_dmx.h>
|
|
#include <WiFi.h>
|
|
#include <WiFiMulti.h>
|
|
#include <HTTPClient.h>
|
|
#include <WiFiClientSecure.h>
|
|
#include <ETH.h>
|
|
|
|
static bool eth_connected = false;
|
|
|
|
int transmitPin = 4;
|
|
int receivePin = 16;
|
|
int enablePin = 3;
|
|
|
|
dmx_port_t dmxPort = 1;
|
|
byte data[DMX_MAX_PACKET_SIZE];
|
|
|
|
const char* rootCACertificate = \
|
|
"-----BEGIN CERTIFICATE-----\n" \
|
|
"MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb\n" \
|
|
"MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow\n" \
|
|
"GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj\n" \
|
|
"YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL\n" \
|
|
"MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE\n" \
|
|
"BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM\n" \
|
|
"GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP\n" \
|
|
"ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua\n" \
|
|
"BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe\n" \
|
|
"3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4\n" \
|
|
"YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR\n" \
|
|
"rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm\n" \
|
|
"ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU\n" \
|
|
"oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF\n" \
|
|
"MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v\n" \
|
|
"QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t\n" \
|
|
"b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF\n" \
|
|
"AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q\n" \
|
|
"GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz\n" \
|
|
"Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2\n" \
|
|
"G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi\n" \
|
|
"l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3\n" \
|
|
"smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==\n" \
|
|
"-----END CERTIFICATE-----\n";
|
|
|
|
|
|
void WiFiEvent(WiFiEvent_t event)
|
|
{
|
|
switch (event) {
|
|
case ARDUINO_EVENT_ETH_START:
|
|
Serial.println("ETH Started");
|
|
//set eth hostname here
|
|
ETH.setHostname("esp32-ethernet");
|
|
break;
|
|
case ARDUINO_EVENT_ETH_CONNECTED:
|
|
Serial.println("ETH Connected");
|
|
break;
|
|
case ARDUINO_EVENT_ETH_GOT_IP:
|
|
Serial.print("ETH MAC: ");
|
|
Serial.print(ETH.macAddress());
|
|
Serial.print(", IPv4: ");
|
|
Serial.print(ETH.localIP());
|
|
if (ETH.fullDuplex()) {
|
|
Serial.print(", FULL_DUPLEX");
|
|
}
|
|
Serial.print(", ");
|
|
Serial.print(ETH.linkSpeed());
|
|
Serial.println("Mbps");
|
|
eth_connected = true;
|
|
break;
|
|
case ARDUINO_EVENT_ETH_DISCONNECTED:
|
|
Serial.println("ETH Disconnected");
|
|
eth_connected = false;
|
|
break;
|
|
case ARDUINO_EVENT_ETH_STOP:
|
|
Serial.println("ETH Stopped");
|
|
eth_connected = false;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void testClient()
|
|
{
|
|
WiFiClientSecure *client = new WiFiClientSecure;
|
|
if(client) {
|
|
client -> setCACert(rootCACertificate);
|
|
|
|
{
|
|
// Add a scoping block for HTTPClient https to make sure it is destroyed before WiFiClientSecure *client is
|
|
HTTPClient https;
|
|
|
|
Serial.print("[HTTPS] begin...\n");
|
|
if (https.begin(*client, "https://es.windfinder.com/report/empuries")) { // HTTPS
|
|
Serial.print("[HTTPS] GET...\n");
|
|
// start connection and send HTTP header
|
|
int httpCode = https.GET();
|
|
|
|
// httpCode will be negative on error
|
|
if (httpCode > 0) {
|
|
// HTTP header has been send and Server response header has been handled
|
|
Serial.printf("[HTTPS] GET... code: %d\n", httpCode);
|
|
|
|
// file found at server
|
|
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
|
|
String payload = https.getString();
|
|
Serial.println(payload);
|
|
while (https.getSize()>0)
|
|
{
|
|
payload = https.getString();
|
|
Serial.println(payload);
|
|
}
|
|
/*Serial.println(payload.indexOf("cw-compass__arrow icon-current-winddir-large"));
|
|
Serial.println(payload.indexOf("current-wind__speed"));
|
|
Serial.println(payload);*/
|
|
}
|
|
} else {
|
|
Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(httpCode).c_str());
|
|
}
|
|
|
|
https.end();
|
|
} else {
|
|
Serial.printf("[HTTPS] Unable to connect\n");
|
|
}
|
|
}
|
|
|
|
delete client;
|
|
} else {
|
|
Serial.println("Unable to create client");
|
|
}
|
|
|
|
Serial.println();
|
|
Serial.println("Waiting 1s before the next round...");
|
|
}
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
dmx_config_t dmxConfig = DMX_DEFAULT_CONFIG;
|
|
dmx_param_config(dmxPort, &dmxConfig);
|
|
dmx_set_pin(dmxPort, transmitPin, receivePin, enablePin);
|
|
int queueSize = 0;
|
|
int interruptPriority = 1;
|
|
dmx_driver_install(dmxPort, DMX_MAX_PACKET_SIZE, queueSize, NULL,
|
|
interruptPriority);
|
|
dmx_set_mode(dmxPort, DMX_MODE_WRITE);
|
|
data[0] = 0;
|
|
WiFi.onEvent(WiFiEvent);
|
|
ETH.begin();
|
|
delay(1000);
|
|
if (eth_connected) {
|
|
testClient();
|
|
}
|
|
}
|
|
|
|
void loop() {
|
|
/*if (eth_connected) {
|
|
testClient("es.windfinder.com", 443);
|
|
}*/
|
|
data[30] = 0;
|
|
dmx_write_packet(dmxPort, data, DMX_MAX_PACKET_SIZE);
|
|
dmx_send_packet(dmxPort, DMX_MAX_PACKET_SIZE);
|
|
dmx_wait_send_done(dmxPort, DMX_PACKET_TIMEOUT_TICK);
|
|
delay(1000);
|
|
data[30] = 255;
|
|
dmx_write_packet(dmxPort, data, DMX_MAX_PACKET_SIZE);
|
|
dmx_send_packet(dmxPort, DMX_MAX_PACKET_SIZE);
|
|
dmx_wait_send_done(dmxPort, DMX_PACKET_TIMEOUT_TICK);
|
|
delay(1000);
|
|
}
|