104浏览
查看: 104|回复: 2

[项目] 【Arduino 动手做】由ESP32C3驱动的小型便携袖珍温度计

[复制链接]
AHT10 是一款由ESP32C3驱动的 MCU 制成的小型便携袖珍温度计,搭配SSD1306 128x32 像素屏幕,用于测量温度。

顾名思义,这是一款紧凑、实用的温湿度计,由基于ESP32C3的开发板、SSD1306 OLED 显示屏、AHT10 传感器、LiPo 电池和 3D 打印部件制成。

在这里,使用 AHT10 温度和湿度传感器获取 TEMP 值,该传感器在 OLED 屏幕上显示数据。我们能够将设备的尺寸缩小到 25x25x48 毫米的微小外形尺寸,这使得它非常适合放在口袋里随身携带,让我们随时随地收集温度读数。

这是通过构建中使用的小型电池和相对紧凑的组件实现的。

整篇文章都是关于这个设备的构建过程,所以让我们开始构建吧。

所需材料
这些是此版本中使用的组件:

SSD1306展示(从 PCBWAY 的礼品店获得)
ESP32C3 DEV 板甲虫
3D打印零件
AHT10 温度传感器
原型板
锂聚合物电池,3.7V-100mAh电池
M2 螺丝
电线

因此,这是这个简单构建的结果:使用定制电路和 3D 打印部件从头开始制作的小型紧凑型温度和湿度计。

如果您想连续收集不同点的温度读数,AHT10 的准确温度读数非常有用。目标是利用这个易于携带且便携的小仪表来测试我工作地点两个不同房间的湿度和温度。

至于这个项目的第 3 级,我将在这个项目的下一次迭代中使用定制 PCB,敬请期待。

我已经包含了所有文件,因此您可以尝试自己制作一个。

如果您需要有关此项目的任何帮助,请发表评论。 伙计们,今天就到这里了。

感谢PCBWAY对这个项目的支持。

如果您需要以更低的成本和优质的优质 PCB 和模板服务,你们可以查看它们。

我很快就会带着一个新项目回来!

【Arduino 动手做】由ESP32C3驱动的小型便携袖珍温度计图1

【Arduino 动手做】由ESP32C3驱动的小型便携袖珍温度计图2


【Arduino 动手做】由ESP32C3驱动的小型便携袖珍温度计图3

【Arduino 动手做】由ESP32C3驱动的小型便携袖珍温度计图5

【Arduino 动手做】由ESP32C3驱动的小型便携袖珍温度计图4

【Arduino 动手做】由ESP32C3驱动的小型便携袖珍温度计图6

【Arduino 动手做】由ESP32C3驱动的小型便携袖珍温度计图7

驴友花雕  中级技神
 楼主|

发表于 2025-8-2 13:25:53

【Arduino 动手做】由ESP32C3驱动的小型便携袖珍温度计

项目代码

  1. #include <Wire.h>
  2. #include <AHTxx.h>
  3. #include <Adafruit_SSD1306.h>
  4. #include <Adafruit_GFX.h>
  5. #define OLED_WIDTH 128
  6. #define OLED_HEIGHT 32
  7. #define OLED_ADDR   0x3C
  8. Adafruit_SSD1306 display(OLED_WIDTH, OLED_HEIGHT);
  9. float ahtValue;                               //to store T/RH result
  10. AHTxx aht10(AHTXX_ADDRESS_X38, AHT1x_SENSOR); //sensor address, sensor type
  11. void setup()
  12. {
  13.   #if defined(ESP8266)
  14.   WiFi.persistent(false);  //disable saving wifi config into SDK flash area
  15.   WiFi.forceSleepBegin();  //disable AP & station by calling "WiFi.mode(WIFI_OFF)" & put modem to sleep
  16.   #endif
  17.   display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  18.   display.clearDisplay();
  19.   Serial.begin(115200);
  20.   Serial.println();
  21.   
  22.   while (aht10.begin() != true) //for ESP-01 use aht10.begin(0, 2);
  23.   {
  24.     Serial.println(F("AHT1x not connected or fail to load calibration coefficient")); //(F()) save string to flash & keeps dynamic memory free
  25.     delay(5000);
  26.   }
  27.   Serial.println(F("AHT10 OK"));
  28.   //Wire.setClock(400000); //experimental I2C speed! 400KHz, default 100KHz
  29. }
  30. void loop()
  31. {
  32.   /* DEMO - 1, every temperature or humidity call will read 6-bytes over I2C, total 12-bytes */
  33.   Serial.println();
  34.   Serial.println(F("DEMO 1: read 12-bytes"));
  35.   ahtValue = aht10.readTemperature(); //read 6-bytes via I2C, takes 80 milliseconds
  36.   display.clearDisplay();
  37.   display.setTextSize(2);
  38.   display.setTextColor(WHITE);
  39.   display.setCursor(30, 0);
  40.   display.println(F("Temp-"));
  41. //  Serial.print(F("Temperature...: "));
  42.   
  43.   if (ahtValue != AHTXX_ERROR) //AHTXX_ERROR = 255, library returns 255 if error occurs
  44.   {
  45.   display.setTextSize(2);
  46.   display.setTextColor(WHITE);
  47.   display.setCursor(35, 25);
  48.   display.println(ahtValue);
  49.   display.display();
  50. //    Serial.print(ahtValue);
  51.    
  52.   }
  53.   else
  54.   {
  55.     printStatus(); //print temperature command status
  56.     if   (aht10.softReset() == true) Serial.println(F("reset success")); //as the last chance to make it alive
  57.     else                             Serial.println(F("reset failed"));
  58.   }
  59.   delay(2000); //measurement with high frequency leads to heating of the sensor, see NOTE
  60.   ahtValue = aht10.readHumidity(); //read another 6-bytes via I2C, takes 80 milliseconds
  61.   display.clearDisplay();
  62.   display.setTextSize(2);
  63.   display.setTextColor(WHITE);
  64.   display.setCursor(30, 0);
  65.   display.println(F("Humd-"));
  66.   
  67.   
  68. //  Serial.print(F("Humd-"));
  69.   
  70.   if (ahtValue != AHTXX_ERROR) //AHTXX_ERROR = 255, library returns 255 if error occurs
  71.   {
  72.   display.setTextSize(2);
  73.   display.setTextColor(WHITE);
  74.   display.setCursor(35, 25);
  75.   display.println(ahtValue);
  76.   display.display();
  77.    
  78.    
  79. //   Serial.println(F(" +-2%"));
  80.   }
  81.   else
  82.   {
  83.     printStatus(); //print humidity command status
  84.   }
  85.   delay(2000); //measurement with high frequency leads to heating of the sensor, see NOTE
  86.   /* DEMO - 2, temperature call will read 6-bytes via I2C, humidity will use same 6-bytes */
  87.   Serial.println();
  88.   Serial.println(F("DEMO 2: read 6-byte"));
  89.   ahtValue = aht10.readTemperature(); //read 6-bytes via I2C, takes 80 milliseconds
  90.   Serial.print(F("Temperature: "));
  91.   
  92.   if (ahtValue != AHTXX_ERROR) //AHTXX_ERROR = 255, library returns 255 if error occurs
  93.   {
  94.     Serial.print(ahtValue);
  95.     Serial.println(F(" +-0.3C"));
  96.   }
  97.   else
  98.   {
  99.     printStatus(); //print temperature command status
  100.   }
  101.   ahtValue = aht10.readHumidity(AHTXX_USE_READ_DATA); //use 6-bytes from temperature reading, takes zero milliseconds!!!
  102.   Serial.print(F("Humidity...: "));
  103.   
  104.   if (ahtValue != AHTXX_ERROR) //AHTXX_ERROR = 255, library returns 255 if error occurs
  105.   {
  106.     Serial.print(ahtValue);
  107.     Serial.println(F(" +-2%"));
  108.   }
  109.   else
  110.   {
  111.     printStatus(); //print temperature command status not humidity!!! RH measurement use same 6-bytes from T measurement
  112.   }
  113.   delay(10000); //recomended polling frequency 8sec..30sec
  114. }
  115. void printStatus()
  116. {
  117.   switch (aht10.getStatus())
  118.   {
  119.     case AHTXX_NO_ERROR:
  120.       Serial.println(F("no error"));
  121.       break;
  122.     case AHTXX_BUSY_ERROR:
  123.       Serial.println(F("sensor busy, increase polling time"));
  124.       break;
  125.     case AHTXX_ACK_ERROR:
  126.       Serial.println(F("sensor didn't return ACK, not connected, broken, long wires (reduce speed), bus locked by slave (increase stretch limit)"));
  127.       break;
  128.     case AHTXX_DATA_ERROR:
  129.       Serial.println(F("received data smaller than expected, not connected, broken, long wires (reduce speed), bus locked by slave (increase stretch limit)"));
  130.       break;
  131.     case AHTXX_CRC8_ERROR:
  132.       Serial.println(F("computed CRC8 not match received CRC8, this feature supported only by AHT2x sensors"));
  133.       break;
  134.     default:
  135.       Serial.println(F("unknown status"));   
  136.       break;
  137.   }
  138. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-8-2 13:27:01

【Arduino 动手做】由ESP32C3驱动的小型便携袖珍温度计

【Arduino 动手做】由ESP32C3驱动的 MCU 制成的小型便携袖珍温度计
项目链接:https://www.hackster.io/Arnov_Sh ... t-temp-meter-4b0119
项目作者:阿诺夫·夏尔马

项目视频:https://www.youtube.com/watch?v=7zadFE9VqTA
项目代码:https://www.hackster.io/code_files/651932/download
3D打印文件:https://hacksterio.s3.amazonaws. ... r_v1_6KzV1nyzg3.f3d

【Arduino 动手做】由ESP32C3驱动的小型便携袖珍温度计图2

【Arduino 动手做】由ESP32C3驱动的小型便携袖珍温度计图1

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail