Миша
Может ли esp32 быть AP и использовать ESP-NOW одновременно?
┈━═ᗩחᵈ𝓻ⲉყ═━┈
Есть отличные видео курсы на торрент по электротехнике, в том числе и про индуктивные и ёмкостные нагрузки. Например Дмитрий Забирало рассказывает все доступно. У него так же отличный курс по программированию AVR.
Resident
Sergey
Ну и насчёт антенны нужно позаботиться
Andy
Vlad
всем привет
почему может не работать SPI-коннект к акселерометру qmi8658 ?
#define SPI_MOSI (15) коричневый провод SDA на платке
#define SPI_SCK (16) оранжевый провод SCL на платке
#define SPI_MISO (17) зеленый провод ADO на платке
#define IMU_CS (18) // оторвал его от VDD и присобачил его на GND чтобы переключить в SPI, т.к.
CS:
I2C/ I3C /SPI-UI selection Pin.
(If 1: I2C-UI Mode: I2C/I3C communication enabled, SPI idle mode)
(If 0: SPI-UI mode: I2C/I3C disabled)
c i2c платка работаЛА ОК.
Anton
жарко же там
55
Max
Экологичное расставание с Алисой: строим полностью локальный и приватный голосовой ассистент
Идея отказаться от использования Яндекс Алисы в системе умного дома возникла у меня после новости о принятии Госдумой законопроекта, касающегося штрафов за поиск и доступ к экстремистским материалам в интернете. Казалось бы, при чём тут голосовой помощник? Однако Яндекс входит в реестр организаторов распространения информации, что означает определённые юридические и технические обязательства по хранению и передаче данных.
Хотя я не ищу ничего, выходящего за рамки интересов автоматизации, желание иметь полностью автономный, локально работающий умный дом - без зависимости от интернета и облачных сервисов - стало для меня ещё актуальнее.
Тем более что сейчас единственным слабым звеном в моём умном доме остается Яндекс Алиса - которая требует постоянного интернет-соединения даже для выполнения простейших команд управления локальными устройствами.
В этой статье я расскажу, как и на что планирую заменить Алису, чтобы сохранить привычный голосовой контроль, но без сторонних подключений и рисков для приватности.
Алиса, извини
https://habr.com/ru/articles/930340/?utm_source=habrahabr&utm_medium=rss&utm_campaign=930340
Vlad
всем привет
почему может не работать SPI-коннект к акселерометру qmi8658 ?
#define SPI_MOSI (15) коричневый провод SDA на платке
#define SPI_SCK (16) оранжевый провод SCL на платке
#define SPI_MISO (17) зеленый провод ADO на платке
#define IMU_CS (18) // оторвал его от VDD и присобачил его на GND чтобы переключить в SPI, т.к.
CS:
I2C/ I3C /SPI-UI selection Pin.
(If 1: I2C-UI Mode: I2C/I3C communication enabled, SPI idle mode)
(If 0: SPI-UI mode: I2C/I3C disabled)
c i2c платка работаЛА ОК.
Получилось таки прицепиться к китайскому акселерометру qmi8658 по spi (готовой платки-модуля - НЕТУ, это "наколенный" тест), действительно - CS требует свой отдельный пин для управления обязательно.
но результаты не утешительны:
1) аксель через spi читается быстро, полосу частот 8000 Гц позволяет
2) и быстрых мозгов SRAM у контроллера счас в притык, но хватает обрабатывать массив данных с акселя для 8000 Гц (PSRAM не годится из-за тормозов), но ...
3) ... но теперь уже не хватает скорости процессора S3 :) - он в полтора раза отстает, не успевает обрабатывать, и частотный спектр в результате - вычислен, но он смещен в полтора раза вверх.
Evgeniy
Не понятно, почему спектр смещен
Vlad
Не понятно, почему спектр смещен
#define SAMPLES 8192 // Количество отсчётов (сэмплов) для анализа.2048 - быстро
#define SAMPLE_RATE 16384 // Гц, Частота дискретизации — сколько раз в секунду снимаются показания с акселерометра (Минимальное значение: 2 × MAX_FREQ (по теореме Найквиста), максимальное - от скорости датчика).4096 при i2c, 8192 при spi
#define MAX_FREQ 8000 // Максимальная анализируемая частота, Гц,
'Параметр Формула Пример для SAMPLES=1024, SAMPLE_RATE=2000 Гц
'Частотное разрешение (Δf) Δf = SAMPLE_RATE / SAMPLES 2000 / 1024 ≈ 1.95 Гц (шаг между точками FFT)
'Полоса Найквиста MAX_FREQ ≤ SAMPLE_RATE / 2 2000 / 2 = 1000 Гц (теоретический максимум)
'Практический максимум MAX_FREQ ≤ 0.4 × SAMPLE_RATE 0.4 × 2000 = 800 Гц (рекомендуемый максимум)
'Время сбора данных T = SAMPLES / SAMPLE_RATE 1024 / 2000 = 0.512 сек
Если читать контроллер с акселерометра не успевает за "Время сбора данных T", то спектр смещен вверх, растянут
Vlad
Найквиста можно заменить на Котельникова, если коробит :)
Evgeniy
Так откуда смещение, если в проц упирается - получишь тот же частотный спектр, разве что реже цикл обработки будет вызываться?
Vlad
ну фактически измеряю время всего цикла измерения (и обработки отдельно), и оно получается не 0.5 сек, а больше 0.6 при вот этих настройках желаемых для 8000 Гц полосы.
а если поставить настройки пониже для 4000 Гц полосы (4096/8192/4000) - то время измерения уже 0.5 сек всегда.
и при этом (для 8000 Гц отлаживаемых) оборотная частота, главная гармоника получается в спектре - что-то около 130 Гц, а должна быть около 100 в реальности
Evgeniy
Пускай тогда в режим без переполнения fifo переходит, а с приостановкой сбора данных с акселерометра
Evgeniy
На те самые 100 мс
Vlad
тут цикл обработки не учитывается, речь все только про скорость чтения с акселя.
через i2c было гораздо медленнее, шина 400 кГц.
другой датчик до 4500 Гц работает через SPI скоростью 7 МГц полностью ОК, а вот у этого SPI уже может 15 МГц и полоса обещана до 8000 Гц, но ... уже проц 240 МГц который, не успевает, _я_так_соображаю_, в SRAM складывать...
Ашот
Vlad
Max
Vibration Anomaly Detection using XIAO ESP32-S3
It is an lightweight intelligent solution designed to monitor and identify abnormal vibration patterns in real-time.
https://www.hackster.io/killingjacky/vibration-anomaly-detection-using-xiao-esp32-s3-ad3ffc
Vlad
Ашот
Vlad
ну буферы создаются для осей на базе размерности SAMPLES, которая нужна уже минимум 8192
// Общие буферы для всех осей
float accelData[SAMPLES]; // Буфер для данных акселерометра (одна ось за раз)
float fftReal[SAMPLES]; // Реальная часть FFT
float fftImag[SAMPLES]; // Мнимая часть FFT
Ашот
так в esp32 520кб озу, да и еще внешняя в PSRAM есть 4+мб, и при этом появляеся проблема выделить 96кб?
Vlad
так в esp32 520кб озу, да и еще внешняя в PSRAM есть 4+мб, и при этом появляеся проблема выделить 96кб?
вы так и не допоняли специфику, похоже.
Если стоит задача выжать максимум полосы частот анализа и при этом частотное разрешение не хуже 1 Гц - нужно, чтобы все условия выполнялись, укладываясь _в_теоретический_срок_ - практически, иначе - смещенный спектр (ну кривой нереальный), а для этого:
1) соотношения частоты и размерности буферов - чтобы были максимальные, и чтобы RAM - хватало с запасом на прочие операции, не только FFT
2) скорость интерфейса датчика - была максимальная для получения данных и наполнения буферов
3) скорость RAM - максимальная, PSRAM QSPI - в 10 раз медленнее SRAM; PSRAM OPI (esp32-s3r8) - вдвое медленнее SRAM - я это лично проверил уже
4) ну и скорость самого проца - должна быть такой, чтобы ничего из предыдущих пунктов - не тормозило.
Vlad
вы так и не допоняли специфику, похоже.
Если стоит задача выжать максимум полосы частот анализа и при этом частотное разрешение не хуже 1 Гц - нужно, чтобы все условия выполнялись, укладываясь _в_теоретический_срок_ - практически, иначе - смещенный спектр (ну кривой нереальный), а для этого:
1) соотношения частоты и размерности буферов - чтобы были максимальные, и чтобы RAM - хватало с запасом на прочие операции, не только FFT
2) скорость интерфейса датчика - была максимальная для получения данных и наполнения буферов
3) скорость RAM - максимальная, PSRAM QSPI - в 10 раз медленнее SRAM; PSRAM OPI (esp32-s3r8) - вдвое медленнее SRAM - я это лично проверил уже
4) ну и скорость самого проца - должна быть такой, чтобы ничего из предыдущих пунктов - не тормозило.
и, ковыряясь в теме, я последовательно упирался в каждое из этих ограничений: скорость i2c, размер памяти SRAM, скорость PSRAM... и теперь, похоже, и скорость камня тоже ограничивает...
Нихрена ни по чему запаса нету, получается, в камне.
А самым "узким горлом" должен быть только сам датчик (его скорость измерения и отдачи по SPI).
Ашот
и, ковыряясь в теме, я последовательно упирался в каждое из этих ограничений: скорость i2c, размер памяти SRAM, скорость PSRAM... и теперь, похоже, и скорость камня тоже ограничивает...
Нихрена ни по чему запаса нету, получается, в камне.
А самым "узким горлом" должен быть только сам датчик (его скорость измерения и отдачи по SPI).
И собственно какие частоты psram при этом?
15 МГц это реально медленно, даже в непрерывном режиме, для esp32.
Vlad
ok-home
Vlad
:)
Ашот
Stm32 например через dma может спокойно переварить поток почти в половину тактовой частоты, на дисплей 72-80мгц spi вполне выплёвывает непрерывным потоком.
Да и есп32 также умеет быстро на дисплей гнать данные по тому же spi
Vlad
теперь, действительно, я понимаю, что узкое место ПО СКОРОСТИ - это именно либа, которая датчик читает.
а вот по объему памяти пока так и не понимаю, почему быстро упираюсь в потолок
Ашот
ok-home
Vlad
я так понимаю что либа fft тоже себе памяти под времянки кушает ?
нее, мои внешние буферы в инициализации FFT:
// Общие буферы для всех осей
float accelData[SAMPLES]; // Буфер для данных акселерометра (одна ось за раз)
float fftReal[SAMPLES]; // Реальная часть FFT
float fftImag[SAMPLES]; // Мнимая часть FFT
// Единственный объект FFT
ArduinoFFT<float> FFT = ArduinoFFT<float>(fftReal, fftImag, SAMPLES, SAMPLE_RATE);
А я чего-то как-то совсем из виду и упустил, что либой же читаю.
причем, разными _готовыми_ либами под разные аксели.
но ведь там вряд ли огромные буферы, под периодическое чтение по одному набору данных.
и либы все на 99.9% - без DMA.
Ардуиновые либы, универсальные ж
Vlad
нее, мои внешние буферы в инициализации FFT:
// Общие буферы для всех осей
float accelData[SAMPLES]; // Буфер для данных акселерометра (одна ось за раз)
float fftReal[SAMPLES]; // Реальная часть FFT
float fftImag[SAMPLES]; // Мнимая часть FFT
// Единственный объект FFT
ArduinoFFT<float> FFT = ArduinoFFT<float>(fftReal, fftImag, SAMPLES, SAMPLE_RATE);
А я чего-то как-то совсем из виду и упустил, что либой же читаю.
причем, разными _готовыми_ либами под разные аксели.
но ведь там вряд ли огромные буферы, под периодическое чтение по одному набору данных.
и либы все на 99.9% - без DMA.
Ардуиновые либы, универсальные ж
счас вот еще подъехали RS485-датчики проводные, до 5000 Гц - по идее, и их надо как-то включать в код, но тут уже UART, а не SPI.
но, как я теперь понимаю, с FFT - без DMA вообще глупо даже и начинать возиццо
Max
ReSpeaker XMOS XVF3800 4-mic array board features ESP32-S3 module, also works over USB
Seeed Studio’s “ReSpeaker XMOS XVF3800 with XIAO ESP32S3” board is a 4-mic array board with XMOS XVF3800 voice processor and ESP32-S3 wireless MCU for standalone operation, but it can also be used as a USB microphone array for computers and SBCs.
The Respeaker mic array family was first introduced in 2016, and new models have…
https://www.cnx-software.com/2025/07/29/respeaker-xmos-xvf3800-4-mic-array-board-features-esp32-s3-module-works-over-usb/
Max
https://www.camthink.ai/product/neoeyes-ai-camera-ne101/
Vlad
Resident
Resident
М - маркетинг
Rain
https://github.com/RainNameless/SD2_Ticker
Rain
esp 8266
Agent
#
Здравствуйте, кто может поделиться ссылкой на esp 32 на АлиЭкспресс? А то в каждого продавца своя маркировка на чипе и хз что оригинальное а что нет
Resident
Resident
Денис
Resident
Max
RemuterMCS: BT remote control for mike, camera, speakers
Use an M5StickC to remotely mute/unmute your computer's microphone, camera, or speakers via Bluetooth.
https://www.hackster.io/wjcarpenter/remutermcs-bt-remote-control-for-mike-camera-speakers-e3940e
🍀
Agent
Agent
Вам че, реально поиском нем найти что нужно? Не, я еще могу понять когда даташит не могут прочитать (не, не могу), но теперь уже и на али товар надо помочь найти?
Tonchik
🍀
Max
Agent
emmett
ok-home
emmett
А, ну это я сделал, но что то выигрыш минимален.
emmett
и количество буферов уменьшил
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
cfg.static_rx_buf_num = 4; // Было 10 (по умолчанию)
cfg.dynamic_rx_buf_num = 2; // Было 32
Vlad
Фонарик неотвратимо приближаеццо :)
Vlad
Интересно сравнить затраты времени на такой макет и первую версию на ПП
нифига не интересно - ясное дело, что никому такое не нужно, ни делать, ни покупать.
мне вот любопытно только лишь ... поиспользовать, насколько это реально удобно\полезно в плане идеи освещения, т.е. способа управления яркостью и временем жизни фонарика.
ну а поиспользовать без изготовления - нереально :)
Evgeniy
Мне достался налобник нахаляву, с двумя режимами, но вся партия их - брак. В выключенном состоянии высаживают батарейки, так что они нагреваются.
Vlad
нифига не интересно - ясное дело, что никому такое не нужно, ни делать, ни покупать.
мне вот любопытно только лишь ... поиспользовать, насколько это реально удобно\полезно в плане идеи освещения, т.е. способа управления яркостью и временем жизни фонарика.
ну а поиспользовать без изготовления - нереально :)
если пока допустить, что идея жизнеспособная, то глядя на мою фотку становится ясно, почему таких фонарей не делают.
ну реально ж громоздко и дорого.
и разумеется, я про нормальную плату, где все интегрально на рассыпухе компактно наговнячено