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

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

本次做一个手机通过mqtt服务器控制板子上的LED亮灭,板子也可以将按钮状态变化通过mqtt服务器上报给手机的功能
硬件上,从原理图看,LED接到了PA21,高电平点亮。
在这里插入图片描述

按键则时接到了PA11,并接了一个上拉电阻。
在这里插入图片描述

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

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

先定义LED和key的io引脚
在这里插入图片描述

再进行引脚的初始化,初始化中进行了LED亮灭2次闪烁,表示初始化成功。定义按键引脚为上升沿中断,中断中取反LED的亮灭状态,并更新led_state的值。
在这里插入图片描述

然后在main函数中调用初始化。
在这里插入图片描述

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

在这里插入图片描述

初始化 mqtt
在这里插入图片描述

Mqtt连接
在这里插入图片描述

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

发布则是进行对应主题的发布操作
在这里插入图片描述

接下去就是mqtt主处理功能函数,其中主要是维持mqtt连接,并根据本地的按键控制的LED状态是否改变,决定是否publish上报改状态
在这里插入图片描述

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

编译,下载运行
在这里插入图片描述

使用mobaxterm打开端口终端,可以看到如下打印信息
在这里插入图片描述

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

在这里插入图片描述

我们需要使用的主要是上面的三条,分别是
配置ssid:net ap set ssid ssid_example
配置password:net ap set psk psk_example
使能启动连接:net ap enable
连接wifi并成功连接mqtt服务器

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

在这里插入图片描述

打开手机的MQTTool工具app(iPhone)
点击connect
在这里插入图片描述

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

在这里插入图片描述

App切换到subscribe选项卡,输入 KEY/STATE 订阅主题,并点击Subscribe订阅该主题
在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

同时串口终端中输出对应的信息
在这里插入图片描述

而在手机端的app上,切换到subscr选项卡,就可以看到每按一次按键,开发板publish发不上来的消息了
在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

同时,开发板在收到上述的两次publish主题消息之后,还会在串口终端上打印如下内容。
在这里插入图片描述

在emqx上可以看到完整的主题
在这里插入图片描述

以及订阅方了
在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/223138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 事件和委托的区别

这里在类中定义了一个委托和一个事件 public class MyTimerClass {// 事件public event EventHandler MyEvent;// 委托public delegate void Mydel();public Mydel mydel;public MyTimerClass(){MyEvent MyTimerClass_MyEvent;mydel new Mydel(MydelMethod);}private void M…

显示当前目录的路径

pwd 当然,当在多处列出各个目录的内容时,可能会搞不清楚到底自己处于文件系统的哪个位置上。如何判断自己当前位于哪个工作目录呢?答案就是pwd命令,它代表print working directory(打印工作目录)。 说明 …

GitHub帐户管理更改电子邮件

登录到您的 GitHub 帐户: 前往 GitHub 网站并使用您的凭据登录。 访问个人设置: 单击右上角的您的头像,然后选择“Settings”(设置)。 选择电子邮件选项卡: 在左侧边栏中选择“Emails”(电子邮…

gradle-5.4.1-all下载时出现了Connect timed out

问题描述:最近在学习如何在手机端部署YOLO,出现了许多错误,其中之一的错误:gradle-5.4.1-all下载时出现了Connect timed out,大家都知道这是从国外网站下载网络问题导致的。 解决办法: 在我们创建项目中的一个路径下…

【深度学习】强化学习(三)强化学习的目标函数

文章目录 一、强化学习问题1、交互的对象2、强化学习的基本要素3、策略(Policy)4、马尔可夫决策过程5、强化学习的目标函数1. 总回报(Return)2. 折扣回报(Discounted Return)a. 折扣率b. 折扣回报的定义 3.…

钉钉机器人发送表格

背景: 由于每次发送excel连接,不太好看,想着简单的表格直接用消息的方式发送在群里,就想着弄一个直接发送的表格信息,但是钉钉官网是没有的。 我估计钉钉的开发人员也没有想过,会有人钻空子,用markdown发送…

三维成像激光雷达标定板可应用于各种领域

激光雷达技术是一种现代光学遥感技术,是传统雷达技术与现代激光技术相结合的产物,是以激光束作为信息载体,可以用振幅、相位、频率和偏振来搭载信息的雷达。 多线激光雷达则是通过多光束形成扫描平面,通过一维旋转机构实现四周的扫…

MySQL——数据类型

目录 一.数据类型分类 二. 数值类型 1.tinyint类型 2.bit类型 3.float类型 4.decimal 三.字符串类型 1.char 2.varchar 四.日期和时间类型 五.enum和set 一.数据类型分类 关于数据库的数据类型有非常多,但是并非所有的数据类型都是我们常用的&#xff…

Java 实现汉字转拼音带音调

代码 import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; import net.sourcefo…

【亲测】获取百度智能云access_token并存储,百度智能云access_token有效期

百度智能云服务内置很多api接口(文字识别,企业信息识别,等),所有百度智能云自带的接口都会用到百度的access_token 第一步:登录百度智能云管理中心 第二步:创建账户,完整身份认证 …

Stm32最小系统板电路设计

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:…

鸿蒙OS应用开发之登录界面

在前面学习了输入文本组件和按钮组件,可以使用这两种组件来实现一些常用的功能,比如登录界面,这种界面是每个程序员经常会到遇到的,比如让用户输入用户名称和密码。 在这里我们就来实现如下面的界面: 在上面界面里,第一个文本框用来输入用户名称,第二个用来输入用户密码…

【CAN】在linux中读取监听控制器局域网CAN数据帧操作 (二) 之 C++代码实现

可以使用 SocketCAN 接口库来实现对 can0 接口的数据帧读取&#xff0c;使用 SocketCAN 接口&#xff0c;将其绑定到 can0 接口&#xff0c;并循环读取接收到的 CAN 数据帧。 #include <iostream> #include <cstring> #include <unistd.h> #include <net…

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻

我的博客即将同步至腾讯云开发者社区&#xff0c;邀请大家一同入驻&#xff1a;https://cloud.tencent.com/developer/support-plan?invite_code654o7zhrylh8

TypeScript基础知识

目录 关键字 JavaScript关键字 TypeScript关键字 TypeScript 基础类型 声明变量 声明变量的方式 变量命名规则 变量作用域 TypeScript 运算符 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 三元运算符 类型运算符 关键字 JavaScript关键字 abstract …

2023西工大NOJ (C语言版) 持续更新ing

目前更新到70题&#xff01; 目前WA&#xff1a;飞机起飞速度&#xff1b;字符串替换&#xff1b;GPS通信协议。 前言 代码均可AC&#xff0c;解析参见我的博客 NOJ(C)易错总结 (annesede.github.io)。&#xff08;已更新到70题&#xff01;&#xff09; 部分题目由于过于简…

python玩具电商销售数据可视化和商品推荐系统设计与实现(django框架)

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

老杨说运维 | 年末大盘点!擎创CEO实时盘点运维大干货,不容错过

2023年即将走到尾声&#xff0c;对于擎创而言&#xff0c;这一年是颇具成长和成就的一年。我们庆幸获得了更多客户的信任&#xff0c;也为他们达到下一个运维阶段提供了充足的助力。 越多的实践就会带来越多新的理解和可优化的经验。这一年来&#xff0c;擎创在运维数据治理、智…

docker搭建maven私库Nexus3

什么是Maven私服&#xff1f; Maven 私服是一种特殊的Maven远程仓库&#xff0c;它是架设在局域网内的仓库服务&#xff0c;用来代理位于外部的远程仓库&#xff08;中央仓库、其他远程公共仓库&#xff09;。 当然也并不是说私服只能建立在局域网&#xff0c;也有很多公司会…

唯创知音WTN6xxx-8S语音芯片:精准内部震荡与无需外部震荡的优势及应用

在当前的集成电路市场中&#xff0c;唯创知音推出的WTN6xxx-8S语音芯片以其独特的优势和应用领域&#xff0c;吸引了众多工程师和设计师的关注。这款语音芯片不仅具有精准的/-1%内部震荡&#xff0c;还消除了对外部震荡器的需求&#xff0c;从而在语音处理和控制方面达到了新的…