【XR806开发板试用】+ 通过网络控制led并上报按键状态

通过网络控制led并上报按键状态

本次做一个手机通过mqtt服务器控制板子上的LED亮灭,板子也可以将按钮状态变化通过mqtt服务器上报给手机的功能
硬件上,从原理图看,LED接到了PA21,高电平点亮。
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第1张图片

按键则时接到了PA11,并接了一个上拉电阻。
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第2张图片

因此,设计上就可以通过按键上升沿中断,作为按键按下一次的事件,然后本地取反一次LED灯,并publish灯的状态给手机端,同时,会subscribe订阅灯的状态,接收手机端publish过来的LED控制数据。而手机端则可以publish控制数据,其中0作为关灯,发送1作为开灯,同时也subscribe订阅板子publish上来的LED状态数据。
Mqtt的服务器使用自行搭建的emqx broker
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第3张图片

下面就开始整代码。首先拷贝mqtt demo代码默认配置
cp project/demo/hello_demo/gcc/defconfig .config
然后先make build_clean将之前的代码清掉
然后使用vim打开mqtt的main.c代码

先定义LED和key的io引脚
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第4张图片

再进行引脚的初始化,初始化中进行了LED亮灭2次闪烁,表示初始化成功。定义按键引脚为上升沿中断,中断中取反LED的亮灭状态,并更新led_state的值。
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第5张图片

然后在main函数中调用初始化。
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第6张图片

下面进行mqtt服务器相关参数的配置,如下,这里定义了两个topic,分别是MQTT_DEMO_TOPIC和MQTT_DEMO_PUB_TOPIC,前者订阅LED的状态,以控制LED的亮灭,后者则可上报按钮状态。HOST_NAME为mqtt服务器主机的ip地址或者域名

【XR806开发板试用】+ 通过网络控制led并上报按键状态_第7张图片

初始化 mqtt
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第8张图片

Mqtt连接
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第9张图片

订阅以及订阅的消息回调,其中在消息回调中,判断接收到的消息是字符0还是字符1,并进行响应的LED亮灭操作。

发布则是进行对应主题的发布操作
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第10张图片

接下去就是mqtt主处理功能函数,其中主要是维持mqtt连接,并根据本地的按键控制的LED状态是否改变,决定是否publish上报改状态
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第11张图片

最后就是主函数初始化硬件、功能和网络,并启动mqtt主进程了。

编译,下载运行
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第12张图片

使用mobaxterm打开端口终端,可以看到如下打印信息
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第13张图片

Wlan的wifi ssid和password是通过命令行command line的方式进行配置的

【XR806开发板试用】+ 通过网络控制led并上报按键状态_第14张图片

我们需要使用的主要是上面的三条,分别是
配置ssid:net ap set ssid ssid_example
配置password:net ap set psk psk_example
使能启动连接:net ap enable
连接wifi并成功连接mqtt服务器
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第15张图片

此时mqtt broker服务器上也就能看到开发板设备连接上了

【XR806开发板试用】+ 通过网络控制led并上报按键状态_第16张图片

打开手机的MQTTool工具app(iPhone)
点击connect
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第17张图片

就可以在emqx上看到对应的手机设备连接了

【XR806开发板试用】+ 通过网络控制led并上报按键状态_第18张图片

App切换到subscribe选项卡,输入 KEY/STATE 订阅主题,并点击Subscribe订阅该主题
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第19张图片

轻按开发板上的按钮,可以看到板载的LED亮灭切换

同时串口终端中输出对应的信息
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第20张图片

而在手机端的app上,切换到subscr选项卡,就可以看到每按一次按键,开发板publish发不上来的消息了
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第21张图片

再切换到Publish选项卡,输入 LED/STATE 内容作为publish发布的主题
此时在Message框中输入1,并点击publish,就可以看到灯亮起

【XR806开发板试用】+ 通过网络控制led并上报按键状态_第22张图片

【XR806开发板试用】+ 通过网络控制led并上报按键状态_第23张图片

而输入0并点击publish发布,则看到灯灭

【XR806开发板试用】+ 通过网络控制led并上报按键状态_第24张图片

同时,开发板在收到上述的两次publish主题消息之后,还会在串口终端上打印如下内容。
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第25张图片

在emqx上可以看到完整的主题
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第26张图片

以及订阅方了
【XR806开发板试用】+ 通过网络控制led并上报按键状态_第27张图片

至此,小制作实现了LED和按钮的功能,并通过mqtt,实现手机与板子之间的状态上报和控制信息下行。

你可能感兴趣的:(开发板测评,网络)