Добавил 4-байтную метку времени к заголовку каждого сообщения. Длина заголовка, соответственно, увеличилась с 8 до 12 байт. Новой версии протокола присвоен номер ревизии 1.0. Таким образом, теперь HBus защищен он повторных трансляций зашифрованных сообщений: если проверка на timestamp включена, то сообщения с меткой времени отличающейся более чем на 1 минуту, будут игнорированы.
С этой версией работает программа NodeTest rev 1.12, скетч WiFi шлюза rev 1.10 и базовый код для Ардуино rev 1.0.
При компиляции для Arduino Pro Mini (Atmega 328P) код HBus занимает 64% от 32К флэша и 73% от 2К ОЗУ. Это много, это уже на пределе возможностей микрика. Для простых устройств сойдет, но любая мало-мальски сложная программа займет еще немного ОЗУ и перевалит за 75%, что отрицательно скажется на стабильности. Вот это уже вполнее серьезное основание для перехода на более мощный проц. После гугления картинка обрисовалась такая:
1. ATmega с бОльшей памятью.
1.1. В линейке Ардуино эту нишу заполняет
Arduino Mega 2560. Цена у него конская, как, впрочем, у всех "родных" Ардуино. Хуже то, что у китайцев нет дешевого клона. Да и чипа такого дешевого нет, сам проц стОит десяток с лишним баксов, что просто никуда не годится.
1.2. Дешевые (порядка доллара) ATmega-совместимые чипы - это ATmega644 (44 пина) и ATmega64 (64 пина). Память по сравнению с ATmega328 удвоена, что вполне достаточно на какое-то время. На Гитхабе есть замечательный проект
MughtyCore, при помощи которого можно сделать Ардуину из ATmega644. Главное достоинство такого подхода - универсальное питание, чипы работают и от 3.3В, и от 5В. Но получится ли на 44-ногом чипе развести платку, совместимую по габаритам с Arduino Mini Pro - это пока неясно.
2. Переход на SAMD21
На этом чипе сделан
Arduino Zero и новая линейка Arduino MKR. Чип весьма достойный и будущее у него есть. Нужные габариты получить несложно, тому порукой манюня
Tau. Но работает он только от 3.3В, а от 5В не может. Это неприятно. Ну и цена у него раза в 2-3 больше, чем у варианта (1)
3. Переход на Инфенионовский XМС1100. Это АРМ-ы для промышленных применений, повышенная надежность, диапазон питаний до 5В. Все бы хорошо, но одна беда: на борту нет EEPROM. Есть флэш, с помощью которой можно было бы эмулировать EEPROM, но доведение такого подхода "до ума" потребует времени. Цена такая же как у варианта (2). По мне, так это самый заманчивый вариант.
4. Переход на STM32F103, а-ля "голубая пилюля". В сущности то же самое что вариант (2), но намного дешевле и с возможными граблями с библиотеками.
Насколько я понимаю, варианты (1) и (4) дешевы потому, что китайцы клепают клонов. То есть, там еще и на грабли в железе можно нарваться. Хотя пока что дешевые китайские Arduino Pro Mini показали себя хорошо.
PS: Как вариант, вместо того, чтобы переходить на другой чип, можно "по сусекам поскрести" и урезать буфера. Приемный буфер должен остаться как есть, а вот размер буфера Json и размер буферов для передаваемых сообщений можно урезать вдвое. После этого расход памяти данных снижается до 63%, что более-менее приемлемо.
Выложил rev 1.1