题目要求



配置过程:

节点1

1.将时钟树频率设置成32MHz

2.将GPIO引脚做如下配置:

引脚功能

中断配置



3.生成工程代码

4.移植OLED、LoRa库文件

5.编写逻辑代码

自定义Task_Main.h Task_Main.c工程文件

Task_Main.h
#ifndef _TASK_MAIN_H_
#define _TASK_MAIN_H_#include "main.h"
#include "stm32l0xx_hal.h"
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "oled.h"
#include "sx127x_lora.h"void Task_BrdInit(void);
void Task_Main(void);
void recv_buf(void);
void send_buf(void);
void get_cmd(uint8_t *get_data, uint16_t size);#endif
Task_Main.c
#include "Task_Main.h"radio_handle_t handle;
#define FREQ            433000000Lbool send_flag = 0;
bool recv_flag = 0;uint8_t oled_dis_on[4] =  "ON \0";
uint8_t oled_dis_off[4] = "OFF\0";uint8_t recv_data[256] = {0};
uint16_t recv_data_size = 0;
uint8_t send_data[7] = {0x14,0x02,0x35,0x69,0x41,0x0A,0x01};void Task_Main(void)
{if(send_flag){send_flag = 0;send_buf();}if(recv_flag){recv_flag = 0;recv_buf();}
}void Task_BrdInit(void)
{//OLED初始化OLED_PowerControl(ENABLE);HAL_Delay(200);OLED_Init();OLED_Clear();OLED_ShowString(0, 0, (unsigned char *)"K1-LED:OFF      ", 16);OLED_ShowString(0, 2, (unsigned char *)"K2-LED:OFF      ", 16);//LoRa初始化spi_init();zm4xx_pin_init();handle = radio_zm4xx_inst_init(spi_recv_byte,spi_send_byte,zm4xx_rst_pin_set,zm4xx_sel_pin_set,HAL_Delay,delay_us);if(handle != NULL){if(RADIO_RET_OK == radio_freq_set(handle, FREQ)){}radio_mode_set(handle, RX_MODE); //Receive Mode}
}void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(GPIO_Pin == GPIO_PIN_10){recv_flag = 1;}if(GPIO_Pin == GPIO_PIN_14){send_flag = 1;}
}void send_buf(void)
{radio_buf_send(handle, send_data, 7);radio_mode_set(handle, RX_MODE);
}void recv_buf(void)
{uint8_t data[256] = {0};uint8_t i = 0;int ret = 0;ret = radio_buf_recv(handle, recv_data, &recv_data_size);if(ret == RADIO_RET_OK){for(i=0; i<recv_data_size; i++){data[i] = recv_data[i];}get_cmd(data, recv_data_size);}
}void get_cmd(uint8_t *get_data, uint16_t size)
{if(size == 7){if((get_data[0]==0x14)&(get_data[1]==0x02)&(get_data[2]==0x35)&(get_data[3]==0x69)&(get_data[4]==0x42)&(get_data[5]==0x0B)){        switch(get_data[6]){case 0x11:HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);OLED_ShowString(56, 0, oled_dis_on, 16);OLED_ShowString(56, 2, oled_dis_off, 16);break;case 0x12:HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET); OLED_ShowString(56, 0, oled_dis_off, 16);OLED_ShowString(56, 2, oled_dis_on, 16);          break;case 0x13:HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);          OLED_ShowString(56, 0, oled_dis_off, 16);OLED_ShowString(56, 2, oled_dis_off, 16);          break;  default:break;}}
#if 1if((get_data[0]==0x55)&(get_data[1]==0xc6)&(get_data[2]==0x35)&(get_data[3]==0x69)&(get_data[4]==0x42)&(get_data[5]==0x0B)){        switch(get_data[6]){case 0x11:HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);OLED_ShowString(56, 0, oled_dis_on, 16);OLED_ShowString(56, 2, oled_dis_off, 16);break;case 0x12:HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET); OLED_ShowString(56, 0, oled_dis_off, 16);OLED_ShowString(56, 2, oled_dis_on, 16);          break;case 0x13:HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);          OLED_ShowString(56, 0, oled_dis_off, 16);OLED_ShowString(56, 2, oled_dis_off, 16);          break;  default:break;}}if((get_data[0]==0xB8)&(get_data[1]==0xB9)&(get_data[2]==0x35)&(get_data[3]==0x69)&(get_data[4]==0x42)&(get_data[5]==0x0B)){      switch(get_data[6]){case 0x11:HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);OLED_ShowString(56, 0, oled_dis_on, 16);OLED_ShowString(56, 2, oled_dis_off, 16);break;case 0x12:HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET); OLED_ShowString(56, 0, oled_dis_off, 16);OLED_ShowString(56, 2, oled_dis_on, 16);          break;case 0x13:HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);          OLED_ShowString(56, 0, oled_dis_off, 16);OLED_ShowString(56, 2, oled_dis_off, 16);          break;  default:break;}}
#endif        }
}
main.c

引入头文件

/* USER CODE BEGIN Includes */
#include "Task_Main.h"
/* USER CODE END Includes */

板级初始化

  /* USER CODE BEGIN 2 */Task_BrdInit();/* USER CODE END 2 */

主控代码

  /* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */Task_Main();}/* USER CODE END 3 */

节点2

1.将时钟树频率设置成32MHz

2.将GPIO引脚做如下配置:

引脚功能

中断配置


ADC配置


使能定时器


3.生成工程代码

4.移植OLED、LoRa库文件

5.编写逻辑代码

自定义Task_Main.h Task_Main.c工程文件

Task_Main.h

#ifndef _TASK_MAIN_H_
#define _TASK_MAIN_H_#include "main.h"
#include "stm32l0xx_hal.h"
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "oled.h"
#include "sx127x_lora.h"
#include "lptim.h"
#include "adc.h"void Task_BrdInit(void);
void Task_Main(void);
void recv_buf(void);
void send_buf(uint8_t *data);
void get_cmd(uint8_t *get_data, uint16_t size);
void get_adc(void);#endif

Task_Main.c

#include "Task_Main.h"radio_handle_t handle;
#define FREQ            433000000Luint32_t Period=5000;bool recv_flag = 0;uint8_t recv_data[256] = {0};
uint16_t recv_data_size = 0;
uint8_t send_data1[7] = {0x14,0x02,0x35,0x69,0x42,0x0B,0x11};
uint8_t send_data2[7] = {0x14,0x02,0x35,0x69,0x42,0x0B,0x12};
uint8_t send_data3[7] = {0x14,0x02,0x35,0x69,0x42,0x0B,0x13};uint32_t adc_value[10] = {0};
float vol = 0.0;int fputc(int ch, FILE *f)
{while(((USART2->ISR)&(1<<7))==0);USART2->TDR = (uint8_t)ch;return ch;
}void Task_Main(void)
{if(recv_flag){recv_flag = 0;recv_buf();}
}void Task_BrdInit(void)
{//OLED初始化OLED_PowerControl(ENABLE);HAL_Delay(200);OLED_Init();OLED_Clear();OLED_ShowString(0, 0, (unsigned char *)"REC:None        ", 16);OLED_ShowString(0, 2, (unsigned char *)"ADC:None        ", 16);//LoRa初始化spi_init();zm4xx_pin_init();handle = radio_zm4xx_inst_init(spi_recv_byte,spi_send_byte,zm4xx_rst_pin_set,zm4xx_sel_pin_set,HAL_Delay,delay_us);if(handle != NULL){if(RADIO_RET_OK == radio_freq_set(handle, FREQ)){}radio_mode_set(handle, RX_MODE); //Receive Mode}
}void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(GPIO_Pin == GPIO_PIN_10){recv_flag = 1;}HAL_ADC_Start_DMA(&hadc, adc_value, 5);
}void send_buf(uint8_t *data)
{radio_buf_send(handle, data, 7);radio_mode_set(handle, RX_MODE);
}void recv_buf(void)
{uint8_t data[256] = {0};uint8_t i = 0;int ret = 0;ret = radio_buf_recv(handle, recv_data, &recv_data_size);if(ret == RADIO_RET_OK){for(i=0; i<recv_data_size; i++){data[i] = recv_data[i];}get_cmd(data, recv_data_size);}
}void get_cmd(uint8_t *get_data, uint16_t size)
{if(size == 7){if((get_data[0]==0x14)&(get_data[1]==0x02)&(get_data[2]==0x35)&(get_data[3]==0x69)&(get_data[4]==0x41)&(get_data[5]==0x0A)&(get_data[6]==0x01)){get_adc();}}
}void get_adc(void)
{char oled_dis_adc[4] = {0};vol = ((adc_value[0]+adc_value[1]+adc_value[2]+adc_value[3]+adc_value[4])*3.3)/(4095*5);vol = (int)((vol*10)+0.5)/10.0;sprintf(oled_dis_adc, "%.1fV", vol);OLED_ShowString(32, 0, (uint8_t *)"OK  \0", 16);OLED_ShowString(32, 2, (uint8_t *)oled_dis_adc, 16);HAL_LPTIM_Counter_Start_IT(&hlptim1, Period);if(vol<1.5){send_buf(send_data1);  }else if(vol<2.5){send_buf(send_data2);}else{send_buf(send_data3);}
}uint8_t g_count = 0;
void HAL_LPTIM_AutoReloadMatchCallback(LPTIM_HandleTypeDef *hlptim)
{g_count++;if(g_count==100){OLED_ShowString(0, 0, (unsigned char *)"REC:None        ", 16);OLED_ShowString(0, 2, (unsigned char *)"ADC:None        ", 16);  HAL_LPTIM_Counter_Stop_IT(&hlptim1);g_count = 0;}
}

main.c

引入头文件

/* USER CODE BEGIN Includes */
#include "Task_Main.h"
/* USER CODE END Includes */

板级初始化

  /* USER CODE BEGIN 2 */Task_BrdInit();/* USER CODE END 2 */

主控代码

  /* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */Task_Main();}/* USER CODE END 3 */

实验现象

Node_A初始化画面

Node_B初始化画面

Node_A指令画面



Node_B指令画面



1 -【第十一届】蓝桥杯物联网试题(模拟题)相关推荐

  1. 第十一届蓝桥杯省赛真题——单词分析

    第十一届蓝桥杯省赛真题--单词分析 单词分析: [问题描述] 小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组成,有些单词很长,远远超过正常英文单词的长度. 小蓝学了很长时间也记不住一 ...

  2. 第十一届蓝桥杯国赛H题答疑

    第十一届蓝桥杯国赛H题答疑 题目 [题目描述] [输入格式] [输出格式] [样例输入] [样例输出] [样例说明] [评测用例规模与约定] 分析(这篇水文的精髓) 代码 题目 万一图片加载不出来的话 ...

  3. 第十一届蓝桥杯python试题_Python描述 第十一届蓝桥杯省赛第一场 试题 I: 字符串编码...

    试题 I: 字符串编码 时间限制: 1.0s 内存限制: 512.0MB 本题总分 25 分 [问题描述] 小明发明了一种给由全大写字母组成的字符串编码的方法.对于每一个大 写字母 小明将它转换成它在 ...

  4. 【蓝桥杯考前突击】第十一届蓝桥杯校赛模拟C/C++ 种草

    问题描述小明有一块空地,他将这块空地划分为 n 行 m 列的小块,每行和每列的长度都为 1.小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地.这些草长得很快,每个月,草都会向外长出一些,如 ...

  5. 2020第十一届蓝桥杯省赛真题:跑步锻炼

    文章目录 试题 B:跑步锻炼 [问题描述] [思路] [代码] [结果] [做题链接] 试题 B:跑步锻炼 类型:结果填空,总分:5分 [问题描述] 小蓝每天都锻炼身体. 正常情况下,小蓝每天跑 1 ...

  6. 第十一届蓝桥杯大赛决赛赛题 C++ 大学C组

    试题A:美丽的2 问题描述   小蓝特别喜欢2,今年是公元2020年,他特别高兴.   他很好奇,在公元1年到公元2020年(包含)中,有多少个年份的数位中包含数字2? 算法设计 遍历1~2020,如 ...

  7. 第十一届蓝桥杯——JAVA组真题

    1.约数问题 public class Main { // 对于一个整数,能整除这个整数的数称为这个数的约数. // 例如:1, 2, 3, 6 都是 6 的约数. // 请问 78120 有多少个约 ...

  8. 历届蓝桥杯JavaC组真题标题

    第六届蓝桥杯 校赛 标题:杨辉三角 标题:调和级数 标题:回文素数 标题:让我怎能过大年 标题:位平方和. 标题:1/a的分数称为单位分数. 标题:上台阶 第六届蓝桥杯 省赛 标题:隔行变色 标题:立 ...

  9. C/C++描述 第十一届蓝桥杯省赛 C/C++ 大学B组 第一场(2020.7.5) 试题 题目+题解

      大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客 本文原创为亓官劼,请大家支持原创,部分平台一直在盗取博主的文章! ...

最新文章

  1. 5道面试题,拿捏String底层原理
  2. 四川大学研究生的一封公开信
  3. socket 非阻塞 linux,linux 非阻塞式socket编程求助。。
  4. 泛泰SKY新出品 DMB电视手机IM-U160
  5. windows系统服务器添加ssl证书
  6. 7段均衡器最佳调节图_超高级的吉他均衡器 更细腻的控制 你值得拥有
  7. 数据分析JSON板块的基本使用(以分析比特币收盘价为例),附完整的Python代码及json文件详解---数据可视化
  8. 一天完成一点,进度太慢了啊
  9. 【服务器】宝塔LNMP安装Discuz!
  10. 开学季学生党蓝牙耳机推荐,性价比高的无线耳机分享
  11. 串联电阻分压计算器---实际常用电阻表
  12. 成功解决生意参谋中transit-id和加密数据date
  13. python 主函数传参数
  14. vue + vant 使用阿里图标库
  15. 优化设计-外点惩罚函数法-MATLAB编程
  16. 转载:  Lodop、C-Lodop打印控件报错
  17. 无权图的单源最短路径
  18. 易宝典: Win 7 隐藏小功能——屏幕录制
  19. PS新手教程:加深减淡工具使用方法
  20. python3 简单选课系统

热门文章

  1. python如何不以科学计数法形式输出小数
  2. 什么是smarty及其安装
  3. matlab 牛顿法 非线性方程,Matlab学习手记——非线性方程组求解:牛顿法
  4. 薛定谔的猫量子计算机,亚马逊新的量子计算机设计竞依赖于微小的“薛定谔的猫”...
  5. Metasploit(一)
  6. WUST2020部分WP
  7. linux中as命令,Linux as 命令 command not found as 命令详解 as 命令未找到 as 命令安装 - CommandNotFound ⚡️ 坑否...
  8. linux调整笔记本色彩,linux 调节笔记本屏幕亮度
  9. 二十几岁的女孩应该有这几点思想
  10. excel显著性检验_《如何利用Excel对所得数据进行显著性分析?》 excel怎么做方差齐性检验...