Wireguard ESP32

Прошу помощи в создании ПБ

Пользовательские блоки для коммкникации и связи GSM, GPRS, IR, Bluetooth и другие
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Ответить
Uasya
Рядовой
Сообщения: 14
Зарегистрирован: 16.03.2019{, 08:39}
Репутация: 1
Откуда: Уфа
Имя: Василий

Wireguard ESP32

#1

Сообщение Uasya » 13.11.2022{, 11:26}

Здравствуйте друзья. Наткнулся на гитхабе на проект клиента wireguard для ESP32 Wireguard-esp32 но так как я в постройке блоков полный ноль, возможно кто-то возьмется слепить ПБ?
Скетч примера из проекта:
СпойлерПоказать

Код: Выделить всё

#include <WiFi.h>
#include <WireGuard-ESP32.h>
#include <HTTPClient.h>

// WiFi configuration --- UPDATE this configuration for your WiFi AP
char ssid[] = "ssid";
char password[] = "password";

// WireGuard configuration --- UPDATE this configuration from JSON
char private_key[] = "(Private Key) ";  // [Interface] PrivateKey
IPAddress local_ip(1,2,3,4);            // [Interface] Address
char public_key[] = "(Public Key)";     // [Peer] PublicKey
char endpoint_address[] = "link.arc.soracom.io";    // [Peer] Endpoint
int endpoint_port = 11010;              // [Peer] Endpoint

static constexpr const uint32_t UPDATE_INTERVAL_MS = 5000;

static WireGuard wg;
static HTTPClient httpClient;

void setup()
{
    Serial.begin(115200);
    Serial.println("Connecting to the AP...");
    WiFi.begin(ssid, password);
    while( !WiFi.isConnected() ) {
        delay(1000);
    }
    Serial.println("Adjusting system time...");
    configTime(9 * 60 * 60, 0, "ntp.jst.mfeed.ad.jp", "ntp.nict.jp", "time.google.com");

    Serial.println("Connected. Initializing WireGuard...");
    wg.begin(
        local_ip,
        private_key,
        endpoint_address,
        public_key,
        endpoint_port);
}

void loop()
{
    WiFiClient client;

    if( !client.connect("uni.soracom.io", 80) ) {
        Serial.println("Failed to connect...");
        delay(5000);
        return;
    }
    
    uint64_t uptime_msec = millis();
    Serial.printf("Sending uptime %lu [ms]\r\n", uptime_msec);
    String json;
    json += "{\"uptime_msec\":";
    json.concat(static_cast<unsigned long>(uptime_msec));
    json += "}";
    Serial.printf("payload: %s\r\n", json.c_str());
    
    client.write("POST / HTTP/1.1\r\n");
    client.write("Host: harvest.soracom.io\r\n");
    client.write("Connection: Keep-Alive\r\n");
    client.write("Keep-Alive: timeout=5, max=2\r\n");
    client.write("Content-Type: application/json\r\n");
    client.write("Content-Length: ");
    client.write(String(json.length(), 10).c_str());
    client.write("\r\n\r\n");
    client.write(json.c_str());

    while(client.connected()) {
        auto line = client.readStringUntil('\n');
        Serial.write(line.c_str());
        Serial.write("\n");
        if( line == "\r" ) break;
    }
    if(client.connected()) {
        uint8_t buffer[256];
        size_t bytesToRead = 0;
        while((bytesToRead = client.available()) > 0) {
            bytesToRead = bytesToRead > sizeof(buffer) ? sizeof(buffer) : bytesToRead;
            auto bytesRead = client.readBytes(buffer, bytesToRead); 
            Serial.write(buffer, bytesRead);
        }
    }
    delay(UPDATE_INTERVAL_MS);
}

Ответить

Вернуться в «Коммуникация и связь»