Возвращаюсь к теме после вынужденного отсутствия.
За это время проанализировал рекомендации форумчан, почитал темы форума, в которых поднимались вопросы, связанные в реал-тайм синхронизацией и быстродействием канала передачи данных и поковырялся в интернете, пытаясь найти готовое решение, которое можно было бы применить для реализации моей задумки.
В итоге пришел к выводу, что в поставленной задаче целесообразнее использовать не wi-fi модули ESP8266, а обычные RF модули, например - NRF24хх, которые даже при использовании в качестве управляющего контроллера дуины (и ее стандартных, медленных библиотек) обеспечивают скорость пинга между двумя модулями не хуже 1-2 мс. Такой точности мне вполне достаточно.
За прошедшее время сформулировал основные требования к системе, и алгоритм работы в случае ее построения на модулях NRF24. При этом постарался оптимизировать связи и маршруты передачи данных между составляющими блоками системы, а так же распределил порядок и очередность внутрисистемного администрирования между двумя ключевыми блоками.
На приведенном ниже рисунке показана гоночная трасса и места расположения всех блоков системы.
Время цикла работы системы определяется длительностью одной гонки:
1) Перед каждой гонкой по нажатию и удержанию на ~5 секунд кнопки, распложенной на пульте блока "В" начальника старта (маршала), который находится в центре трассы, начинается рестарт системы.
2) Функция администрирования присваивается блоку "В" (маршал), который посылает команду блоку "А" на обнуление всех данные предыдущей гонки.
Затем блок "В" поверяет состояние своей батареи, и посылает запрос на мониторинг батарей питания секторных блоков "E", "F", "G", "H", которые находятся в непосредственной близости от него. После мониторинга блок "В" передает на блок "А" информацию о уровне заряда батарей питания ("высокий", "средний", "низкий") - далее эта информация будет отображаться на мониторе ПК секретаря соревнований, контролирующего ход гонки (в судейском блоке). На рисунке этот ПК не показан, но канал связи с ним от блока "А" может быть как воздушный, так и проводной - расстояние между блоком "А" и ПК обычно не превышает 10-30 метров..
3) Затем функция администрирования передается блоку "А" (база), который проводит мониторинг батарей питания блоков "C", "D", "I", "K", "L".
4) Проводится демонстрация моделей, при которой факт идентификации каждой модели судьями дальней вешки подтверждается кратковременным включением соответствующего фонаря светофора (см. п.7), после чего администрирование вновь передается блоку "В".
5) Блок "В" начинает обратный отсчет времени (команда "60 секунд на запуск и прогрев двигателей"), управляя цифрами на одноразрядных семисегментных индикаторах секторных блоков "E", "F", "G", "H", отображая сначала десятки секунд (от 6 до 1) до старта, затем единицы секунд ( от 9 до 0). Отсчет ведется раздельно для каждого сектора, с запаздыванием в одну секунду для каждого последующего сектора.
6) Окончание подготовительного времени и включение цифры "0" на индикаторе, является командой, разрешающей старт экипажу. Одновременно с командой на включение цифры "0" на секторном индикаторе, с блока "В" на блок "А" подается команда на включение секундомера для первого, второго, третьего и четвертого участников. Этот момент - единственный за все время гонки, когда требуется максимальная скорость передачи команды. Здесь время задержки не должно превышать 10 мс.
7) После старта четвертой модели, блок "В" передает функции администратора блоку "А", а сам переходит в режим Standby до следующего рестарта системы . За три секунды, разделяющие старт первой и четвертой модели в системе не происходит никаких событий, требующих фиксации.
В процессе текущей гонки блок "В" больше не используется.
8) Блок "А" начинает с периодичностью в несколько миллисекунд опрашивать блок "С", ожидая нажатия кнопок (4 кнопки на блоке "С"). Как только будет зафиксировано нажатие любой кнопки на блоке "С", блок "А" передаст на блок "D" команду на включение соответствующего фонаря (4 фонаря разного цвета на светофоре). Здесь допустимая задержка может достигать 0,01-0,1 сек.
8) Завершение первого (и последующих) круга конкретной моделью фиксируется нажатием кнопки (-ок) на блоке "А" (4 кнопки). Кнопки связаны с блоком проводами, поэтому временнЫе задержки здесь не будут превышать времени исполнения возможных прерываний микроконтроллера (в худшем случае - единицы микросекунд). После фиксации завершения моделью очередного круга, блок "А" передает команду на соответствующий секторный блок "E", "F", "G" или "H" на включение цифры, соответствующей количеству пройденных кругов (от 1 до 9).
После завершения десятого круга на 30 секунд включается блинкующий символ "F" (финиш). Задержка передачи команды от блока "А" к блокам "E", "F", "G", "H" на смену цифры на индикаторе не принципиальна, и может достигать сотен миллисекунд, на влияя на ход и результаты гонки.
После завершения периода индикации символа "F", секторный блок автоматически переходит в режим Standby.
9) Ошибки, допущенные участниками в процессе гонки, фиксируются (нажатием соответствующих кнопок) в памяти контроллеров судейских блоков ("I", "K", "L") , и хранятся до окончания гонки. После завершения гонки последним участником, блок "А" переназначает сетевые адресные номера труб (заменяя адреса блоков "E", "F", "G", "H" на адреса блоков "I", "K", "L"), опрашивает блоки "I", "K", "L", и собирает информацию об ошибках, которые затем учитываются при вычислении окончательного результата гонки.
Ошибки, допущенные участниками на старте (фальстарт, и т.д.), фиксируются начальником старта (маршалом) нажатием кнопки на соответствующем секторном блоке "E", "F", "G", "H", и считываются блоком "А" в моменты подтверждения секторным блоком получения команды на смену информации на индикаторе.
10) После завершения сбора информации об ошибках, блок "А" передает команду блокам "I", "K", "L" на обнуление регистров памяти, в которых хранилась информация об ошибках, и команду на переход в режим Standby.
11) Завершающем действием гоночного цикла является перенастройка сети в состояние, предшествующее рестарту системы, и переход блока "А" в режим ожидания рестарта системы.
Таким образом, в каждый момент гоночного цикла в сети одновременно бывает задействовано не более 7 абонентов:
а) Перед рестартом, при мониторинге батарей "первой очереди", и во время старта, в сети зарегистрировано 6 абонентов - блок "В" (администратор), блок "А" и блоки "E", "F", "G", "H".
b) Во время мониторинга батарей "второй очереди" и демонстрации моделей сеть состоит из 6 абонентов - блок "А" (администратор), и блоки "С", "D", "I", "K", "L".
с) Во время гонки в сети работает 7 абонентов - блок "А" (администратор), блоки "С", "D", "E", "F", "G", "H".
d) После окончания гонки, во время сбора информации об ошибках в сети работает только 4 абонента - блок "А" (администратор), и блоки "I", "K", "L".
Учитывая тематику этого форума, посвященного модулям ESP8266, и то, что здесь даже нет раздела, для обсуждения NRF24, хочу еще раз заручиться разрешением администрации на развитие этой темы.
Надеюсь, что возражений с ее стороны не будет.
Если же администрация сочтет, что тема не представляет интереса для других форумчан, прошу просто удалить весь этот топик.