【原创】ESP32+NTC热敏电阻测温SD卡采集OLED显示,Begabung_TC250
摘要
利用ESP32设计一款八通道热敏电阻采集方案,并使用SD卡采集及OLED显示,通过Arduino_IDE编写。本产品在淘宝店Begabung发售,型号:TC250。
内容
零件准备:ESP32芯片、OLED模块、SD卡模块,NTC热敏电阻
所需资料
接线参考安信可NodeMCU-32管脚示意图
SD卡模块
OLED模块,可直接查看数据及SD卡采集情况
本产品自定义管脚包括SD卡所需的CS、SCK、MOSI、MISO;OLED模块所需的SCL、SDA模块;此为还接出TEST开关,CAN通讯接口及天线接口。
CS |
14 |
SCK | 27 |
MOSI | 26 |
MISO | 25 |
SCL | 19 |
SDA | 22 |
Button | 21 |
CAN_TX | 10 |
CAN_RX | 9 |
天线 |
八位ADC采集模拟信号量
ADC0 | 36 |
ADC1 | 37 |
ADC2 | 38 |
ADC3 | 39 |
ADC4 | 32 |
ADC5 | 33 |
ADC6 | 34 |
ADC7 | 35 |
管脚定义代码,可根据设计需求自行更改
// define adc pin
#define ADC0 36
#define ADC1 37
#define ADC2 38
#define ADC3 39
#define ADC4 32
#define ADC5 33
#define ADC6 34
#define ADC7 35// define IIC pin
#define SCL 19
#define SDA 22// define led pin
#define INDICATOR 23// define SPI pin
#define CS 14
#define MISO 25
#define MOSI 26
#define SCK 27// define CAN pin
#define CAN_TX 10
#define CAN_RX 9// define test button pin
#define BUTTON 21
原理
热敏电阻NTC与10K电阻对3.3V电源分压,ADC接口采集热敏电阻电压接入ESP32进行处理。NTC热敏电阻阻值范围为1034.600KΩ至0.337KΩ,测温范围为-55°C至125°C,精度±1%。
电压换算公式修改数值后对其他传感器同样适用
//电压换算成温度
float temp_cacu(float a)
{float Rt=0;float Rp=10000;float T2=273.15+25;float Bx=3950;float Ka=273.15;float vol=0.0;float temp = 0.0;vol=(float)(a * 3.3 / 4096);Rt=vol*Rp/(3.3-vol);temp=(float)1/(1/T2+log(Rt/Rp)/Bx)-Ka+0.5;return temp;
}
总代码
#include <Wire.h>
#include <Arduino.h>
#include <SPI.h>
#include <SD.h>// 引入驱动OLED0.96所需的库
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>// define adc pin
#define ADC0 36
#define ADC1 37
#define ADC2 38
#define ADC3 39
#define ADC4 32
#define ADC5 33
#define ADC6 34
#define ADC7 35// define IIC pin
#define SCL 19
#define SDA 22// define led pin
#define INDICATOR 23// define SPI pin
#define CS 14
#define MISO 25
#define MOSI 26
#define SCK 27// define CAN pin
#define CAN_TX 10
#define CAN_RX 9// define test button pin
#define BUTTON 21// 自定义重置引脚,虽然教程未使用,但却是Adafruit_SSD1306库文件所必需的
#define OLED_RESET 4
#define SCREEN_WIDTH 128 // 设置OLED宽度,单位:像素
#define SCREEN_HEIGHT 64 // 设置OLED高度,单位:像素
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);File dataFile;float t1 =0;
float t2 =0;
float t3 =0;
float t4 =0;
float t5 =0;
float t6 =0;
float t7 =0;
float t8 =0;void setup()
{Serial.begin(9600);//传感器// 初始化Wire库Wire.begin(SDA, SCL);// 初始化OLED并设置其IIC地址为 0x3Cdisplay.begin(SSD1306_SWITCHCAPVCC, 0x3C);pinMode(INDICATOR, OUTPUT);digitalWrite(INDICATOR, LOW);pinMode(CS, OUTPUT);//定义SPI.begin(SCK,MISO,MOSI,CS);sd_card_init();
// if(!BUTTON){
// dataFile = SD.open("/TC250.txt", FILE_WRITE);
// }
// dataFile = SD.open("/TC250.txt", FILE_WRITE);uint8_t cardType=SD.cardType();if(cardType==CARD_NONE){Serial.println("No SD card attached");return;}dataFile = SD.open("/TC250.txt", FILE_WRITE);//sd卡}void loop()
{//oledwords_display();display.display();String dataString = "";dataString += String(temp_cacu(t1));dataString += ",";dataString += String(temp_cacu(t2));dataString += ",";dataString += String(temp_cacu(t3));dataString += ",";dataString += String(temp_cacu(t4));dataString += ",";dataString += String(temp_cacu(t5));dataString += ",";dataString += String(temp_cacu(t6));dataString += ",";dataString += String(temp_cacu(t7));dataString += ",";dataString += String(temp_cacu(t8));//传感器t1=analogRead(ADC0);t2=analogRead(ADC1);t3=analogRead(ADC2); t4=analogRead(ADC3); t5=analogRead(ADC4);t6=analogRead(ADC5); t7=analogRead(ADC6);t8=analogRead(ADC7);if(dataFile){dataFile.println(dataString);dataFile.flush();digitalWrite(INDICATOR, LOW);Serial.println(dataString);
// display.setTextSize(1.5);
// display.setCursor(35, 17);
// display.print("SD:ready ");}else{Serial.println("Fail to open 'TC250.txt' .");}delay(250);digitalWrite(INDICATOR, HIGH);delay(250);
}void sd_card_init()
{if(!SD.begin(CS)){Serial.println("Fail to init sd card.");while(1);}
}void words_display()
{// 清除屏幕display.clearDisplay();// 设置字体颜色,白色可见display.setTextColor(WHITE);//设置字体大小display.setTextSize(2);//设置光标位置display.setCursor(35, 0);display.print("TC250");if(dataFile){display.setTextSize(1.5);display.setCursor(35, 17);display.print("(SD:ready) ");}display.setTextSize(1.5);//打印自开发板重置以来的秒数;//display.print(millis() / 1000);display.setCursor(5,27);display.print("d1=");display.print(temp_cacu(t1));display.setCursor(65,27);display.print("d2=");display.print(temp_cacu(t2));display.setCursor(5,37);display.print("d3=");display.print(temp_cacu(t3));display.setCursor(65,37);display.print("d4=");display.print(temp_cacu(t4));display.setCursor(5,47);display.print("d5=");display.print(temp_cacu(t5));display.setCursor(65,47);display.print("d6=");display.print(temp_cacu(t6));display.setCursor(5,57);display.print("d7=");display.print(temp_cacu(t7));display.setCursor(65,57);display.print("d8=");display.print(temp_cacu(t8));}//电压换算成温度
float temp_cacu(float a)
{float Rt=0;float Rp=10000;float T2=273.15+25;float Bx=3950;float Ka=273.15;float vol=0.0;float temp = 0.0;vol=(float)(a * 3.3 / 4096);Rt=vol*Rp/(3.3-vol);temp=(float)1/(1/T2+log(Rt/Rp)/Bx)-Ka+0.5;return temp;
}
【原创】ESP32+NTC热敏电阻测温SD卡采集OLED显示,Begabung_TC250相关推荐
- 硬件模块应用之NTC热敏电阻测温的使用
NTC(Negative Temperature Coefficient)是指随温度上升电阻呈指数关系减小.具有负温度系数的热敏电阻现象和材料. 如果想得到稳定的环境温度,一个稳定的稳压源是很重要的, ...
- ESP32基于Arduino框架,SD卡+MAX98357模块+MP3播放器
ESP32基于Arduino框架,SD卡+MAX98357模块+MP3播放器
- 使用Arduino开发ESP32(13):SD卡的使用
文章目录 目的 SDMMC方式 常用方法 使用示例 SPI方式 常用方法 使用示例 注意事项 总结 目的 对于嵌入式设备来说SD卡也是个比较好用的功能,比如用来存放设备的配置文件.日志文件.执行脚本. ...
- ZYNQ-使用HDMI显示器进行SD卡图片读取显示
学习内容 本文使用带有HDMI接口的显示器,构建图像视频显示的测试工程,利用VDMA进行传输图像视频数据,通过文件系统将SD卡中的照片读取出来然后在显示器显示. 开发环境 vivado 18.3&am ...
- Arduino 负温度系数热敏电阻(NTC)测温
一直都用NTC作为温度传感器来测温,采用Arduino没有现成的例子用NTC测温的,LM35D温度传感器,这款传感器能够测量0-100摄氏度的温度,并以电压的数值输出.从0度开始温度每升高1度输出电压 ...
- 单片机热敏电阻测温度c语言,51单片机热敏电阻测温程序.doc
//本程序是通过热敏电阻测温度(30c-50c #include #include #include #define uchar unsigned char #define uint unsigned ...
- STM32实现PT100测温系统设计报告(OLED屏显示)
本项目设计内容涉及:传感器.嵌入式系统应用.模拟电子技术. 课程:<智能传感技术> 指导老师:覃园芳老师 项目报告目录: 一.任务要求 二.硬件设计 1.分析所要使用的PT ...
- c语言ntc程序,NTC热敏电阻测温度 单片机C和汇编源程序
/*---------------------------------------------------------------------*/ /* --- STC MCU Internation ...
- stm32开发3D打印机(三)——ADC热敏电阻测温、PWM控制(已完成)
3D打印机温度读取 ADC3初始化 主控芯片为stm32f407ZG,对ADC3初始化,精度设定为12位 ADC3代码部分 void init_adc3() /ADC3初始化 {GPIO_InitTy ...
最新文章
- 转 spring配置文件
- 刚发现的 Wi-Fi 安全漏洞,可能危及全球所有设备!
- 有谁还用QuickReport吗?
- boost::endian模块实现benchmark的测试程序
- HDUOJ---1754 I Hate It (线段树之单点更新查区间最大值)
- vue class与style绑定
- 【Python爬虫】BeautifulSoup4 库的一些用法
- Lua程序设计--全局变量
- 等待线程3秒返回结果_Excel小白超级讨厌的计算,原来只用3秒就能出结果!
- Electron 应用实战 (架构篇)
- Spotfire 常用数据类型
- 大数据整合方案架构总结
- Dynamic GCN:Dynamic GCN: Context-enriched Topology Learning for Skeleton-based Action Recognition
- 【计算机网络】因特网概述
- 《笨办法学Python》——习题3
- 哈工大计算机系统大作业——hello P2P
- java程序员找工作前需要做什么准备?
- 整个部门就一个研发?
- datagridvie设置行高列宽_DataGridView 列宽和行高自动调整的设定
- 实体店经营的3步锁客裂变