Ко мне обратился товарищ с просьбой уменьшить размер данного скетча т.к. места в его проекте уже совсем нет, а авторизация необходима как воздух. Мое мнение, что стоило бы сменить контроллер, было отвергнуто в силу долгого ожидание посылки из поднебесной и хочется прямо здесь и сейчас.
Необходимо выбросить лишнее и сэкономить крошки на ATmega328p устанавливаемой в Arduino UNO / NANO
Компилируем изначальный скетч (под чип W5100) и смотрим, сколько он весит, это будет отправной точно.
Sketch uses 15 908 bytes (49%) of program storage space. Maximum is 32 256 bytes.
Global variables use 524 bytes (25%) of dynamic memory, leaving 1 524 bytes for local variables. Maximum is 2 048 bytes
В ходе быстрого кромсания выкидываем: библиотеку Base64, функцию auth_update() и все переменные, связанные с авторизацией. Хочу заметить, что изначально подразумевалось все это использовать для возможности изменять учетные данные в Web морде и хранить их в EEPROM. В угоду экономии места логин и пароль будет жестко задан в программе.
Проверка авторизации осуществляется в 40 строке кода, в неё же зашит хэш Base64 - login:password
if (readString.lastIndexOf(F("Authorization: Basic bG9naW46cGFzc3dvcmQ="))>-1) {
После повторно компилируем программу и сравниваем вес.
Sketch uses 14 756 bytes (45%) of program storage space. Maximum is 32 256 bytes.
Global variables use 414 bytes (20%) of dynamic memory, leaving 1 634 bytes for local variables. Maximum is 2 048 bytes
Получаем экономию:
Скетч уменьшился на 4%, что составляет 1152 байта
Оперативка освободилась на 5%, что составляет 110 байт
Не густо, но этого оказалось достаточно, по этой же причине данный пост получил право на жизнь. Остается только придумать логин и пароль и самостоятельно получить из них хеш Base64, а затем вписать его в скетч.
Напоминаю, что логин и пароль пишутся одной строкой через разделитель двоеточие ":". Если для примера взять логин Admin, а пароль СhIcKeN, то должна получится строка Admin:СhIcKeN
Пишем её в наш online конвертер Base64 и получаем на выходе необходимый нам хеш QWRtaW46Q2hJY0tlTg==
Base64 online converter
Текст в Base64 (encode)
Base64 в Текст (decode)
PS: идея онлайн конвертера Base64 взята с сайта http://webtoolkit.info, в связи с этим я обязан разместить на них ссылку.