最近想做一个物联网农业监控系统,第一步就是能够学会使用相关的外设,比如温湿度检测,光照强度检测,还有CO2检测等。

这次讲一下光电传感器的使用和代码实现。

1.知识储备:串口使用,ADC采集(此处用的ADC3)。

2.硬件:stm32f103ve开发板+4pin光电传感器+4pin_oled

AO DO VCC GND
模拟电压输出,有两种状态,一般用不到 数字开关量输出,接的开发板的ADC脚 接vcc,3.3~ 5v 接地

3.使用串口讲解:

main.c
uint8_t receivedata[1];
uint16_t ADC_Value = 0;
float ADC_Volt = 0;
uint8_t str_buff[64] = {0}; void Show_date()
{
printf("%.2f",ADC_Volt);
} void Get_ADC_Value()
{
HAL_ADC_Start(&hadc3);
if(HAL_ADC_PollForConversion(&hadc3,10) == HAL_OK)
{
ADC_Value = HAL_ADC_GetValue(&hadc3);
ADC_Volt = (ADC_Value * 3.3)/4096;//单位为10mv
Show_date();
}
} int main(void)
{
/* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */
SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ADC3_Init();
MX_DMA_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
HAL_UART_Receive_IT(&huart1,(uint8_t *)receivedata,1);//开启串口
/* USER CODE END 2 */ /* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */ /* USER CODE BEGIN 3 */
printf("light:");
Get_ADC_Value();
printf("\r\n");
HAL_Delay(100);
}
/* USER CODE END 3 */
} /* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//接收回调函数
{
if(huart ->Instance == USART1 )
{
HAL_UART_Receive_IT (&huart1 ,(uint8_t *)receivedata ,1); }
}
/* USER CODE END 4 */

**因为要使用printf()函数在串口打印输出,所以需要在串口重定向之后才能使用。**

usart.c
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
return ch;
}
int fgetc(FILE * f)
{
uint8_t ch = 0;
HAL_UART_Receive(&huart1,&ch, 1, 0xffff);
return ch;
}

结果:

4.使用OLED 屏幕显示:

四脚的oled,SCLK和SDA在CUBEMX找两个脚置成输出模式即可。

oled的使用网上有教程,请自行移植。

代码:

mian.c
#include "main.h"
#include "adc.h"
#include "dma.h"
#include "gpio.h" /* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "oled.h"
#include "stdio.h" uint16_t ADC_Value = 0;
uint16_t ADC_Volt = 0;
uint8_t str_buff[64] = {0}; void Show_start();
void OLED_show_data();
void OLED_disp_data();
void Get_ADC_Value(); void SystemClock_Config(void);
/* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */ /* USER CODE END 0 */ /**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */
SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC3_Init();
/* USER CODE BEGIN 2 */
OLED_Init();
Show_start();
HAL_Delay(1000);
OLED_Clear(); // OLED_show_data(); /* USER CODE END 2 */ /* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */ /* USER CODE BEGIN 3 */
OLED_show_data();
Get_ADC_Value();
}
/* USER CODE END 3 */
} /* USER CODE BEGIN 4 */
void Show_start()
{
OLED_Clear();
OLED_ShowChinese(0,0,0,16);
OLED_ShowChinese(16,0,1,16);
OLED_Refresh();
} void OLED_show_data()
{ OLED_ShowChinese(0,0,2,16);
OLED_ShowChinese(16,0,3,16);
OLED_ShowString(32,0,":",16);
OLED_Refresh();
} void OLED_disp_data()
{
sprintf((char *)str_buff,"%d.%d%d",ADC_Volt/100,(ADC_Volt%100)/10,ADC_Volt%10);
OLED_ShowString(48,0,str_buff,16);
} void Get_ADC_Value()
{
HAL_ADC_Start(&hadc3);
if(HAL_ADC_PollForConversion(&hadc3,10) == HAL_OK)
{
ADC_Value = HAL_ADC_GetValue(&hadc3);
ADC_Volt = ADC_Value * 330/4096;//单位为10mv
OLED_disp_data();
}
} /* USER CODE END 4 */

结果显示:

想要完整工程

链接:https://pan.baidu.com/s/1OP7wtyOTdvw8_M2gYLfXYw提取码:22kh

链接:https://pan.baidu.com/s/1bl3cA8-8uHEv5rSId5UCxg提取码:abdc

本人能力有限,如有不足请指正。

stm32f103ve+光电传感器使用教程+oled(HAL库)的更多相关文章

  1. stm32f103ve+BH1750使用教程+oled(HAL库)

    1.硬件:BH1750模块+oled 2.代码:BH1750是标准的iic协议的外设,我这里单独有iic的文件,之后想要实现多个设备共用一个iic. BH1750.c 1 #include " ...

  2. 【STM32H7教程】第47章 STM32H7的FMC总线基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第47章       STM32H7的FMC总线基础知识和HA ...

  3. 【STM32H7教程】第12章 STM32H7的HAL库框架设计学习

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第12章       STM32H7的HAL库框架设计学 ...

  4. 【STM32H7教程】第32章 STM32H7的TIM定时器基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第32章       STM32H7的TIM定时器基础知识和H ...

  5. 【STM32H7教程】第29章 STM32H7的USART串口基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第29章       STM32H7的USART串口基础知识和 ...

  6. 【STM32H7教程】第17章 STM32H7之GPIO的HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第17章       STM32H7之GPIO的HAL库API ...

  7. 【STM32H7教程】第16章 STM32H7必备的HAL库API(重要)

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第16章       STM32H7必备的HAL库API(重要 ...

  8. 【STM32H7教程】第61章 STM32H7的MDMA基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第61章       STM32H7的MDMA基础知识和HAL ...

  9. 【STM32H7教程】第59章 STM32H7的DAC基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第59章       STM32H7的DAC基础知识和HAL库 ...

  10. 【STM32H7教程】第57章 STM32H7硬件JPEG编解码基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第57章       STM32H7硬件JPEG编解码基础知识 ...

随机推荐

  1. protojson简介

    google.golang.org/protobuf/encoding/protojson 是 Go 语言中的一个库,用于处理 Protocol Buffers(protobuf)和 JSON 之间的 ...

  2. 从python3到python2的踩坑

    为什么要从py3到py2 背景:之前自学写过一些py3,而且我写的工具是基于python3来写的,但是公司项目是使用python2版本,希望已有工具或者新写的工具能同时在py2和py3上执行,所以记录 ...

  3. 分布式ID介绍&实现方案总结

    分布式 ID 介绍 什么是 ID? 日常开发中,我们需要对系统中的各种数据使用 ID 唯一表示,比如用户 ID 对应且仅对应一个人,商品 ID 对应且仅对应一件商品,订单 ID 对应且仅对应一个订单. ...

  4. 从零构建医疗领域知识图谱的KBQA问答系统:其中7类实体,约3.7万实体,21万实体关系。

    从零构建医疗领域知识图谱的KBQA问答系统:其中7类实体,约3.7万实体,21万实体关系. 项目效果 以下两张图是系统实际运行效果: 1.项目运行方式 运行环境:Python3 数据库:neo4j 预 ...

  5. Python使用Paramiko实现SSH管理

    paramiko 是一个用于在Python中实现SSHv2协议的库,它支持对远程服务器进行加密的通信.目前该模块支持所有平台架构且自身遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接,你 ...

  6. 4.9 x64dbg 内存处理与差异对比

    LyScript 插件中针对内存读写函数的封装功能并不多,只提供了最基本的内存读取和内存写入系列函数的封装,本章将继续对API接口进行封装,实现一些在软件逆向分析中非常实用的功能,例如ShellCod ...

  7. Linux基础命令 [补档-2023-06-28]

    Linux基础命令 1-1.命令的基本格式 ​ Linux系统命令的通用格式为: ​ command [-options] [parameter] ​ 其中 ​ -command 命令本身 ​ -op ...

  8. Redis订阅模式在生产环境引起的内存泄漏

    内存泄漏 内存泄漏指的就是在运行过程中定义的各种各样的变量无法被垃圾回收器正常标记为不可达并触发后续的回收流程,主要原因还是因为对可回收对象引用没有去除,导致垃圾回收器通过GC ROOT可达性分析时认 ...

  9. [Java] 解析Xml配置文件

    1.解析方法 import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;impo ...

  10. SpringCloud-01-Eureka Ribbon

    1.微服务技术 2.SpringCloud SpringCloud是目前国内使用最广泛的微服务框架.官网地址:https://spring.io/projects/spring-cloud. Spri ...