Ардуино - запись звука
Re: Ардуино - запись звука
как мне эти байты упаковать в пакеты отправить через sim800 и принять потом как угодно.
- Реклама
Re: Ардуино - запись звука
как эти байты упаковать в пакеты отправить через sim800... я без понятия))
я спросил как у тебя работает интернет... чтоб было понятней... но ответа так и не услышал...
я спросил как у тебя работает интернет... чтоб было понятней... но ответа так и не услышал...
Re: Ардуино - запись звука
Роман, вот финальная часть моего (нашего) рекордера из этой темы
Здесь ADCH пишется в буфер потому что на флэшку закидываем
Как передать ADCH на комп? По UART?
таймер лопатит же на частоте 16кгц задавая битрейт
мне с этой же частотой в сериал гнать результат преобразования АЦП?
Или отправлять в сериал по 512 байт и тогда думать как их правильно складывать на стороне ПК?
Код: Выделить всё
ISR(TIMER2_COMPA_vect) {
ADMUX = 0x61; // set ADC to read pin A1, ADLAR to 1 (left adjust)
sbi(ADCSRA, ADSC); // start ADC sample
while (bit_is_set(ADCSRA, ADSC)); // wait until ADSC bit goes low = new sample ready
recByteCount++; // increment sample counter
bufByteCount++;
if (bufByteCount == 128 && bufWrite == 0) {
bufByteCount = 0;
bufWrite = 1;
} else if (bufByteCount == 128 & bufWrite == 1) {
bufByteCount = 0;
bufWrite = 0;
}
if (bufWrite == 0) {
buf00[bufByteCount] = ADCH;
}
if (bufWrite == 1) {
buf01[bufByteCount] = ADCH;
}
Как передать ADCH на комп? По UART?
таймер лопатит же на частоте 16кгц задавая битрейт
Код: Выделить всё
void Setup_timer2() {
TCCR2B = _BV(CS21); // Timer2 Clock Prescaler to : 8
TCCR2A = _BV(WGM21); // Interupt frequency = 16MHz / (8 x 125 + 1) = 16000Hz
OCR2A = 125; // Compare Match register set to 125 (было 90) Перешл на 16кгц
}Код: Выделить всё
Serial.println(ADCH);Re: Ардуино - запись звука
да.olegue писал(а):мне с этой же частотой в сериал гнать результат преобразования АЦП?
лучше отправлять по 1 байту.olegue писал(а):Или отправлять в сериал по 512 байт и тогда думать как их правильно складывать на стороне ПК?
ISR(TIMER2_COMPA_vect) {
ADMUX = 0x61; // set ADC to read pin A1, ADLAR to 1 (left adjust)
sbi(ADCSRA, ADSC); // start ADC sample
while (bit_is_set(ADCSRA, ADSC)); // wait until ADSC bit goes low = new sample ready
Serial.println(ADCH);
recByteCount++; // increment sample counter
bufByteCount++;
if (bufByteCount == 128 && bufWrite == 0) {
bufByteCount = 0;
bufWrite = 1;
} else if (bufByteCount == 128 & bufWrite == 1) {
bufByteCount = 0;
bufWrite = 0;
}
if (bufWrite == 0) {
buf00[bufByteCount] = ADCH;
}
if (bufWrite == 1) {
buf01[bufByteCount] = ADCH;
}
порядок такой:
1-настройка АЦП.
ADMUX = 0x61; // set ADC to read pin A1, ADLAR to 1 (left adjust)
2-запуск преобразования АЦП.
sbi(ADCSRA, ADSC); // start ADC sample
3-ждём окончания преобразования АЦП.
while (bit_is_set(ADCSRA, ADSC)); // wait until ADSC bit goes low = new sample ready
4-как только преобразование закончится сразу отправляем 1 байт в сериал.
Serial.println(ADCH);
*вместо Serial.println(ADCH); можно написать просто UDR = ADCH;
UDR - это регистр сериал. Как только мы записываем в регистр UDR данные, то сериал автоматически переходит в режим передачи 1 байта.
Но прежде чем гнать данные по сериалу надо сначала настроить скорость сериала.
А какая нам нужна скорость ?
Считаем:
16кгц это частота семплов. Или 16.000 байт/c.
сериал - это один байт: 1 стартовый бит + 8 бит данных + 1 стоповый бит = 10 бит. а нам надо гнать 16.000 байт/c.
значит минимальная скорость сериала должна быть 16.000 х 10 = 160.000 бит/с. (или 160 кбит/c)
что бы сериал нормально работал (без ошибок) скорость сериала должна быть в полтора раза (а лучше в 2 раза) больше...
т.е. нам нужна скорость 250.000 бит/c. (или 250 кбит/c)
Ардуина поддерживает скорость 250 кбит/c ?
Максимальная скорость сериала зависит от кварца...
В Ардуино стоит кварц 16 МГц...
Открываем даташит... да, с кварцем 16 МГц максимальная скорость сериала 1 Мбит/с. (а в режиме удвоенной скорости 2 Mбит/с).
значит на 250 кбит/c должно работать нормально))
правда... с такой высокой скоростью по сериалу мы ещё не передавали )) надо проверить на практике...
када делали радиоуправление...
https://www.radiokot.ru/forum/viewtopic ... 8&t=185219
мы гнали по сериалу со скоростью в несколько раз меньше))
https://www.radiokot.ru/forum/download/ ... ?id=356834
это потому что у нас не было кварца 16 МГц... приходилось снижать скорость))
а теперь самый главный вопрос... подключение к ПК... ))
на ПК мы можем запустить программу "терминал" и посмотреть наши байты... 16.000 байт/c.
правда в терминале почему то нет скорости 250 кбит/c... странно...
а теперь самый главный вопрос... мы хотим просто посмотреть данные на ПК ?
или послушать звук на ПК ?
если мы хотим послушать звук на ПК... то у меня нет программ для ПК которые воспроизводят звук по сериалу ))
у меня все программы на ПК работают по Ethernet (или Wi-Fi)... короче только по Интернету...
по сериалу они не работают))
Re: Ардуино - запись звука
Тогда какокй вывод? Как послушать звук на компьютере?
- Реклама
Re: Ардуино - запись звука
чтоб послушать звук на компьютере... надо найти/купить/собрать/украсть (нужное подчеркнуть
) Ethernet модуль...
для него программы есть.
или найти/купить/собрать/украсть Wi-Fi модуль...
правда для Wi-Fi модуля у меня программ нет... но там всё просто... Wi-Fi модуль по умолчанию работает через обычный сериал))

я купил на Али Ethernet модуль W5500... 250 руб/штука ))
через него можно гнать на ПК всё что угодно... аудио... видео... данные... модуль работает стабильно...))
ещё собираю самодельный модуль для Ардуино...
https://www.radiokot.ru/forum/viewtopic ... 1#p4312241
но процесс этот не быстрый))
потому что мне никто не помогает...

для него программы есть.
или найти/купить/собрать/украсть Wi-Fi модуль...
правда для Wi-Fi модуля у меня программ нет... но там всё просто... Wi-Fi модуль по умолчанию работает через обычный сериал))
я купил на Али Ethernet модуль W5500... 250 руб/штука ))
через него можно гнать на ПК всё что угодно... аудио... видео... данные... модуль работает стабильно...))
ещё собираю самодельный модуль для Ардуино...
https://www.radiokot.ru/forum/viewtopic ... 1#p4312241
но процесс этот не быстрый))
потому что мне никто не помогает...
Re: Ардуино - запись звука
нельзя ли использвоать в качестве wifi модуля esp-01?
Добавлено after 1 minute 44 seconds:
но как я пониммаю что если скорость сериала маленькая , а wifi esp-01 будет подключено через сериал то опять те же грабли с недостаточной пропускной способностью сериала. Правильно понимаю?
Добавлено after 9 minutes 38 seconds:
здесь человек решает как принять и озвучить по UART звук 8кгц 16бит . Меня кстати, 8 кгц тоже устраивает, вполне разборчиво.
Добавлено after 18 seconds:
https://www.cyberforum.ru/csharp-net/thread2377310.html
Добавлено after 1 minute 44 seconds:
но как я пониммаю что если скорость сериала маленькая , а wifi esp-01 будет подключено через сериал то опять те же грабли с недостаточной пропускной способностью сериала. Правильно понимаю?
Добавлено after 9 minutes 38 seconds:
здесь человек решает как принять и озвучить по UART звук 8кгц 16бит . Меня кстати, 8 кгц тоже устраивает, вполне разборчиво.
Добавлено after 18 seconds:
https://www.cyberforum.ru/csharp-net/thread2377310.html
Re: Ардуино - запись звука
теоретически... можно))olegue писал(а):нельзя ли использвоать в качестве wifi модуля esp-01?
правильно))olegue писал(а):но как я пониммаю что если скорость сериала маленькая , а wifi esp-01 будет подключено через сериал то опять те же грабли с недостаточной пропускной способностью сериала. Правильно понимаю?
esp-01 собран на базе ESP8266..
в инете много статей по esp-01
https://3d-diy.ru/wiki/arduino-moduli/w ... ul-esp-01/
по умолчанию esp-01 работает по сериал 9600
но в настройках (через АТ-команды) можно менять скорость... плоть до 115200... кажись... не помню)) надо смотреть инструкцию...
в инете много инструкций к esp-01...
https://www.cyberforum.ru/csharp-net/thread2377310.html
да... можно передавать звук по сериалу на ПК... через COM...
но для этого надо написать программу на ПК...
например для Windows (пакет .NET) есть есть класс SerialPort.
проблема в том что я не пишу в .NET )) я пишу в Java.
в Java тоже есть класс... но не с завода... а самодельный )) кем то написанная библиотека...
проблема в том что я не пользуюсь сериалом)) у меня всё заточено под Интернет.
Последний раз редактировалось roman.com Вт ноя 01, 2022 18:44:31, всего редактировалось 1 раз.
Re: Ардуино - запись звука
только вот что-то я не догоняю где я компе приму данные переданные через wifi?
Добавлено after 1 minute 36 seconds:
там же , в сериале, так что ли?
Добавлено after 1 minute 36 seconds:
там же , в сериале, так что ли?
Re: Ардуино - запись звука
1.
подключаем Wi-Fi модуль к Ардуино по сериал. всё управление Wi-Fi модулем и передача данных (звука) идёт по сериал.
2.
Wi-Fi модуль подключается к ПК...
-если в ПК есть встроенный Wi-Fi (в любом ноутбуке есть Wi-Fi) то подключаемся напрямую к ПК...
-если в ПК нет встроенный Wi-Fi (ПК) то подключаемся к ПК через Wi-Fi роутер...
3.
https://www.radiokot.ru/forum/viewtopic ... 7&start=42
-например в обычном браузере...
https://www.radiokot.ru/forum/download/ ... ?id=386448
-или в обычном плеере...
https://www.radiokot.ru/forum/download/ ... ?id=386473
-или самодельной программе...
https://radiokot.ru/forum/download/file.php?id=376916
...
и т.д.

подключаем Wi-Fi модуль к Ардуино по сериал. всё управление Wi-Fi модулем и передача данных (звука) идёт по сериал.
2.
Wi-Fi модуль подключается к ПК...
-если в ПК есть встроенный Wi-Fi (в любом ноутбуке есть Wi-Fi) то подключаемся напрямую к ПК...
-если в ПК нет встроенный Wi-Fi (ПК) то подключаемся к ПК через Wi-Fi роутер...
3.
принимать данные на компе можно с помощью любой программы...olegue писал(а):где я компе приму данные переданные через wifi?
https://www.radiokot.ru/forum/viewtopic ... 7&start=42
-например в обычном браузере...
https://www.radiokot.ru/forum/download/ ... ?id=386448
-или в обычном плеере...
https://www.radiokot.ru/forum/download/ ... ?id=386473
-или самодельной программе...
https://radiokot.ru/forum/download/file.php?id=376916
...
и т.д.
Re: Ардуино - запись звука
ничего не понимаю
допустим связка Атмега(Ардуина)+esp01 по UART.
на еsp01 по UART данные я отпавил допустим, не раз это делал. А как эти данные теперь отправить на комп.
С датчиков , например температуры, я отправлял данные посредством http запросов например на сервер, там же их и принимал.
А теперь когда у меня поток байт идет как его отправить на сервер. http уже не годится. Значит надо как-то сразу напрямую в порт
допустим связка Атмега(Ардуина)+esp01 по UART.
на еsp01 по UART данные я отпавил допустим, не раз это делал. А как эти данные теперь отправить на комп.
С датчиков , например температуры, я отправлял данные посредством http запросов например на сервер, там же их и принимал.
А теперь когда у меня поток байт идет как его отправить на сервер. http уже не годится. Значит надо как-то сразу напрямую в порт
Re: Ардуино - запись звука
во-первых скорость...
поэтому я давно уже отказался от сериала и перешёл на SPI !!!
у меня всё работает по SPI... радио... интернет... экраны... и т.д.
https://www.radiokot.ru/forum/download/ ... ?id=356834
поэтому у меня нет никаких проблем со скоростью))
в ардуино SPI работает на скорости 4 Мбит/с (при удвоенной скорости 8 Мбит/с) !!!
советую тебе тоже переходить на SPI ))
во-вторых...
например так:
1- делаем свой сервер Атмега(Ардуина)+esp01 по UART.
2- подключаемся к своему серверу обычным браузером... или плеером... и слушаем музыку))
наш самодельный сервер Атмега(Ардуина)+esp01 по UART... будет работать точно так же как обычный сервер в интернете.
другой вариант (как думаю я):
1- Атмега(Ардуина)+W5500 по SPI... просто передаёт данные на комп...
2- комп просто принимает данные и воспроизводит звук))
для этого у меня есть самодельная программа.))
только с Ардуино принимать звук я не пробовал... принимал только разные данные...
надо будет попробовать принимать и звук с Ардуины))
думаю это сделать не сложно... Главное что скорость SPI это позволяет))

нормальные Wi-Fi модули тоже работают по SPI...
например ESP32 работают по SPI... до 80 Мбит/с !!! ... кажись)) точно не помню... надо уточнить))
знаю что к ESP32 по SPI можно подключить всё что угодно))
экран... по SPI... до 10 Мбит/с флешки по SPI... до 10 Мбит/с радио... по SPI... до 10 Мбит/с и даже камеры)) ...
короче всё что угодно... по SPI... работает намного быстрее))

обычно Ардуино работает по сериалу максимум 115200... что явно мало))olegue писал(а):wifi esp-01 будет подключено через сериал то опять те же грабли с недостаточной пропускной способностью сериала. Правильно понимаю?
поэтому я давно уже отказался от сериала и перешёл на SPI !!!
у меня всё работает по SPI... радио... интернет... экраны... и т.д.
https://www.radiokot.ru/forum/download/ ... ?id=356834
поэтому у меня нет никаких проблем со скоростью))
в ардуино SPI работает на скорости 4 Мбит/с (при удвоенной скорости 8 Мбит/с) !!!
советую тебе тоже переходить на SPI ))
во-вторых...
тут вариантов много...))olegue писал(а):допустим связка Атмега(Ардуина)+esp01 по UART.
на еsp01 по UART данные я отпавил допустим, не раз это делал. А как эти данные теперь отправить на комп.
например так:
1- делаем свой сервер Атмега(Ардуина)+esp01 по UART.
2- подключаемся к своему серверу обычным браузером... или плеером... и слушаем музыку))
наш самодельный сервер Атмега(Ардуина)+esp01 по UART... будет работать точно так же как обычный сервер в интернете.
другой вариант (как думаю я):
1- Атмега(Ардуина)+W5500 по SPI... просто передаёт данные на комп...
2- комп просто принимает данные и воспроизводит звук))
для этого у меня есть самодельная программа.))
только с Ардуино принимать звук я не пробовал... принимал только разные данные...
надо будет попробовать принимать и звук с Ардуины))
думаю это сделать не сложно... Главное что скорость SPI это позволяет))
нормальные Wi-Fi модули тоже работают по SPI...
например ESP32 работают по SPI... до 80 Мбит/с !!! ... кажись)) точно не помню... надо уточнить))
знаю что к ESP32 по SPI можно подключить всё что угодно))
экран... по SPI... до 10 Мбит/с флешки по SPI... до 10 Мбит/с радио... по SPI... до 10 Мбит/с и даже камеры)) ...
короче всё что угодно... по SPI... работает намного быстрее))
Re: Ардуино - запись звука
я к сожалению , не знаком с этим способом приема данныхroman.com писал(а):2- комп просто принимает данные и воспроизводит звук))
давайте поподробнее.
Re: Ардуино - запись звука
Ок. Разбираюсь.
Хотел бы вернутся к старому Uart. что если меня устроит, скажем даже не 8 кгц, а 6 или даже 5кгц. Реально ли что бы передать такой звук на скорости 115200?
Хотел бы вернутся к старому Uart. что если меня устроит, скажем даже не 8 кгц, а 6 или даже 5кгц. Реально ли что бы передать такой звук на скорости 115200?
Re: Ардуино - запись звука
поподробнее.))
1. берём комп. 2. качаем программу "Server" 3. запускаем файл Server_TCP.jar... на экране компа появляется вот такое окно... 4. берём Атмега(Ардуина)+esp01 5. с помощью Атмега(Ардуина)+esp01 по UART подключаемся к компу...
точно так же как ты подключался и отправлял данные посредством http запросов на сервер.
Только теперь в роли сервера будет твой комп))
в настройках своей Атмега(Ардуина)+esp01 не забудь измень IP адрес сервера (куда ты раньше отправлял данные) на IP адрес своего компа )) 6. Теперь все данные что ты отправляешь с помощью Атмега(Ардуина)+esp01 по UART... теперь будут отображаться в окне твоего компа ))
всё)) вот так вот просто всё работает.
точно так же можно передавать и звук...
Программа "Server" это аналог программы "терминал" ))
Только программа "терминал" работает по сериалу...
А программа "Server" работает по Интернету...
Вот и вся разница))
Надеюсь очень подробно объяснил))
8 кгц это частота семплов. Или 8.000 байт/c.
сериал - это один байт: 1 стартовый бит + 8 бит данных + 1 стоповый бит = 10 бит.
значит минимальная скорость сериала должна быть 8.000 х 10 = 80.000 бит/с. (или 80 кбит/c)
что бы сериал нормально работал (без ошибок) скорость сериала должна быть в полтора раза (а лучше в 2 раза) больше...
т.е. 115200 пойдёт))
1. берём комп. 2. качаем программу "Server" 3. запускаем файл Server_TCP.jar... на экране компа появляется вот такое окно... 4. берём Атмега(Ардуина)+esp01 5. с помощью Атмега(Ардуина)+esp01 по UART подключаемся к компу...
точно так же как ты подключался и отправлял данные посредством http запросов на сервер.
Только теперь в роли сервера будет твой комп))
в настройках своей Атмега(Ардуина)+esp01 не забудь измень IP адрес сервера (куда ты раньше отправлял данные) на IP адрес своего компа )) 6. Теперь все данные что ты отправляешь с помощью Атмега(Ардуина)+esp01 по UART... теперь будут отображаться в окне твоего компа ))
всё)) вот так вот просто всё работает.
точно так же можно передавать и звук...
Программа "Server" это аналог программы "терминал" ))
Только программа "терминал" работает по сериалу...
А программа "Server" работает по Интернету...
Вот и вся разница))
Надеюсь очень подробно объяснил))
считаем...olegue писал(а):Хотел бы вернутся к старому Uart. что если меня устроит, скажем даже не 8 кгц, а 6 или даже 5кгц. Реально ли что бы передать такой звук на скорости 115200?
8 кгц это частота семплов. Или 8.000 байт/c.
сериал - это один байт: 1 стартовый бит + 8 бит данных + 1 стоповый бит = 10 бит.
значит минимальная скорость сериала должна быть 8.000 х 10 = 80.000 бит/с. (или 80 кбит/c)
что бы сериал нормально работал (без ошибок) скорость сериала должна быть в полтора раза (а лучше в 2 раза) больше...
т.е. 115200 пойдёт))
Re: Ардуино - запись звука
можно начать с небольших битрейтов, а потом повышать. я записал несколько образцов 5, 6, 7, 8 и даже 4. До 5 кгц вполне нормально речь разбирается, только вот это речь диктора. Где то читал , что применив специальное кодирование можно даже 2кгц разборчивый звук получить.
Re: Ардуино - запись звука
Например в телефонной связи обычно используется частота семплов 8 кГц.olegue писал(а):применив специальное кодирование можно даже 2кгц разборчивый звук получить.
Поток соответственно 8 бит ч 8 семплов = 64 кбит/c.
Голос слышно хорошо.
Не знаю что имеется видду под словом "кодирование"))
Возможно имеется ввиду "сжатие"... с помощью разных кодеков.
В цифровых рациях есть сжатие... с помощью разных кодеков.
https://www.youtube.com/watch?v=nOYVoR3B2hY
В сотовых телефонах тоже есть сжатие... с помощью разных кодеков.
https://www.youtube.com/watch?v=nOYVoR3B2hY
Везде есть сжатие... с помощью разных кодеков.))
Но это всё только чтобы уменьшить объём флешки или уменьшить скорость передачи... бит/c.
А в студиях звукозаписи сжатие не используют)) Там качество наивысшее... )) но это уже отдельный вопрос...
Re: Ардуино - запись звука
ничего не понял.roman.com писал(а):6. Теперь все данные что ты отправляешь с помощью Атмега(Ардуина)+esp01 по UART... теперь будут отображаться в окне твоего компа ))
всё)) вот так вот просто всё работает.
точно так же можно передавать и звук...
Ардуина работает с ESP по uart - это понятно и передает ей какие то данные (байты), но
но ESP Работает счас у меня с сервером по http, ,
вот:
Код: Выделить всё
HTTPClient http; //Объявить объект класса HttpClient
http.begin(client, "http://********.lh1.in/input.php");
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
String httpRequestData = "a="+String(i);
int httpCode = http.POST(httpRequestData); Роман, можно еще подробнее. Как передать байты в вашу программу server_tcp.jar. Яву поставил, программу запустил.
Re: Ардуино - запись звука
во-первых...
для начала подключись к программе "Server" с помощью браузера...
открываем любой браузер и пишем IP адрес компа (на котором работает программа "Server").
какой IP твоего компа ? IP своего компа я знаю - 192.168.0.100
поэтому я пишу в браузере IP своего компа - 192.168.0.100 и мой браузер подключился программе "Server". во-вторых...
весь код твоей программы я не видел...
но для начала в строке адреса сервера (куда ты передаёшь данные)
http.begin(client, "http://********.lh1.in/input.php");
укажи IP адрес своего компа...
какой IP твоего компа ? IP своего компа я знаю - 192.168.0.100
http.begin(client, "http://192.168.0.100"); - это IP адрес моего кома)) твой я не знаю...
для начала подключись к программе "Server" с помощью браузера...
открываем любой браузер и пишем IP адрес компа (на котором работает программа "Server").
какой IP твоего компа ? IP своего компа я знаю - 192.168.0.100
поэтому я пишу в браузере IP своего компа - 192.168.0.100 и мой браузер подключился программе "Server". во-вторых...
весь код твоей программы я не видел...
но для начала в строке адреса сервера (куда ты передаёшь данные)
http.begin(client, "http://********.lh1.in/input.php");
укажи IP адрес своего компа...
какой IP твоего компа ? IP своего компа я знаю - 192.168.0.100
http.begin(client, "http://192.168.0.100"); - это IP адрес моего кома)) твой я не знаю...


