项目描述
这个项目使用的板卡是FRDM-MCXN947。将板卡通过网线与路由器连接,实现网络数据传输。电脑作为上位机,可以获取到板卡上的温度,触摸和按键信息,并可以通过电脑控制板卡上的RGB LED灯。
软件流程图及各功能对应的主要代码片段及说明
FRDM-MCXN947板卡上集成了多个传感器,有触摸传感器,按键和温度传感器。其中温度传感器使用的是P3T1755,这个传感器与FRDM-MCXN947之间使用了I3C的方式进行通信。项目里我会将板卡通过网线连接到路由器,并通过MQTT协议将上述三个传感器的数据发送出来,用电脑作为另一个MQTT客户端去接收这些数据。同时,板上还有一颗LED,可以作为执行器使用,让电脑通过MQTT来控制这颗LED灯珠。MQTT 服务器架设在一台树莓派zero 2w上。
这个项目中对FRDM-MCXN947的开发我使用了官方的MCUXpresso IDE来完成。官方准备了非常多的示例程序。这个项目参考的示例程序如下:
MQTT使用:lwip_mqtt_freertos
温度传感器:i3c_master_read_sensor_p3t1755
触摸传感器:tsi_v6_self_cap
LED使用:gpio_led_output
项目是基于lwip_mqtt_freertos这个例程来修改的,在上面补充了传感器的读取及LED控制部分的代码。在修改代码前,首先需要修改一下项目包含的component,选中我们要修改的项目,然后点击上面的这个按钮:
接着在打开的窗口中,在Drivers-Device-SDK Drivers选项下新增勾选GPIO,I3C和TSI_V6,主要负责GPIO输入输出,温度传感器和触摸传感器的驱动。
另外,还需要在Board Components-Device-SDK Drivers下勾选p3t1755。这是温度传感器的驱动程序:
接下来,需要去修改一下引脚配置,点击下图这个按钮可以进去配置界面:
在这里需要增加板载传感器所需的引脚,最终的配置如下,增加部分里的B12和C14分别用作LED和按钮,D3,F4,F6用作和温度传感器通信的I3C接口,下面的B4用作触摸传感器。修改完成后点击上面的更新源代码,就可以完成配置。
由于这个项目使用的是freertos,因此我们的新增代码并不放在lwip_mqtt_freertos.c里的main函数中,而是放到mqtt_freertos.c中。增添完代码的完整mqtt_freertos.c,使用的话记得要修改一开始的ip,这个ip是MQTT服务器的地址。
#define EXAMPLE_MQTT_SERVER_HOST "192.168.x.x"
PC上我使用python写了一个上位机程序,基于Qt6和Paho MQTT实现,同样的,需要在运行前修改MQTT服务器地址。当然,也可以不做Hard Code默认值,而是在使用中手动填入也可以。代码如下:
server_info = {
"Server_Address": "192.168.x.x",
"Server_Port": "1883",
"Username": "",
"Password": ""
}
最后说一下MQTT服务器的搭建,在树莓派上使用apt指令安装mosquitto,然后修改配置文件/etc/mosquitto/mosquitto.conf为以下内容,重启就可以了。
listener 1883
allow_anonymous true
功能展示及说明
运行FRDM-MCXN947上的代码,然后用串口监视器连接,就可以看到以下内容打印出来。
运行电脑上的python代码,跳出如下窗口。不需要填入任何内容,只需要点击连接,就会以我们hard code的默认参数进行连接。接着就可以在下面读取出传感器信息来,也可以通过按钮来开关板子上的LED灯。
对本活动的心得体会
这次活动让我使用到了最新的恩智浦开发板,性能强大,也也能支持多种运用。如果开发环境可以支持更加友好的arduino,想必可以更快的得到更广泛的应用。