MioChan 发表于 2024-10-23 20:07

【2024 DigiKey 创意大赛】AI全功能环境监测站

本帖最后由 MioChan 于 2024-10-23 20:09 编辑

<div><span style="font-size:18px;"><strong>一、作品简介</strong></span></div>

<div><strong>1.1</strong><strong>作品功能介绍</strong></div>

<div>本次创意大赛中,我设计并实现了一个AI全能环境监测站。该设备通过集成多款高精度气体传感器,能够全面监测环境中的多种气体成分,如温湿度、空气质量、二氧化碳和各类有害气体等。所有环境数据不仅可以实时显示在 Matrix RGB点阵屏上,还能够通过 Adafruit IO云平台上传,实现多设备多应用间的环境监测数据共享。用户可以通过网页端查看不同环境指标的实时数据及其变化趋势,获取清晰的历史数据图表和变化曲线。</div>

<div></div>

<div>为了增强用户体验,该系统还加入了智能语音提醒与建议功能。基于 Adafruit MatrixPortal M4开发板,系统不仅完成了环境数据的采集、显示和上传,还通过开发的 Unity 3D虚拟人物程序,实现了与用户的互动。虚拟人物能够根据环境数据做出及时反馈,通过语音提醒用户注意环境变化,例如空气质量下降时提供改善建议或提醒开窗通风等。</div>

<div>系统的AI核心在于本地部署的大型语言模型(LLM)和文字转语音(TTS)技术。LLM采用的是本地部署的Chat-GLM模型,负责分析采集到的环境数据,生成相应的文字反馈,TTS则将这些文字转换为语音,使虚拟人物能够与用户进行自然的语音互动。</div>

<div>该项目具有广泛的应用场景和前景,不仅可以应用于智能家居和室内环境监测,还可以在智能城市以及各种需要实时环境监控和反馈的场景中发挥作用。整个项目的子系统的设计保持了高内聚低耦合的特点,所有系统复用都十分方便。通过结合主流的AI技术和传感器硬件,本项目为未来的环境监测设备提供了一种智能化、全方位的解决方案。</div>

<div>&nbsp;</div>

<div><strong>1.</strong><strong>2</strong><strong>物料清单</strong></div>

<div>本项目的物料清单包括多种硬件和软件组件,确保了系统的多功能性和稳定运行。首先介绍本次大赛由得捷报销的物料:</div>

<div><strong>Adafruit MatrixPortal M4</strong><strong>开发板</strong>:境监测站硬件部分的核心控制器。这款开发板专为驱动RGB点阵屏设计,具备内置的HUB75接口,直接支持与点阵屏的连接,极大简化了硬件布线。此外,内置的ESP32模块为设备提供了Wi-Fi功能,能够通过无线网络上传数据至云端,适合环境监控场景下的数据远程传输与共享。</div>

<div>在数据处理和传感器方面,项目采用了多款环境传感器。<strong>BME680</strong><strong>传感器</strong>是一款集温度、湿度、气压和空气质量(VOC)检测于一体的传感器,它为系统提供了全面的环境监测功能。该传感器特别适合对室内空气质量的检测,并能实时反馈空气污染状况。<strong>SGP30</strong><strong>传感器</strong>专注于监测二氧化碳和挥发性有机化合物(TVOC)的浓度,帮助用户及时了解室内空气质量变化,确保健康和安全。为了进一步提升监测的全面性,系统还集成了<strong>MiCS-5524</strong><strong>传感器</strong>,用于检测环境中的C2H5OH,C3H8,C4H10,CH4,CO,H2,H2S,NH3的存在。这些气体可能对人体健康产生危害,因此MiCS-5524的加入极大增强了系统的安全性预警能力。</div>

<div></div>

<div>以下是本人自备物料,包括所用软件:</div>

<div><strong>Adafruit RGB LED Matrix 64x32</strong><strong>点阵屏</strong>。通过MatrixPortal M4的驱动,该点阵屏实时显示采集到的环境数据。64x32的分辨率允许在小面积内展示丰富的内容,并且支持动态滚动,用户可以通过网络实现自定义文字弹幕的远程控制,使得数据展示更加灵活和多样化。高亮度的LED点阵屏适合用于各种光线条件下的展示,确保数据可读性。</div>

<div><strong>全息显示器</strong><strong>。</strong>上一届创意大赛的硬件作品,本次也拿来继续使用了。不过与之前不同的是,上一次项目虚拟人物部分的实现使用的是Live2D,虽然有3D的感觉,但本质上还是2D模型,所有看似立体的动画只是在平面图形上做变形,很难实现与3D物体的交互。而在本项目中我重写了一套Unity 3D程序,直接驱动了一个VRM 3D人物模型,并且使用了Meta的Lip Sync技术实现人物口型与语音的同步,除了获取天气预报外,还加入了从IO云服务器获取环境监测站空气指标的功能,但空气质量变差,AI助手会语音提示用户。</div>

<div><strong>GPU</strong><strong>计算设备</strong>。在AI方面,本项目使用了本地部署的L<strong>LM</strong><strong>大语言模型</strong>。LLM作为虚拟人物的灵魂,为虚拟人物赋能交互能力,本项目还集成了<strong>TTS</strong><strong>(文字转语音)模型</strong>,将LLM生成的文字通过自然流畅的语音形式播报出来,增强了虚拟人物的交互能力,用户可以通过语音形式了解当前环境状况及相应的建议。</div>

<div>&nbsp;</div>

<div><span style="font-size:18px;"><strong>二、系统框图</strong></span></div>

<div></div>

<div>系统的整体框架可以分为硬件部分、Unity 3D程序、AI服务端与Adafruit IO平台。硬件部分主要负责环境数据的采集与显示。通过MatrixPortal M4开发板,系统能够连接多种气体传感器,实时获取环境指标数据,这些数据不仅会通过点阵屏进行展示,还会定时上传到Adafruit IO平台,供用户在网页端查看历史数据和变化趋势。同时,MatrixPortal M4也会接收来自Adafruit IO的弹幕信息,并滚动显示在点阵屏上。</div>

<div>Unity 3D程序是该系统的重要交互界面。通过3D虚拟人物,用户可以更加直观地获取环境数据和反馈。虚拟人物能够根据当前的环境指标与用户互动,并展示气象预报等其他信息。此外,Unity程序还负责与AI服务端的通信,将用户的消息发送到AI服务端进行处理,由AI服务端的GLM大型语言模型生成智能响应。这些响应再通过文字转语音(TTS)技术转化为语音输出,实现虚拟人物的口型同步和语音播报。</div>

<div>AI服务端的智能处理能力体现在对环境数据和用户交互的深度分析上。通过GLM模型,AI不仅能够理解用户的输入,还能够根据环境数据提供合理的建议或提醒。结合TTS技术,AI服务端能够生成自然流畅的语音反馈,进一步提升用户的交互体验。</div>

<div>&nbsp;</div>

<div><span style="font-size:18px;"><strong>三、各部分功能说明</strong></span></div>

<div><strong>3.1</strong><strong>硬件部分</strong></div>

<div>在本项目中,硬件平台选用了 Adafruit MatrixPortal M4,这是专门为驱动RGB点阵屏设计的开发板。其最大优势在于板载的 HUB75 接口,使其能够直接插入并驱动RGB点阵屏,无需复杂的电线连接。此外,MatrixPortal M4还具备Wi-Fi功能,方便将采集到的环境数据通过互联网上传至 Adafruit IO 平台。MatrixPortal M4还集成了 I2C接口,支持与多种传感器的连接。本项目使用的传感器包括 BME680(用于检测温湿度、气压及VOC)、SGP30(检测CO2及总VOC)、以及 MiCS-5524(专门监测一氧化碳等有害气体)。这些传感器通过I2C接口实现与主板的通信。主板负责读取这些传感器的数据,并将其展示在RGB点阵屏上。此外,通过Wi-Fi连接,这些数据会实时上传到Adafruit IO平台,方便用户远程查看。</div>

<div></div>

<div>RGB点阵屏是系统的主要显示方式。除了展示环境数据,点阵屏还会滚动显示从Adafruit IO接收到的弹幕信息,实现远程与用户的交互。硬件部分主要实现的功能如下:</div>

<ol>
        <li><strong>显示环境信息:</strong><br />
        <br />
        设计了一套UI,屏幕会滚动显示各项环境指标,每一屏最多显示三项,滚动播放。对于部分指标数值过长,导致单位显示不下的问题,对单位也额外增加了相应的逻辑,用来滚动显示这些显示不下的内容。</li>
        <li><strong>自定义弹幕文字显示:</strong><br />
        <br />
        <strong></strong><br />
        该功能主要是用来滚动显示一些弹幕文字,通过网络功能实现。本来想和之前的项目一样做一个接受POST请求的API服务器,但这个版本的CircuitPy似乎对网络底层库支持的不太好,使用之前在Adafruit ESP32S3 TFT Feather的代码总是出问题,最后看了一下官方文档发现adafruit_matrixportal 已经包含了一些网络功能的实现,最后想了想决定通过Adafruit IO https://io.adafruit.com/ 来解决这个问题,这既简化了网络通信的复杂性,又能利用已经成熟的工具来处理数据。Adafruit IO 提供了一个相对容易上手的接口,可以通过publish和subscribe来接收和显示文本信息。在项目中,我将设备连接到Adafruit IO的服务中,创建了两个feed一个用于接受弹幕内容另一个定义弹幕颜色。通过订阅feed,我能够实时地从远程设备或应用发送数据,并在点阵屏上滚动显示。并且这样也解决了之前只能内网访问的问题,通过Adafruit IO服务托管这些信息,我们可以在任意位置的连接互联网的电脑上发布或订阅这些内容。最重要的是Adafruit IO也有相应的python库,我们也可以在其他python服务程序中更新这些内容。当然,已经做了中文字库支持。</li>
        <li><strong>传感器接入:</strong><br />
        建立好显示环境信息的UI后接下来就是实际连接传感器了,更新面板的数据了。下面是我用到的气体传感器。<br />
        <br />
        BME680 是来自 Bosch Sensortec 的环境传感器,能够同时检测多种环境参数,广泛应用于空气质量监测。它集成了气体、湿度、压力和温度传感器。<br />
        <br />
        SGP30 是 Sensirion 开发的一款空气质量传感器,主要用于检测空气中的二氧化碳 (CO₂) 和总挥发性有机物 (TVOC)。<br />
        <br />
        MiCS-5524 是一款半导体气体传感器,专门用于检测一氧化碳 (CO) 和甲烷 (CH₄) 等有害气体。它基于金属氧化物半导体 (MOS) 技术,能够在低浓度下对一氧化碳表现出高度灵敏性。因为不支持i2c所以直接用飞线连接到了A0引脚。<br />
        <br />
        将上面的传感器连接到开发板即可。<br />
        顺便一提,Adafruit这些i2c接口的连接线(上)和常用的4p80mm连接线(下)的线序并不一样,我们需要在另一端做一个交叉。简单来说,用尖嘴镊子把接线端子顶出来,换到镜像的位置即可。<br />
        </li>
        <li><strong>数据记录功能</strong><strong>:</strong><br />
        既然是环境监测站自然要有保存历史数据的功能,这里我最初的是想法是将传感器数据写入到板载存储器中。不过这样有个很大的问题,这些数据只有连接到这个板子的电脑才能读取,用网络实现不仅麻烦,如果外部设备频繁请求这些信息也会大量消耗板子有限的计算资源。最后还是想到了用Adafruit IO,我们可以在IO中创建不同环境指标的feed,让板子定时上传这些数据到IO上,这样不仅能记录历史数据,其他应用能非常方便的获取这些数据,还能直接在IO创建一个环境监测面板直接查看这些数据,也不需要再额外设计一个软件来画图了。<br />
        下面是监测面板的效果:<br />
        </li>
        <li><strong>底座制作</strong><strong>:</strong></li>
</ol>

<div>这个LED点阵屏接上开发板后有点重心不稳,本身是考虑给它直接做一个外壳嵌进去,不过在测量数据的过程中发现,这个板子的后面还是有点热的,直接把传感器都放进去,板子后面的积热会让温度测量不准,还得考虑通风问题。所以最后索性直接设计一个底座就好了,把线卡到后面,即能让屏幕更稳固也解决了散热问题。</div>

<div></div>

<div>模型建好后直接用3D打印制作就好了,因为插销部分有悬空,切片时加了个支撑</div>

<div><strong></strong></div>

<div>&nbsp;</div>

<div><strong>3.</strong><strong>2</strong> <strong>Unity3D</strong><strong>程序部分</strong></div>

<div></div>

<div>系统中的 Unity程序负责虚拟人物的创建和驱动。虚拟人物不仅只是拥有皮囊,通过大语言模型(LLM)和文本转语音(TTS)让其还具有灵魂,通过lip sync技术还能使得3D人物角色进行口型同步,让虚拟人物在发声时口型与语音内容相一致,使其更加自然逼真。</div>

<div></div>

<div>VRM系统是这个虚拟系统的核心,用来驱动虚拟角色的展示。VRM模型是基于Unity中的动画状态机来进行管理的。通过动画状态机,我们能够定义虚拟角色的各种动作和状态切换。每一个状态代表虚拟角色在某种特定情境下的表现,比如迎宾、待机、或是发出环境警告。当用户与虚拟角色进行交互时,状态机会根据设定好的触发条件切换到对应的动作状态。例如,当用户点击虚拟角色时,程序会通过触发器(trigger)切换到迎宾动画。而在系统监测到环境数据出现异常,如空气质量下降时,状态机会切换到警告状态,角色通过特定的动画和表情来提醒用户。动画状态机的使用保证了虚拟角色在不同场景下的灵活表现,使其行为更自然、更贴近实际。因为我本身是VRChat玩家,所以手上也有不少人物模型可以使用,本项目所使用的模型是本人在Booth上自费购买的,无版权问题。</div>

<div></div>

<div>在网络请求部分,程序与多个后端服务进行交互,主要包括文本转语音(TTS)服务和大语言模型(LLM)的智能对话功能。对于TTS服务,程序会根据当前的系统状态生成语音文本,并通过HTTP POST请求将生成的文本发送到后端TTS服务。TTS服务处理后返回语音数据,程序会将该数据同步播放,并结合Meta Lipsync实现虚拟角色的口型同步,保证角色能够准确表达语音内容。大语言模型部分,当用户提出问题或进行交互时,程序会将用户的文本请求发送给LLM,后端模型生成智能回复后,程序会将其显示在UI中并交由TTS服务播报给用户。这样,虚拟角色不仅能够播报环境数据,还能与用户进行智能化的对话和互动,提升了系统的实用性和娱乐性。</div>

<div>Meta Lipsync 技术在系统中的作用是通过语音合成时生成的音频数据与虚拟角色的口型进行同步。系统会解析TTS生成的语音数据,计算音频中的元音、辅音等关键音素,并实时调整虚拟角色的嘴部动画,以匹配发音的变化。这一技术保证了虚拟角色的口型动作能够与语音保持高度一致,使其在语音播放过程中看起来更加自然逼真。用户在观看角色时,不仅可以听到与环境数据相关的语音信息,还能看到与之同步的口型动作,增强了虚拟角色的表现力。</div>

<div></div>

<div>在环境指标获取方面,程序集成了两个主要的数据来源:和风天气API和Adafruit IO平台。通过和风天气API,程序能够实时获取当前的天气数据,包括室外温度、未来降水情况,并根据这些数据对UI进行相应更新。此外,程序还通过Adafruit IO平台获取空气质量监测站的上传数据,包括室内温度、湿度、气压、有害气体等环境信息。这些数据通过网络发送到虚拟角色所在的系统,实时更新虚拟角色的环境感知。当传感器检测到有害气体超标时,程序会触发虚拟角色的警告机制,角色会通过语音和动画动作提醒用户,增强了系统的实用性和安全性。</div>

<div>事件系统是这个程序的核心控制逻辑,负责管理用户与虚拟角色的交互、UI显示、以及摄像机的控制。用户可以通过拖拽摄像机来调整视角,观察虚拟角色的不同动作和表情。事件系统会根据用户的操作,适时调整虚拟角色的状态。当用户点击角色或特定UI按钮时,系统会响应这些交互,执行相应的功能或动画切换。例如,当检测到空气质量变差时,事件系统会触发虚拟角色的警告状态,更新UI信息,显示当前环境中的空气质量数据,并提醒用户采取行动。除此之外,在搭配我上一届大赛制作的全息显示器使用时,也可以对画面进行镜像处理,保证用户在全息模式下能够正确查看虚拟角色和文字UI。</div>

<div> &nbsp;</div>

<div>&nbsp;</div>

<div><strong>3.</strong><strong>3</strong><strong> LLM</strong><strong>服务</strong></div>

<div>ChatGLM 是一款基于 Transformer 架构的大语言模型,专门为中文和英文双语环境设计。它借鉴了 GPT(Generative Pre-trained Transformer)家族的模型结构,并在此基础上进行优化,使其能够在对话和任务处理等场景中表现出色。与 GPT-3 类似,ChatGLM 使用了自回归语言建模技术,基于大规模的语料库进行预训练,然后经过微调,能够处理生成式对话、文本摘要、翻译等自然语言任务。</div>

<div></div>

<div>ChatGLM 模型的核心基于 Transformer 架构,Transformer 是一种深度神经网络结构,尤其擅长处理序列数据,如文本。在 Transformer 架构中,最主要的部分是多头自注意力机制(Multi-Head Self-Attention),它能够有效地捕捉序列中不同位置的词语间的关系。通过多头自注意力机制,模型可以从多个不同的&ldquo;关注点&rdquo;来理解输入文本中的含义,这让 ChatGLM 能够生成连贯且逻辑清晰的长文本段落。</div>

<div>在预训练阶段,ChatGLM 会处理大量的文本数据,包括百科、新闻、社交媒体等,学习到语法结构、语义关联以及世界知识。通过这种大规模预训练,模型掌握了语言的基本构造规则和常识信息。在微调阶段,ChatGLM 进一步被调整以适应具体任务,比如对话生成。在对话场景下,它不仅能够理解输入的语境,还可以生成相关性很强的回复。</div>

<div>ChatGLM 的特点之一是支持双语处理,它能够同时处理和生成中文与英文文本。这是通过在预训练过程中使用大量中英双语数据来实现的。与许多单语模型相比,ChatGLM 在双语场景中具有明显优势,尤其是在多语言对话任务中,它能够在中英文间自然地切换。</div>

<div>在实际应用中,ChatGLM 能够理解复杂的上下文并生成连贯的对话内容。例如,当用户提出一个问题时,模型能够基于问题提供符合逻辑且具备信息性的回复。此外,ChatGLM 还具备一定的知识推理能力,能够帮助用户解决复杂的问题,如技术支持、信息查询等。</div>

<div>在本系统中,ChatGLM 主要负责处理用户与虚拟角色之间的智能对话任务。用户输入问题或指令后,系统通过 HTTP 请求将文本发送给 ChatGLM 模型,后端处理后返回生成的文本回复。生成的回复内容既可以通过 UI 显示给用户,也可以通过 TTS 转换为语音,配合虚拟角色的口型同步,形成完整的语音交互体验。</div>

<div><strong>3.</strong><strong>4 TTS</strong><strong>服务</strong></div>

<div>在本项目使用的TTS算法是VITS,这是一个基于生成式对抗网络(GAN)和变分推断技术的文本转语音(TTS)系统。相比于传统的TTS模型,VITS 的核心优势在于它可以通过少量的数据生成自然流畅的语音,并且在语音质量和语音自然度方面有显著提升。它结合了基于流模型(Flow-based model)和 GAN 的优点,能够在高效生成语音的同时,确保输出语音的高保真度。VITS 的设计理念融合了几种关键技术,主要有变分推断:它用于从文本中捕捉潜在的音素和韵律信息,通过推断潜在的语音特征来生成与文本相对应的语音表现。这种技术允许模型有效地处理文本到语音的复杂映射,使生成的语音在自然性和表现力上更接近真实人类发音;自回归和非自回归生成模型的结合:自回归模型依赖于先前生成的语音片段来生成后续的语音片段,而非自回归模型则能够并行生成所有语音帧。VITS 结合了两者的优势,利用自回归模型的高质量生成能力和非自回归模型的高效性,使得生成过程更加流畅和快速;Flow 模型:VITS 利用基于流的模型来建模语音的分布,这种模型能够在不牺牲质量的情况下,通过变分推断进行有效的语音生成。流模型擅长处理复杂的概率分布,因此在捕捉语音的多样性和细节表现方面效果尤为突出;GAN(生成式对抗网络):GAN 技术使 VITS 在语音生成过程中可以通过判别器的反馈不断优化生成器的输出。生成器负责生成语音,判别器则评估语音的自然度,通过这种对抗机制,VITS 的生成器能够逐步提升语音的质量,生成更加逼真的声音。</div>

<div></div>

<div>在本系统中,VITS 主要负责将虚拟角色的文本回复转换为自然流畅的语音。首先,当用户输入文本时,ChatGLM 模型会生成相应的回复文本,接着该文本被发送到 TTS 服务,VITS 模型基于输入文本生成对应的语音数据。生成的语音数据可以实时播放,使得虚拟角色不仅能够通过文本回复与用户互动,还能够通过自然的语音与用户进行对话。这种人机交互方式极大地提升了系统的交互体验,使虚拟角色在用户眼中更具生命力和真实感。</div>

<div>&nbsp;</div>

<div><span style="font-size:18px;"><strong>四、作品源码</strong></span></div>

<div><a href="https://download.eeworld.com.cn/detail/eew_nkXjf8/634608">https://download.eeworld.com.cn/detail/eew_nkXjf8/634608</a></div>

<div>&nbsp;</div>

<div><span style="font-size:18px;"><strong>五、</strong><strong>作品功能演示视频</strong></span></div>

<div><iframe allowfullscreen="true" frameborder="0" height="450" src="https://training.eeworld.com.cn/shareOpenCourseAPI?isauto=true&amp;lessonid=41406" style="background:#eee;margin-bottom:10px;" width="700"></iframe></div>

<div><strong>时间索引:</strong></div>

<div><strong>物料展示</strong><strong> 00:24</strong></div>

<div><strong>设计思路</strong><strong> 01:55</strong></div>

<div><strong>功能演示</strong><strong> 02:38</strong></div>

<div>&nbsp;</div>

<div><span style="font-size:18px;"><strong>六、</strong><strong>项目总结</strong></span></div>

<div>首先,还是感谢EEWORLD和得捷能一直举办这类活动。这次比赛不仅让我有机会发挥自己的创造力,还让我在实践中学到了很多新知识,收获颇丰。整个项目涉及了硬件开发、软件开发、网络通信、3D模型驱动、3D建模、3D打印、大语言模型以及文本转语音技术等多个方面,虽然从整体来看每个项目难度可能并不算太高,但它让我能用平时接触到的各个领域的新技术,真正的动手进行实践,极大地拓展了我的知识面,也让我积累了不少经验。</div>

<div>在硬件开发方面,通过对Adafruit MatrixPortal M4开发板进行环境数据的采集和显示等功能的实现,让我对Circuitpy的应用和底层原理有了更深入的理解。在本项目之前我其实从未接触过气体传感器,在完成本项目后我对气体传感器的认识和使用也得到了进一步提高。除此之外,本项目中我也是第一次尝试把硬件设备接入Adafruit IO这类的云平台,以往我都是直接在内网构建HTTP API请求服务器来完成这些操作,在完成这个项目后我也体会到了使用云平台的便利性。并且,在这个项目的开发中我也真的明白了项目充分的前期调研的重要性,因为这些气体传感器应用方面的库很多都只有Arduino的,而我使用Circuitpy开发就会遇到很多阻碍。发现这个问题的时候代码几百行都写完了,最后只能想办法硬着头皮实现。</div>

<div>此外,软件开发的部分让我深刻体会到了软硬件结合的重要性,从编写用于驱动点阵屏显示的代码,到实现实时数据上传和远程数据监控,每一步都让我对系统的整体架构有了更加系统的认识。在项目的Unity 3D程序部分,我成功驱动了一个3D人物模型,在这个过程中真的有很多细节需要学习,比如animator、animation的使用,如何给人物加载外部的fbx动作等等。通过本项目的实操,让我对Unity的使用也变得愈发熟练。同时,项目中我本地部署了一个大语言模型,并通过文本转语音技术,使得虚拟人物能够根据环境数据做出智能语音反馈。这一部分让我对人工智能与现实场景的结合有了更深刻的理解,也让我体验到了机器智能为人机交互带来的便捷与创新。我本人的研究方向就是AI相关,这也让我对自己的研究领域更深一步的热爱。</div>

<div>通过这个比赛,我不仅拓展了自己的技能,还更加理解了跨领域知识融合的意义。再次感谢大赛的机会,这段经历将成为我未来创意与开发之路上的宝贵财富。</div>

<div><strong>帖子汇总</strong><strong>:</strong></div>

<div><strong>【2024 DigiKey 创意大赛】物料开箱帖 </strong><a href="https://bbs.eeworld.com.cn/thread-1290188-1-1.html">https://bbs.eeworld.com.cn/thread-1290188-1-1.html</a></div>

<div><strong>【2024 DigiKey 创意大赛】AI环境监测站-硬件部分 </strong><a href="https://bbs.eeworld.com.cn/thread-1296178-1-1.html">https://bbs.eeworld.com.cn/thread-1296178-1-1.html</a></div>

<div>&nbsp;</div>

<div><span style="font-size:18px;"><strong>七、其他</strong></span></div>

<div>这里我想补充一点,虽然Adafruit IO为C、Python提供了相关的库函数,但诸如Unity 开发中C#的语言并没有这样的库,而对于如何使用HTTP调用API官方文档也写的很模糊,这里直接给出一个Python的请求代码,其它语言只要参考一下就能直接使用而不依赖官方库了。</div>

<div><strong>修改</strong><strong>IO</strong><strong>上某一</strong><strong>Feed</strong><strong>的值</strong></div>

<div>import requests</div>

<div># 设置必要的参数</div>

<div>io_key = &quot;aio_XXXX&quot;</div>

<div>username = &quot;XXXX&quot;</div>

<div>feed_key = &quot;XXXX&quot;</div>

<div>url = f&quot;https://io.adafruit.com/api/v2/{username}/feeds/{feed_key}/data&quot;</div>

<div># 要上传的值</div>

<div>data = {</div>

<div>&quot;value&quot;: &quot;20000&quot;</div>

<div>}</div>

<div># 设置请求头,包含 API 密钥</div>

<div>headers = {</div>

<div>&quot;X-AIO-Key&quot;: io_key</div>

<div>}</div>

<div># 发送 POST 请求上传数据</div>

<div>response = requests.post(url, headers=headers, data=data)</div>

<div># 检查返回结果</div>

<div>if response.status_code == 200:</div>

<div>print(&quot;Data uploaded successfully!&quot;)</div>

<div>else:</div>

<div>print(f&quot;Error: {response.status_code} - {response.text}&quot;)</div>

<div><strong>获取</strong><strong>IO</strong><strong>上某一</strong><strong>feed</strong><strong>的值</strong></div>

<div>import requests</div>

<div># 设置必要的参数</div>

<div>io_key = &quot;aio_XXX&quot;</div>

<div>username = &quot;XXX&quot;</div>

<div>feed_key = &quot;XXX&quot;</div>

<div>url = f&quot;https://io.adafruit.com/api/v2/{username}/feeds/{feed_key}/data&quot;</div>

<div># 设置请求头,包含 API 密钥</div>

<div>headers = {</div>

<div>&quot;X-AIO-Key&quot;: io_key</div>

<div>}</div>

<div># 发送 GET 请求</div>

<div>response = requests.get(url, headers=headers)</div>

<div># 解析返回的数据</div>

<div>if response.status_code == 200:</div>

<div>data = response.json()</div>

<div>if data:</div>

<div>latest_value = data[&quot;value&quot;] # 获取最新的 feed 值</div>

<div>print(f&quot;Latest feed value: {latest_value}&quot;)</div>

<div>else:</div>

<div>print(&quot;No data available.&quot;)</div>

<div>else:</div>

<div>print(f&quot;Error: {response.status_code} - {response.text}&quot;)</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div></div>

<p><!--importdoc--></p>

Jacktang 发表于 2024-10-25 07:23

<p>通过Adafruit IO https://io.adafruit.com/ 来解决这个问题,这既简化了网络通信的复杂性,又能利用已经成熟的工具来处理数据。这个经典,不愧是高手</p>

秦天qintian0303 发表于 2024-10-25 13:29

<p>这个透明的屏幕是什么啊?看着很高级啊</p>

MioChan 发表于 2024-10-25 16:56

秦天qintian0303 发表于 2024-10-25 13:29
这个透明的屏幕是什么啊?看着很高级啊

<p>上一届大赛做的全息显示器</p>
页: [1]
查看完整版本: 【2024 DigiKey 创意大赛】AI全功能环境监测站