|
| 1 | +// matth-x/ArduinoOcpp |
| 2 | +// Copyright Matthias Akstaller 2019 - 2022 |
| 3 | +// MIT License |
| 4 | + |
| 5 | +#include <Arduino.h> |
| 6 | +#if defined(ESP8266) |
| 7 | +#include <ESP8266WiFi.h> |
| 8 | +#include <ESP8266WiFiMulti.h> |
| 9 | +ESP8266WiFiMulti WiFiMulti; |
| 10 | +#elif defined(ESP32) |
| 11 | +#include <WiFi.h> |
| 12 | +#else |
| 13 | +#error only ESP32 or ESP8266 supported at the moment |
| 14 | +#endif |
| 15 | + |
| 16 | +#include <ArduinoOcpp.h> |
| 17 | +#include <ArduinoOcpp/Core/OcppSocket.h> //need for setting TLS credentials |
| 18 | + |
| 19 | +#define STASSID "YOUR_WIFI_SSID" |
| 20 | +#define STAPSK "YOUR_WIFI_PW" |
| 21 | + |
| 22 | +#define OCPP_HOST "echo.websocket.events" |
| 23 | +#define OCPP_PORT 443 |
| 24 | +#define OCPP_URL "wss://echo.websocket.events/" |
| 25 | + |
| 26 | +/* |
| 27 | + * OCPP Security Profile 2: TLS with Basic Authentication |
| 28 | + * |
| 29 | + * Example credentials from the OCPP-JSON document (p. 16) |
| 30 | + */ |
| 31 | +#define OCPP_AUTH_ID "AL1000" |
| 32 | +#define OCPP_AUTH_KEY "0001020304050607FFFFFFFFFFFFFFFFFFFFFFFF" |
| 33 | + |
| 34 | +const char ENDPOINT_CA_CERT[] PROGMEM = R"EOF( |
| 35 | +-----BEGIN CERTIFICATE----- |
| 36 | +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 |
| 65 | +-----END CERTIFICATE----- |
| 66 | +)EOF"; |
| 67 | + |
| 68 | +WebSocketsClient wsockSecure {}; |
| 69 | +ArduinoOcpp::EspWiFi::OcppClientSocket osockSecure {&wsockSecure}; |
| 70 | + |
| 71 | +void setup() { |
| 72 | + |
| 73 | + /* |
| 74 | + * Initialize Serial and WiFi |
| 75 | + */ |
| 76 | + |
| 77 | + Serial.begin(115200); |
| 78 | + |
| 79 | + Serial.print(F("[main] Wait for WiFi ")); |
| 80 | + |
| 81 | +#if defined(ESP8266) |
| 82 | + WiFiMulti.addAP(STASSID, STAPSK); |
| 83 | + while (WiFiMulti.run() != WL_CONNECTED) { |
| 84 | + Serial.print('.'); |
| 85 | + delay(1000); |
| 86 | + } |
| 87 | +#elif defined(ESP32) |
| 88 | + WiFi.begin(STASSID, STAPSK); |
| 89 | + while (!WiFi.isConnected()) { |
| 90 | + Serial.print('.'); |
| 91 | + delay(1000); |
| 92 | + } |
| 93 | +#endif |
| 94 | + |
| 95 | + Serial.print(F(" connected\n")); |
| 96 | + |
| 97 | + /* |
| 98 | + * Set system time (required for Certificate validation) |
| 99 | + */ |
| 100 | + configTime(3 * 3600, 0, "pool.ntp.org", "time.nist.gov"); //alternatively: settimeofday(&de, &tz); |
| 101 | + Serial.print(F("[main] Wait for NTP time (used for certificate validation) ")); |
| 102 | + time_t now = time(nullptr); |
| 103 | + while (now < 8 * 3600 * 2) { |
| 104 | + delay(1000); |
| 105 | + Serial.print('.'); |
| 106 | + now = time(nullptr); |
| 107 | + } |
| 108 | + Serial.printf(" finished. Unix timestamp is %lu\n", now); |
| 109 | + |
| 110 | + /* |
| 111 | + * Connect to OCPP Central System (using OCPP Security Profile 2: TLS with Basic Authentication ) |
| 112 | + */ |
| 113 | + wsockSecure.beginSslWithCA(OCPP_HOST, |
| 114 | + OCPP_PORT, |
| 115 | + OCPP_URL, |
| 116 | + ENDPOINT_CA_CERT, "ocpp1.6"); |
| 117 | + wsockSecure.setReconnectInterval(5000); |
| 118 | + wsockSecure.enableHeartbeat(15000, 3000, 2); |
| 119 | + wsockSecure.setAuthorization(OCPP_AUTH_ID, OCPP_AUTH_KEY); // => Authorization: Basic QUwxMDAwOgABAgMEBQYH//////////////// |
| 120 | + OCPP_initialize(osockSecure); |
| 121 | + |
| 122 | + /* |
| 123 | + * ... see ArduinoOcpp.h for how to integrate the EVSE hardware. |
| 124 | + * |
| 125 | + * This example only showcases the TLS connection. For examples about the HW integration, |
| 126 | + * please see the other examples |
| 127 | + */ |
| 128 | + |
| 129 | + /* |
| 130 | + * Notify the Central System that this station is ready |
| 131 | + */ |
| 132 | + bootNotification("My Charging Station", "My company name"); |
| 133 | +} |
| 134 | + |
| 135 | +void loop() { |
| 136 | + |
| 137 | + /* |
| 138 | + * Execute all charge point routines and handle WebSocket |
| 139 | + */ |
| 140 | + OCPP_loop(); |
| 141 | + |
| 142 | + //... see ArduinoOcpp.h and the other examples for how to integrate the EVSE hardware. |
| 143 | +} |
0 commit comments