导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

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

    Wireless & Analog Series
    1
    1
    910
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • T
      Tristan_C LV 4 最后由 编辑

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

      本次做一个手机通过mqtt服务器控制板子上的LED亮灭,板子也可以将按钮状态变化通过mqtt服务器上报给手机的功能
      硬件上,从原理图看,LED接到了PA21,高电平点亮。
      f8d503a6-686e-4602-a189-3496ecc6bfc1-image.png
      按键则时接到了PA11,并接了一个上拉电阻。
      f2487c6b-be8f-4acb-a54d-7613947bed84-image.png

      因此,设计上就可以通过按键上升沿中断,作为按键按下一次的事件,然后本地取反一次LED灯,并publish灯的状态给手机端,同时,会subscribe订阅灯的状态,接收手机端publish过来的LED控制数据。而手机端则可以publish控制数据,其中0作为关灯,发送1作为开灯,同时也subscribe订阅板子publish上来的LED状态数据。
      Mqtt的服务器使用自行搭建的emqx broker
      da08c02b-0346-47b8-9a19-3c32880519a1-image.png

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

      先定义LED和key的io引脚
      5245cc42-30f4-42a9-a174-005e85c54a38-image.png

      再进行引脚的初始化,初始化中进行了LED亮灭2次闪烁,表示初始化成功。定义按键引脚为上升沿中断,中断中取反LED的亮灭状态,并更新led_state的值。
      abce267f-2a73-4e65-ba27-0a8b33c239a5-image.png

      然后在main函数中调用初始化。
      55d0793c-993c-44f1-b193-18f16f6aacaa-image.png

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

      68186bbf-995e-43a6-8da1-2994a8aeae5f-image.png

      初始化 mqtt
      08b2d8bc-f84b-449e-adfd-beb85a8ffce9-image.png

      Mqtt连接
      49eed009-e8e7-4648-a9bd-1dbef1e45b9a-image.png

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

      发布则是进行对应主题的发布操作
      aaa6e02a-7fef-4022-a640-0b9cb60189f7-image.png

      接下去就是mqtt主处理功能函数,其中主要是维持mqtt连接,并根据本地的按键控制的LED状态是否改变,决定是否publish上报改状态
      7cfee316-0457-4f83-9336-b8bcd398205a-image.png

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

      编译,下载运行
      2f317d2d-6516-4540-a256-5a94ec8aec26-image.png

      使用mobaxterm打开端口终端,可以看到如下打印信息
      ee303a86-845c-4d2e-8f82-e2e06f344a5f-image.png

      Wlan的wifi ssid和password是通过命令行command line的方式进行配置的
      3a22b0ae-56eb-40fa-b4cd-d5a1522f2118-image.png

      6b4939c6-97b0-4385-af3e-5721a913bba3-image.png

      我们需要使用的主要是上面的三条,分别是
      配置ssid:net ap set ssid ssid_example
      配置password:net ap set psk psk_example
      使能启动连接:net ap enable
      连接wifi并成功连接mqtt服务器
      afce1e47-d3d8-4adb-8d1c-0236f5493a6b-image.png

      此时mqtt broker服务器上也就能看到开发板设备连接上了
      4355e358-fdb3-4834-859d-1ac264e10300-image.png

      打开手机的MQTTool工具app(iPhone)
      点击connect
      e54a4924-2ac3-4025-9daa-47681778bff4-image.png

      就可以在emqx上看到对应的手机设备连接了
      88c869f7-3f05-4e31-9c7a-410120176728-image.png

      App切换到subscribe选项卡,输入 KEY/STATE 订阅主题,并点击Subscribe订阅该主题
      d8008a53-f707-41fe-91bf-3ba14f0c9cfb-image.png

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

      99c08f60-4d6b-45ef-8f3a-68f807233ada-image.png
      e8acb4c9-dcc8-48bb-8051-24b5fe2690a6-image.png

      同时串口终端中输出对应的信息
      51f78850-0f49-425a-8489-f953aa00f6e2-image.png

      而在手机端的app上,切换到subscr选项卡,就可以看到每按一次按键,开发板publish发不上来的消息了
      c0ebc3da-e265-41cf-8033-7ea0031e8506-image.png

      再切换到Publish选项卡,输入 LED/STATE 内容作为publish发布的主题
      此时在Message框中输入1,并点击publish,就可以看到灯亮起
      33c1d4a0-1e42-4fcd-89ff-dce5a6c59613-image.png
      796436a9-f84a-4d97-9000-b48f022a867f-image.png

      而输入0并点击publish发布,则看到灯灭
      598a96d5-643f-4c14-8e08-f8634dde7ab2-image.png

      1520055a-594e-4095-8282-487227d67cd7-image.png

      同时,开发板在收到上述的两次publish主题消息之后,还会在串口终端上打印如下内容。
      b700fb68-a653-482d-b5b3-caba3e2e728d-image.png

      在emqx上可以看到完整的主题
      6aa49719-40f3-491d-9d1f-05ac189b0512-image.png

      以及订阅方了
      966ef631-0b1d-4192-ade7-f2262b4e03f6-image.png

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

      1 条回复 最后回复 回复 引用 分享 1
      • 1 / 1
      • First post
        Last post

      Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

      行为准则 | 用户协议 | 隐私权政策