This commit is contained in:
iranl
2025-06-10 20:30:35 +02:00
parent db74f2797c
commit 56ecb87109
238 changed files with 89398 additions and 57 deletions

View File

@@ -0,0 +1,5 @@
# This project serves as a demo to enable using esp-mqtt on ESP platform targets as well as on linux
cmake_minimum_required(VERSION 3.16)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(esp_mqtt_demo)

View File

@@ -0,0 +1,31 @@
# MQTT application running on WiFi station
This is a simple mqtt demo, that connects to WiFi AP first. This application has a dependency to `esp_wifi_remote`, so that if it's build and executed on a chipset without WiFI capabilities it redirects all wifi calls the remote target.
## Overview
When running this example on a target that doesn't natively support WiFi, please make sure that the remote target (slave application) is connected to your chipset via the configured transport interface.
Connection to the slave device also depends on RPC library used. It is recommended to use [`esp_hosted`](https://github.com/espressif/esp-hosted). Alternatively you can use [`eppp_link`](https://components.espressif.com/components/espressif/eppp_link).
Please note, that `esp_hosted` as a component is currently WIP, so the `wifi_remote` defaults to `eppp`, for now.
## HW connection
We currently support only `UART` transport, so the connection is very simple. You only need to connect Rx, Tx and GND with the remote target.
You need to configure these fields according to your connection:
* CONFIG_ESP_WIFI_REMOTE_EPPP_UART_TX_PIN
* CONFIG_ESP_WIFI_REMOTE_EPPP_UART_RX_PIN
## SW configuration
The RPC mechanism between the host and the slave micro uses TLS with mutual authentication, so you would have to configure certificates and keys for both parties. This application -- host target -- is considered RPC client, so it needs client's certificate and key, as well as the CA certificate to validate the server (slave application).
If self-signed certificates are acceptable, you can use [generate_test_certs](../test_certs/generate_test_certs.sh) script to generate both the CA and the keys itself and convert them to the PEM format that's accepted by the EPPP RPC engine.
You will have to configure these options:
* CONFIG_ESP_WIFI_REMOTE_EPPP_SERVER_CA
* CONFIG_ESP_WIFI_REMOTE_EPPP_CLIENT_CRT
* CONFIG_ESP_WIFI_REMOTE_EPPP_CLIENT_KEY
## Setting up slave device
You need to set up the connection and configuration in a similar way on the slave part (connection pins + certificates and keys). Please refer to the [slave_application](../server/README.md) README for more information.

View File

@@ -0,0 +1,4 @@
idf_component_register(SRCS "app_main.c"
INCLUDE_DIRS ".")
target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format")

View File

@@ -0,0 +1,21 @@
menu "Example Configuration"
config BROKER_URL
string "Broker URL"
default "mqtt://mqtt.eclipseprojects.io"
help
URL of the broker to connect to
config ESP_WIFI_SSID
string "WiFi SSID"
default "myssid"
help
SSID (network name) for the example to connect to.
config ESP_WIFI_PASSWORD
string "WiFi Password"
default "mypassword"
help
WiFi password (WPA or WPA2) for the example to use.
endmenu

View File

@@ -0,0 +1,204 @@
/*
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Unlicense OR CC0-1.0
*/
#include <stdio.h>
#include <stdint.h>
#include <stddef.h>
#include <string.h>
#include "esp_system.h"
#include "nvs_flash.h"
#include "esp_event.h"
#include "esp_netif.h"
#include "esp_netif.h"
#include "esp_system.h"
#include "freertos/FreeRTOS.h"
#include "freertos/event_groups.h"
#include "esp_system.h"
#include "esp_wifi.h"
#include "esp_log.h"
#include "mqtt_client.h"
static const char *TAG = "esp_mqtt_demo";
static EventGroupHandle_t s_wifi_event_group;
static int s_retry_num = 0;
#define WIFI_CONNECTED_BIT BIT0
#define WIFI_FAIL_BIT BIT1
#define EXAMPLE_ESP_WIFI_SSID CONFIG_ESP_WIFI_SSID
#define EXAMPLE_ESP_WIFI_PASS CONFIG_ESP_WIFI_PASSWORD
#define EXAMPLE_ESP_MAXIMUM_RETRY 5
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
{
ESP_LOGD(TAG, "Event dispatched from event loop base=%s, event_id=%d", base, event_id);
esp_mqtt_event_handle_t event = (esp_mqtt_event_handle_t)event_data;
esp_mqtt_client_handle_t client = event->client;
int msg_id;
switch ((esp_mqtt_event_id_t)event_id) {
case MQTT_EVENT_CONNECTED:
ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
msg_id = esp_mqtt_client_publish(client, "/topic/qos1", "data_3", 0, 1, 0);
ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);
msg_id = esp_mqtt_client_subscribe(client, "/topic/qos0", 0);
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
msg_id = esp_mqtt_client_subscribe(client, "/topic/qos1", 1);
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
msg_id = esp_mqtt_client_unsubscribe(client, "/topic/qos1");
ESP_LOGI(TAG, "sent unsubscribe successful, msg_id=%d", msg_id);
break;
case MQTT_EVENT_DISCONNECTED:
ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
break;
case MQTT_EVENT_SUBSCRIBED:
ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);
msg_id = esp_mqtt_client_publish(client, "/topic/qos0", "data", 0, 0, 0);
ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);
break;
case MQTT_EVENT_UNSUBSCRIBED:
ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
break;
case MQTT_EVENT_PUBLISHED:
ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
break;
case MQTT_EVENT_DATA:
ESP_LOGI(TAG, "MQTT_EVENT_DATA");
printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);
printf("DATA=%.*s\r\n", event->data_len, event->data);
break;
case MQTT_EVENT_ERROR:
ESP_LOGI(TAG, "MQTT_EVENT_ERROR");
break;
default:
ESP_LOGI(TAG, "Other event id:%d", event->event_id);
break;
}
}
static void mqtt_app_start(void)
{
esp_mqtt_client_config_t mqtt_cfg = {};
mqtt_cfg.broker.address.uri = CONFIG_BROKER_URL;
mqtt_cfg.credentials.client_id = "idf_on_linux_client";
esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
/* The last argument may be used to pass data to the event handler, in this example mqtt_event_handler */
esp_mqtt_client_register_event(client, (esp_mqtt_event_id_t)ESP_EVENT_ANY_ID, mqtt_event_handler, NULL);
esp_mqtt_client_start(client);
}
static void event_handler(void *arg, esp_event_base_t event_base,
int32_t event_id, void *event_data)
{
ESP_LOGI(TAG, "EVENT type %s id %d", event_base, (int)event_id);
if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {
esp_wifi_connect();
} else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {
if (s_retry_num < EXAMPLE_ESP_MAXIMUM_RETRY) {
esp_wifi_connect();
s_retry_num++;
ESP_LOGI(TAG, "retry to connect to the AP");
} else {
xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT);
}
ESP_LOGI(TAG, "connect to the AP fail");
} else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {
ip_event_got_ip_t *event = (ip_event_got_ip_t *) event_data;
ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip));
s_retry_num = 0;
xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
}
}
static void wifi_init_sta()
{
s_wifi_event_group = xEventGroupCreate();
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());
esp_netif_create_default_wifi_sta();
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
esp_event_handler_instance_t instance_any_id;
esp_event_handler_instance_t instance_got_ip;
ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
ESP_EVENT_ANY_ID,
&event_handler,
NULL,
&instance_any_id));
ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,
IP_EVENT_STA_GOT_IP,
&event_handler,
NULL,
&instance_got_ip));
wifi_config_t wifi_config = {
.sta = {
.ssid = EXAMPLE_ESP_WIFI_SSID,
.password = EXAMPLE_ESP_WIFI_PASS,
},
};
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) );
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config) );
ESP_ERROR_CHECK(esp_wifi_start() );
ESP_LOGI(TAG, "wifi_init_sta finished.");
/* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or connection failed for the maximum
* number of re-tries (WIFI_FAIL_BIT). The bits are set by event_handler() (see above) */
EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group,
WIFI_CONNECTED_BIT | WIFI_FAIL_BIT,
pdFALSE,
pdFALSE,
portMAX_DELAY);
/* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually
* happened. */
if (bits & WIFI_CONNECTED_BIT) {
ESP_LOGI(TAG, "connected to ap SSID:%s password:%s",
EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);
} else if (bits & WIFI_FAIL_BIT) {
ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s",
EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);
} else {
ESP_LOGE(TAG, "UNEXPECTED EVENT");
}
}
void app_main(void)
{
ESP_LOGI(TAG, "[APP] Startup..");
ESP_LOGI(TAG, "[APP] Free memory: %d bytes", esp_get_free_heap_size());
ESP_LOGI(TAG, "[APP] IDF version: %s", esp_get_idf_version());
esp_log_level_set("*", ESP_LOG_INFO);
esp_log_level_set("mqtt_client", ESP_LOG_VERBOSE);
esp_log_level_set("esp_mqtt_demo", ESP_LOG_VERBOSE);
esp_log_level_set("transport_base", ESP_LOG_VERBOSE);
esp_log_level_set("esp-tls", ESP_LOG_VERBOSE);
esp_log_level_set("transport", ESP_LOG_VERBOSE);
esp_log_level_set("outbox", ESP_LOG_VERBOSE);
//Initialize NVS
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);
ESP_LOGI(TAG, "ESP_WIFI_MODE_STA");
wifi_init_sta();
mqtt_app_start();
}

View File

@@ -0,0 +1,4 @@
dependencies:
esp_wifi_remote:
version: "*"
override_path: ../../..

View File

@@ -0,0 +1,11 @@
CONFIG_IDF_TARGET="esp32p4"
CONFIG_ESP_WIFI_SSID="local_mosquitto"
CONFIG_ESP_WIFI_PASSWORD="local_mosquitto_password"
CONFIG_ESP_WIFI_REMOTE_EPPP_UART_TX_PIN=47
CONFIG_ESP_WIFI_REMOTE_EPPP_UART_RX_PIN=48
CONFIG_ESP_WIFI_REMOTE_EPPP_SERVER_CA="MIIDIzCCAgugAwIBAgIUL4dO91g+lJLA9mHo+2wIfgr+VL8wDQYJKoZIhvcNAQELBQAwITELMAkGA1UEBhMCQ1oxEjAQBgNVBAMMCUVzcHJlc3NpZjAeFw0yNDEwMzAwOTM1NDVaFw0yNTEwMzAwOTM1NDVaMCExCzAJBgNVBAYTAkNaMRIwEAYDVQQDDAlFc3ByZXNzaWYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCWm4sq9DdpDYUxRJD/Xauc8w2y7Zh0XQuRZ5qtkZclkpK3sz2nOQR9HAs0FWU4mUgZJeUwKNa1jzgtm89oAYtMrRypiTNQSkFWFiwJXXN/xGO93I2COQ857iGOvKyQpfxCsuy6THPIsSYYcYV6Lk/DlLix9CGXax+mcFvxcHQxm33//YHscWJEo5RyNHdfOFYhAzINqoHVX5KOQQxjmpHiMmVhT1HH9PqTOg3ukvNEJVphRHjv6n4KB2wHSMGmNVaUQWB9gILAQ6Ixkxxhf/U9DtftTvXNbzlX56kvSSt1I3gcmHHpwrDRrg0aQBbuL0yeDaza1wLMIaP/Saphl7x/AgMBAAGjUzBRMB0GA1UdDgQWBBS/+vNjHlnmn0N8ixDGpWq0WV1TtTAfBgNVHSMEGDAWgBS/+vNjHlnmn0N8ixDGpWq0WV1TtTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQACJQuUz5LHHtfOc9s13lbfaWW5HukFI55/B7xOIVtIMcDpvzpVCQz1TT0N1DoFwEbXGLG8A8nBye+y9A/e2V/B3DEQ5Yq7rq/KxXGBtgyUGJT08kRASWsOoQOMI15xCH5Al2JifbOCaY9glupccctY5ypfucrM2Z9KGoT7lKw7L2cx9yrXY3UO/3bQibKNLSmHR4zvlcXEdWFdMmsBUvbUmVYTPZIK0iMARzXtBNJL1dbT+shp/VM2Um09L0cakyD2jwjFvRjbnUdgJt8j7pf38vEHtcVfbmCrdRjgmWXuwnqS5UTgfYyHCGZvEITr8JVAro7SkLywjL5IeKnqxtv6"
CONFIG_ESP_WIFI_REMOTE_EPPP_CLIENT_CRT="MIICvDCCAaQCFAbrhsFoIjFDqI9LzRog2HUQcz0vMA0GCSqGSIb3DQEBCwUAMCExCzAJBgNVBAYTAkNaMRIwEAYDVQQDDAlFc3ByZXNzaWYwHhcNMjQxMDMwMDkzNTQ1WhcNMjUxMDMwMDkzNTQ1WjAUMRIwEAYDVQQDDAljbGllbnRfY24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGPubh3BQadEIOR3QLXyF7REI6CHC8PcJ55ndHYEAboh8WuzYbqKjgz1Jf5Ya4yUUC+aJk6rYX/oSX2MSyXCbBQ+tBR+mSRt7M7smnHYLUUqbN4f594TI4K0KRDCPPuJmhPo/yn+M51T9p3BUNRq3g3cyUKKQaomX1cUr0uKyPel5WyLmzgB7o8Afw6uOyWU3YO3QgilSC3W+3n/KQ6c2jJFimgLk7LBGKY3e/F8InWQgfCG7kb66JXhFL6DSlCryrh0SbidGUNGAGJC86OTd6/XLb5qr3KIfvdTi7Rqcw7OverZ0V7/g5HzdTYMJRbF0dqYAWVaGFxDCPOmc1HzEjAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAD6yAUXqueOFXybINofP/jhXNuxQCJXIONmgnB+LYfl/VPc9bdi5l5wEnBneZnrDbXaGHCKgxhW8nT9KZRKJF7eWnjmsGHEgVov6DTEERbO3sGGBbP0Gdwjhj58QMMGoBFDdCr/1t58q1eHwukmfhHM3mMynoduFSMuGcpSEM9QcE2h2ePPdNv/CvjcNt/3L3sF4DU4Jf/ncTRiFVkXaNeyNhRdr8UUV0siek035ho1GD8oiYFYi86eAa7AuNA9Rjjs9v64Df32tbeq3hfefm7hMJdDdz31eE/0xVLJmpYVE4DKYejenvsz2dreZt+CKiX4wVWfTNxVdOSjQJqxMEgM="
CONFIG_ESP_WIFI_REMOTE_EPPP_CLIENT_KEY="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDGPubh3BQadEIOR3QLXyF7REI6CHC8PcJ55ndHYEAboh8WuzYbqKjgz1Jf5Ya4yUUC+aJk6rYX/oSX2MSyXCbBQ+tBR+mSRt7M7smnHYLUUqbN4f594TI4K0KRDCPPuJmhPo/yn+M51T9p3BUNRq3g3cyUKKQaomX1cUr0uKyPel5WyLmzgB7o8Afw6uOyWU3YO3QgilSC3W+3n/KQ6c2jJFimgLk7LBGKY3e/F8InWQgfCG7kb66JXhFL6DSlCryrh0SbidGUNGAGJC86OTd6/XLb5qr3KIfvdTi7Rqcw7OverZ0V7/g5HzdTYMJRbF0dqYAWVaGFxDCPOmc1HzEjAgMBAAECggEAJdniuWMMz5Q8/H72ECnEucVpo6zy4W4lUKMJSS5+bwhASVXLWfKU8/+Bqd+oHmYHcC77q6sIw4IMDPYNcESZ/bKbG2bAmPZBGf3JsMe4sBNr18l7jstNjF3uIsWfnMyRQLEySM/wUZ1+sxabSmKhVlri8bLkylURhJByEFGmWOpc+rsrVUhhQVhvNQhL6c7W1hfnj2TOrMBGnpvOtYUMlbaQuSbV1Djqgg8NU6DR4g6fZS7JGbWdaeu39RK0MjJdiZuHflF2Sx9nUDwpLSdl1fVZAAxYuSFIvgRQCd3KTt+5eaqov/DHBfKghPn0a6S3OxlboPAt4wps7yHT0L0ccQKBgQD1euhKGdNH0yWXs5iuQ/eJcJWxFEc5cIEx1h/2oTP2++JU0gCMG6fXxDDZL70TXQxQeAnuLz8Aj+/qIKI+t3uOu4yK2s1LA/yjlrA6fMVeK/OaQuuKikFshUd28IFQvrG6oAxs1MJ5fcRhSE9MDW9lfcUF3woaoZlfCz22d2RImwKBgQDOvcyhbbHcrQxoESPz4RlZwUMTfEldXfTQtyl/pJdAJLUrDiRWYx4KNUwvVRrxgjaXnjF1q58NR9NNrTasJ+Vl30Nklhnyt3a4NTKACXxhX1cemWdL7m1B7rBSzMJD6uAqE3q8790swmZYRWgjMOB9xrYKq0JNuaCPEx8FbbzuGQKBgE4QRNhzt/2qRtUkNtSMJqbdV60VXsUEYwFfL5D1mJndZg9FLQlhLhHugP5AMSd8OpNIaRgGjEl4fHn+4LmDDdbJC5uIkypc3TWEkQw4a2dUIMaYq2DGMKH7DEvllaoAynInvWvKiQGrngy1uwnbZ+ZlhYclc4gehbB02a4x74ErAoGAWxApCVXrCRvEIjaiknKtGubQp82P9ytCgYicI9gYsy04C53wDYkdGzv8scCX3JcRetk4Se9tYIkpnsZUFaKBHc0ovy6KgWmkRmFQPCtxeOZo1laVtFFyGJ+NVPtR+l6DnKT15DD3SBbcw7bWtuF5kI0tdCeZTekcusieWmLK3EkCgYEA0RumiuR2jgPnljGrLZu2QAg1gieS6kGKwXJarSOLFG5B4dftdwBKy8QEqbNAL5xKfa6tlNg6Pa9ULfC38qOOSB0BKv+gAvjra7uk4Pr8avhMGDUr2PZFNQJt4crWutNmEJ8yIsqMP8HC2UYD8Hv80jrwAd8mNsWSTEO7UDmd/YU="
CONFIG_ESP_WIFI_REMOTE_EPPP_CLIENT_CA="MIIDIzCCAgugAwIBAgIUL4dO91g+lJLA9mHo+2wIfgr+VL8wDQYJKoZIhvcNAQELBQAwITELMAkGA1UEBhMCQ1oxEjAQBgNVBAMMCUVzcHJlc3NpZjAeFw0yNDEwMzAwOTM1NDVaFw0yNTEwMzAwOTM1NDVaMCExCzAJBgNVBAYTAkNaMRIwEAYDVQQDDAlFc3ByZXNzaWYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCWm4sq9DdpDYUxRJD/Xauc8w2y7Zh0XQuRZ5qtkZclkpK3sz2nOQR9HAs0FWU4mUgZJeUwKNa1jzgtm89oAYtMrRypiTNQSkFWFiwJXXN/xGO93I2COQ857iGOvKyQpfxCsuy6THPIsSYYcYV6Lk/DlLix9CGXax+mcFvxcHQxm33//YHscWJEo5RyNHdfOFYhAzINqoHVX5KOQQxjmpHiMmVhT1HH9PqTOg3ukvNEJVphRHjv6n4KB2wHSMGmNVaUQWB9gILAQ6Ixkxxhf/U9DtftTvXNbzlX56kvSSt1I3gcmHHpwrDRrg0aQBbuL0yeDaza1wLMIaP/Saphl7x/AgMBAAGjUzBRMB0GA1UdDgQWBBS/+vNjHlnmn0N8ixDGpWq0WV1TtTAfBgNVHSMEGDAWgBS/+vNjHlnmn0N8ixDGpWq0WV1TtTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQACJQuUz5LHHtfOc9s13lbfaWW5HukFI55/B7xOIVtIMcDpvzpVCQz1TT0N1DoFwEbXGLG8A8nBye+y9A/e2V/B3DEQ5Yq7rq/KxXGBtgyUGJT08kRASWsOoQOMI15xCH5Al2JifbOCaY9glupccctY5ypfucrM2Z9KGoT7lKw7L2cx9yrXY3UO/3bQibKNLSmHR4zvlcXEdWFdMmsBUvbUmVYTPZIK0iMARzXtBNJL1dbT+shp/VM2Um09L0cakyD2jwjFvRjbnUdgJt8j7pf38vEHtcVfbmCrdRjgmWXuwnqS5UTgfYyHCGZvEITr8JVAro7SkLywjL5IeKnqxtv6"
CONFIG_ESP_WIFI_REMOTE_EPPP_SERVER_CRT="MIICwjCCAaoCFAbrhsFoIjFDqI9LzRog2HUQcz0uMA0GCSqGSIb3DQEBCwUAMCExCzAJBgNVBAYTAkNaMRIwEAYDVQQDDAlFc3ByZXNzaWYwHhcNMjQxMDMwMDkzNTQ1WhcNMjUxMDMwMDkzNTQ1WjAaMRgwFgYDVQQDDA9lc3ByZXNzaWYubG9jYWwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDXxawk5bs7vCfWHEFK9IuKqs/sByWVrNWfAYg4ZVaDRD+9yGoPHPfkLPnJ6ec3zB2HtfZy1SlOv7RcASMYygGfBeNFT1enlrcZr34SWit0larCtLKrU5xZBGzbMhwt/Td9c5z3i8yTp6MxoFbFck2VECSiul+ZUqI2t7DCyExwvCr+75IEPkc12mwys3QXn2wJDMLMK/ECRzZxfi1XUsmlR2Ds2XVx7S6+miExO/zj2bjQpOVfodFLSDSyhmurMvYVwI/yecvM80k/FE+1RkvsXIWYuj6lZ8UuxVwK0+l1yzXM8pMOC8dGRnYuF5PnU4Z8w+VQxHWUWBikoopn/+uhAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAFwtlQktabaq0/Yvo57KFxTzFSKJLsPD0+ICVXxydvIPZecUuNLCcodPCeI2TnFzxp2kX5nF0+gUtHFZfl4mgjoOdmXdaCHBnpqxwDKODEPYdQU/PSLOSu0rLmBBvuZawOmIaijgtF4WWrZtJJTtzRN4kYJ28dLmhRu8NBDZYKeUKLNies2R7vrsq8VRitXyDWh20vSmnSyH0cepbJKnfUmv3Q9Ai3JWMHxgLljkn5qcF34XSyhH/Q/O8aRV+AEzG7dHNvqTIP/8u1DQJyjyBUC4WZHohe/uGBkbEfcysnp+XiTL8ZrcTItaKPN98LhXaTL3ReN2n9I/tult0FawELM="
CONFIG_ESP_WIFI_REMOTE_EPPP_SERVER_KEY="MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDXxawk5bs7vCfWHEFK9IuKqs/sByWVrNWfAYg4ZVaDRD+9yGoPHPfkLPnJ6ec3zB2HtfZy1SlOv7RcASMYygGfBeNFT1enlrcZr34SWit0larCtLKrU5xZBGzbMhwt/Td9c5z3i8yTp6MxoFbFck2VECSiul+ZUqI2t7DCyExwvCr+75IEPkc12mwys3QXn2wJDMLMK/ECRzZxfi1XUsmlR2Ds2XVx7S6+miExO/zj2bjQpOVfodFLSDSyhmurMvYVwI/yecvM80k/FE+1RkvsXIWYuj6lZ8UuxVwK0+l1yzXM8pMOC8dGRnYuF5PnU4Z8w+VQxHWUWBikoopn/+uhAgMBAAECggEBAJY/VC5hNe5Th53FEQYjoONPK/dbxqUhs6LEC1nR3tsK9COv4YJilo7xboJV+KZW4J02bMTrf5cRUILcW9cQGu7jx6zkodHV1evx0qTu2uGUslJgRyWb0/v8Y9yCWTMA5tnZXozVcP/ENJQC5UkZ3cIVep1Bj/4Ql1nosRIBLZE1fiW6YBxKM05Qni/UJJWIxc/7clBYiy8L/atvhErkqKvx/pACh/SgVPd9JMzTBdbE13bB1O3nx/7n3gJmkBkKtlWL6vA294qdlHa3RMokV+lTwRx+b5VzxoKZHv6grHPNMulx3R/gHcWgz1dAo8Ume8LgR6zTqPVEy1uB95hX7I0CgYEA9/u/5IjDQQJ9qTkvJey6FNsvl68JcYRtP2+3WKXPRaUJLPv6M20ZmjpuVk4NpkEBWzJ4fhQ6D9TL8F7+WsjLfa58gMs1juu3uAEk4H5AgPi3vqkdw/Kgo4uU3QCa/6R5dXzpndWqllSBAsx+0s/uwbI6bLodqcVOlIE7vLusoYcCgYEA3r9Zt8cwDt1h6JXdHcNVKEcPt01XB7h3bQtiliSDcfToV9fYuQXUOkBK76Xt6w3L5NqWrQwigRCdDmYBuhql/RgvIGcOKVC/cL+sSetNP8xzSozQsyfBalCk826X7MV065OtqXZZVux48gVBSvfuzs1xTo3e1TpV+pd1nj27c5cCgYEAy70WR1jlsn+tZl8JEYuQxpneXCz/ATjf2QKcDEUOKhYRl9feFGpKYqAnDtlJ9ZHq31Z0EIHlwiP++hnRuBzIsxWsTNSnyCh55L9r4NVZgZzWudqQDfFFcZi4UWqx7d7fu1tJRNfLM39yDy6b8+/KJXGc9r9ip5znlrMmtUUr6/kCgYAlp8V7+vFV4fj2P7d0m5vexjyS6UEoLfgKeB0/cobCEfvhNb0OcjzRaCMC5lMVJGzukEFemamPlgZm87mhA3ZCFf+Jg8JyG5NxdQWkLWIOwfpPhQSW9MaOuXlZKb4HKc49MObvufEab7l2eIr0KHu3fCWGeRdNhqIYTdh1WsxAmwKBgQCE50V7GAyG+tsMwZyimAAykcBL2x0NSKT2LY59sM6+FEtRH9d1dyacIFQ2GVHPNXjeRxtqIawsU/5yJ5Ivh38nDJzQLLM3oDXi5VHtWP6ExfUi9ZFb1CLiALg5dBoyAP/3Xvtq8JpIp6PwFRVPCKE7/GgBmEQ23eIfViFhfPIrfQ=="

View File

@@ -0,0 +1,4 @@
CONFIG_ESP_WIFI_REMOTE_LIBRARY_EPPP=y
CONFIG_LWIP_PPP_SUPPORT=y
CONFIG_LWIP_PPP_SERVER_SUPPORT=y
CONFIG_LWIP_PPP_VJ_HEADER_COMPRESSION=n