STM32G031无线温湿度仪开源项目 -6,读取温湿度传感器(AHT10)及无线发送数据

关键词:CubeMX,CubeIDE,STM32G031C8T6,AHT10,DRF1609H

1,读取温湿度传感器(AHT10)

本项目中,采用的是模拟I2C来读取数据,用STM32G031标准的I2C来读不行,不知到为什么,希望看到这个文章的您多多交流,用标准I2C就非常简单了。
具体的模拟过程就不多说了,按流程来就可以了,很简单。
我们这里已经做好了一个文件:dtk_aht10n.c,用户直接拷贝就可以使用,内部没有用到EVENT或其它技术,移植到其它单片机也能使用。AHT10官方也提供了一个demo,感觉不好用,所以自己做了一个。
一个完整的读取参数流程如下:注意那些延时都是需要的,不然读不出来

//--------------
void  read_AHT10_once(void)
{
	HAL_Delay(10);
	
	reset_AHT10();
	HAL_Delay(10);

	init_AHT10();
	HAL_Delay(10);

	startMeasure_AHT10();
	HAL_Delay(80);

	read_AHT10();
	HAL_Delay(5);
}

2,无线发送温湿度数据

1,在主程序里面设定了一个EVENT,每5秒读一次数据
2,如果是主动上报数据,则读取完成后,通过串口把数据发送给DRF1609H
3,DRF1609H将数据透明传输到Cordinator
这里把中间需要延时的部分,用EVENT实现,不需要阻塞,这样可以更快的响应串口指令。

// ---- Read AHT10 Function -------------
		if( newEVENT_id & EVENT_3)
		{
			newEVENT_id = newEVENT_id & (~EVENT_3);

			switch(aht10_status)
			{
			case 0:
				aht10_status++;
				reset_AHT10();
				newEventStart(EVENT_3, 10);
				break;

			case 1:
				aht10_status++;
				init_AHT10();
				newEventStart(EVENT_3, 20);
				break;

			case 2:
				aht10_status++;
				startMeasure_AHT10();
				newEventStart(EVENT_3, 80);
				break;

			case 3:
				aht10_status=0;
				read_AHT10();

				if(dataReportModel == activeReport)
				{
					//-- Send to DRF1609H -- then to Coordinator ---
					//-- use Transparent transmission --------------
					set_AHT10sendOutData();
					HAL_UART_Transmit_DMA( &huart1, AHT10sendOutData, 10);
				}

				newEventStart(EVENT_3, 5000);
				break;
			}

读完以后,只需要把数据通过串口发出去即可(即实现了无线数据传输),所以说DRF1609H模块还是很简单使用的。

HAL_UART_Transmit_DMA( &huart1, AHT10sendOutData, 10);
发布了8 篇原创文章 · 获赞 7 · 访问量 542

猜你喜欢

转载自blog.csdn.net/yihua2009/article/details/104295822