E-Learning. Часть 14. Тестирование ESP32

Доброго всем времени суток, продолжаю серию постов про образовательную робототехнику. Здесь я описываю результаты и просто ход выполнения своей научной работы.


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


О чем этот пост: о переходе со схемы ESP8266 на ESP32 и небольшом анализе минимальной\максимальной частоты приема на конечном сервере.


За время с прошлого поста я переосмыслил схему в очередной раз. Решил попробовать завести ESP32, так как чисто теоретически она должна была дать лучшую производительность (которую и будем замерять далее конкретно под мою задачу).


Задачи:

1. Замерить частоту передачи данных по проводу (по COM-порту). В зависимости от величины БОД и формата пакета.

2. Замерить частоту передачи при беспроводной доставке UDP пакетов.

3. Оценить нижнюю и верхнюю границу частоты передачи данных на разных аппаратных точках доступа Wi-Fi.

4. Оценить на сколько плавает частота передачи данных.


Что я использовал:

1. Замер питания. USB тестер (замерял 3 часа работы - итог 300 ма ест ESP32):

E-Learning. Часть 14. Тестирование ESP32 Исследования, Esp32, Python, Длиннопост

2. Роутер tp-link tl-wr841n-300mbit.

3. Sony Experia ZL.

4. Программатор для ESP32.

5. Ноутбук Lenovo Z580 в качестве сервера приема данных.

E-Learning. Часть 14. Тестирование ESP32 Исследования, Esp32, Python, Длиннопост
E-Learning. Часть 14. Тестирование ESP32 Исследования, Esp32, Python, Длиннопост

Поехали.

Часть 1. Проводные тесты


Для начала надо прошить нашу плату. Вот так


Тест 1: Передача строки

Serial.println("-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83,-0.83");

Тест 2: Таже самая строка, но без минусов.

Тест 3: Serial.println("-0.83,-0.83,-0.83,-0.83,-0.83,-0.83");

Тест 4: Тоже самое, но без минусов.


Тест 1 передает по одному значению с каждого датчика на руке. 6 осей. 18 сенсоров максимум. Итого 108 значений. Значения с минусом передаются медленнее. Ибо знак минус это тоже информация, которую нужно передать.

E-Learning. Часть 14. Тестирование ESP32 Исследования, Esp32, Python, Длиннопост

Конечно очевидно, что чем больше БОД, тем быстрее улетают данные. Для значения более 2000000 время исполнения одного цикла смотрел уже через Python (библиотека pySerial, код короткий, смотрите на скрине).

Плюс питоновкой реализации в том, что мы не ограничены фиксированными значениями, которые предлагает arduino ide.


При значении более 2500000 БОД на первом и втором тесте вылазят ошибки. При более 3000000 уже и короткая строка не успевает.

Такие тесты нужны узнать что экономнее - передавать на сервер по одному значению или все сразу. Если сравнивать значения на одну ось, то получается что все данные сразу передавать выгоднее примерно на 3% +-. Окей, хорошо.

Стабильные результаты при 2000000 БОД хуже 3070000 БОД в среднем на чуть более 60%.

При этом верхняя граница для частоты данных (1 Герц считаю как все сенсоры за 1 секунду передали каждый по 6 значений данных на каждую свою ось, итого 108 цифр).


Вывод по части 1:

300 Гц у нас в кармане. (хотя и 60 хватает так-то)

E-Learning. Часть 14. Тестирование ESP32 Исследования, Esp32, Python, Длиннопост

Часть 2. Беспроводные тесты.


От POST запросов я отказался. Получилось переслать UDP пакеты.

Прошивка для ESP32

Сервер приема и сохранения данных на Python 2.7 (Сам код я разбирать не буду, главное что он считает реальное число Гц принятых на ноутбуке).


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


1) tp-link tl-wr841n

2) Sony Experia старенькую уже.


Так же стоит учитывать, что больше ничем другим эти точки доступа не занимались. Даже к интернету не подключены. И симки не было в телефоне. Пробовал еще на своем рабочем D-Link DIR-815/AC, но результаты в конце (да и данные были некорректно собраны для него).


Сами собранные данные (21 599) последовательных данных на каждую выборку):

1) Данные tp-link tl-wr841n

2) Данные Sony Experia


Код для анализа данных в Jupyter Notebok (Язык Python 2.7)


1) Строим гистограмму и функцию плотности вероятности. (tp-link tl-wr841n)

Общая:

E-Learning. Часть 14. Тестирование ESP32 Исследования, Esp32, Python, Длиннопост

Отдельно выделил центральный пик, который составляет 97.87% (21 139) от всех данных.

E-Learning. Часть 14. Тестирование ESP32 Исследования, Esp32, Python, Длиннопост

Это значит, что большинство значений более 1290 Гц!

Левый промежуток 0.04 % (8).

E-Learning. Часть 14. Тестирование ESP32 Исследования, Esp32, Python, Длиннопост

Правый 2.09 % (452)

E-Learning. Часть 14. Тестирование ESP32 Исследования, Esp32, Python, Длиннопост

Среднее значение 1348.184777

Разброс  191.242387

Минимальное  310.000000

Максимальное  3966.000000


Что ж, воодушевляет. Посмотрим чем удивит мобилка.

2) Общая

E-Learning. Часть 14. Тестирование ESP32 Исследования, Esp32, Python, Длиннопост

Центральная (считал как средняя плюс-минус половину разброса). 94.67 % (20448)

E-Learning. Часть 14. Тестирование ESP32 Исследования, Esp32, Python, Длиннопост

Левая 2.65 % (573)

E-Learning. Часть 14. Тестирование ESP32 Исследования, Esp32, Python, Длиннопост

Правая 2.68 % (578)

E-Learning. Часть 14. Тестирование ESP32 Исследования, Esp32, Python, Длиннопост

Можно заметить, что иногда частота время от времени удваивается от среднего значения в 2-3% случаев. С чем связано не знаю.


0 mean 1155.241446

1 std 165.123428

2 min 223.000000

3 max 3437.000000


1100 Гц выдает. Очень хорошо.

Мой D-Link DIR-815/AC при интернет серфинге и просмотре фильма с подцепленного на роутер жесткого диска (по FTP протоколу) среднее значение было 300 Гц (когда мало серфили, то 900 Гц).


Далее можно еще выявить зависимость от расстояния между передатчиком-роутером-приемником. Влияние препятствий...

E-Learning. Часть 14. Тестирование ESP32 Исследования, Esp32, Python, Длиннопост

В следующих постах:

1) О том как жить с плавающей частотой передачи данных.

2) Об автоматической корректировке взаимозависимых гироскопов+акселерометров.

3) О сборке макета углов Эйлера для тестирования гироскопов и акселерометрах.

Наука | Научпоп

7.7K пост78.5K подписчиков

Добавить пост

Правила сообщества

Основные условия публикации

- Посты должны иметь отношение к науке, актуальным открытиям или жизни научного сообщества и содержать ссылки на авторитетный источник.

- Посты должны по возможности избегать кликбейта и броских фраз, вводящих в заблуждение.

- Научные статьи должны сопровождаться описанием исследования, доступным на популярном уровне. Слишком профессиональный материал может быть отклонён.

- Видеоматериалы должны иметь описание.

- Названия должны отражать суть исследования.

- Если пост содержит материал, оригинал которого написан или снят на иностранном языке, русская версия должна содержать все основные положения.


Не принимаются к публикации

- Точные или урезанные копии журнальных и газетных статей. Посты о последних достижениях науки должны содержать ваш разъясняющий комментарий или представлять обзоры нескольких статей.

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

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


Наказывается баном

- Оскорбления, выраженные лично пользователю или категории пользователей.

- Попытки использовать сообщество для рекламы.

- Фальсификация фактов.

- Многократные попытки публикации материалов, не удовлетворяющих правилам.

- Троллинг, флейм.

- Нарушение правил сайта в целом.


Окончательное решение по соответствию поста или комментария правилам принимается модерацией сообщества. Просьбы о разбане и жалобы на модерацию принимает администратор сообщества. Жалобы на администратора принимает @SupportComunity и общество Пикабу.

2
Автор поста оценил этот комментарий

Возможно проще отправлять не строку, а число по байтам? Так все числа будут занимать одинаковое время на передачу. Если эти числа float, то будут занимать 4 байта, а "-0.83," занимает 6

раскрыть ветку
1
Автор поста оценил этот комментарий

Идея хорошая, ещё в 60-е годы в СССР кибкрнетиики и психологи мечтали реализовать когда-нибудь передачу готовых моторных навыков от профессионалов ученикам, вроде даже были методологические разработки в этой области... А как реализуются поправки на индивидуальные анатомические особенности обучаемого?

раскрыть ветку