合泰32-Onenet-WiFi模块-合泰单片机通过MQTT协议数据上云(二)

本篇目标

一、学习MQTT协议
二、发送温度湿度数据到OneNET

准备材料

感觉麻烦的小伙伴请移步到文末,那里有整个工程的链接。

关于串口和WiFi部分的内容,可以查看前一篇博文,链接:这个是传送大门

一、合泰例程
链接:https://leoeinstein.lanzous.com/iEbgskvq6pi

二、OneNET例程
链接:https://leoeinstein.lanzous.com/it2D4kzs1gf

这个是在onenet论坛里面下载的,包含有麒麟座开发板的一些工程,里面几乎包含了所有onenet支持协议的通信例程,有需要的同学可以下载。

MQTT协议

推荐博文

一、IoT – (七)MQTT协议详解
这篇在理论的层面上讲得比较详细的,可以看看看。

二、MQTT协议-MQTT协议解析(MQTT数据包结构)

这篇主要结束了MQTT协议的数据包结构,我们写程序的时候需要参考到的。

报文格式

查看OneNET平台的V2.6版本的MQTT协议书可知,支持的报文格式有7种。

OneNET官网文档:https://open.iot.10086.cn/doc/multiprotocol/book/develop/mqtt/device/doc-tool.html

在这里插入图片描述

Type内容
1JSON格式1字符串
2二进制数据
3JSON格式2字符串
4JSON格式3字符串
5自定义分隔符
6带时间自定义分隔符
7可离散浮点数数据流

中文版的MQTT协议文档
链接:https://pan.baidu.com/s/1NY7fDD7cUbTY2J351v45NA
提取码: kefy

代码实现

引脚连接

这次用的是USART0 口,才发现USART1的RX引脚PA5用跳线帽接到了DAP_Tx,如果需要用到的话需要接到RS232_Tx,就可以用了。

ESP8266HT32
RXPA2
TXPA3
3.3V3.3V
GNDGND

合泰的延时函数

之前下载过一些合泰的工程例程,发现里面的延时函数没有用定时器来实现延时的,而是用软件来延时的。这样的话延时时间不准确,从而可能会导致程序会出现一些未知的错误。

因此在这里贴出定时器/计数器的延时实现。

有时候用用国产芯片还是不错了,现在的stm32很贵![狗头保护]

delay.c

#include "delay.h"
#include "usart.h"

/* Private variables ---------------------------------------------------------------------------------------*/
static vu32 DelayTime;
/* Private function prototypes -----------------------------------------------------------------------------*/
void Delay(u32 nTime);
void TimingDelay(void);

void delay_init()
{
	/* SYSTICK configuration */
  SYSTICK_ClockSourceConfig(SYSTICK_SRC_STCLK);       // Default : CK_AHB/8
  SYSTICK_SetReloadValue(SystemCoreClock / 8 / 1000); // (CK_AHB/8/1000) = 1ms on chip
  SYSTICK_IntConfig(ENABLE);                          // Enable SYSTICK Interrupt

}
void delay_ms(u32 nTime)
{
	
  /* Enable the SysTick Counter */
  SYSTICK_CounterCmd(SYSTICK_COUNTER_CLEAR);
  SYSTICK_CounterCmd(SYSTICK_COUNTER_ENABLE);
  DelayTime = nTime;

  while(DelayTime != 0);

  /* Disable SysTick Counter */
  SYSTICK_CounterCmd(SYSTICK_COUNTER_DISABLE);
  /* Clear SysTick Counter */
  SYSTICK_CounterCmd(SYSTICK_COUNTER_CLEAR);
}

/*********************************************************************************************************//**
  * @brief  Decrements the TimingDelay variable.
  * @retval None
  ***********************************************************************************************************/
void TimingDelay(void)
{
  if(DelayTime != 0)
  {
    DelayTime--;
  }
}

其实这个在合泰官方例程了也有,就在example–>SYSTICK文件里面,经过简单的移植、修改就可以了。

这个的定时中断服务函数在 ht32f5xxxx_01_it.c 里面!

需要例程的同学可以在这里下载:
https://blog.csdn.net/LiangWF22/article/details/113181696

OneNET部分代码

void OneNet_SendData(void) from onenet.c

//==========================================================
//	函数名称:	OneNet_SendData
//
//	函数功能:	上传数据到平台
//
//	入口参数:	type:发送数据的格式
//
//	返回参数:	无
//
//	说明:		
//==========================================================
void OneNet_SendData(void)
{
	
	MQTT_PACKET_STRUCTURE mqttPacket = {NULL, 0, 0, 0};												//协议包
	
	char buf[128];
	
	short body_len = 0, i = 0;
	
	UsartPrintf(USART_DEBUG, "Tips:	OneNet_SendData-MQTT\r\n");
	
	memset(buf, 0, sizeof(buf));
	
	body_len = OneNet_FillBuf(buf);																	//获取当前需要发送的数据流的总长度
	
	if(body_len)
	{
		if(MQTT_PacketSaveData(DEVID, body_len, NULL, 5, &mqttPacket) == 0)							//封包
		{
			for(; i < body_len; i++)
				mqttPacket._data[mqttPacket._len++] = buf[i];
			
			ESP8266_SendData(mqttPacket._data, mqttPacket._len);									//上传数据到平台
			UsartPrintf(USART_DEBUG, "Send %d Bytes\r\n", mqttPacket._len);
			
			MQTT_DeleteBuffer(&mqttPacket);															//删包
		}
		else
			UsartPrintf(USART_DEBUG, "WARN:	EDP_NewBuffer Failed\r\n");
	}
	
}

实现效果

效果

因为手上的温湿度传感器坏了,这个数据仅仅是测试的,如果用到的话需要自己修改温湿度传感器对应的函数!

OneNET平台数据流显示界面:
在这里插入图片描述

串口信息打印输出如下:
在这里插入图片描述

存在问题

一、上传图片的时候合泰芯片会卡住,不能执行代码,不清楚是代码的问题还是合泰32的问题,有空再看看。[狗头\sm]

工程链接

链接1:https://download.csdn.net/download/LiangWF22/14951875

链接2:https://leoeinstein.lanzous.com/iXpNqkzxikb

2021年1月28日

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
合泰Error: Flash Download failed - "Cortex-M0" 是指在合泰单片机HT66F70A Flash系列例程中,下载Flash时出现的错误提示。具体原因可能是下载过程中发生了错误,导致无法成功下载到目标设备的Flash存储器中。由于提供的资料有限,无法确定具体的错误原因。但可以尝试以下步骤来解决该问题: 1. 检查硬件连接:确保下载工具与目标设备之间的连接正确且稳定。 2. 检查固件文件:确认使用的固件文件正确,与目标设备兼容,并且没有损坏。 3. 检查编程器设置:检查下载工具的设置是否正确,包括目标设备的型号和存储器地址等信息。 4. 检查编程方式:尝试使用其他编程方式,例如JTAG或SWD,看是否可以成功下载。 5. 检查目标设备状态:确保目标设备处于正常工作状态,没有被锁定或保护,以允许程序下载到Flash中。 如果以上步骤都尝试过后仍然无法解决问题,建议查阅合泰单片机HT66F70A Flash系列例程的官方文档或寻求技术支持,以获取更详细的帮助和解决方案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [OpenOCD添加第三方设备支持:HT32F52352 Cortex-M0+](https://blog.csdn.net/weixin_41328027/article/details/122969985)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [2019年合泰 HT66H70A ESK-300开发板学习资料.zip_HT66F70A开发板_emptycmk_esk-303](https://download.csdn.net/download/weixin_42657024/86195097)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值