物联网项目设计 (五) Paho mqtt 库在STM32+esp8266 硬件平台上的移植和使用第一部分,连接阿里云IOT平台

概述

本文代码链接 https://github.com/FranHawk/ConnectTOAliIOTServer.git
之前一直准备使用百度云天工作为物联网云平台,但是百度云天工平台的文档写的确实不是很好,相关API的接口也和其他方案有不一样,安全性不够好,故准备使用阿里云IOT平台。后期估计还要涉及到前后端的实现,自己搭建云服务器,才能完成数据存储和小程序开发。阿里云也提供了相关的接口,使用起来比较方便。

这几天查阅了很多的MQTT相关的资料,结果发现查到了太多底层的东西。根本没有太大的作用,浪费了很多时间。在掌握基本的MQTT的概念后,我发现只用掌握连接服务器,订阅话题,发布话题这些操作就足以满足最基本的需要。

在物联网设计(三)中,完成了连接本地服务器的功能,通过MQTT连接云服务器的步骤有所改变。

1.在使用TCP连接服务器的阶段,我们需要把连接的域名和端口改成云服务器的端口。
2.连接成功后进入透传模式
3.使用paho mqtt提供的函数连接服务器

接下来就要讲述如何一步步的完成这些操作

硬件准备

stm32+esp8266硬件设备一套

软件准备

已经注册好阿里云帐号并创建好设备,创建过程和前面百度云的创建过程类似,这里还是给出文档链接

当创建好设备后,会生成一个设备三元组,后面我们连接IOT平台使用一机一密的方式,这个设备三元组后面会经常用,记得妥善保存

在这里插入图片描述

移植paho mqtt库至STM32工程中

1.从github上下载paho mqtt嵌入式版本开源库,代码链接
2.解压并打开

找到paho.mqtt.embedded-c-master\MQTTPacket\src的所有文件和paho.mqtt.embedded-c-master\MQTTPacket\samples里面的transport.c和transport.h两个文件
在这里插入图片描述
在这里插入图片描述

3.在自己的工程中新建一个文件夹存放这些文件,我用的工程是物联网(三)中创建的工程

在这里插入图片描述
在这里插入图片描述

4.在工程中添加这些文件

在这里插入图片描述

5.找到transport.c ,对其进行更改,首先改掉上面用的include函数,改为自己的,下面的是我根据自己的软件环境更改的头文件如下
#include "stm32f1xx_hal.h"
#include "tim.h"
#include "usart.h"
#include "esp8266.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "transport.h"

除了上面的头文件之外。这个文件自己带的include和define都被我删了

6.重点:更改transport_sendPacketBuffertransport_getdatanb函数,这两个函数就是MQTT操作单片机发送和接受数据的主要函数,在这里我们用USART来改变里面的发送数据的函数,使用中断方式发送,中断方式接收

通过这样的方式,使硬件和上层MQTT应用层代码解耦合,如果之后使用不同的硬件,其他代码不需要更改,只需要更改transport中的代码。来适应当时使用的通讯模块就可以了。

int transport_sendPacketBuffer(int sock, unsigned char* buf, int buflen)
{
   
	
	USART3_RX_STA = 0;
	memset(USART3_RX_BUF,0,USART3_MAX_RECV_LEN);
	HAL_UART_Transmit(&huart3, buf, buflen,1000);
	return buflen;
}


int transport_getdata(unsigned char* buf, int count)
{
   
	uint8_t i=10;
	memcpy(buf, (const char*)USART3_RX_BUF, count);
	
	USART3_RX_STA = 0;
	memset(USART3_RX_BUF,0,USART3_MAX_RECV_LEN);
	return count;
}
7.剩下的三个函数让他们直接变为空
int transport_getdatanb(void *sck, unsigned char* buf, int count)
{
   
	
	return 0;
}
int transport_open(char* addr, int port)
{
   

	return 0;
}

int transport_close(int sock)
{
   
	return 0;
}
8.在main函数中加入头文件,以检验移植是否成功

在这里插入图片描述

#include "esp8266
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值