基于ADT7410与树莓派的物联网温度监测系统实战指南
1. 项目概述最近在做一个环境监测的小项目核心需求是能实时、高精度地采集温度数据并且能把数据扔到云端方便我随时随地用手机或电脑查看历史曲线和当前状态。市面上温度传感器很多但既要精度高、又要稳定可靠还得方便和树莓派这类单板机搭配选型时我最终锁定了Analog Devices的ADT7410。这颗芯片名气不小以16位分辨率、±0.5°C的精度著称对于需要监测细微温度波动的场景比如实验室恒温箱、服务器机房或者农业大棚来说非常合适。整个系统的架构很清晰ADT7410传感器负责采集温度数据通过I2C总线传给树莓派树莓派上跑一个Python脚本负责读取数据、本地显示我额外加了个OLED屏做本地监控同时将数据上传到Adafruit IO这个物联网平台最后在Adafruit IO上配置一个仪表盘数据就能以曲线图、仪表盘等形式实时展示了。这套方案的好处是模块化每个部分都可以替换或扩展比如传感器可以换成其他I2C器件云平台也可以换成其他MQTT服务商。下面我就把从硬件接线、环境配置、代码编写到云端调试的全过程结合我实际踩过的坑和优化经验详细拆解一遍。2. 核心硬件选型与电路设计解析2.1 传感器选型为什么是ADT7410在启动一个物联网传感项目时传感器的选型直接决定了数据的质量和系统的可靠性。我选择ADT7410主要基于以下几个维度的考量精度与分辨率ADT7410提供16位的ADC分辨率温度分辨率高达0.0078°C。这意味着它能够检测到极其微小的温度变化对于需要监测0.1°C级别波动的应用如生物培养、精密仪器环境至关重要。其典型精度在±0.5°C以内在-10°C到85°C范围内这个指标在消费级和工业级应用中都属于优秀水平。相比之下常见的DS18B20数字温度传感器精度约为±0.5°C但分辨率通常为12位0.0625°C在需要高分辨率数据记录的场景下略显不足。接口与易用性ADT7410采用标准的I2C接口这是一种在嵌入式领域被广泛支持的双线串行通信协议。对于树莓派这类拥有丰富GPIO和成熟软件生态的单板机来说I2C设备的驱动和编程支持非常完善可以大大降低开发门槛。传感器本身还集成了温度数字转换功能树莓派无需额外的ADC模块直接通过I2C读取寄存器即可获得换算好的温度值简化了电路和代码。供电与功耗其工作电压范围为2.7V至5.5V与树莓派的3.3V GPIO电平完美兼容无需电平转换电路。在正常工作模式下功耗约为700µA低功耗模式下可降至1µA这对于由电池供电的远程监测节点是一个重要优势。虽然本项目使用市电供电的树莓派但低功耗特性为未来构建电池供电的卫星节点预留了可能性。封装与可靠性ADT7410芯片本身是小型化封装但Adafruit的Breakout板将其引脚引出至标准的2.54mm间距排针并集成了必要的去耦电容和上拉电阻。这避免了工程师自己焊接精密芯片的麻烦也保证了信号质量提升了项目的成功率和可重复性。2.2 主控与外围设备搭配树莓派型号选择本项目使用树莓派3 Model B但其兼容性覆盖树莓派Zero、3、4等全系列需具备40针GPIO接口。选择3B主要是考虑到其性能足够、社区资源丰富、且GPIO引脚功能完整。树莓派4性能更强但功耗和发热也更大对于持续运行的数据采集任务3B是性价比和稳定性兼顾的选择。本地显示单元我额外增加了一块128x32像素的I2C OLED显示屏。它的作用是在现场提供一个直观的温度读数反馈无需登录云端或SSH到树莓派就能确认系统工作状态。选择OLED是因为其在弱光环境下可视性极佳且功耗极低。这块屏同样通过I2C总线连接与传感器共享SCL和SDA线仅需额外占用一个GPIO引脚GPIO21作为复位信号。这是一个典型的“一主多从”I2C总线应用。连接器与线材为了将树莓派的GPIO引脚方便地引至面包板强烈推荐使用T-Cobbler Plus或类似的GPIO扩展板。它就像树莓派GPIO的“转接头”将40个引脚转换成两排排针可以直接插在面包板上再用杜邦线进行连接避免了直接焊接或使用杂乱的跳线使电路整洁且易于修改。使用彩色编码的杜邦线如红色代表3.3V黑色代表GND黄色代表SDA绿色代表SCL能极大减少接线错误。2.3 电路连接详解与安全注意事项正确的电路连接是硬件系统稳定的基石。下图清晰地展示了树莓派、ADT7410传感器和OLED显示屏三者之间的连接关系Raspberry Pi (40-pin GPIO Header) ┌─────────────────────────────────────┐ │ │ │ 3.3V (Pin 1) ───────────────┐ │ │ GND (Pin 6) ───────────────┼──┐ │ │ SDA (Pin 3) ───────────────┼─┐│ │ │ SCL (Pin 5) ───────────────┼┐││ │ │ GPIO21(Pin 40)──────────────┐││││ │ │ │││││ │ └──────────────────────────────┼┼┼┼┼─┘ │││││ │││││ ADT7410 Sensor │││││ 128x32 OLED Display ┌──────────────┐ │││││ ┌──────────────┐ │ │ │││││ │ │ │ VIN ─────────┼──────┘││││ │ VIN ─────────┼──────┘ │ GND ─────────┼────────┘│││ │ GND ─────────┼────────┘ │ SDA ─────────┼─────────┘││ │ SDA ─────────┼─────────┘ │ SCL ─────────┼──────────┘│ │ SCL ─────────┼──────────┘ │ │ │ │ RST ─────────┼──────────┐ └──────────────┘ │ │ │ │ │ └──────────────┘ │ │ │ └────────────────────────────┘接线步骤与要点电源先行务必先连接所有设备的电源3.3V和地线GND。树莓派的3.3V引脚Pin 1为传感器和显示屏提供工作电压。共地是电路正常工作的前提。共享I2C总线将树莓派的SDAPin 3同时连接到ADT7410的SDA和OLED的SDA引脚同样将SCLPin 5同时连接到两者的SCL引脚。I2C总线支持多设备靠唯一的设备地址区分。独立控制线OLED的复位引脚RST连接到树莓派的GPIO21Pin 40。这是一个通用输出引脚用于在启动时对显示屏进行硬件复位确保其处于已知状态。地址确认ADT7410的默认I2C地址是0x48可通过引脚配置更改。SSD1306 OLED的常用地址是0x3C。连接多个I2C设备时务必确认地址不冲突。可以使用树莓派上的i2cdetect -y 1命令扫描总线上的设备地址。重要安全提示树莓派的GPIO引脚除电源外耐压值通常为3.3V且驱动能力有限单个引脚输出电流约16mA。切勿将5V设备直接连接到这些引脚否则可能永久损坏树莓派。ADT7410和这款OLED显示屏均为3.3V逻辑电平设备因此可以直接连接。若使用5V设备必须使用逻辑电平转换器。3. 软件环境配置与核心库部署硬件连接妥当后软件环境的搭建是让系统“活”起来的关键。树莓派操作系统Raspbian/Raspberry Pi OS已经内置了对I2C和Python的良好支持但我们仍需进行一些针对性的配置和库安装。3.1 操作系统基础配置首先确保你的树莓派已经安装了最新版本的Raspberry Pi OSBullseye或更高版本并完成了基本的区域、语言和网络设置。通过终端或SSH登录后需要开启I2C接口功能。启用I2C接口sudo raspi-config在配置工具中依次选择Interface Options-I2C-Yes来启用I2C驱动。完成后重启树莓派。验证I2C启用及设备识别 重启后运行以下命令安装I2C工具并扫描总线sudo apt-get install -y i2c-tools i2cdetect -y 1如果一切正常你会在输出表格中看到两个地址0x48ADT7410和0x3COLED。这证明硬件连接和驱动加载成功。3.2 Python环境与关键库安装本项目使用Python3作为开发语言。树莓派OS通常预装了Python3但我们还需要安装包管理工具pip3和一些核心库。确保pip3已安装sudo apt-get update sudo apt-get install -y python3-pip python3-pilpython3-pil是Python Imaging Library用于在OLED上生成和显示图像。安装Adafruit Blinka Blinka是Adafruit为了在单板计算机如树莓派上模拟其CircuitPython硬件API而开发的库。它提供了一个统一的硬件接口层。sudo pip3 install adafruit-blinka安装传感器与显示屏驱动库 这是与ADT7410和SSD1306 OLED通信的核心。sudo pip3 install adafruit-circuitpython-adt7410 sudo pip3 install adafruit-circuitpython-ssd1306安装Adafruit IO REST库 用于将数据发送到Adafruit IO云平台。sudo pip3 install adafruit-io安装OLED显示所需字体 代码中使用了Arial Bold字体来在OLED上显示文本需要单独安装。sudo apt-get install -y ttf-mscorefonts-installer安装过程中会出现一个图形化许可协议界面使用Tab键切换到Ok然后按回车确认即可。3.3 Adafruit IO云端平台初始化本地环境就绪后需要配置云端接收端。Adafruit IO提供了一个免费层级的物联网平台非常适合原型开发和中小型项目。注册与登录访问io.adafruit.com使用你的Adafruit账户登录如果没有需先注册。创建数据源FeedFeed是存储特定类型数据流如温度的容器。在左侧导航栏点击Feeds。点击Actions-Create a New Feed。命名为temperature注意代码中将使用此名称进行匹配描述可填“ADT7410 Temperature Data”。创建仪表盘Dashboard并添加控件点击左侧Dashboards-Actions-Create New Dashboard命名为“Temperature Monitor”。进入新建的仪表盘点击Create New Block。选择Gauge仪表盘控件。在配置页面Connect a Feed选择刚才创建的temperaturefeed。设置Block Title为“环境温度”Gauge Label为“°C”。根据你的监测范围设置Gauge Min Value和Gauge Max Value例如0和50。可以设置Warning/Alert Thresholds比如当温度高于30°C时仪表盘变为红色。获取API密钥这是代码与你的Adafruit IO账户通信的凭证。点击网站右上角的个人头像选择View AIO Key。记录下你的Username和Active Key。这个Key非常重要应像密码一样保管不要直接提交到公开的代码仓库。4. 核心代码实现与逻辑剖析环境配置完成后我们来深入分析并编写核心的Python脚本。这个脚本需要完成四大任务初始化硬件、读取传感器数据、在本地OLED显示、将数据上传至云端。4.1 代码结构总览与初始化首先创建一个名为iot_temperature_logger.py的文件。代码的开头部分是导入必要的库和进行全局配置。# SPDX-FileCopyrightText: 2023 Your Name # SPDX-License-Identifier: MIT 物联网温度监测记录仪 基于ADT7410传感器、树莓派与Adafruit IO import time import board import busio import digitalio from PIL import Image, ImageDraw, ImageFont import adafruit_ssd1306 import adafruit_adt7410 from Adafruit_IO import Client, Feed, RequestError # 用户配置区域 # Adafruit IO 认证信息 ADAFRUIT_IO_USERNAME 你的用户名 # 替换为你的Adafruit IO用户名 ADAFRUIT_IO_KEY 你的Active Key # 替换为你的Adafruit IO Key # 传感器读取与上传间隔秒 # 注意Adafruit IO免费账户有数据点速率限制不宜设置过小 READ_INTERVAL 30 # OLED显示屏复位引脚BCM编号 OLED_RESET_PIN board.D21 # ADT7410的I2C地址默认0x48若修改过地址需相应更改 SENSOR_I2C_ADDR 0x48 # 配置结束 关键点解析导入库board和busio来自Blinka用于抽象化硬件访问。adafruit_ssd1306和adafruit_adt7410是设备专用驱动库。Adafruit_IO是云端通信库。配置变量集中管理将用户名、密钥、间隔时间等需要用户修改的变量放在代码开头并用醒目标注释隔开方便维护和修改。间隔时间设置READ_INTERVAL设置为30秒是一个平衡选择。过短如1秒会快速消耗Adafruit IO免费账户的数据点配额30点/分钟也可能导致网络请求过于频繁。对于温度这种变化相对缓慢的物理量30秒到5分钟的间隔通常是合适的。4.2 硬件初始化与云端连接接下来是初始化函数负责建立与所有硬件及云服务的连接。def initialize_system(): 初始化I2C总线、传感器、显示屏和Adafruit IO客户端 print(正在初始化系统...) # 1. 初始化I2C总线 i2c busio.I2C(board.SCL, board.SDA) # 可选检查总线是否就绪 while not i2c.try_lock(): pass i2c.unlock() print(I2C总线初始化成功。) # 2. 初始化ADT7410温度传感器 try: sensor adafruit_adt7410.ADT7410(i2c, addressSENSOR_I2C_ADDR) sensor.high_resolution True # 启用高分辨率模式16位 # 首次读取前给传感器一点启动时间 time.sleep(0.25) initial_temp sensor.temperature print(fADT7410传感器初始化成功。初始温度: {initial_temp:.2f} °C) except (ValueError, OSError) as e: print(f错误无法初始化ADT7410传感器。请检查接线和地址。错误信息: {e}) return None, None, None # 3. 初始化SSD1306 OLED显示屏 try: oled_reset digitalio.DigitalInOut(OLED_RESET_PIN) display adafruit_ssd1306.SSD1306_I2C(128, 32, i2c, resetoled_reset) # 清屏并显示启动信息 display.fill(0) display.show() print(OLED显示屏初始化成功。) except OSError as e: print(f警告无法初始化OLED显示屏。错误信息: {e}) display None # 设置为None后续代码会判断并跳过显示部分 # 4. 初始化Adafruit IO客户端 try: aio Client(ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) # 测试连接获取用户信息 user_info aio.user() print(fAdafruit IO连接成功。用户名: {user_info.username}) # 获取或创建名为‘temperature’的feed try: temperature_feed aio.feeds(temperature) except RequestError: # 如果feed不存在则创建它 print(未找到‘temperature’ feed正在创建...) new_feed Feed(nametemperature) temperature_feed aio.create_feed(new_feed) except Exception as e: print(f错误无法连接Adafruit IO。请检查网络和API密钥。错误信息: {e}) aio None temperature_feed None return sensor, display, aio, temperature_feed关键点解析与避坑指南I2C总线锁定i2c.try_lock()和i2c.unlock()用于在多线程或复杂应用中安全访问总线。在简单单线程循环中busio.I2C()通常已足够但加上此检查能增强鲁棒性。传感器高分辨率模式sensor.high_resolution True这一行至关重要。ADT7410在默认的13位模式下分辨率较低。启用16位高分辨率模式才能发挥其0.0078°C分辨率的优势。转换时间会稍长约240ms但对于30秒的读取间隔来说微不足道。OLED初始化容错将OLED初始化放在try-except块中并允许display为None。这样即使显示屏接线有问题或暂时不需要显示数据采集和上传的核心功能仍能继续运行提高了系统的健壮性。Feed的动态创建代码先尝试获取已有的temperaturefeed如果不存在RequestError则自动创建它。这避免了用户必须手动在网页端创建feed的步骤提升了部署体验。4.3 数据读取、显示与上传主循环这是程序的核心一个无限循环周期性地执行“读取-显示-上传”流程。def main_loop(sensor, display, aio, feed): 主循环读取温度、显示、上传数据 # 准备OLED显示如果显示屏可用 if display: # 创建绘图对象和字体 width display.width height display.height image Image.new(1, (width, height)) # ‘1’ 表示1位颜色黑白 draw ImageDraw.Draw(image) # 加载字体确保已安装ttf-mscorefonts-installer try: font_large ImageFont.truetype(/usr/share/fonts/truetype/msttcorefonts/Arial_Bold.ttf, 16) font_small ImageFont.truetype(/usr/share/fonts/truetype/msttcorefonts/Arial_Bold.ttf, 12) except OSError: print(警告未找到指定字体使用默认字体。) font_large ImageFont.load_default() font_small ImageFont.load_default() # 初始清屏 draw.rectangle((0, 0, width, height), outline0, fill0) display.image(image) display.show() print(系统启动完成开始监测温度...) print(按 CtrlC 终止程序。) while True: try: # 1. 读取温度传感器 temp_c sensor.temperature # 四舍五入到两位小数平衡精度与可读性 temp_c_rounded round(temp_c, 2) timestamp time.strftime(%Y-%m-%d %H:%M:%S) print(f[{timestamp}] 温度: {temp_c_rounded:.2f} °C) # 2. 在OLED上显示如果可用 if display: # 清空上一帧画面 draw.rectangle((0, 0, width, height), outline0, fill0) # 绘制温度值大字体 draw.text((0, 0), fTemp: {temp_c_rounded:.2f} C, fontfont_large, fill255) # 绘制状态和上传中提示 draw.text((0, 18), Updating..., fontfont_small, fill255) display.image(image) display.show() # 3. 上传数据到Adafruit IO如果连接可用 if aio and feed: try: aio.send_data(feed.key, temp_c_rounded) print(f 数据已成功发送至Adafruit IO。) if display: # 更新状态为完成 draw.rectangle((0, 18, width, height), outline0, fill0) draw.text((0, 18), Send: OK, fontfont_small, fill255) display.image(image) display.show() except Exception as e: print(f 错误上传数据失败。错误信息: {e}) if display: draw.rectangle((0, 18, width, height), outline0, fill0) draw.text((0, 18), Send: FAIL, fontfont_small, fill255) display.image(image) display.show() # 4. 等待下一个读取周期 time.sleep(READ_INTERVAL) except KeyboardInterrupt: print(\n检测到用户中断程序退出。) if display: display.fill(0) display.show() break except Exception as e: print(f主循环发生未知错误: {e}) # 可选择记录日志或尝试恢复 time.sleep(READ_INTERVAL) # 等待后继续尝试关键点解析与优化技巧温度值处理sensor.temperature返回的是浮点数。使用round(temp_c, 2)保留两位小数这既满足了大部分监测场景的精度需求又避免了数据过于冗长。Adafruit IO的免费Feed对数据点数量有限制但数据精度不影响计数。OLED显示优化每次更新显示时先画一个填充矩形来清空特定区域如状态行而不是清空整个屏幕再重绘所有内容。这可以减少屏幕闪烁并略微降低CPU使用率。状态提示“Updating...”, “Send: OK”让用户对系统工作流程一目了然。异常处理与程序健壮性KeyboardInterrupt异常捕获允许用户通过CtrlC优雅地退出程序并在退出前清空OLED屏幕。最外层的try-except块包裹了整个主循环即使发生未预料的错误如短暂的I2C通信错误程序也不会崩溃而是打印错误信息后等待下一个周期重试。这对于需要长期稳定运行的监测系统至关重要。网络上传容错上传数据部分有独立的try-except。即使网络暂时中断或Adafruit IO服务波动也不会影响本地的数据读取和显示。失败的状态会显示在OLED上方便现场诊断。4.4 程序入口与执行最后添加程序的主入口并调用初始化函数和主循环。if __name__ __main__: sensor, display, aio_client, temp_feed initialize_system() if sensor is None: print(系统初始化失败无法启动传感器。请检查硬件连接。) exit(1) # 即使显示或云端初始化失败只要传感器正常仍可运行仅本地打印 if display is None: print(警告显示屏初始化失败将仅通过终端输出数据。) if aio_client is None or temp_feed is None: print(警告Adafruit IO连接失败数据将不会上传至云端。) try: main_loop(sensor, display, aio_client, temp_feed) except Exception as e: print(f程序运行中出现致命错误: {e}) exit(1)将上述所有代码段整合到一个文件中并替换ADAFRUIT_IO_USERNAME和ADAFRUIT_IO_KEY为你的实际信息。保存文件后通过终端运行python3 iot_temperature_logger.py你应该能在终端看到温度读数在OLED上看到实时显示并在Adafruit IO的仪表盘上看到数据更新。5. 系统调试、优化与问题排查实录即使按照步骤操作在实际部署中也可能遇到各种问题。下面是我在多次部署中总结的常见问题及其解决方法。5.1 硬件连接与通信故障问题1运行i2cdetect -y 1后看不到设备地址0x48或0x3C。排查步骤检查电源用万用表测量ADT7410和OLED的VIN和GND之间是否有稳定的3.3V电压。树莓派的3.3V引脚输出能力有限确保没有短路。检查接线这是最常见的问题。逐根检查杜邦线是否松动特别是SDA和SCL线是否接反。确认使用的是树莓派的I2C-1的SDA (GPIO2) 和 SCL (GPIO3) 引脚而不是其他复用引脚。检查上拉电阻I2C总线需要上拉电阻通常4.7kΩ-10kΩ将SDA和SCL线拉到高电平。Adafruit的Breakout板通常已集成但如果使用裸传感器芯片必须外接上拉电阻到3.3V。确认传感器地址ADT7410的地址由A0和A1引脚决定。Adafruit板子默认将A0和A1接地地址为0x48。如果地址被更改需要在代码中修改SENSOR_I2C_ADDR变量。地址映射为A1 A0: 0 0 - 0x48, 0 1 - 0x49, 1 0 - 0x4A, 1 1 - 0x4B。问题2OLED显示屏不亮或显示乱码。排查步骤检查复位引脚确保OLED的RST引脚正确连接到GPIO21并且在代码初始化时被正确设置为DigitalInOut对象。可以尝试在代码初始化后手动拉低再拉高该引脚进行硬件复位。检查I2C地址部分SSD1306模块的地址可能是0x3D而非0x3C。使用i2cdetect确认实际地址并在初始化SSD1306_I2C时通过addr参数指定如SSD1306_I2C(128, 32, i2c, addr0x3d, resetoled_reset)。字体路径问题如果终端提示找不到字体文件确认ttf-mscorefonts-installer已成功安装。也可以将代码中的字体路径改为系统已有的其他字体如/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf。5.2 软件与网络问题问题3运行Python脚本时提示ModuleNotFoundError。解决这表示某个Python库没有安装。请根据错误信息使用sudo pip3 install 库名安装缺失的库。确保你使用的是pip3而不是pip以对应Python3。问题4Adafruit IO上传失败提示认证错误或超时。排查步骤核对密钥百分之九十的问题源于API Key或Username拼写错误。仔细检查代码中的ADAFRUIT_IO_KEY和ADAFRUIT_IO_USERNAME确保没有多余的空格并且使用的是Active Key而不是只读密钥或其他。检查网络树莓派需要能够访问互联网。使用ping io.adafruit.com测试网络连通性。如果使用代理或有复杂的网络环境可能需要配置Python的代理设置。检查速率限制Adafruit IO免费账户有速率限制通常30数据点/分钟。如果你的READ_INTERVAL设置小于2秒很快就会触发限制。确保间隔时间合理。查看Feed名称确保代码中尝试发送数据的Feed名称temperature与你在Adafruit IO网站上创建的Feed名称完全一致区分大小写。问题5传感器读数异常如恒定值、NaN或明显偏离室温。排查步骤检查传感器位置ADT7410对热源敏感。确保它没有紧贴树莓派的CPU或电源芯片这些部件发热严重。最好用延长线将传感器模块放置在待测环境中。验证读数可以编写一个简单的测试脚本只读取传感器并打印原始值排除其他代码干扰。import board, busio, adafruit_adt7410, time i2c busio.I2C(board.SCL, board.SDA) sensor adafruit_adt7410.ADT7410(i2c) sensor.high_resolution True time.sleep(0.25) while True: print(fTemperature: {sensor.temperature:.2f} C) time.sleep(2)检查供电噪声不稳定的电源可能导致ADC转换错误。尝试在传感器的VIN和GND之间并联一个10µF的电解电容和一个0.1µF的陶瓷电容进行滤波。5.3 系统优化与扩展建议1. 增加本地数据日志除了上传云端可以在树莓派本地SD卡上以CSV格式记录数据作为网络中断时的备份。import csv from datetime import datetime def log_to_csv(temp, filenametemperature_log.csv): with open(filename, a, newline) as csvfile: writer csv.writer(csvfile) writer.writerow([datetime.now().isoformat(), temp])在主循环的读取温度后调用此函数。2. 实现异常报警可以扩展代码当温度超过设定的阈值时通过树莓派连接一个蜂鸣器发出声音报警或者通过Adafruit IO的触发器Triggers功能向你的邮箱或IFTTT发送通知。3. 降低功耗用于电池供电对于野外监测可以 * 使用树莓派Zero W其功耗远低于3B。 * 在代码循环中读取间隙让树莓派进入轻度睡眠time.sleep或使用硬件定时器。 * 考虑使用带有中断功能的传感器仅在温度变化超过一定阈值时才唤醒主控进行读取和上传。4. 容器化部署为了便于管理和迁移可以将整个应用Python环境、代码、依赖打包成Docker容器。这能确保环境一致性简化在其他树莓派上的部署过程。这个基于ADT7410和树莓派的物联网温度监测系统从硬件选型到软件实现完整地展示了一个物联网传感节点的构建过程。它结构清晰、模块化程度高你可以很容易地将其中的传感器替换为湿度、压力或其他I2C传感器或者将云平台替换为ThingsBoard、Home Assistant等私有化部署方案以适应更复杂的场景需求。动手搭建一遍你会对物联网的数据流有更直观的理解。

相关新闻

最新新闻

日新闻

周新闻

月新闻