• Система автоматизации с открытым исходным кодом на базе 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.
 
Сверху Снизу