|
|
2 месяцев назад | |
|---|---|---|
| .. | ||
| audio_drv.lua | 2 месяцев назад | |
| main.lua | 2 месяцев назад | |
| readme.md | 2 месяцев назад | |
| talk.lua | 2 месяцев назад | |
1、main.lua:程序入口,初始化 AirTalk 对讲系统
2、talk.lua:airtalk 对讲业务核心模块
3、audio_drv:音频设备初始化与控制
extalk.START -- 通话开始
extalk.STOP -- 通话结束
extalk.UNRESPONSIVE -- 对端未响应
extalk.ONE_ON_ONE -- 一对一来电
extalk.BROADCAST -- 广播
1、talk.lua 实现AirTalk对讲核心业务。
包括群组内联系人列表信息显示、对讲状态监控、音频设备控制等功能,实时显示对讲状态和设备信息。
按键处理:
(1)主动发起对讲:按一次Boot键选择指定设备,开始1对1对讲,再按一次Boot键或powerkey键结束对讲;按一次powerkey键开始一对多广播,再按一次Boot键或powerkey键结束广播。
(2)被动接听对讲:当其他设备呼叫本机时,自动接听对讲;按任意键(Boot或Power键)即可结束当前对讲。
3、audio_drv:定义所有硬件引脚常量,使用exaudio扩展库初始化音频设备。
2、main.lua 启动AirTalk对讲服务。
Air8000开发板
或者Air8000核心板+AirAUDIO_1010 音频扩展板+喇叭
2、TYPE-C USB数据线一根
3、可选AirAudio_1010 配件板一块
Air8000核心板和AirAudio_1010 配件板的硬件接线方式为:
| Air8000核心板 | AirAUDIO_1010配件板 |
|---|---|
| 22/I2S_MCLK | I2S_MCLK |
| 18/I2S_BCK | I2S_BCK |
| 19/I2S_LRCK | I2S_LRCK |
| 20/I2S_DIN | I2S_DIN |
| 21/I2S_DOUT | I2S_DOUT |
| 80/I2C0_SCL | I2C_SCL |
| 81/I2C0_SDA | I2C_SDA |
| 82/GPIO17 | PA_EN |
| 83/GPIO16 | 8311_EN |
| VDD_EXT | VCC |
| GND | GND |
2、Air8000 V2018版本固件,选择支持对讲功能的固件。不同版本区别请见https://docs.openluat.com/air8000/luatos/firmware/
3、 luatos需要的脚本和资源文件
脚本和资源文件点我浏览所有文件
准备好软件环境之后,接下来查看如何烧录项目文件到Air8000核心板中 或者查看 Air8000 产品手册 中“Air8000 整机开发板使用手册 -> 使用说明”,将本篇文章中演示使用的项目文件烧录到 Air8000 开发板中。
4、lib 脚本文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件;
1、搭建好硬件环境
2、创建群组:详情请见:Airtalk 第 5.2 章节--创建群组
3、main.lua 中,修改 PRODUCT_KEY 。
--到 iot.openluat.com 创建项目,获取正确的项目key
PRODUCT_KEY = "5544VIDOIHH9Nv8huYVyEIGT4tCvldxI"
4、talk.lua 中,修改目标设备终端ID。
-- 目标设备终端ID,修改为你想要对讲的终端ID
TARGET_DEVICE_ID = "78122397" -- 请替换为实际的目标设备终端ID
5、talk.lua 中,修改WiFi连接参数。
-- WiFi连接参数(如果需要使用WiFi联网,请取消注释use_wifi函数调用)
local WIFI_CONFIG = {
ssid = "茶室-降功耗,找合宙!", -- WiFi SSID
password = "Air123456", -- WiFi密码
}
6、audio_drv中,根据硬件环境修改pa_ctrl和dac_ctrl配置
Air8000开发板pa_ctrl和dac_ctrl配置
pa_ctrl = 162, -- 音频放大器电源控制管脚
dac_ctrl = 164, -- 音频编解码芯片电源控制管脚
Air8000核心板pa_ctrl和dac_ctrl配置
pa_ctrl = 17, -- 音频放大器电源控制管脚
dac_ctrl = 16, -- 音频编解码芯片电源控制管脚
7、Luatools烧录内核固件和修改后的demo脚本代码
8、烧录成功后,自动开机运行
luatools会打印以下日志
<<<<<<< HEAD
I/talk.lua:428 对讲模块初始化...
I/talk.lua:371 启动对讲系统...
I/talk.lua:377 LED指示灯初始化完成 - GPIO146
I/talk.lua:383 初始化音频设备...
I/audio_drv.lua:37 audio_drv 开始初始化音频设备
I2C_MasterSetup 426:I2C0, Total 65 HCNT 22 LCNT 40
D/audio codec init es8311
I/audio_drv.lua:43 audio_drv 音频设备初始化成功
I/talk.lua:388 音频初始化成功
=======
I/talk.lua:185 音频初始化成功
I/talk.lua:193 extalk初始化成功
I/extalk.lua:83 MQTT发布 - 主题: ctrl/uplink/866965083769676/0001 内容: {"key":"123","device_type":2}
I/extalk.lua:83 MQTT发布 - 主题: ctrl/uplink/866965083769676/0002 内容:
I/extalk.lua:83 MQTT发布 - 主题: ctrl/uplink/866965083769676/0002 内容:
I/talk.lua:37 联系人列表更新:
I/talk.lua:39 1. ID: 861556079986013, 名称:
I/talk.lua:39 2. ID: 74959320, 名称: 866965083769676
I/extalk.lua:462 对讲管理平台已连接
>>>>>>> 9a6fb53b485f93bba81406138cd8d957e03952b4
9、联网配置:
9.1 WiFi联网(STA模式)
luatools会打印以下日志
I/exnetif.lua:372 WiFi名称: HONOR
I/exnetif.lua:373 密码 : iot12345678
I/exnetif.lua:374 ping_ip : nil
I/exnetif.lua:387 WiFi STA初始化完成
I/exnetif.lua:64 netdrv 订阅socket连接状态变化事件 WiFi
change from 1 to 2
I/exnetif.lua:611 notify_status function
I/talk.lua:161 WiFi STA事件 CONNECTED HONOR
I/talk.lua:163 WiFi已连接,等待获取IP地址
D/airlink wifi sta上线了
D/netdrv 网卡(2)设置为UP
D/ulwip adapter 2 dhcp start netif c11169c
D/DHCP dhcp discover C8C2C68F09CE
D/ulwip 收到DHCP数据包(len=303)
D/DHCP find ip d02ba8c0 192.168.43.208
D/DHCP DHCP get ip ready
D/ulwip adapter 2 ip 192.168.43.208
D/ulwip adapter 2 mask 255.255.255.0
D/ulwip adapter 2 gateway 192.168.43.1
D/ulwip adapter 2 DNS1:192.168.43.1
D/netdrv IP_READY 2 192.168.43.208
I/talk.lua:169 IP就绪事件 192.168.43.208 2
I/talk.lua:171 IP地址已获取,网络就绪
9.2 4G蜂窝网络联网
luatools会打印以下日志
I/talk.lua:337 等待网络连接就绪...
I/talk.lua:438 talk.lua加载完成
I/talk.lua:293 主动检查网络状态...
I/talk.lua:305 当前默认网卡: 4G 适配器ID: 1
W/talk.lua:313 默认网卡未获取到有效IP地址
(等待并多次检查...)
D/mobile cid1, state0
D/mobile bearer act 0, result 0
D/mobile NETIF_LINK_ON -> IP_READY
D/mobile TIME_SYNC 0
I/talk.lua:305 当前默认网卡: 4G 适配器ID: 1
I/talk.lua:310 IP地址: 10.90.8.191 子网掩码: 255.255.255.255 网关: 0.0.0.0
I/talk.lua:354 主动检查发现网络已就绪
10、 网络就绪,对讲核心功能初始化
luatools会打印以下日志
--无论通过WiFi还是4G联网,都会触发此流程
I/talk.lua:324 初始化extalk对讲功能...
I/extalk.lua:431 设备信息 864793080177038 20250722144318A235862A2562652411
dns_run 676:mqtt.airtalk.luatos.com state 0 id 1 ipv6 0 use dns serverX, try 0
D/net adapter X connect 121.196.102.79:1883 TCP // X为网卡ID
I/talk.lua:331 extalk初始化成功
I/talk.lua:414 对讲系统准备就绪,等待按键操作...
I/extalk.lua:351 conack
I/extalk.lua:440 connected
I/extalk.lua:351 suback true
I/extalk.lua:83 MQTT发布 - 主题: ctrl/uplink/864793080177038/0001 内容: {"key":"5544VIDOIHH9Nv8huYVyEIGT4tCvldxI","device_type":1}
I/extalk.lua:351 sent 0
I/extalk.lua:351 recv ctrl/downlink/864793080177038/8001
I/extalk.lua:83 MQTT发布 - 主题: ctrl/uplink/864793080177038/0002 内容:
I/extalk.lua:351 sent 0
I/extalk.lua:351 recv ctrl/downlink/864793080177038/8002
I/talk.lua:64 联系人列表更新:
I/talk.lua:66 1. ID: 78122397, 名称: 对讲
I/talk.lua:66 2. ID: 46365487, 名称: 46365487
...
I/extalk.lua:462 对讲管理平台已连接
11、点击BOOT 按键,会选择指定IMEI的目标设备,进行一对一对讲,再按一次Boot键或powerkey键结束对讲。
- 按下Boot键,启动一对一对讲流程
- 向指定IMEI设备(终端ID:78122397)发起对讲请求
- 通过MQTT向服务器发送一对一对讲请求,包含音频通道信息
- 进入一对一对讲模式
- 对讲连接建立成功,开始语音传输
- 系统状态更新为对讲中
- 再次按Boot或powerkey键,主动结束对讲
luatools会打印以下日志
lua I/talk.lua:136 boot_key_callback I/talk.lua:217 开始一对一对讲,目标设备: 78122397 I/extalk.lua:555 向 78122397 主动发起对讲 I/extalk.lua:83 MQTT发布 - 主题: ctrl/uplink/864793080177038/0003 内容: {"type":"one-on-one","topic":"audio\/864793080177038\/78122397\/6818"} I/extalk.lua:351 recv ctrl/downlink/864793080177038/8003 I/extalk.lua:131 对讲模式 0 I/talk.lua:80 对讲开始 I/talk.lua:119 当前对讲状态: 正在对讲 // ... 音频设备切换、RTP流同步等底层日志 // 用户按键结束对讲 I/talk.lua:136 boot_key_callback //或 I/talk.lua:142 power_key_callback I/talk.lua:202 结束当前对讲 I/extalk.lua:583 主动断开对讲 I/extalk.lua:83 MQTT发布 - 主题: ctrl/uplink/864793080177038/0004 内容: {"to":"78122397"} I/extalk.lua:351 recv ctrl/downlink/864793080177038/8004 I/talk.lua:60 对讲结束
12、 点击POWERKEY按键,会进行广播,所有群组内的人,都会收到对讲消息,再按一次Boot键或powerkey键结束广播。
- 按下Power键,启动广播对讲
- 通过MQTT向服务器发送广播请求,音频通道主题包含"all"标识
- 对讲模式1,进入广播对讲模式
- 广播连接建立成功,开始向所有设备广播
- 系统状态更新为对讲中
- 再次按Boot或powerkey键,结束广播对讲
luatools会打印以下日志
lua I/talk.lua:142 power_key_callback I/talk.lua:210 开始一对多广播 I/extalk.lua:83 MQTT发布 - 主题: ctrl/uplink/864793080177038/0003 内容: {"type":"broadcast","topic":"audio\/864793080177038\/all\/8618"} I/extalk.lua:351 recv ctrl/downlink/864793080177038/8003 I/extalk.lua:131 对讲模式 1 I/talk.lua:80 对讲开始 I/talk.lua:119 当前对讲状态: 正在对讲 // ... 音频设备切换等底层日志 // 用户按键结束广播 I/talk.lua:136 boot_key_callback I/talk.lua:202 结束当前对讲 I/extalk.lua:583 主动断开对讲 I/extalk.lua:83 MQTT发布 - 主题: ctrl/uplink/864793080177038/0004 内容: {"to":"all"} I/extalk.lua:351 recv ctrl/downlink/864793080177038/8004 I/talk.lua:60 对讲结束 //或状态变为空闲
13、当其他设备或手机/PC的web网页端对设备发起一对一对讲。
- 收到其他设备的对讲呼叫请求,系统自动接听对讲(无需用户按键操作)
- 进入一对一对讲模式
- 通过MQTT通知服务器接听成功
- 确认对讲开始,语音通道建立
- 系统状态更新为对讲中
- 对方结束对讲,本机对讲也随之结束
luatools会打印以下日志
lua I/extalk.lua:351 recv ctrl/downlink/864793080177038/0102 I/talk.lua:103 对讲 来电 I/talk.lua:119 当前对讲状态: 正在对讲 I/extalk.lua:131 对讲模式 0 I/extalk.lua:83 MQTT发布 - 主题: ctrl/uplink/864793080177038/8102 内容: {"result":"success","info":"","topic":"audio\/78122397\/864793080177038\/akmu"} I/talk.lua:80 对讲开始 // ... 音频设备切换、RTP流同步等底层日志 // 对方挂断,本机收到结束指令 I/extalk.lua:351 recv ctrl/downlink/864793080177038/8004 //或其他结束指令 I/talk.lua:60 对讲结束
14、当其他设备或手机/PC的web网页端对设备发起广播。
- 收到其他设备的广播邀请
- 系统自动加入广播(无需按键操作)
- 对讲模式2,进入被动接听广播模式
- 通过MQTT通知服务器加入广播成功
- 确认广播对讲开始
- 系统状态更新为对讲中
- 广播结束,本机对讲也随之结束
luatools会打印以下日志
lua I/extalk.lua:351 recv ctrl/downlink/864793080177038/0102 I/talk.lua:116 对讲 开始广播 //注意:此处指“开始接收广播” I/talk.lua:119 当前对讲状态: 正在对讲 I/extalk.lua:131 对讲模式 2 I/extalk.lua:83 MQTT发布 - 主题: ctrl/uplink/864793080177038/8102 内容: {"result":"success","info":"","topic":"audio\/78122397\/all\/yne7"} I/talk.lua:80 对讲开始 // ... 音频设备切换、RTP流同步等底层日志 // 广播结束,本机收到结束指令 I/extalk.lua:351 recv ctrl/downlink/864793080177038/8004 I/talk.lua:60 对讲结束 ```