实践案例丨利用小熊派开发板获取土壤湿度传感器的ADC值
摘要:一文带你用小熊派开发板动手做土壤湿度传感器。
一、实验准备
1.实验环境
- 一块stm32开发板(推荐使用小熊派),以及数据线
- 已经安装STM32CubeMX
- 已经安装KeilMDK,并导入stm32开发板对应的芯片包(小熊派使用的是STM32L431RCT6)
- 准备一个串口调试助手,我使用的是UartAssist(包含在附件中)
- 一个土壤湿度传感器模块

2.目标效果
- 通过CubeMX创建工程并配置参数
- 获取stm32以硬件IIC获取SHT20传感器值(通过SHT20数据手册转化)
- 串口1重定向输出土壤湿度值
二、通过CubeMX生产MDK工程
A.芯片选择
打开CubeMX,进入芯片选择:

选择自己的stm32芯片(即STM32L431RCT6):

B.时钟源RCC设置
更改系统时钟源
系统时钟默认使用内部的高速时钟(HSI),选择使用HSE,时钟更精确
设置外部时钟对应的端口

配置时钟树
STM32L431RCT6系统时钟最大可以为80MHz,我们配置到最大即可

C.参数配置(对应端口设置)
1)配置USART1
使用USART,模式为异步,波特率为115200,无硬件流控制

2)配置ADC通道
知识补充:ADC,模拟-数字转换器,可以将连续变化的模拟信号转化为离散的数字信号。其中,小熊派的ADC1的通道三已经被引出,即PC2
打开ADC1通道3

---
3)配置adc
我们保持默认即可:

D.工程设置
一些基础的设置,包括工程名、存储位置、工程环境、工程中各个文件的组成


E.生成代码

三、代码补充
1. 串口1输出重定向
我们知道printf是打印函数,原理是根据传入的字符串参数格式化打印输出到stdout中。我们需要让printf打印到串口之中,只需要在usart.c文件中模仿printf写一个输出函数即可
- 在添加头文件
/* USER CODE BEGIN 0 */
#include <stdarg.h>
#include <string.h>
#include <stdio.h>
/* USER CODE END 0 */
- 写输出函数
/* USER CODE BEGIN 1 */
void UsartPrintf(UART_HandleTypeDef *huart, char *fmt,...)
{
unsigned char UsartPrintfBuf[296];
va_list ap;
unsigned char *pStr = UsartPrintfBuf;
va_start(ap, fmt);
vsprintf((char *)UsartPrintfBuf, fmt, ap); //格式化
va_end(ap);
while(*pStr != 0)
{
USART1->TDR = *pStr++;
while((USART1->ISR & 0x40) == 0);
}
}
//使用方法:UsartPrintf(&huart1,"hello world\r\n");
/* USER CODE END 1 */
注意:自己添加的代码,需要在begin和end之间
2. 读取传感器ADC值
我们获取传感器adc的值,通过在实验室多次测量不同土壤湿度的ADC值,来表示土壤湿润程度
主函数代码
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_ADC_Start(&hadc1); //开启ADC1
HAL_ADC_PollForConversion(&hadc1,50); //等待ADC转化完成
for(num=0;num<20;num++)
{
AD_Value += HAL_ADC_GetValue(&hadc1);
}
AD_Value = AD_Value/20; //ADC转换的数据20次的平均值
UsartPrintf(&huart1,"ADC20次获取的平均值值为:%d\r\n",AD_Value);
Temperature = ((int16_t)(AD_Value-*TEMP30_CAL_ADDR)*1.0/(int16_t)(*TEMP130_CAL_ADDR-*TEMP30_CAL_ADDR))+30;
UsartPrintf(&huart1,"Temperature is %.2f °\r\n",Temperature); //
//UsartPrintf(&huart1,"%d\r\n",*TEMP130_CAL_ADDR);
//UsartPrintf(&huart1,"%d\r\n",*TEMP30_CAL_ADDR);
}
代码很简单,但是如果我们需要获取更精确的值,可以加入各种滤波算法。然后根据实验值,判断土壤湿润程度。
我通过实验发现,在空气中获取的值为1300左右,包上湿润的餐巾纸后,值为两位数以下。
因此我们可以粗略判断,土壤越湿度,值越小;相反,土壤越干,值越大。
四、编译+下载
点击编译后,0 error,0 warning

小熊派连接在电脑上,代码下载到开发板


五、效果
1.将小熊派串口1和电脑相连,即拨到 AT-MUC,按下复位键

2.打开串口调试助手
连接端口,设置波特率为115200

可以看到,在空气中获取的值为1200-1300;此时,我们不仅掌握了ADC的使用,还掌握了土壤湿度传感器的使用
附件中包含本文工程文件(cubemx + keilMDK)
实践案例丨利用小熊派开发板获取土壤湿度传感器的ADC值的更多相关文章
- 小程序开发之获取客户来源 scene 场景值 手机设备信息
为什么要获取客户来源 用作数据分析,根据客户来源,做精准转化! 判断客户来源入口方式 1.通过官方的scene场景值 常见场景值 场景值ID 说明 1001 发现栏小程序主入口,「最近使用」列表 10 ...
- 开发实践丨用小熊派STM32开发板模拟自动售货机
摘要:本文内容是讲述用小熊派开发板模拟自动售货机,基于论坛提供的工程代码,通过云端开发和设备终端开发,实现终端数据在的华为云平台显示. 本文内容是讲述用小熊派开发板模拟自动售货机,基于论坛提供的工程代 ...
- 如何利用小熊派获取MPU6050六轴原始数据
摘要:使用小熊派开发板,通过硬件IIC与MPU6050六轴传感器模块通信,完成相应寄存器配置,成功获取陀螺仪.加速度计数据. 本问主要讲述使用小熊派开发板+MPU6050六轴传感器,获取加速度计以及陀 ...
- 开发快平台(M302I小e开发板系列教程)
开发快平台(M302I小e开发板系列教程) 开发块平台ESP8266模块相关理解 一. M302I小e开发板源码注释,源码基于:v1.4.0.8-u34.zip 1. user_main.c /*** ...
- 实践案例1-利用低代码开发平台Odoo快速构建律师事务所管理系统
今年10月份中旬的时候,有一段时间没联系的中学同学,我跟他关系比较好,突然打电话给我,希望我给他夫人的律所开发一个小系统.记得十几年前,当他还在他叔叔公司上班的,他是负责销售的,我们几乎每周都碰面,那 ...
- 实践案例丨基于 Raft 协议的分布式数据库系统应用
摘要:简单介绍Raft协议的原理.以及存储节点(Pinetree)如何应用 Raft实现复制的一些工程实践经验. 1.引言 在华为分布式数据库的工程实践过程中,我们实现了一个计算存储分离. 底层存储基 ...
- 实践案例丨基于ModelArts AI市场算法MobileNet_v2实现花卉分类
概述 MobileNetsV2是基于一个流线型的架构,它使用深度可分离的卷积来构建轻量级的深层神经网,此模型基于 MobileNetV2: Inverted Residuals and Linear ...
- 实践案例丨教你一键构建部署发布前端和Node.js服务
如何使用华为云服务一键构建部署发布前端和Node.js服务 构建部署,一直是一个很繁琐的过程 作为开发,最害怕遇到版本发布,特别是前.后端一起上线发布,项目又特别多的时候. 例如你有10个项目,前后端 ...
- 微信小程序开发之获取用户手机号码——使用简单php接口demo进行加密数据解密
后边要做一个微信小程序,并要能获取用户微信绑定的手机号码.而小程序开发文档上边提供的获取手机号码的接口(getPhoneNumber())返回的是密文,需要服务器端进行解密,但是官方提供的开发文档一如 ...
随机推荐
- 循序渐进VUE+Element 前端应用开发(19)--- 后端查询接口和Vue前端的整合
循序渐进VUE+Element 前端应用开发的系列文章中,前面介绍了系统各个功能的处理实现,本篇随笔从一个主线上介绍前后端开发的整合,让我们从ABP框架后端的查询接口的处理,前端API接口调用的封装, ...
- python sqlite3简单操作
python sqlite3简单操作(原创)import sqlite3class CsqliteTable: def __init__(self): pass def linkSqlite3(sel ...
- 你可能不了解的java枚举
枚举在java里也算个老生长谈的内容了,每当遇到一组需要类举的数据时我们都会自然而然地使用枚举类型: public enum Color { RED, GREEN, BLUE, YELLOW; pub ...
- 善用Bash history 命令
大家好,我是良许 相信大家平时都有用 history 命令来查看命令历史记录,但是实际上 history 命令并非只有这个功能,history 还有很多有用的功能.尤其是 Bash 版本的 histo ...
- 《神经网络的梯度推导与代码验证》之FNN(DNN)前向和反向过程的代码验证
在<神经网络的梯度推导与代码验证>之FNN(DNN)的前向传播和反向梯度推导中,我们学习了FNN(DNN)的前向传播和反向梯度求导,但知识仍停留在纸面.本篇章将基于深度学习框架tensor ...
- Tomact的中文乱码设置
在使用Tomact时,有时候使用中文时,窗口会把中文部分显示为乱码,这时需要修改相关配置,让其正常显示. 1.修改server.xml的配置,解决显示窗口的乱码 打开Tomcat下/bin/serve ...
- MySQL索引凭什么能让查询效率提高这么多?
点赞再看,养成习惯,微信搜一搜[三太子敖丙]关注这个喜欢写情怀的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系 ...
- 用Python写一个向数据库填充数据的小工具
一. 背景 公司又要做一个新项目,是一个合作型项目,我们公司出web展示服务,合作伙伴线下提供展示数据. 而且本次项目是数据统计展示为主要功能,并没有研发对应的数据接入接口,所有展示数据源均来自数据库 ...
- opentracting+jager分布式链路追踪探索实践
一.Opentracing opentracing通过提供平台无关.厂商无关的API,使得开发人员可以方便地实现追踪系统.opentracing提供了用于运营支撑系统和针对特定平台的辅助程序库,被跟踪 ...
- SpringBoot打Jar包在命令行运行
首先写一个测试文件 然后点击IDEA右侧的maven,然后选择package,之后点击上面运行或者直接双击即可, 等下方控制台构建成功即可: 然后找到项目目录下target下即可看到打的jar包 然后 ...