Обсуждаем контроллеры компании Atmel.
Ответить

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

Вт ноя 08, 2022 18:24:38

там ошибка преобразования совсем маленькая... а значит качество звука вообще супер))
:music:

...особенно если писалось не с МД-47 :) :(

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

Ср ноя 09, 2022 01:33:42

счас в наличии нету Ethernet, заказывать надо.



у меня щас такой
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:
а лучше спаять самому)) так прикольней))
такой я уже делал... работает))
download/file.php?id=386422
передавать с помощью 1 и 0... не очень интересно...
надо добавить ещё деталек)) чтоб передавать байты...
и такой тоже делал... работает))
download/file.php?id=386424
только слишком много получилось деталек))
:roll:
надо переделать по другой схеме...
щас работаем над этим...
:roll:

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

Ср ноя 09, 2022 23:04:11

Итак, за последние дни, я настроил передачу и прием пакетов 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мс. Счас попробую умень шать задержку. Посмтрю как пойдет.

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

Чт ноя 10, 2022 00:14:56

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

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

мы передаём по UDP.
UDP: MIN=18 байт; MAX=1472 байт.
olegue писал(а):Т.е я могу отдавать каждые 100мс по 800байт. Правильно ли я рассуждаю?

заводской скайп передаёт каждые 20мс или ~50 пакетов/с.
сколько байт в пакете ? по разному... )) в среднем ~200 байт в пакете.
download/file.php?id=386559
Работают кодеки сжатия звука))

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

Добавлено after 12 minutes:
Понял уже что без буферизации тут никак. Отправлять байты с частотой сэплрейта и потом на другом конце сразу отправлять их в Шим не получится. Наверно такое бы прокатило в случает wifi. Вероятно , с него и надо было бы начинать если по уму делать.

зависит от программы... и модуля...
: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.
далее сами данные.
download/file.php?id=386559
Работают кодеки сжатия звука))

самодельный скайп
1.
48 байт - это заголовок пакета.
в заголовке пакета содержится служебная информация... типа номер клиента... режим работы.. и т.д.
2.
далее сами данные.
download/file.php?id=386571
НЕ работают кодеки сжатия звука))

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

Чт ноя 10, 2022 11:05:43

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


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

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

Добавлено after 44 seconds:
Я еще не пробовал прием покет через sim800. Там наверно тоже какието нюансы будут.

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

Чт ноя 10, 2022 12:00:50

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

думаю в sim800 тоже такое возможно...

к примеру када делали управление...
https://www.radiokot.ru/forum/viewtopic ... 8&t=185219
мы использовали радио модули...
модули.jpg
(11.97 KiB) Скачиваний: 25

у этих модулей 3 штуки буфера по 32 байт каждый...

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

а можно по другому...

1. можно писать данные сразу во внутренний буфер модуля... по одному байту.
2. передаём команду SEND радио модулю
3. после получения команды SEND радио модуль передаёт в эфир данные из своего внутреннего буфера.
схема_2.jpg
(38.55 KiB) Скачиваний: 36

радио модуль работает и так и так... ему без разницы))
Последний раз редактировалось roman.com Чт ноя 10, 2022 12:21:38, всего редактировалось 1 раз.

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

Чт ноя 10, 2022 12:18:00

Код:
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;}

}

}


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

как можно измерить реальную скорость?
ТСП билдер конечно показывает сколько принято, но мне кажется это не точно

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

Чт ноя 10, 2022 12:23:42

как можно измерить реальную скорость?
ТСП билдер конечно показывает сколько принято, но мне кажется это не точно

что такое ТСП билдер... я не знаю))
а реальную скорость можно посмотреть в анализаторе трафика на компе...

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

Чт ноя 10, 2022 12:25:00

Код:
myGsm.println("AT+CIPQSEND");delay(10); //printSerialData(); 


в режиме быстрой отправки нужно было задержку небольшую поставить.

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

Чт ноя 10, 2022 12:30:57

у изернет модуля 8 штук буферов... каждый по 2048 байт...
буфер.jpg
(35.59 KiB) Скачиваний: 28

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

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

Чт ноя 10, 2022 13:13:48

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


Где посмотреть скорость приема пакетов?
Последний раз редактировалось olegue Чт ноя 10, 2022 14:12:06, всего редактировалось 1 раз.

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

Чт ноя 10, 2022 14:19:02

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 KiB) Скачиваний: 27

...
и т.д.

я всех фильтров не знаю)) их очень много))
https://habr.com/ru/post/436226/
Где посмотреть скорость приема пакетов?

посчитай количество пакетов в секунду... и умнож на количество байт в пакете)))
1.jpg
(62.15 KiB) Скачиваний: 26


MAC адрес своего роутера не пали)) а то тебя быстро найдут))
https://3wifi.stascorp.com/map
Последний раз редактировалось roman.com Чт ноя 10, 2022 14:40:37, всего редактировалось 1 раз.

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

Чт ноя 10, 2022 14:29:33

roman.com писал(а):MAC адрес своего роутера ....))
https://3wifi.stascorp.com/map


хотел посмотреть себя там, но нужна регистрация по приглашению
к тому же я - неуловимый Джо!
Нашел такую штуку

Изображение

а что значитт "показано"?

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

Чт ноя 10, 2022 16:01:52

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

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

к примеру када делали управление...
https://www.radiokot.ru/forum/download/ ... ?id=315796
https://www.radiokot.ru/forum/download/ ... ?id=315797
мы использовали изернет модули...
изернет.jpg
(29.5 KiB) Скачиваний: 22

у этих модулей 8 штуки буфера по 2048 байт каждый...
download/file.php?id=386846

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

а можно по другому...

1. можно писать данные сразу во внутренний буфер изернет модуля... по одному байту.
2. передаём команду SEND изернет модулю
3. после получения команды SEND изернет модуль передаёт в интернет данные из своего внутреннего буфера.
схема_2.jpg
(49.32 KiB) Скачиваний: 19

изернет модуль работает и так и так... ему без разницы))
:tea:
я - неуловимый Джо!

на изернет переходи...
карты точек доступа изернет не существует))
:tea:

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

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

sim800 модули...
у этих модулей буфер... неизвестно )) надо качать даташит и смотреть...
:tea:

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

Пт ноя 11, 2022 00:17:36

я имею в виде транспорта лишь 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

но пока не знаю как его применить.

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

Пт ноя 11, 2022 13:40:31

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

ну давай напишем... делов то))
нарыл вот такой код

плохой код))
надо писать свой...
Последний раз редактировалось roman.com Пт ноя 11, 2022 14:22:22, всего редактировалось 1 раз.

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

Пт ноя 11, 2022 14:06:50

Изображение

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

hello world!

Добавлено after 3 minutes 3 seconds:
Но если вкидываю туда код ,что выше запостил, то все в красных крестах.

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

Пт ноя 11, 2022 17:16:48

ура ! )) заработало ! :)))
Последний раз редактировалось roman.com Сб ноя 12, 2022 00:56:19, всего редактировалось 1 раз.

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

Пт ноя 11, 2022 23:35:40

код я конечно, запустил, но как этот сервис остановить?
Сам по себе порт не освободиться, нужно комп перезагружать?

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

Пт ноя 11, 2022 23:46:31

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

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

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

добавим окно...
Udp.txt
(7.82 KiB) Скачиваний: 22

фишка недели - автоответчик ))
Udp.txt
(9.25 KiB) Скачиваний: 25
Ответить