serial MP3 player Catalex для Микротик

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

Приветствую, друзья !

Решил маленько "озвучить" Микротик используя Serial MP3/WAV Player от фирмы Catalex (разумеется его китайский клон). Это маленькое устройство, про которое я немного писал тут https://habr.com/ru/articles/776908/. Стоит на АЛИ 120-200р. К нему можно напрямую подключить наушники или колонки.
Его в принципе можно подключить к любому RB, который имеет последовательный порт или USB-порт. Я использовал возможности RBM33G с его "внутренним" serial1 портом на GPIO-разъеме. Также можно использовать USB-порт, подключив модуль Catalex через шнур-переходник serial-USB.
Само устройство имеет, повторюсь, компактные размеры. Его можно даже установить прямо на плату RBM33G (потом расскажу как) или на место PCI-e (если оно не занято, разумеется только на место, не подключая :-) к mini-PCI-e.
Дальше соединяем +5В, GND, RX и TX от GPIO разъема RBM33G и соответствующие пины модуля MP3 Player.

Модуль имеет слот для микро SD-карты до 32Gb, на которую можно записать файлы мелодий или голосовых сообщений (своим голосом или голосом любимой девушки) для озвучивания любых событий на роутере.

Фишка в том, что устройство управляется шестнадцатиричными командами (см. описание Catalex YX5300 или 6300, легко гуглится, много проектов под Ардуино)

Как же управлять им с Микротик ?

А вот -как - один из простейших вариантов - через интерфейс ppp-клиента ! В поле ppp-client modem-init= можно передать нужные данные.
Пришлось правда повозиться, так как в лоб не получилось. Были кое-какие сложности, их все удалось обойти. Всё сразу не расскажу, скорее всего опишу подробно в статье на Хабре чуть позже.

А тут приведу готовую функцию управления serial MP3 player Catalex для Микротик, которую можно просто взять и использовать из своих скриптов.
За код прошу не пинать, это "опытный образец", главное работает ! Потом поизящнее перепишу.

Итак от URRI-ресивера за 20.000 https://habr.com/ru/articles/586288/ я пришел таки к Catalex за 200 рублей ! :bra_vo:

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

#
# serial-MP3-player Catalex YX6300 FUNCTION v 1.0 Sertik 25/12/2023
# for ports serial0 or serial1 RBM33G
#

# ! the port must be freed in advance from the console, etc. and configured for an exchange rate of 9600 b/s!
# the port is set in global SMPport. If not specified, the serial1 port is set

# almost all commands without parameters, except:
# playfile [folder number] [file number], for example [$SMP playfile 01 01]
# playCycle [file number in folder] - cyclic playback of the file
# folderCycle [folder number] - cyclic playback of a folder


:global SMP do={

# check/set port
:global SMPport; :if ([:len $SMPport]=0) do={:set SMPport "serial1"}
:if (($SMPport="serial0") or ($SMPport="serial1")) do={

# convert number to code
:local fBy do={
:set $1 [:tonum $1]
  :return [[:parse "(\"\\$[:pick "0123456789ABCDEF" (($1 >> 4) & 0xF)]$[:pick "0123456789ABCDEF" ($1 & 0xF)]\")"]]
}

# some commands Catalex YX6300

:global ArrayComSMP {
   "play"="\0D"
   "pause"="\0E"
   "stop"="\16"
   "next"="\01"
   "previous"="\02"
   "volumeUP"="\04"
   "volumeDW"="\05"
   "sleep"="\0A"
   "wakeup"="\0B"
   "reset"="\0C"
   "shuffle"="\18"
   "playfile"="\0F\11"
   "volume"="\06\11"
   "playCycle"="\08\11"
   "folderCycle"="\17\11"
   "TF"="09\11"}

:local param "\11\11\11\EF"

:if ([:len $1]=0) do={:return "no set name command"}
:local cmd ($ArrayComSMP->$1)
:if ([:len $cmd]=0) do={:return "bad command"}

# command for selecting the playback source (optional)
:if ($cmd="TF") do={:set $2 02}

:put "Execute command Serial MP3 Player: $1"


# flipping parameter $2 - > $3 for commands with one parameter and calculating \byte by parameters
:local a1 $2
:local b1 $3
:if ([:len $3]=0) do={:set b1 $2; :set a1 "\11"}
:if ($a1="\11") do={} else={:set a1 [$fBy $a1]}
:set b1 [$fBy $b1]

# if the command is longer than one byte, then it needs parameters
:if ([:len $cmd]>1) do={:set param ("$a1"."$b1"."\EF")}

# remove the ppp client interface just in case it was left
:if ([/interface ppp-client find name="scripttemp"]) do={/interface ppp-client remove [/interface ppp-client find name="scripttemp"]}

# sending a command to the serial-MP3-player device via ppp-client
/interface ppp-client add name="scripttemp" dial-on-demand=no port=$SMPport modem-init=("\7E\FF\06"."$cmd"."$param") null-modem=yes disabled=no
:delay 1s
/interface ppp-client remove [/interface ppp-client find name="scripttemp"]
:return []
} else={:return "bad port in global variable SMPport: $SMPport"}

}

# Examples:

# $SMP play - start play
# $SMP stop
# $SMP volume 20 - set volume 20
# $SMP playfile 01 02 - play file 002XXX.mp3 in folder 01
На официальном форуме тоже разместил https://forum.mikrotik.com/viewtopic.php?t=202738


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Ответить