ESP32: Сохранение учётных данных Wi-Fi в отдельном файле (и другой конфиденциальной информации)

В этом руководстве показано, как сохранить учётные данные Wi-Fi и другую конфиденциальную информацию (пароли, токены, API-ключи) в отдельном файле при программировании ESP32 в Arduino IDE. Это позволяет безопасно делиться кодом, не беспокоясь о случайном раскрытии личных данных.

Обзор проекта

Вот краткий обзор того, как работает наш подход:

  • Ваши личные учётные данные, включая имена аккаунтов, пароли и токены, сохраняются в файле библиотеки .h, а не в вашем скетче.

  • Файл библиотеки подключается с помощью #include в начале вашего скетча.

  • Скетч модифицируется для ссылки на #define-имя приватной информации, содержащейся в файле библиотеки, что позволяет не включать приватную информацию в ваш скетч.

  • Если впоследствии вы отправите или распространите свой скетч кому-либо, вам не нужно предпринимать никаких действий по «очистке» файла, и вам никогда не придётся беспокоиться о случайном раскрытии вашей личной информации, потому что вы забыли отредактировать файл перед отправкой.

Создание/установка библиотеки MyLogin

Мы создадим библиотеку MyLogin, которая будет хранить учётные данные. Вы можете дать ей любое другое имя. Выполните следующие шаги, чтобы установить скелетный файл MyLogin в вашу библиотеку:

  1. Перейдите в папку libraries Arduino. Вы можете найти путь к папке libraries вашей Arduino, перейдя в File > Preferences. Путь в поле Sketchbook location указывает, где находится ваша папка libraries.

Расположение папки libraries в Arduino IDE
  1. Создайте папку с именем MyLogin в папке libraries вашей Arduino IDE.

  2. Наконец, скопируйте следующий скелетный код в файл с именем MyLogin.h в папке MyLogin и сохраните его.

Установка файла MyLogin в папку libraries Arduino
/*********
  Created by Ron Brinkman
  Complete instructions at https://RandomNerdTutorials.com/esp32-save-credentials-separate-file/
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*********/

// Keep account names, passwords, tokens, etc. current in this file
// When visiting another location put their credentials in the "currently in effect" section

// Credentials currently in effect
#define STASSID               "REPLACE_WITH_YOUR_SSID"                   // WiFi
#define STAPSK                "REPLACE_WITH_YOUR_PASSWORD"

#define emailSenderAccount    "YOUR_SENDER_EMAIL@gmail.com"      // Email
#define emailSenderPassword   "YOUR_EMAIL_APP_PASSWORD"
#define emailRecipient        "YOUR_EMAIL_RECIPIENT@example.com"

#define DuckDNStoken          "YOUR_DUCKDNS_TOKEN"               // DuckDNS

/*********Saved credentials for substitution above when "on the road"
//Credentials used at home
#define STASSID               "my_wifi_ssid"
#define STAPSK                "my_wifi_password"
#define emailSenderAccount    "my_sender_email@gmail.com"
#define emailSenderPassword   "my_email_app_password"
#define emailRecipient        "my_email_recipient@example.com"
#define DuckDNStoken          "my_duckdns_token"

// Credentials used at Mom and Dad's house
#define STASSID               "parents_wifi_ssid"
#define STAPSK                "parents_wifi_password"

// Credentials used at wife's Mom and Dad's house
#define STASSID               "wifes_parents_wifi_ssid"
#define STAPSK                "wifes_parents_wifi_password"

// Credentials used at our daughter's house
#define STASSID               "daughter_wifi_ssid"
#define STAPSK                "daughter_wifi_password"

// Credentials used at our son's house
#define STASSID               "son_wifi_ssid"
#define STAPSK                "son_wifi_password"

// Credentials used at our friends Joe and Sally's house
#define STASSID               "friend_wifi_ssid"
#define STAPSK                "friend_wifi_password"
*********/

Просмотреть исходный код на GitHub

Настройка файла MyLogin.h с вашими учётными данными

Откройте скелетный файл MyLogin.h в папке libraries вашей установки Arduino IDE. Выполните следующие шаги, чтобы изолировать личную информацию об аккаунтах, паролях и токенах в этом приватном файле:

1) Отредактируйте раздел Credentials currently in effect. Впишите ваши сетевые учётные данные в следующие определения, чтобы приложения могли подключаться к вашей локальной сети.

// Credentials currently in effect
#define STASSID               "REPLACE_WITH_YOUR_SSID"                   // WiFi
#define STAPSK                "REPLACE_WITH_YOUR_PASSWORD"

2) Продолжите редактирование или добавление любых других учётных данных, которые используют ваши приложения. Это может включать SMTP email, SMS-сообщения, Telegram-сообщения, WhatsApp мгновенные сообщения, Duck DNS, NoIP, DynDNS или другую поддержку динамического DNS и т.д.

В этом руководстве мы будем тестировать только сетевые учётные данные, но это даёт вам представление о том, как можно добавить другую конфиденциальную информацию.

#define emailSenderAccount    "YOUR_SENDER_EMAIL@gmail.com"      // Email
#define emailSenderPassword   "YOUR_EMAIL_APP_PASSWORD"
#define emailRecipient        "YOUR_EMAIL_RECIPIENT@example.com"

#define DuckDNStoken          "YOUR_DUCKDNS_TOKEN"               // DuckDNS

3) Опционально разместите учётные данные в закомментированном разделе файла, чтобы вам не нужно было искать их каждый раз, когда вы путешествуете в другое место и хотите работать над своим приложением.

Начните с копии ваших домашних учётных данных на случай, если Current credentials будут временно перезаписаны во время поездок.

// Saved credentials for substitution above when "on the road"
// Credentials used at home
#define STASSID               "my_wifi_ssid"
#define STAPSK                "my_wifi_password"
#define emailSenderAccount    "my_sender_email@gmail.com"
#define emailSenderPassword   "my_email_app_password"
#define emailRecipient        "my_email_recipient@example.com"
#define DuckDNStoken          "my_duckdns_token

4) Продолжайте настройку с учётными данными любых других семейных, дружеских или деловых локаций по мере необходимости.

// Credentials used at Mom and Dad's house
#define STASSID               "wifes_parents_wifi_ssid"
#define STAPSK                "wifes_parents_wifi_password"
   .
   .
   .

Сохраните файл, теперь содержащий вашу приватную информацию. Он готов к использованию вашими скриптами для хранения приватной информации вне скриптов.

Адаптация ваших файлов скриптов

Каждый файл скрипта, который вы хотите защитить от случайного раскрытия ваших учётных данных, потребует двух простых правок. Выполните следующие шаги:

1) Поместите следующее выражение в ваш список #include файлов, чтобы подключить «библиотеку», которую мы создали ранее:

#include <MyLogin.h>

2) Найдите место в вашем файле скрипта, где обычно вводятся имя аккаунта, пароль, токен или другие учётные данные. Для вашего WiFi-аккаунта это будет выглядеть примерно так:

// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

3) Замените текст на следующий:

const char*   ssid     = STASSID;
const char*   password = STAPSK;

Не вводите здесь свои учётные данные. Они будут автоматически включены через файл MyLogin.h и оператор #include. Это будет использовать значения переменных STASSID и STAPSK, определённых в файле MyLogin.h.

4) Продолжайте искать другие места в вашем скрипте, где нужны имена аккаунтов, пароли или токены для приложений, таких как SMTP email, SMS-сообщения, Telegram-сообщения, WhatsApp мгновенные сообщения, Duck DNS, NoIP, DynDNS или другая поддержка динамического DNS и т.д.

Обновите эти разделы кода, аналогично учётным данным WiFi, чтобы не хранить личную информацию в скрипте.

Тестирование с кодом подключения Wi-Fi

Давайте проверим то, что мы узнали, на простом примере Wi-Fi.

Следующий код подключится к вашей локальной сети и выведет RSSI (уровень сигнала) после установления соединения.

/*********
  Created by Ron Brinkman
  Complete instructions at https://RandomNerdTutorials.com/esp32-save-credentials-separate-file/
*********/

#include <WiFi.h>
#include <MyLogin.h>

// Replace with your network credentials (STATION)
const char*   ssid     = STASSID;
const char*   password = STAPSK;

void initWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(1000);
  }
  Serial.println(WiFi.localIP());
}

void setup() {
  Serial.begin(115200);
  initWiFi();
  Serial.print("RSSI: ");
  Serial.println(WiFi.RSSI());
}

void loop() {
  // put your main code here, to run repeatedly:
}

Просмотреть исходный код на GitHub

Если вы успешно создали файл MyLogin.h, как мы объяснили ранее, вам не нужно добавлять никакие учётные данные в этот код. Он получит их через файл MyLogin.h.

Как работает код?

Файл MyLogin.h, который вы настроили в соответствии с приведёнными выше инструкциями, теперь содержит все ваши личные учётные данные. Больше не нужно вводить эти учётные данные где-либо ещё, потому что они будут включены автоматически при компиляции скрипта.

Файл библиотеки MyLogin.h теперь безопасно включён в ваш скрипт, когда он подключается в начале вашего скрипта, и он содержит все ваши личные учётные данные.

#include <MyLogin.h>

Поскольку ваши учётные данные уже включены в ваш скрипт из подключённого файла MyLogin.h, теперь учётные данные фактически включены в скрипт для использования в вашей программе.

const char*   ssid     = STASSID;
const char*   password = STAPSK;

Если другие аккаунты, пароли или токены используются в последующих разделах вашего скрипта, они также будут безопасно включены, если вы настроили и адаптировали их, как описано в предыдущих разделах.

Демонстрация

Загрузите ваш проект на плату ESP32. Она подключится к вашей локальной сети и выведет уровень сигнала.

ESP32 подключается к Wi-Fi и выводит RSSI в Serial Monitor

Как видите, нет необходимости жёстко прописывать сетевые учётные данные в коде, потому что они будут включены при подключении файла MyLogin.h. Вы можете сделать это с любым другим кодом, использующим учётные данные Wi-Fi, или если вам нужно сохранить другую конфиденциальную информацию, такую как токены, API, пароли и т.д.

Ваша приватная информация будет защищена от случайного раскрытия.

Заключение

Мы надеемся, что вы нашли этот проект полезным и простым для реализации во всех ваших проектах. Наслаждайтесь спокойствием, зная, что вы можете публиковать или распространять код ваших проектов без страха «ОЙ, я забыл удалить свою личную информацию».

Кроме того, это позволяет не искать учётные данные или API-ключи каждый раз, когда они вам нужны, так что вам не нужно жёстко прописывать их.

У нас есть другие руководства по Wi-Fi, которые могут быть полезны:

Мы надеемся, что вы нашли это руководство полезным.

Особая благодарность нашему читателю Ron Brinkman, который создал и написал макет для этого руководства.

Ron Brinkman – инженер и руководитель проектов на пенсии, который стремится оставаться в курсе технологий своей карьеры. Он использовал материалы RNT и W3Schools, чтобы помочь другим, реализовав анимированную рождественскую экспозицию во дворе и выступая за лучшие результаты в своей стране.

Узнайте больше об ESP32 с нашими ресурсами:

Примечание

Источник: ESP32: Save Wi-Fi Credentials in a Separate File (and Other Sensitive Information) – Random Nerd Tutorials