FRDM-RW612 门铃演示,带有 Wi-Fi 上的 MQTT 和 I2S 音频输出
本演示展示了如何使用 RW612-FRDM 开发板实现无线门铃。
门铃通过 Wi-Fi 和 MQTT 应用协议进行控制。门铃声音数据通过 RW612-FRDM Arduino 接口的 I2S 引脚传输。需要外部编解码器和放大器才能在外部扬声器上播放声音。
主板:FRDM-RW612
类别:音频、网络、实时操作系统 (RTOS)、无线连接
外设:I2S
工具链:MCUXpresso IDE
目录
1.软件
- MCUXpresso IDE v11.7.1
- FRDM-RW612 SDK(SDK2160FRDM-RW612)
- 通过 Wi-Fi 和 MQTT 的 FRDM-RW612 门铃演示项目
2.硬件
带 I2S 接口/放大器的扬声器
扬声器
音箱配置:
将扬声器的正极和负极插入 I2S Amp(ADAFRUIT MAX98357A)的 + 和 - 输出
ADAFRUIT MAX98357A
MAX98357A配置:
增益引脚可以保持未连接状态以获得 9dB 的默认增益,请参阅数据表以了解不同的增益配置
Wi-Fi 接入点和 MQTT 服务器。此演示默认连接到开放的 MQTT 代理“HiveMQ”,但用户可以使用 Raspberry PI 3B+ 配置自己的接入点和 MQTT 代理。您可以按照以下指南进行操作:
Wi-Fi 接入点和 MQTT 服务器设置指南
FRDM RW612 开发板
3. 设置
带有 I2S 接口/放大器的扬声器:
- 将扬声器板的 Vin 引脚连接到接头 J3 的引脚 10(5V)
- 将扬声器板的 GND 引脚连接到接头 J3 的引脚 12(GND)
- SD 引脚可以保持未连接状态
- 增益引脚可以保持悬空
- 将扬声器板的 Din 引脚连接到接头 J1 的引脚 2
- 将扬声器板的 BCLK 引脚连接到接头 J2 的 12 号引脚
- 将扬声器板的 LRC 引脚连接到接头 J1 的引脚 4
闪存 Wi-Fi 固件
除非擦除,否则必须烧录一次 Wi-Fi 固件。固件存储在指定地址。请确保在运行任何 Wi-Fi 演示应用程序之前,已烧录 Wi-Fi 固件。
在 Windows 上打开 J-Link 命令器,并使用 uUSB 线缆连接主机 PC 和 RW61x 开发板的 MCU-link 端口。J-Link 命令器是J-Link 软件和文档包的一部分。J ?-Link 工具 V7.92c 版本已添加对 RW61x 的支持?。
J-Link>con
Device>RW612
TIF>
SSpeed><Enter>
您可以在 FRDMRW612SDK 中找到 Wi-Fi 安全固件二进制文件。请使用MCUXpresso SDK Builder下载(请查看本文档第 1 部分“SW”以确认 SDK 版本)。解压 SDK 文件,并在SDKxxxxxxFRDM-RW612/components/connfwloader/fwbin/rw61xwrawcpu1a2.bin中找到 Wi-Fi 固件。
这是将 Wi-Fi 安全固件加载到 RW61x 闪存中的 J-Link 指令。
J-Link>loadbin rw61xw_raw_cpu1_a2.bin,0x08400000
J-Flash Lite 工具也可以用于此目的:
Wi-Fi 接入点和 MQTT 代理
可以在wifi_mqtt.c中的定义部分配置演示的 Wi-Fi 凭证、用户和密码。
```c
ifndef AP_SSID
define APSSID "mynetwork"
endif
ifndef AP_PASSWORD
define APPASSWORD "mypassword"
endif
define WIFINETWORKLABEL "my_wifi"
```
可以在mqtt_freertos.c中的定义部分配置演示的 MQTT 代理地址/URL 和端口号。
```c
/*! @brief MQTT server host name or IP address. */
ifndef EXAMPLEMQTTSERVER_HOST
define EXAMPLEMQTTSERVER_HOST "broker.hivemq.com"
endif
/*! @brief MQTT server port number. */
ifndef EXAMPLEMQTTSERVER_PORT
define EXAMPLEMQTTSERVER_PORT 1883
```
使用默认配置,开发板会通过已配置的 Wi-Fi 网络连接到 HievMQ 代理,但您也可以在基于 Raspberry PI 的自定义接入点中使用其他代理。Raspberry PI 的设置说明可在此处找到。
要连接到基于自定义 Raspberry PI 的代理,您需要将mqtt_freertos.c中的以下行替换为 Raspberry PI 中设置的接入点的 IP(请注意,以下 IPv4 地址只是一个示例)。
```c
define EXAMPLEMQTTSERVER_HOST "10.2.14.25"
```
如何运行:
- 将项目导入 MCUXpresso IDE(检查本文档的第 1 部分SW以确认所使用的 MCUXpresso IDE 版本)并使用按钮进行构建
。
- 使用调试器按钮
来刷新应用程序。
- 使用 Windows 的设备管理器,查找为 FRDM-RW612 板中嵌入的 MCULink 创建的 COM 端口,并以 115200 kbps、1 个停止位、无奇偶校验打开串行终端。(可选)
- 运行演示。
- 连接电路板时门铃响起
- 使用 MQTT 应用程序或脚本发布到rw612/doorbell/sound主题。
- 每次发布主题时都会播放门铃的声音。
测试 Python 脚本
这里有一份 Python 脚本可以用来测试门铃。脚本可以在scripts文件夹中找到。
- doorbell_pub.py - 此脚本连接到 MQTT 代理并发布到门铃/声音。
这些脚本需要 Paho-mqtt。以下步骤是在 Raspberry PI 中安装 Paho-mqtt。
```shell
$ sudo apt install python3-paho-mqtt
Run the publisher test script
$ python ./doorbell_pub.py
```
4.结果
一旦应用程序在 FRDM 上运行,串行终端上就会出现一条消息,其中包含有关网络和连接状态的信息,一旦成功连接,您就可以通过 IoT MQTT Panel 应用程序发布消息,您的手机必须连接到同一网络才能发布消息
[i] 成功初始化 Wi-Fi 模块 [i] 作为客户端连接到 ssid:piap,密码为 austin00 PKG_TYPE:BGA 设置 BGA tx 功率表数据 [i] 已连接到 Wi-Fi - ssid:piap 密码:austin00
IPv4 地址:10.42.0.21 IPv4 子网掩码:255.255.255.0 IPv4 网关:10.42.0.1
正在连接到 10.42.0.1 的 MQTT 代理... MQTT 客户端“nxp_cc44fb9c3138f7a14c8dcfc5098e3e31”已连接。正在订阅主题“rw612/doorbell/#”,QoS 级别为 1... 播放 已订阅主题“rw612/doorbell/#”。
使用APP发布
按照MqttAppSetup.md指南中的说明进行设置并使用智能手机应用程序将 MQTT 消息发送到 RW612 板。
24 位音频流
本演示通过 I2S 在 FRDM-RW612 和 I2S 扬声器之间传输 24 位音频。由于本演示使用 DMA,因此样本需要填充至 32 位。例如,像这样的 24 位样本:[0xaa, 0xbf, 0xfe] 需要在末尾添加一个额外的字节 0,如下所示:[0xaa, 0xbf, 0xfe, 0x00]。
内存使用情况(发布配置-Os)
| 内存区域 | 使用尺寸 | 区域大小 | 使用百分比 |
| ------------------------------ | ---------------- | -------------- | ------------ |
| QSPI_闪存: | 1,630,675 字节 | 8 MB | 19.44% |
| 静态随机存取存储器(SRAM): | 271,652 字节 | 1,216 千字节 | 21.82% |
门铃声音数组长度为 1,150,624 字节
当通过应用程序成功发布后,扬声器将播放门铃声,并且 FRDM 将在其串行端口输出以下消息:
Received 4 bytes from the topic "rw612/doorbell/sound": "Play
play"
5. 常见问题解答
尚未发现针对该项目的常见问题解答。
6. 支持
项目元数据
有关此示例的内容/正确性的问题可以作为此 GitHub 存储库中的问题输入。
来源:恩智浦appcodehub
760
