Lora—点灯 Day11

软件:STM32CubeMX,MDK-ARM
硬件:蓝桥杯物联网Lora开发板,板载芯片STM32L071

一、前言

11届蓝桥杯物联网大赛里面仅仅提供了LL库的Lora API,所以这次我选择使用上次官方提供的比赛资源包的Lora API来进行实验。主要代码还是使用STM32CubeMX生成,也就是HAL库。

如果是其他STM32系列的MCU也可以用这个Lora的API,一样的操作就行。

对STM32还有问题的可以看看我以前的一些文章,写的不太好,大家可以在评论区一起交流一下。

二、STM32CubeMX配置

在这里插入图片描述
PA0和PA1是板子上两个大灯的引脚K1-LED、K2-LED
PC15是LED5,PC14是USER按键
PA4、PA11是ZM433也就是Lora模块的配置引脚,设置为输出就行

PC15标签设置为StateLED
PC14标签设置为KEY

PA0标签设置为LED1
PA1标签设置为LED2

SPI配置如下
在这里插入图片描述
时钟树配置如下
在这里插入图片描述

三、代码

1、Lora配置相关的代码

STM32要操作ZM433这个芯片,需要配置SPI引脚、复位引脚、选择引脚。要添加官方提供的几个Lora模块文件,lora.c sx127x_lora.c zm4xx_gpio.c ,主要是sx127x_lora.c文件,当然还有一些头文件也要全部复制。
在这里插入图片描述

因为我是使用STM32CubeMX生成的代码,所与官方给的有些不一样。例如SPI的初始化代码是STM32CubeMX生成,ZM433芯片的俩引脚PA4、PA11初始化代码也是STM32CubeMX生成。

主要是学会怎么去使用官方给的Lora API。
在这里插入图片描述

zm4xx_gpio.c

#include "zm4xx_gpio.h"

/*
这个复位引脚看原理图可以知道是PA9,但是我配置为PA9的话就会出错。
老师说复位可以不用管,把复位脚写作PA11可以骗过Lora API,不然会报错的。
*/
void zm4xx_rst_pin_set(uint8_t value)//ZM433复位函数
{
	if(value){
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11,GPIO_PIN_SET);		
	}else{
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11,GPIO_PIN_RESET);		
	}
}

void zm4xx_sel_pin_set(uint8_t value)//ZM433选择引脚设置函数
{
	if(value){
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4,GPIO_PIN_SET);		
	}else{
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4,GPIO_PIN_RESET);		
	}
}

在spi.c中添加如下函数,这些函数是咋们写的,提供给Lora API使用的。

void delay_us(uint32_t time)
{
	while(time--);
}

void delay_ms(uint32_t ms)
{
	HAL_Delay(ms);
}

void spi_send_byte (uint8_t send_data)
{
    HAL_SPI_Transmit(&hspi1, &send_data, 1, 10);
}

uint8_t spi_recv_byte (void)
{
    uint8_t byte;
	HAL_SPI_Receive(&hspi1, &byte, 1, 10);
	return byte;
}

lora.c

#include "lora.h"

radio_handle_t handle;

void LoRa_Init(void)
{
	
	handle = radio_zm4xx_inst_init(spi_recv_byte,spi_send_byte,zm4xx_rst_pin_set,zm4xx_sel_pin_set,delay_ms,delay_us);
	
	if(handle != NULL){
		if(RADIO_RET_OK == radio_freq_set(handle, FREQ)){//初始化成功,点亮LED5
			HAL_GPIO_WritePin(StateLED_GPIO_Port,StateLED_Pin,GPIO_PIN_RESET); 	// LoRa ok
		}
		
		radio_mode_set(handle, RX_MODE);	//Receive Mode
	}
}

2、main.c
#include "main.h"
#include "spi.h"
#include "gpio.h"

#include "lora.h"
#include "spi.h"
#include "zm4xx_gpio.h"

extern radio_handle_t handle;
int ret = RADIO_RET_OK;
uint8_t rx = 0xAA, tx = 0x55;
uint16_t len;

void SystemClock_Config(void);

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_SPI1_Init();
  LoRa_Init();
  while (1)
  {
		if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_RESET)
		{
			HAL_Delay(100);
			if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_RESET)
			{
				HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);//LED状态反转
				radio_buf_send(handle, &tx, 1); //发送字符
				radio_mode_set(handle, RX_MODE);	//ZM433设置为接受模式
			}
		}
  }
}

四、效果

终端A按键USER按键,终端B的K1-LED状态反转。

工程文件 
https://wws.lanzous.com/iXOxrkjjzzi 
密码:c8bv
官方提供的Lora例子
https://wws.lanzous.com/imTcYkjko3g
密码:aonk
  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
E106 LoRa网关代码是用于管理和控制E106型号的LoRa网关设备的程序代码。这些代码负责与物联网设备通信并传输数据。在编写代码之前,需要了解以下几个关键概念和功能: 1. LoRa技术:LoRa是一种低功耗的长距离无线通信技术,适用于物联网应用。LoRa通过使用长距离、低速率和低功耗的调制方式,实现了在室内和室外环境下的长距离通信。 2. 网关:网关是连接物联网设备和云服务器的中间设备,负责将物联网设备发送的数据传输给云服务器,并将云服务器的命令传输给物联网设备。 3. E106:E106是一种常见的LoRa网关设备,具有低功耗、高性能和可靠性。它支持多种通信方式,如Wi-Fi和以太网,可以连接到云服务器,并与物联网设备进行双向通信。 在编写E106 LoRa网关代码时,需要实现以下功能: 1. 网络连接:代码需要确保LoRa网关与云服务器的网络连接可用。可以使用Wi-Fi或以太网连接来实现网络通信。 2. 数据接收:代码需要接收来自物联网设备的数据。E106 LoRa网关可以同时接收多个物联网设备发送的LoRa数据包。 3. 数据传输:代码需要将接收到的数据传输给云服务器。可以使用MQTT或HTTP等通信协议来实现数据传输。 4. 数据解析:代码需要解析接收到的数据,并将其格式化为可读性强的格式。可以使用JSON或其他数据格式来实现数据的解析和处理。 5. 云服务器通信:代码需要处理来自云服务器的命令,并将其传输给物联网设备。可以使用MQTT或HTTP等通信协议来实现与云服务器的通信。 总之,E106 LoRa网关代码是为了实现LoRa网关与物联网设备和云服务器之间的通信和数据传输而编写的程序代码。这些代码可以确保LoRa网关设备的正常运行,并可靠地将数据从物联网设备传输到云服务器,同时也能接收来自云服务器的命令,并将其传输给物联网设备。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值