lora模块(AS32-TTL-100)的使用简介
一、AS32-TTL-100模块的连接
三个lora模块连接到USB分线器后连接电脑(注意:如果连接同一个USB设备,即便不加天线也可以实现传输,如果将模块分开则需要安装天线以增强信号)
2、参数配置软件
选择匹配的设备型号后进行配置,下图为配置界面:
3、配置模式(透明广播、定点传输等)
3.1透明传输配置概述:
(1)MO0=1,MOD1=1(将跳线帽拿掉,进入配置模式)
(2)发送模块和接收模块的地址设置成相同值
(3)发送模块和接收模块的信道设置成相同值
(4)都是MO0=0,MOD1=0(安装跳线帽,与地相接则为0,此时为配置后正常使用阶段)
(5)利用XCOM实现透明广播演示
3.2定点传输概述:
(1)MO0=1,MOD1=1(将跳线帽拿掉,进入配置模式)
(2)发送模块和接收模块的地址可设置成不相同
(3)发送模块和接收模块的信道可设置成不相同
(4)一个MO0=0,MOD1=0,其他为MO0=1,MOD1=0
(5)利用XCOM实现定点传输
3.3定点传输下的广播:(方法参照上文)
(1)MO0=1,MOD1=1(将跳线帽拿掉,进入配置模式)
(2)发送模块和接收模块的地址可设置成不相同
(3)发送模块和接收模块的信道可设置成不相同
(4)跳线帽配置时:一个MO0=0,MOD1=0,其他为MO0=1,MOD1=0
(5)发送方数据前3个字节必须是0xFF +0xFF+接收方信道
3.4定点传输下的监听:(方法参照上文)
(1)MO0=1,MOD1=1(将跳线帽拿掉,进入配置模式)
(2)监听模块的地址必须设置成0xFFFF
(3)监听模块和发送模块的信道必须设置成相同
(4)跳线帽配置时:一个MO0=0,MOD1=0,其他为MO0=1,MOD1=0
(5)发送方数据前3个字节必须是0xXX+0xXX+接收方信道
4、lora模块与红牛STM32F103单片机的配合使用
4.1实验过程:
将1个lora模块连接单片机,另一个lora模块连接电脑的串口调试助手,实现单片机采集传感器数据(这里用到的是温湿度传感器dht11)通过连接的lora模块传输到电脑的调试助手上。
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();
}