摘要

利用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. Ubuntu 系统自带的截图工具screenshot
  2. c语言表达式和表达式语句的区别,C语言中表达式和表达式语句的区别(什么又叫做表达式)?...
  3. python3.6安装tesserocr
  4. 技术人员是如何分析游戏环境的? 《影之诗》牌组趋势分析
  5. 余额宝升级,限额限时解除,以后再也不用定闹钟抢破头了!
  6. mysql权限说法正确的是,【多选题】下面关于修改 MySQL 配置的说法中,正确的是...
  7. 将字符串String str= “abc god 中国 java“ 反转每个单词 结果: “cba dog 国中
  8. activiti 工作流设置并行审批_activity、jbpm5、snakerflow常用工作流审批流对比
  9. python-cx_oracle报错“DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: “
  10. 医疗大数据分析需考虑哪些因素
  11. linux管理员权限下执行popen,执行shell命令的函数——system()、popen()
  12. JAVA学习心得——DBUtil工具类
  13. java jco_JAVA通过JCo连接SAP
  14. 安装vue最新脚手架
  15. java 压缩文件夹有几率压缩失败,打开显示不可预料的末端且用其他专业软件解压文件没压缩完全
  16. knuth的SJT实现
  17. IOS音乐播放器代码
  18. 字典(python学习)
  19. android-759b1c是什么,[原创]hooker + jadx 动静结合内存漫游窥视某社交软件视频号功能的数据...
  20. 前端图表制作——HighCharts图表入门

热门文章

  1. 佛山南海区积分入户指标数如何分配
  2. Cadence原理图绘制不同页面之间的电气连接
  3. 技术干货实践:如何在树莓派模拟运行陀螺仪扫地机
  4. 苹果id可以彻底注销吗_深圳市个体户营业执照可以网上注销吗
  5. H5新增标签及其属性
  6. oracle表插入一列数据
  7. aspose.cells导出EXCEL分页分组函数
  8. 攻防世界----工业协议分析2
  9. 发工资了!一次性送 10 个静音鼠标,速来!
  10. 重磅!《命令与征服》和《红色警戒》源代码在GitHub公布了