0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

说明

这节测试一下STM32+CH395Q连接MQTT服务器

测试的是连接我的服务器,用户可以根据后面的教程搭建自己的MQTT服务器.

测试

1.使用网线连接路由器或者交换机

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

2.编译下载这节的程序到开发板

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

3.使用单片机串口1打印串口日志(115200)

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

4.正常运行情况下日志会打印

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

5.使用MQTT上位机测试通信

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

6.开发板订阅和发布的主题使用的CH395的MAC地址

设备订阅的主题是: user/MAC地址

设备发布的主题是: device/MAC地址

日志上会打印设备的MAC地址

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

调试助手上填写

发布的主题填写: user/mac地址

订阅的主题填写: device/mac地址

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

然后点击连接, 再点击订阅

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

每隔一段时间会收到设备的数据(设备采集的温湿度数据)

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

7.使用调试助手发送消息

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

程序说明

1.关于主要的几个文件说明(后面章节有详细的移植使用说明,用户前期只需要了解即可)

tcp_mqtt文件是处理TCP连接通信和MQTT连接通信的文件;

mqtt文件夹: MQTT协议处理文件,使用环形队列式缓存管理,支持消息等级0,1,2

tcp_client1文件是tcp客户端连接通信程序.

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

2, 设置CH395工作在SPI模式

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

3, 初始化CH395

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

4, CH395的各种事件在这个函数里面执行

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

5.MQTT本身就是TCP服务器,所以先连接TCP服务器

设置要连接的服务器的地址和端口号

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

咱连接的地址tcp_mqtt_ip有可能是域名也可能是ip, 使用ch395_strip_tempip函数来处理一下;

如果是ip字符串则会把地址解析到 mqtt_ip_addr 数组,

如果是域名, 则启动DNS解析下域名, 也把地址解析到 mqtt_ip_addr 数组,

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

下面就是连接TCP服务器

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

6,接着是MQTT连接通信, MQTT封装成了回调函数的形式

咱一开始的时候已经初始化了

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

7.连接成功TCP以后,发送MQTT连接协议

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

8.发送连接协议给服务器以后,服务器会返回连接状态数据

把服务器返回的数据让mqtt_function_connect_ack 函数处理

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

在连接回调函数里面订阅主题和设置发布的主题

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

9.只要是连接上了MQTT服务器,咱后续可以在任意的地方调用订阅主题 mqtt_subscribe 或者发布消息 mqtt_publish 函数

所有的消息都会打包为MQTT协议以后存储到内部缓存里面,然后轮训发送出去

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

10.接收消息和发送消息

连接MQTT成功以后收到的服务器发送的数据需要让 mqtt_read_function函数处理, 该函数内部会处理消息并调用相应的回调函数

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

结语

这节测试了基本的MQTT远程通信,在后面的章节中将学习到整个流程是如何实现的.

Original: https://www.cnblogs.com/yangfengwu/p/16436739.html
Author: 杨奉武
Title: 0-STM32G070+CH395Q基本控制篇(自建物联网平台)-整体运行测试-STM32+CH395Q连接MQTT服务器

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/539808/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • SpringBoot集成Mybatis-puls

    application.properties方式: application.yml方式: id类型:(可在实体类用注解@TableId(value=”id”…

    Java 2023年6月7日
    054
  • Filter 过滤器

    什么是Filter过滤器? 1、Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器2、F…

    Java 2023年6月15日
    087
  • 利用rabbitmq异步实现来提升程序处理性能

    近期交易系统出款交易量猛增,从skywalking监控平台查看服务的调用链路(Trace),发现在调用外部三方http接口会耗时将近一半。鉴于出款交易在业务上是异步处理的,所以,商…

    Java 2023年6月15日
    057
  • Jmix 中 REST API 的两种实现

    你知道吗,在 Jmix 中,REST API 有两种实现方式! 很多应用是采取前后端分离的方式进行开发。这种模式下,对前端的选择相对灵活,可以根据团队的擅长技能选择流行的 Angu…

    Java 2023年6月15日
    073
  • Java基础知识25–ThreadLocal使用详解

    1.ThreadLocal简介 多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外…

    Java 2023年5月29日
    0172
  • idea打包java可执行jar包

    1,在项目上鼠标右键 –> Open Module Settings 2, Artifacts –> + –> JAR &#8…

    Java 2023年5月29日
    081
  • java字符串

    字符串不是java主要的数据类型,而是java标准库中的一个String类。每一个用双引號引起来的字符串就是String类的一个实例。如: String name&#xFF…

    Java 2023年5月29日
    089
  • SpringCloud 使用 Feign各 种报错

    由于只想在SpringBoot中使用一下Feign客户端,来访问第三方请求,但因为各种版本问题,一直报各种乱七八糟的错 pom文件 <span class="hlj…

    Java 2023年6月7日
    081
  • 简述一条更新语句的执行过程

    更新语句(增删改)的执行,基本流程和查询一致,也要经过连接器、分析器、优化器、执行器等功能模块,区别就在于拿到符合条件的数据之后的操作。 执行器先通过存储引擎获取需要修改的数据。如…

    Java 2023年6月5日
    049
  • 抽象类

    抽象类 当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法,这个方法就是抽象方法,用abstract来修饰该类就是抽象类。 * 即:父类方法不确定性的问题 * =…

    Java 2023年6月5日
    085
  • 基于Socket实现多人聊天室

    1 package com.example.demo.socket; 2 3 import org.springframework.util.ObjectUtils; 4 5 im…

    Java 2023年6月6日
    091
  • C语言输出九九乘法表

    C语言学了有一阵子了,趁着假期没事练练手,没想到挺简单 基本思路是这样的 先写一个主函数,然后定义两个变量i1和i2;使用for语句循环嵌套,外层循环负责写循环9次,内循环里面写从…

    Java 2023年6月9日
    0115
  • LeetCode随缘刷题之最长回文子串

    这一题我用的相对比较笨的方法。相对于大佬们用的动态规划法,比较复杂。但却更容易理解,我主要是通过记录下标来确定最长回文串的。 package leetcode.day_12_06;…

    Java 2023年6月7日
    076
  • 23 种设计模式的通俗解释,虽然有点污,但是很正点

    01 工厂方法 追 MM 少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是 MM 爱吃的东西,虽然口味有所不同,但不管你带 MM 去麦当劳或肯德基,只管向服务员说「来四个鸡翅」就行了…

    Java 2023年6月13日
    062
  • Linux机器自建账号并赋予sudo权限,同时修改远程端口

    默认使用root账号来操作Linux有一定风险,因此需要自建账号并赋予sudo权限,方便使用 登录为root用户后,创建账号 adduser <username>&lt…

    Java 2023年6月14日
    091
  • Git配置用户信息和SSH免密

    一、配置用户信息 1.查看配置信息 查看所有配置 $ git config -l/–list 查看系统配置 $ git config –system -l/–list 查看用…

    Java 2023年6月8日
    083
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球