Ардуино - запись звука

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 6337
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

[uquote="roman.com",url="/forum/viewtopic.php?p=4316677#p4316677"]там ошибка преобразования совсем маленькая... а значит качество звука вообще супер))
:music:[/uquote]
...особенно если писалось не с МД-47 :) :(
Изображение
Реклама
Друг Кота
Сообщения: 9405
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

[uquote="olegue",url="/forum/viewtopic.php?p=4315222#p4315222"]счас в наличии нету Ethernet, заказывать надо.[/uquote]


у меня щас такой
https://www.radiokot.ru/forum/download/ ... ?id=385239
я его немножко переделал)) сделал POE (5V, 2А)... намотал трансформаторы...
https://www.radiokot.ru/forum/download/ ... ?id=385605
и в роутер тоже...
https://www.radiokot.ru/forum/download/ ... ?id=385205
https://www.radiokot.ru/forum/download/ ... ?id=385206
теперь всё питается от роутера))
https://www.radiokot.ru/forum/download/ ... ?id=385606
и не нужно больше тащить отдельно провода питания))
:tea:
а лучше спаять самому)) так прикольней))
такой я уже делал... работает))
https://radiokot.ru/forum/download/file.php?id=386422
передавать с помощью 1 и 0... не очень интересно...
надо добавить ещё деталек)) чтоб передавать байты...
и такой тоже делал... работает))
https://radiokot.ru/forum/download/file.php?id=386424
только слишком много получилось деталек))
:roll:
надо переделать по другой схеме...
щас работаем над этим...
:roll:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

Итак, за последние дни, я настроил передачу и прием пакетов UDP соответственно с модуля Sim800 на компьютер. Заминка была в том тчо пришло настроить во первых проброс портов за НАТ, ну и открыть их в роуторе в обе стороны в firewall. Но это уже в прошлом.

Когда стал гонять пакеты понял, что UDP это та еще специфика.

Код: Выделить всё

for(int i=0;i<10;i++){  // Конструкция «3 в одном»
  myGsm.println("AT+CIPSEND");delay(100);//printSerialData();
  myGsm.println(String(i)+"1HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,20HELLO");
  myGsm.write(0x1A); //0x1A
  //if (i==255){i=0;   }
  //printSerialData();
  Serial.println(i);



}
тут отправляю нумерованные пакет , принимаются через один, даже несмотря на то что делаю паузу 100мс
не знаю пока, может есть какой то более быстрый способ отправки, но пока знаю только

Код: Выделить всё

AT+CIPSEND
этот.

Понятно, что это для меня довольно существенно продживение к цель. А цель - либо на компе услышать звук, ли бо на ардуине с Sim800.
Понял уже что без буферизации тут никак. Отправлять байты с частотой сэплрейта и потом на другом конце сразу отправлять их в Шим не получится. Наверно такое бы прокатило в случает wifi. Вероятно , с него и надо было бы начинать если по уму делать.

Еще узнал что есть такое как MTU, то.е от сети зависит сколько я в пакет могу запихнуть байт, у меня выдало 1490 , в принципе не плохо. В секунду мне желательно отдать 8кб. Т.е я могу отдавать каждые 100мс по 800байт. Правильно ли я рассуждаю?
AT+CIPSEND? // Проверяем максимальный размерданных, которые можно послать в сторону удаленнойстороны. Этот размер зависит от сети;
+CIPSEND: 1460
Добавлено after 1 hour 16 minutes 11 seconds:
Взял другую прогу для приема пакетов , была Packet Sender, Взял Tcp-Bilder. Сделал пакеты по 979 байт (так получилось). Пакеты идут ровно , потерь нету. Задержку менжду передачами поставил 100мс. Счас попробую умень шать задержку. Посмтрю как пойдет.
Друг Кота
Сообщения: 9405
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

без понятия как работает Sim800 ))

MTU - размер пакета (байт).

мы передаём по UDP.
UDP: MIN=18 байт; MAX=1472 байт.
olegue писал(а):Т.е я могу отдавать каждые 100мс по 800байт. Правильно ли я рассуждаю?
заводской скайп передаёт каждые 20мс или ~50 пакетов/с.
сколько байт в пакете ? по разному... )) в среднем ~200 байт в пакете.
https://radiokot.ru/forum/download/file.php?id=386559
Работают кодеки сжатия звука))

самодельный скайп передаёт каждые 178мс или ~5...6 пакетов/с.
сколько байт в пакете ? всегда 1424 байт в пакете.
https://radiokot.ru/forum/download/file.php?id=386571
НЕ работают кодеки сжатия звука))

Добавлено after 12 minutes:
[uquote="olegue",url="/forum/viewtopic.php?p=4317560#p4317560"]Понял уже что без буферизации тут никак. Отправлять байты с частотой сэплрейта и потом на другом конце сразу отправлять их в Шим не получится. Наверно такое бы прокатило в случает wifi. Вероятно , с него и надо было бы начинать если по уму делать.[/uquote]
зависит от программы... и модуля...
:roll:
во всех устройствах (радио... изернет... комп... роутер... и т.д.) есть буфера...

пока звук от микрофона дойдёт до динамика... он пройдёт кучу буферов))

например в изернет модуле я думаю можно отравлять по одному байту... сразу в буфер модуля...
у изернет модуля буфер по умолчанию 2048 байт))
а када буфер изернет модуля заполнится (UDP: MAX=1472 байт) отправит команду SEND.

1,2,3,4,5,6,7...1472 байт.
SEND
1,2,3,4,5,6,7...1472 байт.
SEND
1,2,3,4,5,6,7...1472 байт.
SEND

вопрос - успеет ли изернет модуль передать буфер до прихода следующего байта ?
надо смотреть тайминги... можно в протеусе))
но скорее всего придётся делать буфер и в ардуине тоже...
:tea:

я предполагаю что Sim800 работает так же как изернет модуль... у неё тоже есть свой буфер... и в него можно тоже слать по одному байту...
а может в Sim800 всё вообще не так)) я без понятия)) надо качать даташит...

формат пакета UDP:
заводской скайп
1.
30 байт (точно не помню надо смотреть анализатор) - это заголовок пакета.
в заголовке пакета содержится служебная информация... типа номер клиента... режим работы.. и т.д.
2.
далее сами данные.
https://radiokot.ru/forum/download/file.php?id=386559
Работают кодеки сжатия звука))

самодельный скайп
1.
48 байт - это заголовок пакета.
в заголовке пакета содержится служебная информация... типа номер клиента... режим работы.. и т.д.
2.
далее сами данные.
https://radiokot.ru/forum/download/file.php?id=386571
НЕ работают кодеки сжатия звука))
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

roman.com писал(а):например в изернет модуле я думаю можно отравлять по одному байту... сразу в буфер модуля...
у изернет модуля буфер по умолчанию 2048 байт))
а када буфер изернет модуля заполнится (UDP: MAX=1472 байт) отправит команду SEND.
так это круто, просто отправлять данные в буфер а модуль будет все сам разруливать.
Может и в sim800 такое возможно???

Я в цикле отправляю udp пакеты на sim800 и в сериале вижу что пакеты все отправлены, но на приемнике вижу что пакеты приходят через один. Наверно что то делаю не так. Надо разбираться.
Идеально , конечно, если модуль сам бы определял размер МТУ и склдывал байты в пакеты допустимой величины.

Добавлено after 44 seconds:
Я еще не пробовал прием покет через sim800. Там наверно тоже какието нюансы будут.
Реклама
Друг Кота
Сообщения: 9405
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

olegue писал(а):так это круто, просто отправлять данные в буфер а модуль будет все сам разруливать.
Может и в sim800 такое возможно???
думаю в sim800 тоже такое возможно...

к примеру када делали управление...
https://www.radiokot.ru/forum/viewtopic ... 8&t=185219
мы использовали радио модули...
модули.jpg
(11.97 КБ) 39 скачиваний
у этих модулей 3 штуки буфера по 32 байт каждый...

1. мы делали буфер в ардуино. И писали данные в буфер ардуино.
2. передавали буфер из ардуино во внутренний буфер модуля.
3. передавали команду SEND радио модулю
4. после получения команды SEND радио модуль передавал в эфир данные из своего внутреннего буфера.
схема_1.jpg
(31.92 КБ) 42 скачивания
а можно по другому...

1. можно писать данные сразу во внутренний буфер модуля... по одному байту.
2. передаём команду SEND радио модулю
3. после получения команды SEND радио модуль передаёт в эфир данные из своего внутреннего буфера.
схема_2.jpg
(38.55 КБ) 66 скачиваний
радио модуль работает и так и так... ему без разницы))
Последний раз редактировалось roman.com Чт ноя 10, 2022 12:21:38, всего редактировалось 1 раз.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

Код: Выделить всё

void loop()
{
for(int i=0;i<256;i++){  // 
myGsm.println("AT+CIPQSEND");delay(10); //printSerialData();  
myGsm.println("AT+CIPSEND");delay(50);  //printSerialData();
  //myGsm.println(i);
   //myGsm.println(String(i));
  // 981 байт
  myGsm.println(String(i)+
  "1HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,20HELLO"+
  "1HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,20HELLO"+
  "1HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,20HELLO"+
  "1HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,20HELLO"+
  "1HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,20HELLO"+
  "1HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,20HELLO"+
  "1HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,20HELLO"+
  "1HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,HELLO,20HELLO");
  
  myGsm.write(0x1A); //0x1A
 
 if (i==255){i=0;}

}

}
тепреь пакеты идут отлично без пропуском

как можно измерить реальную скорость?
ТСП билдер конечно показывает сколько принято, но мне кажется это не точно
Друг Кота
Сообщения: 9405
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

[uquote="olegue",url="/forum/viewtopic.php?p=4317800#p4317800"]как можно измерить реальную скорость?
ТСП билдер конечно показывает сколько принято, но мне кажется это не точно[/uquote]
что такое ТСП билдер... я не знаю))
а реальную скорость можно посмотреть в анализаторе трафика на компе...
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

Код: Выделить всё

myGsm.println("AT+CIPQSEND");delay(10); //printSerialData();  
в режиме быстрой отправки нужно было задержку небольшую поставить.
Друг Кота
Сообщения: 9405
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

у изернет модуля 8 штук буферов... каждый по 2048 байт...
буфер.jpg
(35.59 КБ) 50 скачиваний
можно писать данные сразу в буфер изернет модуля...
када буфер заполниться - оправить команду SEND
после получения команды SEND изернет модуль передаст данные из буфера по интернету...
всё просто))
:tea:
на первый взгляд))
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

как в WireShark наложить фильтр на конкретный порт. Например сделать фильтр по udp, port=4210?


Где посмотреть скорость приема пакетов?
Последний раз редактировалось olegue Чт ноя 10, 2022 14:12:06, всего редактировалось 1 раз.
Друг Кота
Сообщения: 9405
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

udp - фильтр по udp

udp.port == 4210 - фильтр по udp, port=4210

udp.srcport == 4210 - фильтр по udp, port (отправителя)=4210

udp.dstport == 4210 - фильтр по udp, port (получателя)=4210

udp.srcport == 4210 && - udp.dstport == 4210 - фильтр по udp, port (отправителя)=4210 и фильтр по udp, port (получателя)=4210
анализатор.jpg
(55.38 КБ) 38 скачиваний
...
и т.д.

я всех фильтров не знаю)) их очень много))
https://habr.com/ru/post/436226/
[uquote="olegue",url="/forum/viewtopic.php?p=4317815#p4317815"]Где посмотреть скорость приема пакетов?[/uquote]
посчитай количество пакетов в секунду... и умнож на количество байт в пакете)))
1.jpg
(62.15 КБ) 47 скачиваний
MAC адрес своего роутера не пали)) а то тебя быстро найдут))
https://3wifi.stascorp.com/map
Последний раз редактировалось roman.com Чт ноя 10, 2022 14:40:37, всего редактировалось 1 раз.
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

roman.com писал(а):MAC адрес своего роутера ....))
https://3wifi.stascorp.com/map
хотел посмотреть себя там, но нужна регистрация по приглашению
к тому же я - неуловимый Джо!
Нашел такую штуку

Изображение

а что значитт "показано"?
Друг Кота
Сообщения: 9405
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

Что значит ?
а фиг его знает))
там столько настроек... что можно неделю сидеть разбираться))

для примерной оценки скорости хватит и просто посчитать пакеты... и умножить на байты))

к примеру када делали управление...
https://www.radiokot.ru/forum/download/ ... ?id=315796
https://www.radiokot.ru/forum/download/ ... ?id=315797
мы использовали изернет модули...
изернет.jpg
(29.5 КБ) 38 скачиваний
у этих модулей 8 штуки буфера по 2048 байт каждый...
https://radiokot.ru/forum/download/file.php?id=386846

1. мы делали буфер в ардуино. И писали данные в буфер ардуино.
2. передавали буфер из ардуино во внутренний буфер изернет модуля.
3. передавали команду SEND изернет модулю
4. после получения команды SEND изернет модуль передавал в интернет данные из своего внутреннего буфера.
схема_1.jpg
(42.26 КБ) 33 скачивания
а можно по другому...

1. можно писать данные сразу во внутренний буфер изернет модуля... по одному байту.
2. передаём команду SEND изернет модулю
3. после получения команды SEND изернет модуль передаёт в интернет данные из своего внутреннего буфера.
схема_2.jpg
(49.32 КБ) 38 скачиваний
изернет модуль работает и так и так... ему без разницы))
:tea:
[uquote="olegue",url="/forum/viewtopic.php?p=4317854#p4317854"]я - неуловимый Джо![/uquote]
на изернет переходи...
карты точек доступа изернет не существует))
:tea:

изернет модули работают по SPI со скорость более 10000000 бит/c.
в ардуино скорость SPI 8000000 бит/c.
можно передавать звук в высоком качестве...
44100 семплов * 16 бит = 705600 бит/c.
:music:

а... не... тебе это не подходит... ))
ты любитель сериалов)) с максимальной скоростью 115200 бит/c.
ну тогда максимум что ты можешь передать
8000 семплов * 8 бит = 64000 бит/c.
:dont_know:

sim800 модули...
у этих модулей буфер... неизвестно )) надо качать даташит и смотреть...
:tea:
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

я имею в виде транспорта лишь gprs modem.

думал, мои мучения закончатся и пакеты без проблем пойдут на sim800. да не тут то было. Пакеты на sim800 не хотят идти, и даже между разными операторами не ходят. Странно

Ладно. Оставлю это пока

Вопрос такой, как поднять udp server на windows. Задача минимум сохранять сырые байты в файл.

Добавлено after 7 minutes 36 seconds:
нарыл вот такой код

Код: Выделить всё

public class EchoServer extends Thread {

    private DatagramSocket socket;
    private boolean running;
    private byte[] buf = new byte[256];

    public EchoServer() {
        socket = new DatagramSocket(4445);
    }

    public void run() {
        running = true;

        while (running) {
            DatagramPacket packet 
              = new DatagramPacket(buf, buf.length);
            socket.receive(packet);
            
            InetAddress address = packet.getAddress();
            int port = packet.getPort();
            packet = new DatagramPacket(buf, buf.length, address, port);
            String received 
              = new String(packet.getData(), 0, packet.getLength());
            
            if (received.equals("end")) {
                running = false;
                continue;
            }
            socket.send(packet);
        }
        socket.close();
    }
}
отсюда

https://www.baeldung.com/udp-in-java

но пока не знаю как его применить.
Друг Кота
Сообщения: 9405
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

[uquote="olegue",url="/forum/viewtopic.php?p=4318155#p4318155"]Вопрос такой, как поднять udp server на windows. Задача минимум сохранять сырые байты в файл.[/uquote]
ну давай напишем... делов то))
[uquote="olegue",url="/forum/viewtopic.php?p=4318155#p4318155"]нарыл вот такой код[/uquote]
плохой код))
надо писать свой...
Последний раз редактировалось roman.com Пт ноя 11, 2022 14:22:22, всего редактировалось 1 раз.
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

Изображение

поставил я эту шляпу. Все по инструкции.

hello world!

Добавлено after 3 minutes 3 seconds:
Но если вкидываю туда код ,что выше запостил, то все в красных крестах.
Друг Кота
Сообщения: 9405
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

ура ! )) заработало ! :)))
Последний раз редактировалось roman.com Сб ноя 12, 2022 00:56:19, всего редактировалось 1 раз.
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

код я конечно, запустил, но как этот сервис остановить?
Сам по себе порт не освободиться, нужно комп перезагружать?
Друг Кота
Сообщения: 9405
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

как этот сервис остановить?
вверху кнопочка RUN
внизу кнопочка STOP

не понял... зачем порт освобождать ?
запустили Java... Java слушает порт... всё что прилетает в порт - Java выводит в консоль... или в окно... или отправляет обратно... или ещё миллион вариантов))

зачем порт освобождать ?))
1- можно остановить Java...
2- можно отправить на порт команду "порт закройся !" ))
3- можно включить таймер...
...
ещё миллион вариантов))

добавим окно...
Udp.txt
(7.82 КБ) 35 скачиваний
фишка недели - автоответчик ))
Udp.txt
(9.25 КБ) 42 скачивания
Ответить

Вернуться в «AVR»