移植MQTT客户端项目Day2

昨天移植好了FreeRTOS和MQTT客户端代码,并解决了所有的编译和连接报错。今天开始写代码,写代码之前,首先要知道这个项目的功能需求和软件架构。

一.功能需求及软件架构

 1.硬件层·:PC通过串口和MCU通信(PC没有串口,要使用USB转TTL芯片做一次转换),MCU通过串口和WIFI模块通信,我使用的是安信可公司的ESP-12F开发板。MCU作为MQTT客户端需要执行connect,subscribe,publish,disconnect操作时,需要通过网络连接服务器,并发送相应的信息。这里我们使用WIFI模块和MCU相连,MCU发送AT指令给WIFI模块,WIFI模块里面集成了一块32位处理器芯片,接收到AT指令后会根据已经烧录进去的程序执行相应的操作,去连接/断开路由器热点。

2.软件层:介绍完硬件层的设计,软件层的架构就清晰多了。

Ⅰ APP:                                      connect ,subscibe, publish, disconnect

Ⅱ WIFI:                                     executive AT instruction & response

Ⅲ Hardware Abstraction Layer:send & receive

Ⅳ Hardware Driver Layer:           USART_Write & USART_Read

 我将程序分为四层,APP层主要是执行MQTTClient的代码;WIFI层则是发送及接收AT指令;硬件层分为两层,Hardware Driver Layer提供串口的读写函数用来具体完成发送及接收AT指令的任务;而Hardware Abstraction Layer的存在只是提供一个抽象的接口,这样做的目的是降低代码耦合性,假如我们要移植这份代码到另一个MCU,而这个MCU串口引脚被占用了,我们只需要新增例如I2C的驱动代码并修改抽象层的函数即可,这样就避免了发送接收AT指令和某一个具体的硬件绑死了。

二.编写USART驱动程序

1. 我们需要实现 void myUSART1_Init(void); void myUSART1_Write(uint8_t Byte); uint8_t myUSART1_Read(void); 以及相应的myUSART3的6个函数。USART1和PC通信,USART3和WIFI模块通信。示例代码:

void myUSART1_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
	
	USART_InitTypeDef USART_InitStructure;
	USART_InitStructure.USART_BaudRate = BuadRate1;
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
	USART_InitStructure.USART_Parity = USART_Parity_No;
	USART_InitStructure.USART_StopBits = USART_StopBits_1;
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
	USART_Init(USART1, &USART_InitStructure);
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 7;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_Init(&NVIC_InitStructure);
	
	USART_Cmd(USART1, ENABLE);
}

2.初始化步骤为:①打开GPIO和USART时钟;②配置GPIO;③配置USART结构体;④使能USART1的RXNEIE位,开启RXNE中断;⑤配置NVIC

3.现在的问题是:发送数据采用死等待的方式,接收数据采用中断的方式。但是假设有两个线程,发送AT指令和解析AT指令,中断函数必须要通知解析AT指令线程才能让其工作,这里涉及到线程的互斥和同步,作者现在没有想清楚,今天就到此为止吧@.@

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MQTT客户端 for Window是一种在Windows操作系统上运行的MQTT协议客户端软件。MQTT(Message Queuing Telemetry Transport)是一种轻量级的、开放的、基于发布/订阅的消息传输协议,常用于物联网(IoT)应用中。 MQTT客户端 for Window可以通过与MQTT代理服务器进行通信,实现设备之间的数据传输和通信。它具有以下特点: 1. 轻量级:MQTT协议非常轻量级,可以在带宽较低和计算能力有限的设备上运行,而不会造成过多的资源占用。 2. 简单易用:MQTT客户端 for Window提供了友好的用户界面,使用户可以方便地创建、配置和管理MQTT连接和订阅。 3. 灵活的发布/订阅模式:MQTT客户端 for Window基于发布/订阅模式,使得设备可以订阅感兴趣的主题(Topic),并接收来自其他设备或服务器的相应消息。 4. 可扩展性:MQTT客户端 for Window支持多种设备和平台,可以与各种硬件设备和操作系统兼容,具有很好的可扩展性。 5. 安全性:MQTT客户端 for Window支持MQTT协议的加密和数据传输的安全性,可以通过SSL/TLS协议进行安全通信。 总之,MQTT客户端 for Window是一种在Windows操作系统上运行的MQTT协议客户端软件,它可以帮助用户轻松实现设备之间的通信和数据传输,非常适用于物联网应用场景。 ### 回答2: MQTT客户端是一种用于连接到MQTT代理服务器的应用程序,可以在Windows操作系统上运行。它允许用户通过MQTT协议与其他设备或应用程序进行实时的、双向的通信。 MQTT客户端可用于多种不同的应用场景,比如物联网(IoT)、传感器网络、远程监控等。它可以与各种设备进行通信,包括传感器、智能家居设备、工业控制器等。 在Windows上使用MQTT客户端,用户可以配置代理服务器的连接参数,如IP地址、端口号、订阅主题等。一旦与代理服务器建立连接,MQTT客户端可以发布(publish)和订阅(subscribe)消息。发布消息表示客户端向代理服务器发送消息,而订阅消息表示客户端接收代理服务器发布的消息。 MQTT客户端可以通过不同的方式实现,例如使用各种编程语言编写的自定义应用程序,或者使用现有的MQTT客户端软件,如MQTT.fx、mosquitto_pub等。这些软件通常提供了直观的用户界面,方便用户进行操作和监控。 总之,MQTT客户端在Windows操作系统上的使用非常灵活和方便,可以帮助用户轻松地构建与其他设备和应用程序之间的实时通信连接。它是物联网和传感器网络等领域中不可或缺的组件,为用户提供了许多有用的功能和服务。 ### 回答3: MQTT客户端是一种用于与MQTT(Message Queuing Telemetry Transport)代理服务器通信的应用程序。在Windows操作系统上,有许多不同的MQTT客户端可供选择,以满足不同用户的需求。 首先,Eclipse Paho是一个非常受欢迎的MQTT客户端,具有跨平台的特性,包括适用于Windows的版本。它提供了丰富的功能,使开发人员能够轻松地与MQTT代理服务器进行通信,包括发布和订阅消息、设置QoS(Quality of Service)级别、处理断开连接、处理消息保留等。 其次,HiveMQ是另一个流行的MQTT客户端,也提供了适用于Windows的版本。HiveMQ具有高度可扩展性和可靠性,并提供诸如消息路由、消息处理、会话管理等高级功能。它还支持一些高级协议和功能,如MQTT 5.0、请求/响应模式等。 此外,有一些其他适用于Windows的MQTT客户端,如MQTT.fx、MQTT Explorer等,它们提供了直观的图形用户界面,用于连接和交互。这些客户端通常支持易于配置的用户界面、消息发布/订阅、主题过滤等基本功能,以及一些高级功能,如SSL/TLS安全连接、多个代理服务器支持等。 无论选择哪个MQTT客户端,用户都可以根据自己的需求和偏好来决定。这些客户端都提供了易于使用的界面和强大的功能,使得使用MQTT协议进行通信变得更加方便和灵活。无论是开发人员还是普通用户,都可以通过这些客户端享受到MQTT技术所带来的便利和强大能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值