• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Подключение датчиков типа 10-DOF - акселерометр, гироскоп, магнитометр, температура, давление...

kuzmin.artsiom.86

New member
Доброго Вам вечера, очень заинтересовала тема, подключения датчиков к esp. Но, ввиду моей некомпетентности, прошу немного прояснить, ряд возникших вопросов.
Имеется(почти имеется):
1. V3 Беспроводной модуль NodeMcu 4 М байт Lua WI-FI на основе ESP8266 esp-12e(летит из Чины)
2. Mpu9255(1шт.)(летит из Чины)
3. Mpu6050(1шт.)(лежит дома)
Цель:
Трекинг головы, для начала. Если будет красиво, то и всего тела.

С esp ранее не сталкивался, пробовал сделать на базе uno+mpu6050+BT+ фильтр Калмана, результат не обрадовал.
Я так понимаю, Ваш метод передачи данных по UPD довольно шустрый. И для захвата движения подойдет.
Подскажите как прошить Вашим кодом esp (чем и что-куда класть, в Си не силён)? С тем учётом, что нужно только 9 значений. И можно ли будет подключить порядка 30 датчиков через мультиплексор.
По моей задумке, данные поступают в скрипт C#(unity) и через него вращают объект в сцене(со своими нюансами). Но на Uno данные проходили через фильтр Калмана, а тут нет. Нашёл статью с кодом фильтра Маджвика(Фильтр Маджвика) на Си, пишут, что лучше. Есть ли смысл заливать его в esp и как, или лучше переписать под C# и уже в unity фильтровать?
И ещё, подскажите, как шустрее всего разбирать пакеты данных на переменные?
Спасибо.
 

pvvx

Активный участник сообщества
Доброго Вам вечера.
В первую очередь с такими датчиками и передачей их данных нет никаких стандартов. Принимающее ПО придется писать самостоятельно.
Много датчиков на одну ESP8266 не повесить. Не хватает производительности CPU на обслуживание совместно с WiFi SPI и тем-более если используется I2C. I2C в ESP программной реализации, а не аппаратной. Можно накрутить что-то более скоростное ради спортивного интереса, но код будет непереносимый и неизменяемый.
Для целей описываемого трекинга надо работать на предельной скорости датчиков и выходит, что ESP может обслужить и передать поток только от одного датчика. Тут уже сказывается и время на обработку этих данных и лучше её производить на приемной стороне на чем-то имеющем аппаратную реализацию мат. операций с плавающей точкой.
В принципе это и всё. :)
 

Denis_IMU

New member
Доброго вечера, друзья.
Меня так же интересует подключение датчика(для начала одного) к модулю esp8266. Я довольно далек от всего этого, но имею огромное желание заставить все это работать. Пытался так же как Кузьмин собрать все это на дуине с BT модулем, но у меня не хватило знаний. Не могли бы вы мне помочь с этим?
Есть esp8266 и mpu9250, т.е. если я правильно понял я могу их заставить взаимодействовать и передавать данные с датчиков без всяких доп плат? А какой формат выходных данных? Можно все это в виде скрипта отправить в Unity3D и научить его понимать и отображать данные?
И еще одно, из всего выше прочитанного, я понял что можно складывать данные с датчиков в какое-нибудь хранилище, из которого уже устройство(допустим сотка) будет его считывать и обработав отображать, верно?
 

Helix59

New member
Добрый день. Вопрос. Нужно подключить модуль gy-801 (гироскоп L3G4200D и акселерометр adxl345) к esp8266-12. При этом нужно использовать фильтр Калмана, для определения угла поворота. На ардуино все выходит хорошо, показания стабильны и точны.
При подключению gy-801 к esp8266-12 показания углов гироскопа и акселерометра отображаются правильно (нормально), но обработка результатов по Калману - это ужас. Результаты бегают как хотят. Что делать? Есть ли библиотека фильтра Калмана к esp8266 ?
 

pvvx

Активный участник сообщества
Добрый день. Вопрос. Нужно подключить модуль gy-801 (гироскоп L3G4200D и акселерометр adxl345) к esp8266-12. При этом нужно использовать фильтр Калмана, для определения угла поворота. На ардуино все выходит хорошо, показания стабильны и точны.
При подключению gy-801 к esp8266-12 показания углов гироскопа и акселерометра отображаются правильно (нормально), но обработка результатов по Калману - это ужас. Результаты бегают как хотят. Что делать? Есть ли библиотека фильтра Калмана к esp8266 ?
А в Arduino либа разве ведет постоянный опрос с фиксированным шагом, например через fifo датчиков?
Обычно там опрос как попало и стабильного опроса с фиксированными промежутками между замерами нет. Зачем на эту кучу ставить фильтры, если у них пропуски в замерах? Если опрос построен именно так, то для фильтрации вам потребуется учитывать и время каждого замера/опроса датчиков...
 

Helix59

New member
А в Arduino либа разве ведет постоянный опрос с фиксированным шагом, например через fifo датчиков?
Обычно там опрос как попало и стабильного опроса с фиксированными промежутками между замерами нет. Зачем на эту кучу ставить фильтры, если у них пропуски в замерах? Если опрос построен именно так, то для фильтрации вам потребуется учитывать и время каждого замера/опроса датчиков...
Когда все делал на ардуино, результат был хорош, и точность приемлема для меня, экспериментально проверял. Но когда гироскоп поставил на есп, начался ужас, никаких вменяемых показаний не получаю. На сколько понимаю может быть проблема в рязрядности.
Использовать чисто гироскоп, не выход, ошибка постепенно набегает. Акселерометр, для определения угла невозможно использовать в динамике. В комплексе получается, что можно. Нужно только обрабатывать показания гироскопа и акселерометра, например, фильтр Калмана. Но на есп8266 у меня он не идет.
Находил на алиэкспресс гироскопы с фильтром Калмана встроенным, может это выход?
 
Последнее редактирование:

shuraf

Member
Приведи листинги как сделана обрабатка для разных железок.
Фильтр Кальмана в виде библиотеки? Тоже выложи
 

Newman

New member
День добрый. При попытке подружить ESP8266 и GY-91 с использованием оверлея 10dof столкнулся с тем, что показания датчика считываются только до момента подключения по WiFi. После подключения считываются и передаются по UDP нулевые показания. Выглядит это примерно следующим образом:
Код:
F(3620): 2739,99896,M(-44,117,61),A(184,620,16528),G(221,-34,8)
F(3730): 2739,99896,M(-42,115,56),A(172,560,16428),G(216,-21,-2)
WiFi event(7): Probe Request (MAC:, RSSI:-63)
add 1
aid 1
station:  join, AID = 1
WiFi event(5): Station[1]:  join, AID = 1, 0
TCP2UART: client ip:192.168.4.5, port: 23829
srv[30263] 192.168.4.5:23829 [0] start client - Ok
MDB: init port 502
SNTP: start
WEB: init port 80
NetBIOS init, name 'AESP8266'
srv[30263] 192.168.4.5:23829 [1] listen
F(3840): 12499,62645,M(0,0,0),A(0,0,0),G(0,0,0)
F(3950): 12499,62645,M(0,0,0),A(0,0,0),G(0,0,0)
Использую модуль ESP-07 с прошивкой TCP2UART 0.6.2 в оверлее менял только поумолчальные настройки UDP порта. Может кто подскажет что может вызывать такое поведение?
 

pvvx

Активный участник сообщества
Использую модуль ESP-07 с прошивкой TCP2UART 0.6.2 в оверлее менял только поумолчальные настройки UDP порта. Может кто подскажет что может вызывать такое поведение?
После испытаний он давно заброшен. А за то время сменилось многое в остальном коде и SDK... Возобновлять или доделывать смысла нет, т.к. прием по UDP не распарсить на java в эксплорерах. Было сделано на UDP чисто для проверки, и если всё бы удалось с ESP8266, то предполагался перевод на webcosocket, но не сраслось с надежностью самого ESP8266 в таких делах...
Так-то данные должны передаваться, но из того что стоит поглядеть можно посоветовать посмотреть правильно ли вы согласовали версию компиляции ovl с остальной частью SDK. При любом изменении в основной части необходимо пересобрать и обновить код "оверлея" на web-диске... Остальное относиться к аппаратным ошибкам подключения…
 
Последнее редактирование:

Newman

New member
При любом изменении в основной части необходимо пересобрать и обновить код "оверлея" на web-диске...
Про это я в курсе. Пересобирал и обновлял и прошивку и web-диск. Старую версию прошивки взял просто потому что последняя вылетала на fatal error после заливки в контроллер.

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

По самой проблеме: после подключения по WiFi начинается какая-то несуразица с опросами датчиков по spi.
 
Сверху Снизу