基于lora模块的STM32单片机数据采集

lora模块(AS32-TTL-100)的使用简介

一、AS32-TTL-100模块的连接

 模块外观

图1 模块外观
三个lora模块连接到USB分线器后连接电脑(注意:如果连接同一个USB设备,即便不加天线也可以实现传输,如果将模块分开则需要安装天线以增强信号) 在这里插入图片描述

2、参数配置软件

在这里插入图片描述
选择匹配的设备型号后进行配置,下图为配置界面:
在这里插入图片描述

3、配置模式(透明广播、定点传输等)

在这里插入图片描述

3.1透明传输配置概述:

(1)MO0=1,MOD1=1(将跳线帽拿掉,进入配置模式)
(2)发送模块和接收模块的地址设置成相同值
(3)发送模块和接收模块的信道设置成相同值

在这里插入图片描述

图2 三模块配置界面详情

(4)都是MO0=0,MOD1=0(安装跳线帽,与地相接则为0,此时为配置后正常使用阶段)
(5)利用XCOM实现透明广播演示
在这里插入图片描述

图3 演示过程

在这里插入图片描述

图4 发送和接收数据示例

3.2定点传输概述:

(1)MO0=1,MOD1=1(将跳线帽拿掉,进入配置模式)
(2)发送模块和接收模块的地址可设置成不相同
(3)发送模块和接收模块的信道可设置成不相同
在这里插入图片描述

图5 两模块定向传输配置界面

(4)一个MO0=0,MOD1=0,其他为MO0=1,MOD1=0
(5)利用XCOM实现定点传输在这里插入图片描述

图6 两模块演示界面

在这里插入图片描述
3.3定点传输下的广播:(方法参照上文)
(1)MO0=1,MOD1=1(将跳线帽拿掉,进入配置模式)
(2)发送模块和接收模块的地址可设置成不相同
(3)发送模块和接收模块的信道可设置成不相同
(4)跳线帽配置时:一个MO0=0,MOD1=0,其他为MO0=1,MOD1=0
(5)发送方数据前3个字节必须是0xFF +0xFF+接收方信道

在这里插入图片描述

图7 数据传输示例

3.4定点传输下的监听:(方法参照上文)

(1)MO0=1,MOD1=1(将跳线帽拿掉,进入配置模式)
(2)监听模块的地址必须设置成0xFFFF
(3)监听模块和发送模块的信道必须设置成相同
(4)跳线帽配置时:一个MO0=0,MOD1=0,其他为MO0=1,MOD1=0
(5)发送方数据前3个字节必须是0xXX+0xXX+接收方信道
在这里插入图片描述

图8 数据传输示例

4、lora模块与红牛STM32F103单片机的配合使用

在这里插入图片描述

图9 红牛单片机外观图

4.1实验过程:

将1个lora模块连接单片机,另一个lora模块连接电脑的串口调试助手,实现单片机采集传感器数据(这里用到的是温湿度传感器dht11)通过连接的lora模块传输到电脑的调试助手上。

在这里插入图片描述

图10 实物连接(如果信号弱需在lora模块上加天线)

在这里插入图片描述

图11 传输数据界面

4.2部分程序

串口打印

#include "stm32f10x.h"
#include "stdio.h"

void USART_init(uint32_t bound)
{
	GPIO_InitTypeDef GPIO_InitStruct;   
	USART_InitTypeDef USART_InitStruct;  
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);  
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);  
	
	
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_2;   
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;   
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;  
	GPIO_Init(GPIOA,&GPIO_InitStruct); 
	
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_3;   
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;  
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;   
	GPIO_Init(GPIOA,&GPIO_InitStruct);  
	
	
	USART_InitStruct.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;   
	USART_InitStruct.USART_Parity=USART_Parity_No;   
	USART_InitStruct.USART_BaudRate=bound;   
	USART_InitStruct.USART_StopBits=USART_StopBits_1;   
	USART_InitStruct.USART_WordLength=USART_WordLength_8b;  
	USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;  
	USART_Init(USART2,&USART_InitStruct);   
	
	USART_Cmd(USART2,ENABLE);   
}


int fputc(int ch,FILE *f)   
{
	USART_SendData(USART2,(uint8_t)ch);   
	while(USART_GetFlagStatus(USART2,USART_FLAG_TXE) == RESET);  
	return ch;
}

温湿度传感器:

#include "dht11.h"
#include "delay.h"
#include "stm32f10x.h"  


void DHT11_IO_IN(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;

	GPIO_InitStructure.GPIO_Pin=IO_DHT11;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
	GPIO_Init(GPIO_DHT11,&GPIO_InitStructure);
}

void DHT11_IO_OUT(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;

	GPIO_InitStructure.GPIO_Pin=IO_DHT11;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_Init(GPIO_DHT11,&GPIO_InitStructure);
}

void DHT11_Rst(void)	   
{                 
	DHT11_IO_OUT(); 	
    DHT11_DQ_Low; 		
    Delay_ms(20);    	
    DHT11_DQ_High; 		
	Delay_us(30);     	
}

u8 DHT11_Check(void) 	   
{   
	u8 retry=0;
	DHT11_IO_IN(); 
    while ((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==1)&&retry<100)
	{
		retry++;
		Delay_us(1);
	};	 
	if(retry>=100)return 1;
	else retry=0;
    while ((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==0)&&retry<100)
	{
		retry++;
		Delay_us(1);
	};
	if(retry>=100)return 1;	    
	return 0;
}

u8 DHT11_Read_Bit(void) 			 
{
 	u8 retry=0;
	while((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==1)&&retry<100)
	{
		retry++;
		Delay_us(1);
	}
	retry=0;
	while((GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==0)&&retry<100)
	{
		retry++;
		Delay_us(1);
	}
	Delay_us(40);
	if(GPIO_ReadInputDataBit(GPIO_DHT11,IO_DHT11)==1)
		return 1;
	else 
		return 0;		   
}

u8 DHT11_Read_Byte(void)    
{        
    u8 i,dat;
    dat=0;
	for (i=0;i<8;i++) 
	{
   		dat<<=1; 
	    dat|=DHT11_Read_Bit();
    }						    
    return dat;
}



u8 DHT11_Read_Data(u8 *temp,u8 *humi)    
{        
 	u8 buf[5];
	u8 i;
	DHT11_Rst();
	if(DHT11_Check()==0)
	{
		for(i=0;i<5;i++)
		{
			buf[i]=DHT11_Read_Byte();
		}
		if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
		{
			*humi=buf[0];
			*temp=buf[2];
		}
	}else return 1;
	return 0;	    
}

 	 
u8 DHT11_Init(void)
{	 
 	GPIO_InitTypeDef  GPIO_InitStructure;
 	
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);	
	
 	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;				
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOG, &GPIO_InitStructure);				 
 	GPIO_SetBits(GPIOG,GPIO_Pin_11);						
			    
	DHT11_Rst();  
	return DHT11_Check();
} 

相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页