2022高职国赛Lora点对点控制灯带

Lora 点对点控制灯带

题目要求

3、LoRa 通信系统 
使用两个 LoRa 模块,分别命名为监测端和控制端,控制端上安装单联继电
器并外接一个风扇,通过 485 口连接 RGB 灯带。在监测端上安装温湿度和光照
二合一模块,通过 485 口连接物联网应用开发终端与后续的任务进行数据通信。
利用竞赛资料提供的引用库与文档说明、等资源,界面参考效果图,实现程序
的开发,模拟信息的采集、传输。
*注:LoRa 频率需根据给定的参数设定,如需使用 ST-LINK 的仿真器调试需
自行安装相应的 ST-LINK 驱动。
任务要求: 
 监测端实时采集温度、湿度、光照数据并在液晶屏上显示,同时将数据
实时发送给物联网应用开发终端。
 当光照值底于 200Lux 时,监测端和控制端板上的 Led1、Led2 灯亮,否
则两块板上的 Led1、Led2 灯灭。
 点击监测端上的 K2 键发送红色 RGB 值(255,0,0)控制端,控制端收到
数据后显示相应的值,使得外接的 RGB 灯带亮成对应的红色。
 点击监测端上的 K3 键发送绿色 RGB 值(0,255,0)给控制端,控制端收
到数据后显示相应的值,使得外接的 RGB 灯带亮成对应的绿色。
第 8 页 共 10 页
 点击监测端上的 K4 键发送蓝色 RGB 值(0,0,255)给控制端,控制端收
到数据后显示相应的值,使得外接的 RGB 灯带亮成对应的蓝色。
 点击控制端 K2 键打开外接的风扇,在液晶屏上显示 On。
 点击控制端 K3 键关闭外接的风扇,在液晶屏上显示 Off。
 光照值需使用换算公式进行转换。
 设备的通讯协议格式由选手自主定义,需考虑后续的物联网网关开发的
数据通信。

image-20221111152803154

  • 基本功能大题实现安卓部分暂时还没~

代码

检测端

     /**
  ******************************************************************************
  * File Name          : main.c
  * Description        : Main program body
  ******************************************************************************
  */
#include <string.h>
#include "board.h"
#include "hal_key.h"
#include "tim-board.h"
#include "timer_handles.h"
#include "adc_reader.h"
#include "sht3x.h"
#include "NS_Radio.h"
#include "sx1276.h"

#include "usart1-board.h"

/*************************    va   *********************************************/
float temp,hump,light;

unsigned char State = 0;
unsigned char Send[4];


/**********************************************************************************************
*函数:void Init( void )
*功能:平台初始化
*输入:无
*输出:无
*特殊说明:无
**********************************************************************************************/
void Init() {
    // 开发板平台初始化
    BoardInitMcu();
    BoardInitPeriph();
    keys_init();//按键初始化
    setTimer2Callback(Time2Handler);
    Tim2McuInit(1);//定时器初始化,设置定时中断1ms中断一次
	 
}

/**********************************************************************************************
*函数:void KeyDownHandler( void )
*功能:按钮事件监听
*输入:无
*输出:无
*特殊说明:无
**********************************************************************************************/
void KeyDownHandler(void) {
	
	if(isKey2Pressed()){
		resetKey2();
		Send[0] = 0xff;
		Send[1] = 0x00;
		Send[2] = 0x00;
		SX1276Send(Send,4);
	}
	if(isKey3Pressed()){
		resetKey3();
		Send[0] = 0x00;
		Send[1] = 0xff;
		Send[2] = 0x00;
	SX1276Send(Send,4);
	}
	if(isKey4Pressed()){
		resetKey4();
		Send[0] = 0x00;
		Send[1] = 0x00;
		Send[2] = 0xff;
	SX1276Send(Send,4);
	}
	
	
	
	
}

/**********************************************************************************************
*函数:void handlerPre10Ms( void )
*功能:10毫秒循环
*输入:无
*输出:无
*特殊说明:循环处理总时长300ms
**********************************************************************************************/
void handlerPre10Ms(void) {
    for (int delay = 0; delay < 30; delay++) {
        HAL_Delay(10);
        
    }
}


void OLED_State (){
	
	if(State == 0){
unsigned char arr[30];
	sprintf(arr,"%.2f *%.2f *%.2f   *",temp,hump,light);
	unsigned char Zhi[3][10];
	unsigned char i = 0,j = 0,i0 = 0;
	while(j<3){
		
		if(arr[i] != '*'){
			
			Zhi[j][i0] = arr[i];
			i0++;
			
		}else {
			j++;
			i0 = 0;
			
		}
		
		i++;
	}
	
	if(light < 200){
		GpioWrite(&Led1,0);
		GpioWrite(&Led2,0);
		Send[3] = 1;
		SX1276Send(Send,4);
	}else {
		GpioWrite(&Led1,1);
		GpioWrite(&Led2,1);
		Send[3] = 0;
		SX1276Send(Send,4);
	
	}
	
		HAL_Delay(20);
		OLED_ShowString(0,0," Temp:");OLED_ShowString(48,0,Zhi[0]);
		OLED_ShowString(0,2," Hump:");OLED_ShowString(48,2,Zhi[1]);
		OLED_ShowString(0,4,"Light:");OLED_ShowString(48,4,Zhi[2]);
	
	USART1_SendStr(arr,30);//发送到安卓客户端
	}
	
}






/**
 * Main application entry point.
 */
int main( void )
{
    Init();
	ADCS_Init();
hal_temHumInit();
	
	OLED_Init();
	
	USART1_Init(9600);
	
	NS_RadioInit(433000520,18,1000,1000);
    while( 1 )
    {
			AdcScanChannel();
			light = AdcReadCh0()*5/2.0*100;
			call_sht11(&temp,&hump);
			OLED_State ();
			
			
			KeyDownHandler();
			
			
			
    }
}

控制端

/**
  ******************************************************************************
  * File Name          : main.c
  * Description        : Main program body
  ******************************************************************************
  */
#include <string.h>
#include "board.h"
#include "hal_key.h"
#include "tim-board.h"
#include "timer_handles.h"
#include "NS_Radio.h"

#include "usart1-board.h"

#define Relay1 PB_2
Gpio_t Relay;







unsigned char Fun_State = 0;





/**********************************************************************************************
*函数:void Init( void )
*功能:平台初始化
*输入:无
*输出:无
*特殊说明:无
**********************************************************************************************/
void Init() {
    // 开发板平台初始化
    BoardInitMcu();
    BoardInitPeriph();
    keys_init();//按键初始化
    setTimer2Callback(Time2Handler);
    Tim2McuInit(1);//定时器初始化,设置定时中断1ms中断一次
	 
}

/**********************************************************************************************
*函数:void KeyDownHandler( void )
*功能:按钮事件监听
*输入:无
*输出:无
*特殊说明:无
**********************************************************************************************/
void KeyDownHandler(void) {
	
	if(isKey2Pressed()){
			resetKey2();
		Fun_State = 1;
		
	}
	
	if(isKey3Pressed()){
			resetKey3();
		Fun_State = 0;
	}
}

/**********************************************************************************************
*函数:void handlerPre10Ms( void )
*功能:10毫秒循环
*输入:无
*输出:无
*特殊说明:循环处理总时长300ms
**********************************************************************************************/
void handlerPre10Ms(void) {
    for (int delay = 0; delay < 30; delay++) {
        HAL_Delay(10);
        
    }
}


unsigned char LED_R[] = {0xA5,0x06,0x00,0xA0,0xFF,0x00,0x00,0xEE,0x5A};
unsigned char LED_G[] = {0xA5,0x06,0x00,0xA0,0x00,0xFF,0x00,0xEE,0x5A};
unsigned char LED_B[] = {0xA5,0x06,0x00,0xA0,0x00,0x00,0xFF,0xEE,0x5A};
unsigned char LED_C[] = {0xA5,0x06,0x00,0xA0,0x00,0x00,0x00,0xEE,0x5A};
	

void OLED_State(unsigned char Read[4]){
	
unsigned char arr[20];
	HAL_Delay(100);
	OLED_ShowString(0,0,"R:");sprintf(arr,"%d  ",Read[0]);OLED_ShowString(16,0,arr);
	OLED_ShowString(0,2,"G:");sprintf(arr,"%d  ",Read[1]);OLED_ShowString(16,2,arr);
	OLED_ShowString(0,4,"B:");sprintf(arr,"%d  ",Read[2]);OLED_ShowString(16,4,arr);
	if(Read[0] == 0xff){
		
		USART1_SendStr(LED_R,9);
	}
	else if(Read[1] == 0xff){
	
		USART1_SendStr(LED_G,9);
	}
	else if(Read[2] == 0xff){
	
		USART1_SendStr(LED_B,9);
	}else 
	{
		USART1_SendStr(LED_C,9);
	}
	
}






/**
 * Main application entry point.
 */
int main( void )
{
	
    Init();
	OLED_Init();
	USART1_Init(9600);
	
	GpioInit(&Relay,Relay1,PIN_OUTPUT,PIN_PUSH_PULL,PIN_NO_PULL,0);
	GpioWrite(&Relay,0);
		NS_RadioInit(433000520,18,1000,1000);
    
	while( 1 )
    {
			KeyDownHandler();
			
	unsigned char Read[4];
			ReadRadioRxBuffer(Read);
			
			OLED_State(Read);
			if(Read[3] == 1){
				GpioWrite(&Led1,0);
				GpioWrite(&Led2,0);
			}else {
				GpioWrite(&Led1,1);
				GpioWrite(&Led2,1);			
			}
			
			if(Fun_State == 1){
				OLED_ShowString(0,6,"Fun:On ");
				GpioWrite(&Relay,1);
			}
			else {
				OLED_ShowString(0,6,"Fun:Off");
				GpioWrite(&Relay,0);
			}
			
			
			
			
    }
}

posted @ 2022-11-21 20:36  ~内个臣呐~  阅读(472)  评论(0)    收藏  举报