В качестве моего первого проекта типа IoT я пытался подключить электретный микрофон с предварительным усилением к плате разработки ESP8266 NodeMCU 12E, а затем передавать этот звук на другой компьютер через Интернет.Я пробовал различные протоколы и подходы к потоковой передаче аудиоданных, но мои лучшие усилия все же привели к искаженному качеству звука на принимающей стороне.
Я начал устранять неполадки с моим низким качеством сигнала, исследуя частоту дискретизации * 1003.*.Я написал код ниже, чтобы показать мне, сколько времени требуется для выборки 1000 аналоговых точек данных:
#include <ESP8266WiFi.h>
const char* ssid = "___";
const char* pass = "___";
char pay_load[1000] = {0};
int pay_load_length = sizeof(pay_load)/sizeof(pay_load[0]);
void setup()
{
Serial.begin(115200);
Serial.println(0); //start
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, pass);
}
void loop()
{
int count = micros();
for(int i=0; i<pay_load_length;i++){
int analog = analogRead(A0);
}
Serial.println(micros()-count);
}
Последовательный монитор напечатал значения около 166000 с плюсом или минусом около 100. Означает ли этотребуется около 166us, чтобы получить одно значение из analogRead(A0)
?Что означало бы, что в моем нынешнем виде максимальная частота дискретизации аналогово-цифрового сигнала составляет 6 кГц? И эта низкая частота является основным вкладом в мое плохое качество сигнала?(Когда я увеличиваю длину pay_load, время выполнения цикла увеличивается линейно).
Я просто хочу убедиться, что мой эксперимент выше не вводит меня в заблуждение, заставляя думать, что ESP8266 трудно захватить (исо временем передаю) стерео качество звука.
Примечание по теме: Я пытался выяснить, как написать ISR с использованием аппаратного таймера, потому что другие, работающие в режиме stackoverflow, предложили, что может помочь мне выбрать аналоговые точки данных с большей частотой без дрожания.Но я чувствую, что теряюсь в лабиринте, потому что у меня FreeRTOS, которая не поддерживает аппаратный таймер, и теперь мне нужно исследовать, как получить nonos sdk вместо этого… и не уверен, какая проблема встанет после этого.Просто интересно, проще ли получить arduino с сетевым экраном?