В общем, товарищи, проблема, выручайте. Пытаюсь подключить микрофон инмп441 к плате пико В, после чего передаю по вифи на комп в реальном времени. В ответ слышу один треск, то громкий, то тихий (не зависит от того, шумлю ли я)
Использую: Arduino IDE и ядро от Earle F.
Библиотеки:
(их много, потому что в прошивке не только это)
#include <Arduino.h>
#include <stdio.h>
#include <cstdint>
#include <locale.h>
#include <iostream>
#include <string>
#include <list>
#include <vector>
#include <stdio.h>
#include <SPI.h>
#include <functional>
#include <cstring>
#include <unordered_map>
#include <map>
#include "pico/multicore.h"
#include <cassert>
#include "pico/stdlib.h"
#include "pico/cyw43_arch.h"
#include <WiFi.h>
#include <LittleFS.h>
#include "hardware/dma.h"
#include <I2S.h> // <- ДЛЯ МИКРОФОНА!!
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#define SAMPLES 8192 // 8192 семпла * 2 байта (отправка по вифи) = 16384 байт
#define SAMPLERATE 44100
#define FFTSIZE 1024
#define INMP441_PIN_SD 16
#define INMP441_PIN_BLCK 14
#define INMP441_PIN_WS 15
size_t bi = 0; // buffer index (не используется)
int32_t buffer[2][FFTSIZE]; // buffer с данными (не используется)
int32_t samples32[SAMPLES]; // 32 битные данные с микро
int16_t samples16[SAMPLES]; // переработанные в 16 бит данные с микро
volatile bool canWrite = true; // можно ли вносить данные в samples или он обрабатывается
I2S i2s(INPUT);
void setup(){
Serial.begin(115200);
// инициализация всякой остальной всячины...
}
void setup1()
{
i2s.setBCLK(INMP441_PIN_BLCK);
i2s.setDATA(INMP441_PIN_SD);
i2s.setBitsPerSample(32);
if (!i2s.begin(44100)) {
while (true);
}
}
void loop1()
{
while (true)
{
// ЦИФРОВОЙ
i2s.read(samples32, sizeof(samples32));
if (canWrite == true)
{
for (int i=0; i<SAMPLES; i++)
{
samples16[i] = (int16_t)(samples32[i] >> 8);
}
canWrite = false;
}
}
}
void loop()
{
if (microphone)
{
if (client.connected()) {
if (canWrite == false)
{
client.write((const uint8_t*)samples16, SAMPLES);
canWrite = true;
}
} else {
falldown(L"loop", L"Потеряно соединение с сервером!"); // экран смерти
}
}
}
будут дополнительные вопросы — отвечу. Главное помогите! Я проверяю уже 3 INMP441, питание подаётся стабильное 3.3
Компоненты:
Плата: Raspberry Pi Pico W
Аккумулятор: ROBITON LP68 900 мАч
Дисплей: ST7735 128 на 160 пикселей IPS TFT
Микрофон: цифровой микрофон INMP441 MEMS I2S
Плата Type-C для зарядки: TP4056
Тумблер: есть
Попытки:
Менял пины, использовал готовый .pio файл для связи платы с микро
Заменял на тот же микрофон 2 раза
Перерыл гугл, что не пытаюсь — не помогает
Пытался вне Arduino IDE с помощью CMake — там уж легче прыгнуть с окна
Питал и от акума и от компа, акум заряжал и разряжал
Использовал АНАЛОГОВЫЙ микрофон — даже он передавал звук (для него был немного другой код, так как система полегче, но звук был, правда, лишь шум, так как он только для детектинга звука)
Вифи модуль работает — запускал тг бота
| *На микропайтон писать НЕ ПРОБОВАЛ, позже попробую и дополню (советуете вообще попробовать? не привлекает производительностью)
Обращался к нейронкам, все твердят почти одно и то же, причем нерабочее
*
Может ли это быть из за типа проводов? Или, может, у меня какая то палёная плата, которая не работает с таким микрофоном (я максимально отказываюсь в это верить)?