摘要

利用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相关推荐

  1. 硬件模块应用之NTC热敏电阻测温的使用

    NTC(Negative Temperature Coefficient)是指随温度上升电阻呈指数关系减小.具有负温度系数的热敏电阻现象和材料. 如果想得到稳定的环境温度,一个稳定的稳压源是很重要的, ...

  2. ESP32基于Arduino框架,SD卡+MAX98357模块+MP3播放器

    ESP32基于Arduino框架,SD卡+MAX98357模块+MP3播放器

  3. 使用Arduino开发ESP32(13):SD卡的使用

    文章目录 目的 SDMMC方式 常用方法 使用示例 SPI方式 常用方法 使用示例 注意事项 总结 目的 对于嵌入式设备来说SD卡也是个比较好用的功能,比如用来存放设备的配置文件.日志文件.执行脚本. ...

  4. ZYNQ-使用HDMI显示器进行SD卡图片读取显示

    学习内容 本文使用带有HDMI接口的显示器,构建图像视频显示的测试工程,利用VDMA进行传输图像视频数据,通过文件系统将SD卡中的照片读取出来然后在显示器显示. 开发环境 vivado 18.3&am ...

  5. Arduino 负温度系数热敏电阻(NTC)测温

    一直都用NTC作为温度传感器来测温,采用Arduino没有现成的例子用NTC测温的,LM35D温度传感器,这款传感器能够测量0-100摄氏度的温度,并以电压的数值输出.从0度开始温度每升高1度输出电压 ...

  6. 单片机热敏电阻测温度c语言,51单片机热敏电阻测温程序.doc

    //本程序是通过热敏电阻测温度(30c-50c #include #include #include #define uchar unsigned char #define uint unsigned ...

  7. STM32实现PT100测温系统设计报告(OLED屏显示)

        本项目设计内容涉及:传感器.嵌入式系统应用.模拟电子技术.   课程:<智能传感技术>   指导老师:覃园芳老师 项目报告目录: 一.任务要求 二.硬件设计 1.分析所要使用的PT ...

  8. c语言ntc程序,NTC热敏电阻测温度 单片机C和汇编源程序

    /*---------------------------------------------------------------------*/ /* --- STC MCU Internation ...

  9. stm32开发3D打印机(三)——ADC热敏电阻测温、PWM控制(已完成)

    3D打印机温度读取 ADC3初始化 主控芯片为stm32f407ZG,对ADC3初始化,精度设定为12位 ADC3代码部分 void init_adc3() /ADC3初始化 {GPIO_InitTy ...

最新文章

  1. 转 spring配置文件
  2. 刚发现的 Wi-Fi 安全漏洞,可能危及全球所有设备!
  3. 有谁还用QuickReport吗?
  4. boost::endian模块实现benchmark的测试程序
  5. HDUOJ---1754 I Hate It (线段树之单点更新查区间最大值)
  6. vue class与style绑定
  7. 【Python爬虫】BeautifulSoup4 库的一些用法
  8. Lua程序设计--全局变量
  9. 等待线程3秒返回结果_Excel小白超级讨厌的计算,原来只用3秒就能出结果!
  10. Electron 应用实战 (架构篇)
  11. Spotfire 常用数据类型
  12. 大数据整合方案架构总结
  13. Dynamic GCN:Dynamic GCN: Context-enriched Topology Learning for Skeleton-based Action Recognition
  14. 【计算机网络】因特网概述
  15. 《笨办法学Python》——习题3
  16. 哈工大计算机系统大作业——hello P2P
  17. java程序员找工作前需要做什么准备?
  18. 整个部门就一个研发?
  19. datagridvie设置行高列宽_DataGridView 列宽和行高自动调整的设定
  20. 实体店经营的3步锁客裂变

热门文章

  1. 第五人格服务器6月维护,第五人格6月7日更新维护公告 更新内容汇总
  2. 仿制《58同城》首页滑动界面
  3. 逐年缩招,7成毕业生留沪,上交电院近年招生情况如何?
  4. mysql winpcap_WinPcap使用小结(一)
  5. 一个人开始废掉的标志是什么? 这些迹象正在侵蚀你的生活
  6. Windows Terminal 使用管理员身份创建标签页
  7. 双系统电脑跳过系统选择界面操作步骤
  8. mysql集群session_PHP集群session共享
  9. 受中国手机挤压,三星史无前例推出高性价比手机A6s
  10. 【qt】qt工程中包含c++标准库头文件,提示找不到。