这个空气质量终端可用作室内空气质量仪表来监测挥发性有机化合物(VOC)、一氧化碳(CO)、二氧化氮(NO2)、乙醇(C2H5CH)、室温和湿度用于检测气体泄漏并发出警报等。背景呼吸优质的室内空气对身体健康至关重要,人类在室内度过大量时间——无论是在家中、办公室还是其他类型的建筑物中——气体、化学物质和其他污染物会导致头痛、眼睛刺激、过敏和疲劳。严重的污染物会导致某些类型的癌症和其他长期健康并发症。常见的室内空气污染物包括:二手烟,严重的室内空气污染物,会加重哮喘患者的症状,增加儿童耳部感染的风险,并增加婴儿猝死综合症的风险。氡,危险的气体污染物,被确定为肺癌的第二大原因,氡通过裂缝和其他密封不当的开口进入家庭。燃烧污染物,这些气体,包括一氧化碳和二氧化氮,来自燃烧材料或通风不当的燃料燃烧设备,如空间加热器、柴火炉、燃气灶、热水器、烘干机和壁炉。当您吸入有害污染物时,它可能会对您的免疫系统造成压力,从而导致多种健康状况。室内空气质量差对每个人的影响可能因他们的相对健康状况和年龄而异。一般来说,这种糟糕的室内空气质量还会导致许多过敏症状,例如免疫系统减弱和呼吸系统问题等等。具体来说,孩子们很容易受到室内空气污染的许多健康问题,因为他们的肺非常小,而且他们一整天都要呼吸很多次。如果您患有过敏症状或与哮喘相关的问题,您的家中可能会出现污染或更多灰尘。甚至一些与空气有关的问题的其他来源也可能包括残留气味、通风不当和自然变化,例如新家具、新宠物、最近的建筑或水损坏。控制空气污染源的最重要步骤之一是找出污染物的原因,例如烟雾、霉菌或化学废气,并且还可以从您的房屋中消除。这是提高室内空气质量的持久和最有效的方法之一。所以这个项目,空气质量终端可用作室内空气质量仪表来监测挥发性有机化合物(VOC)、一氧化碳(CO)、二氧化氮(NO2)、乙醇(C2H5CH)、室温和湿度,可用于检测气体泄漏并发出警报等。一氧化碳是一种无色无味的气体,人类的感官不易察觉,会干扰全身的氧气输送。一氧化碳会导致头痛、头晕、虚弱和恶心。有毒量会导致死亡。二氧化氮也是一种无色无味的气体,会导致眼睛、鼻子和喉咙发炎、呼吸短促,并增加呼吸道感染的风险。挥发性有机化合物(VOC)-VOC是在普通室温下具有高蒸气压的有机化学品。它们的高蒸气压是由低沸点引起的,这会导致大量分子从化合物的液体或固体形式蒸发或升华并进入周围空气,这种特性称为挥发性。例如,甲醛会从油漆中蒸发并从树脂等材料中释放出来,其沸点仅为–19°C(–2°F)。EthylAlcohol-Ethanol,也称为酒精、乙醇和谷物酒精,是一种透明、无色的液体,是啤酒、葡萄酒或白兰地等酒精饮料的主要成分。因为它很容易溶于水和其他有机化合物,乙醇也是一系列产品的成分,从个人护理和美容产品到油漆和清漆再到燃料。在这里,我将向您展示如何逐步构建空气质量终端。所需组件Wio终端:Wio终端基于基于ATSAMD51的微控制器,具有由RealtekRTL8720DN支持的无线连接,配备2.4英寸LCD屏幕、板载IMU(LIS3DHTR)、麦克风、蜂鸣器、microSD卡插槽、光传感器和红外发射器(IR940纳米)。RealtekRTL8720DN芯片支持蓝牙和Wi-Fi,为物联网项目提供骨干。Grove-多通道气体传感器:Grove-多通道气体传感器V2在任何其他四种气体的情况下提供稳定可靠的气体检测功能。可检测除一氧化碳(CO)、二氧化氮(NO2)、乙醇(C2H5CH)、挥发性有机化合物(VOC)等多种气体。Grove-温湿度传感器(DHT11):Grove-DHT11温湿度传感器是一款基于DHT11模块的高质量、低成本数字温湿度传感器。WioTerminalStand所需步骤:将多通道传感器连接到Wio终端并读取值并显示到串行监视器绘制UI设计将UI设计转换为代码使用UI设计在Display上显示传感器数据设计支架/外壳3D打印支架/外壳组装和连接传感器完毕!外形SeeedWio终端基于Wio终端的基于ATSAMD51的微控制器,具有由RealtekRTL8720DN支持的无线连接,并配备了2.4英寸LCD屏幕、板载IMU(LIS3DHTR)、麦克风、蜂鸣器、microSD卡插槽、光传感器和红外发射器(IR940nm)。RealtekRTL8720DN芯片支持蓝牙和Wi-Fi,为物联网项目提供骨干。主要特征强大的MCU:MicrochipATSAMD51P19,带有ARMCortex-M4F内核,运行频率为120MHz可靠的无线连接:配备RealtekRTL8720DN,双频2.4Ghz/5GhzWi-Fi高度集成设计:2.4英寸LCD屏幕、IMU和更实用的附加组件安装在带有内置磁铁和安装孔的紧凑型外壳中树莓派40针兼容GPIO与300多个即插即用Grove模块兼容,可用于物联网探索USBOTG支持,支持Arduino、CircuitPython、Micropython、ArduPy(什么是ArduPy?)、AT固件、VisualStudioCodeTELEC认证第1步:设置Wio终端对于设置,您可以按照SeeedStudio提供的精彩指南进行操作。开始使用Wio终端,无论如何我会快速完成。步骤1.1:下载并安装ArduinoIDE:我们正在使用ArduinoIDE对Wio终端进行编程,因此我们需要先将其安装在我们的计算机上。单击此处下载ArduinoIDE步骤1.2:安装Wio终端:ArduinoIDE附带从Arduino.cc加载的官方板,因此为了对Wio终端进行编程,我们需要在ArduinoIDE上安装Wio终端板包和定义。1.2.2:添加额外的BoardsManagerURL:打开你的ArduinoIDE,点击File>Preferences,然后将下面的URL复制到AdditionalBoardsManagerURLshttps://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json注意:如果您有更多像我一样的其他URL,请用逗号分隔。1.2.3:安装WioTerminalBoardManager:点击Tools>Board>BoardManager并在BoardsManager中搜索WioTerminal。1.2.4:选择您的板和端口:为此,您需要在工具>板菜单中选择与您的Arduino相对应的条目。选择Wio终端。从工具->端口菜单中选择Wio终端板的串行设备。这可能是COM3或更高版本(COM1和COM2通常为硬件串行端口保留)。要找出答案,您可以断开Wio终端板并重新打开菜单;消失的条目应该是Arduino板。重新连接板并选择该串行端口。第2步:传感器测试并在串行监视器上显示Grove-多通道气体传感器:Grove-多通道气体传感器V2在任何其他四种气体的情况下提供稳定可靠的气体检测功能。可检测除一氧化碳(CO)、二氧化氮(NO2)、乙醇(C2H5CH)、挥发性有机化合物(VOC)等多种气体。特征一个封装上有四个完全独立的传感器元件。可检测多种气体,除一氧化碳(CO)、二氧化氮(NO2)、乙醇(C2H5CH)、挥发性有机化合物(VOC)等。定性检测,而不是定量。体积小巧,易于部署。步骤2.1:将Grove-MultichannelGasSensorV2连接到Wio终端的I2C端口,并通过USB电缆将Wio终端连接到PC。步骤2.2:下载Grove_Multichannel_Gas_Sensor_v2库。步骤2.3:将代码复制到Wio终端并上传。#include#includeGAS_GMXXXgas;unsignedintno2,c2h5ch,voc,co;voidsetup(){Serial.begin(115200);gas.begin(Wire,0x08);}voidloop(){//VOCvoc=gas.getGM502B();Serial.print("VOC:");Serial.print(voc);Serial.println("ppm");//COco=gas.getGM702B();if(co>999)co=999;Serial.print("CO:");Serial.print(co);Serial.println("ppm");//NO2no2=gas.getGM102B();if(no2>999)no2=999;Serial.print("NO2:");Serial.print(no2);Serial.println("ppm");//C2H5CHc2h5ch=gas.getGM302B();if(c2h5ch>999)c2h5ch=999;Serial.print("C2H5CH:");Serial.print(c2h5ch);Serial.println("ppm");Serial.println("----------------------------------------------------------------");delay(2000);}步骤2.4:上传代码后打开串口监视器完成,现在我们连接第一个传感器并获取数据。第3步Grove-温湿度传感器(DHT11)Grove-DHT11温湿度传感器是一款基于DHT11模块的高质量、低成本数字温湿度传感器。特征相对湿度和温度测量全范围温度补偿已校准数字信号长期稳定性传输距离远(>20m)低功耗步骤3.1:下载SeeedDHT库。步骤3.2:将DHT11传感器连接到Wio终端步骤3.3将代码复制到Wio终端并上传。#include"DHT.h"#defineDHTPIN0#defineDHTTYPEDHT11DHTdht(DHTPIN,DHTTYPE);voidsetup(){Serial.begin(115200);dht.begin();}voidloop(){//Tempfloatt=dht.readTemperature();inttem=t;Serial.print("Temperature:");Serial.print(tem);Serial.println("*C");//Humidityfloath=dht.readHumidity();if(h>99)h=99;Serial.print("Humidity:");Serial.print(h);Serial.println("%");Serial.println("----------------------------------------------------------------");delay(2000);}步骤3.5.上传代码后打开串口监视器第4步连接多通道气体传感器V2和Grove-DHT11温度和湿度传感器步骤4.1将多通道气体传感器和DHT11传感器连接到Wio终端步骤4.2将代码复制到WioTerminal并上传。#include#include#include#include"DHT.h"GAS_GMXXXgas;unsignedintno2,c2h5ch,voc,co;#defineDHTPIN0#defineDHTTYPEDHT11DHTdht(DHTPIN,DHTTYPE);voidsetup(){Serial.begin(115200);gas.begin(Wire,0x08);dht.begin();}voidloop(){//VOCvoc=gas.getGM502B();if(voc>999)voc=999;Serial.print("VOC:");Serial.print(voc);Serial.println("ppm");//COco=gas.getGM702B();if(co>999)co=999;Serial.print("CO:");Serial.print(co);Serial.println("ppm");//Tempfloatt=dht.readTemperature();//inttem=round(t);inttem=t;Serial.print("Temperature:");Serial.print(tem);Serial.println("*C");//NO2no2=gas.getGM102B();if(no2>999)no2=999;Serial.print("NO2:");Serial.print(no2);Serial.println("ppm");//Humidityfloath=dht.readHumidity();if(h>99)h=99;Serial.print("Humidity:");Serial.print(h);Serial.println("%");//C2H5CHc2h5ch=gas.getGM302B();if(c2h5ch>999)c2h5ch=999;Serial.print("C2H5CH:");Serial.print(c2h5ch);Serial.println("ppm");Serial.println("----------------------------------------------------------------");delay(2000);}步骤4.3:上传代码后打开串口监视器第5步:设计用户界面我用Draw.io设计了简单的UI,它是一个非常棒的在线工具,可以非常快速地创建图表。红色是传感器值名称,绿色是传感器值。第6步:将设计转换为代码默认情况下,TFTLCD库包含在Wio端子板库中。因此,无需再次下载TFTLCD库。首先,我们可以从标题开始。空气质量#include#include#include#include"DHT.h"GAS_GMXXXgas;TFT_eSPItft;TFT_eSpritespr=TFT_eSprite(&tft);//spriteunsignedintno2,c2h5ch,voc,co;#defineDHTPIN0#defineDHTTYPEDHT11DHTdht(DHTPIN,DHTTYPE);voidsetup(){Serial.begin(115200);tft.begin();tft.setRotation(3);gas.begin(Wire,0x08);dht.begin();//Headtft.fillScreen(TFT_BLACK);tft.setFreeFont(&FreeSansBoldOblique18pt7b);tft.setTextColor(TFT_WHITE);tft.drawString("AirQuality",70,10,1);}voidloop(){}代码审查tft.setFreeFont(&FreeSansBoldOblique24pt7b);FF#其中#是通过查看列表中的列表确定的数字Free_Fonts.h在LCD屏幕上绘制字符串:drawString(constString&string,int32_tpoX,int32_tpoY);其中string是文本字符串,(poX,poY)是起始坐标。在这里,我们将光标设置在70和10上,并将“空气质量”拉绳设置为白色。//Headtft.fillScreen(TFT_BLACK);tft.setFreeFont(&FreeSansBoldOblique18pt7b);tft.setTextColor(TFT_WHITE);tft.drawString("AirQuality",70,10,1);在LCD屏幕上的两点之间画一条线:drawLine(int32_tx0,int32_ty0,int32_tx1,int32_ty1,uint32_tcolor);线条开始绘制的位置(x0,y0)和(x1,y1)颜色。在这里,我们用绿色画一条水平线。//Linefor(int8_tline_index=0;line_index{tft.drawLine(0,50+line_index,tft.width(),50+line_index,TFT_GREEN);}显示输出:接下来,我们大胆用矩形来表示传感器值,在液晶屏上绘制或填充圆角矩形,drawRoundRect(int32_tx,int32_ty,int32_tw,int32_th,int32_tr,uint32_tcolor);其中(x,y)是起始坐标,w对于h矩形的宽度和高度,r对于角半径和颜色。所以。#include#include#include#include"DHT.h"GAS_GMXXXgas;TFT_eSPItft;TFT_eSpritespr=TFT_eSprite(&tft);//spriteunsignedintno2,c2h5ch,voc,co;#defineDHTPIN0#defineDHTTYPEDHT11DHTdht(DHTPIN,DHTTYPE);voidsetup(){Serial.begin(115200);tft.begin();tft.setRotation(3);gas.begin(Wire,0x08);dht.begin();//Headtft.fillScreen(TFT_BLACK);tft.setFreeFont(&FreeSansBoldOblique18pt7b);tft.setTextColor(TFT_WHITE);tft.drawString("AirQuality",70,10,1);//Linefor(int8_tline_index=0;line_index{tft.drawLine(0,50+line_index,tft.width(),50+line_index,TFT_GREEN);}//VCO&CORecttft.drawRoundRect(5,60,(tft.width()/2)-20,tft.height()-65,10,TFT_WHITE);//L1//Temprecttft.drawRoundRect((tft.width()/2)-10,60,(tft.width()/2)/2,(tft.height()-65)/2,10,TFT_BLUE);//s1//No2recttft.drawRoundRect(((tft.width()/2)+(tft.width()/2)/2)-5,60,(tft.width()/2)/2,(tft.height()-65)/2,10,TFT_BLUE);//s2//HumiRecttft.drawRoundRect((tft.width()/2)-10,(tft.height()/2)+30,(tft.width()/2)/2,(tft.height()-65)/2,10,TFT_BLUE);//s3//c2h5chRecttft.drawRoundRect(((tft.width()/2)+(tft.width()/2)/2)-5,(tft.height()/2)+30,(tft.width()/2)/2,(tft.height()-65)/2,10,TFT_BLUE);//s4}voidloop(){}在这里,我们为传感器值绘制矩形://VCO&CORecttft.drawRoundRect(5,60,(tft.width()/2)-20,tft.height()-65,10,TFT_WHITE);//L1//Temprecttft.drawRoundRect((tft.width()/2)-10,60,(tft.width()/2)/2,(tft.height()-65)/2,10,TFT_BLUE);//s1//No2recttft.drawRoundRect(((tft.width()/2)+(tft.width()/2)/2)-5,60,(tft.width()/2)/2,(tft.height()-65)/2,10,TFT_BLUE);//s2//HumiRecttft.drawRoundRect((tft.width()/2)-10,(tft.height()/2)+30,(tft.width()/2)/2,(tft.height()-65)/2,10,TFT_BLUE);//s3//c2h5chRecttft.drawRoundRect(((tft.width()/2)+(tft.width()/2)/2)-5,(tft.height()/2)+30,(tft.width()/2)/2,(tft.height()-65)/2,10,TFT_BLUE);//s4显示输出:接下来,我们需要为此添加适当的传感器标签名称,#include#include#include#include"DHT.h"GAS_GMXXXgas;TFT_eSPItft;TFT_eSpritespr=TFT_eSprite(&tft);//spriteunsignedintno2,c2h5ch,voc,co;#defineDHTPIN0#defineDHTTYPEDHT11DHTdht(DHTPIN,DHTTYPE);voidsetup(){Serial.begin(115200);tft.begin();tft.setRotation(3);gas.begin(Wire,0x08);dht.begin();//Headtft.fillScreen(TFT_BLACK);tft.setFreeFont(&FreeSansBoldOblique18pt7b);tft.setTextColor(TFT_WHITE);tft.drawString("AirQuality",70,10,1);//Linefor(int8_tline_index=0;line_index{tft.drawLine(0,50+line_index,tft.width(),50+line_index,TFT_GREEN);}//VCO&CORecttft.drawRoundRect(5,60,(tft.width()/2)-20,tft.height()-65,10,TFT_WHITE);//L1//VCOTexttft.setFreeFont(&FreeSansBoldOblique12pt7b);tft.setTextColor(TFT_RED);tft.drawString("VOC",7,65,1);tft.setTextColor(TFT_GREEN);tft.drawString("ppm",55,108,1);//COTexttft.setFreeFont(&FreeSansBoldOblique12pt7b);tft.setTextColor(TFT_RED);tft.drawString("CO",7,150,1);tft.setTextColor(TFT_GREEN);tft.drawString("ppm",55,193,1);//Temprecttft.drawRoundRect((tft.width()/2)-10,60,(tft.width()/2)/2,(tft.height()-65)/2,10,TFT_BLUE);//s1tft.setFreeFont(&FreeSansBoldOblique9pt7b);tft.setTextColor(TFT_RED);tft.drawString("Temp",(tft.width()/2)-1,70,1);//Printthetesttextinthecustomfonttft.setTextColor(TFT_GREEN);tft.drawString("o",(tft.width()/2)+30,95,1);tft.drawString("C",(tft.width()/2)+40,100,1);//No2recttft.drawRoundRect(((tft.width()/2)+(tft.width()/2)/2)-5,60,(tft.width()/2)/2,(tft.height()-65)/2,10,TFT_BLUE);//s2tft.setFreeFont(&FreeSansBoldOblique9pt7b);tft.setTextColor(TFT_RED);tft.drawString("NO2",((tft.width()/2)+(tft.width()/2)/2),70,1);//Printthetesttextinthecustomfonttft.setTextColor(TFT_GREEN);tft.drawString("ppm",((tft.width()/2)+(tft.width()/2)/2)+30,120,1);//HumiRecttft.drawRoundRect((tft.width()/2)-10,(tft.height()/2)+30,(tft.width()/2)/2,(tft.height()-65)/2,10,TFT_BLUE);//s3tft.setFreeFont(&FreeSansBoldOblique9pt7b);tft.setTextColor(TFT_RED);tft.drawString("Humi",(tft.width()/2)-1,(tft.height()/2)+40,1);//Printthetesttextinthecustomfonttft.setTextColor(TFT_GREEN);tft.drawString("%",(tft.width()/2)+30,(tft.height()/2)+70,1);//c2h5chRecttft.drawRoundRect(((tft.width()/2)+(tft.width()/2)/2)-5,(tft.height()/2)+30,(tft.width()/2)/2,(tft.height()-65)/2,10,TFT_BLUE);//s4tft.setFreeFont(&FreeSansBoldOblique9pt7b);tft.setTextColor(TFT_RED);tft.drawString("Ethyl",((tft.width()/2)+(tft.width()/2)/2),(tft.height()/2)+40,1);//Printthetesttextinthecustomfonttft.setTextColor(TFT_GREEN);tft.drawString("ppm",((tft.width()/2)+(tft.width()/2)/2)+30,(tft.height()/2)+90,1);}voidloop(){}在这里,我们使用drawString函数来添加传感器标签名称:显示VOC和ppm标签文本//VCOTexttft.setFreeFont(&FreeSansBoldOblique12pt7b);tft.setTextColor(TFT_RED);tft.drawString("VOC",7,65,1);tft.setTextColor(TFT_GREEN);tft.drawString("ppm",55,108,1);显示CO和ppm标签文本//COTexttft.setFreeFont(&FreeSansBoldOblique12pt7b);tft.setTextColor(TFT_RED);tft.drawString("CO",7,150,1);tft.setTextColor(TFT_GREEN);tft.drawString("ppm",55,193,1);显示温度和oc标签文本//Temptft.setFreeFont(&FreeSansBoldOblique9pt7b);tft.setTextColor(TFT_RED);tft.drawString("Temp",(tft.width()/2)-1,70,1);tft.setTextColor(TFT_GREEN);tft.drawString("o",(tft.width()/2)+30,95,1);tft.drawString("C",(tft.width()/2)+40,100,1);显示NO2和ppm标签名称//NO2tft.setFreeFont(&FreeSansBoldOblique9pt7b);tft.setTextColor(TFT_RED);tft.drawString("NO2",((tft.width()/2)+(tft.width()/2)/2),70,1);tft.setTextColor(TFT_GREEN);tft.drawString("ppm",((tft.width()/2)+(tft.width()/2)/2)+30,120,1);显示湿度和%标签名称//Humitft.setFreeFont(&FreeSansBoldOblique9pt7b);tft.setTextColor(TFT_RED);tft.drawString("Humi",(tft.width()/2)-1,(tft.height()/2)+40,1);tft.setTextColor(TFT_GREEN);tft.drawString("%",(tft.width()/2)+30,(tft.height()/2)+70,1);显示乙基和ppm标签名称//Ethyltft.setFreeFont(&FreeSansBoldOblique9pt7b);tft.setTextColor(TFT_RED);tft.drawString("Ethyl",((tft.width()/2)+(tft.width()/2)/2),(tft.height()/2)+40,1);tft.setTextColor(TFT_GREEN);tft.drawString("ppm",((tft.width()/2)+(tft.width()/2)/2)+30,(tft.height()/2)+90,1);显示输出:现在我们将设计转换为代码。第7步:显示传感器读数接下来,我们可以在我们开发的UI中显示传感器读数。最终代码:#include#include#include#include"DHT.h"GAS_GMXXXgas;TFT_eSPItft;TFT_eSpritespr=TFT_eSprite(&tft);//spriteunsignedintno2,c2h5ch,voc,co;#defineDHTPIN0#defineDHTTYPEDHT11DHTdht(DHTPIN,DHTTYPE);voidsetup(){Serial.begin(115200);tft.begin();tft.setRotation(3);gas.begin(Wire,0x08);dht.begin();//Headtft.fillScreen(TFT_BLACK);tft.setFreeFont(&FreeSansBoldOblique18pt7b);tft.setTextColor(TFT_WHITE);tft.drawString("AirQuality",70,10,1);//Linefor(int8_tline_index=0;line_index{tft.drawLine(0,50+line_index,tft.width(),50+line_index,TFT_GREEN);}//VCO&CORecttft.drawRoundRect(5,60,(tft.width()/2)-20,tft.height()-65,10,TFT_WHITE);//L1//VCOTexttft.setFreeFont(&FreeSansBoldOblique12pt7b);tft.setTextColor(TFT_RED);tft.drawString("VOC",7,65,1);tft.setTextColor(TFT_GREEN);tft.drawString("ppm",55,108,1);//COTexttft.setFreeFont(&FreeSansBoldOblique12pt7b);tft.setTextColor(TFT_RED);tft.drawString("CO",7,150,1);tft.setTextColor(TFT_GREEN);tft.drawString("ppm",55,193,1);//Temprecttft.drawRoundRect((tft.width()/2)-10,60,(tft.width()/2)/2,(tft.height()-65)/2,10,TFT_BLUE);//s1tft.setFreeFont(&FreeSansBoldOblique9pt7b);tft.setTextColor(TFT_RED);tft.drawString("Temp",(tft.width()/2)-1,70,1);//Printthetesttextinthecustomfonttft.setTextColor(TFT_GREEN);tft.drawString("o",(tft.width()/2)+30,95,1);tft.drawString("C",(tft.width()/2)+40,100,1);//No2recttft.drawRoundRect(((tft.width()/2)+(tft.width()/2)/2)-5,60,(tft.width()/2)/2,(tft.height()-65)/2,10,TFT_BLUE);//s2tft.setFreeFont(&FreeSansBoldOblique9pt7b);tft.setTextColor(TFT_RED);tft.drawString("NO2",((tft.width()/2)+(tft.width()/2)/2),70,1);//Printthetesttextinthecustomfonttft.setTextColor(TFT_GREEN);tft.drawString("ppm",((tft.width()/2)+(tft.width()/2)/2)+30,120,1);//HumiRecttft.drawRoundRect((tft.width()/2)-10,(tft.height()/2)+30,(tft.width()/2)/2,(tft.height()-65)/2,10,TFT_BLUE);//s3tft.setFreeFont(&FreeSansBoldOblique9pt7b);tft.setTextColor(TFT_RED);tft.drawString("Humi",(tft.width()/2)-1,(tft.height()/2)+40,1);//Printthetesttextinthecustomfonttft.setTextColor(TFT_GREEN);tft.drawString("%",(tft.width()/2)+30,(tft.height()/2)+70,1);//c2h5chRecttft.drawRoundRect(((tft.width()/2)+(tft.width()/2)/2)-5,(tft.height()/2)+30,(tft.width()/2)/2,(tft.height()-65)/2,10,TFT_BLUE);//s4tft.setFreeFont(&FreeSansBoldOblique9pt7b);tft.setTextColor(TFT_RED);tft.drawString("Ethyl",((tft.width()/2)+(tft.width()/2)/2),(tft.height()/2)+40,1);//Printthetesttextinthecustomfonttft.setTextColor(TFT_GREEN);tft.drawString("ppm",((tft.width()/2)+(tft.width()/2)/2)+30,(tft.height()/2)+90,1);}voidloop(){//VOCvoc=gas.getGM502B();if(voc>999)voc=999;Serial.print("VOC:");Serial.print(voc);Serial.println("ppm");spr.createSprite(40,30);spr.fillSprite(TFT_BLACK);spr.setFreeFont(&FreeSansBoldOblique12pt7b);spr.setTextColor(TFT_WHITE);spr.drawNumber(voc,0,0,1);spr.pushSprite(15,100);spr.deleteSprite();//COco=gas.getGM702B();if(co>999)co=999;Serial.print("CO:");Serial.print(co);Serial.println("ppm");spr.createSprite(40,30);spr.setFreeFont(&FreeSansBoldOblique12pt7b);spr.setTextColor(TFT_WHITE);spr.drawNumber(co,0,0,1);spr.setTextColor(TFT_GREEN);spr.pushSprite(15,185);spr.deleteSprite();//Tempfloatt=dht.readTemperature();//inttem=round(t);inttem=t;Serial.print("Temperature:");Serial.print(tem);Serial.println("*C");spr.createSprite(30,30);spr.setFreeFont(&FreeSansBoldOblique12pt7b);spr.setTextColor(TFT_WHITE);spr.drawNumber(t,0,0,1);spr.setTextColor(TFT_GREEN);spr.pushSprite((tft.width()/2)-1,100);spr.deleteSprite();//NO2no2=gas.getGM102B();if(no2>999)no2=999;Serial.print("NO2:");Serial.print(no2);Serial.println("ppm");spr.createSprite(45,30);spr.setFreeFont(&FreeSansBoldOblique12pt7b);spr.setTextColor(TFT_WHITE);spr.drawNumber(no2,0,0,1);spr.pushSprite(((tft.width()/2)+(tft.width()/2)/2),97);spr.deleteSprite();//Humidityfloath=dht.readHumidity();if(h>99)h=99;Serial.print("Humidity:");Serial.print(h);Serial.println("%");spr.createSprite(30,30);spr.setFreeFont(&FreeSansBoldOblique12pt7b);spr.setTextColor(TFT_WHITE);spr.drawNumber(h,0,0,1);spr.pushSprite((tft.width()/2)-1,(tft.height()/2)+67);spr.deleteSprite();//C2H5CHc2h5ch=gas.getGM302B();if(c2h5ch>999)c2h5ch=999;Serial.print("C2H5CH:");Serial.print(c2h5ch);Serial.println("ppm");spr.createSprite(45,30);spr.setFreeFont(&FreeSansBoldOblique12pt7b);spr.setTextColor(TFT_WHITE);spr.drawNumber(c2h5ch,0,0,1);spr.pushSprite(((tft.width()/2)+(tft.width()/2)/2),(tft.height()/2)+67);spr.deleteSprite();delay(2000);}在这步,我们正在读取传感器值并以2秒的延迟显示它。代码审查读取和显示VOC值//VOCvoc=gas.getGM502B();if(voc>999)voc=999;Serial.print("VOC:");Serial.print(voc);Serial.println("ppm");spr.createSprite(40,30);spr.fillSprite(TFT_BLACK);spr.setFreeFont(&FreeSansBoldOblique12pt7b);spr.setTextColor(TFT_WHITE);spr.drawNumber(voc,0,0,1);spr.pushSprite(15,100);spr.deleteSprite();读取和显示CO值//COco=gas.getGM702B();if(co>999)co=999;Serial.print("CO:");Serial.print(co);Serial.println("ppm");spr.createSprite(40,30);spr.setFreeFont(&FreeSansBoldOblique12pt7b);spr.setTextColor(TFT_WHITE);spr.drawNumber(co,0,0,1);spr.setTextColor(TFT_GREEN);spr.pushSprite(15,185);spr.deleteSprite();读取和显示温度值//Tempfloatt=dht.readTemperature();//inttem=round(t);inttem=t;Serial.print("Temperature:");Serial.print(tem);Serial.println("*C");spr.createSprite(30,30);spr.setFreeFont(&FreeSansBoldOblique12pt7b);spr.setTextColor(TFT_WHITE);spr.drawNumber(t,0,0,1);spr.setTextColor(TFT_GREEN);spr.pushSprite((tft.width()/2)-1,100);spr.deleteSprite();读取和显示NO2值//NO2no2=gas.getGM102B();if(no2>999)no2=999;Serial.print("NO2:");Serial.print(no2);Serial.println("ppm");spr.createSprite(45,30);spr.setFreeFont(&FreeSansBoldOblique12pt7b);spr.setTextColor(TFT_WHITE);spr.drawNumber(no2,0,0,1);spr.pushSprite(((tft.width()/2)+(tft.width()/2)/2),97);spr.deleteSprite();读取和显示湿度值//Humidityfloath=dht.readHumidity();if(h>99)h=99;Serial.print("Humidity:");Serial.print(h);Serial.println("%");spr.createSprite(30,30);spr.setFreeFont(&FreeSansBoldOblique12pt7b);spr.setTextColor(TFT_WHITE);spr.drawNumber(h,0,0,1);spr.pushSprite((tft.width()/2)-1,(tft.height()/2)+67);spr.deleteSprite();读取和显示C2H5CH值//C2H5CHc2h5ch=gas.getGM302B();if(c2h5ch>999)c2h5ch=999;Serial.print("C2H5CH:");Serial.print(c2h5ch);Serial.println("ppm");spr.createSprite(45,30);spr.setFreeFont(&FreeSansBoldOblique12pt7b);spr.setTextColor(TFT_WHITE);spr.drawNumber(c2h5ch,0,0,1);spr.pushSprite(((tft.width()/2)+(tft.width()/2)/2),(tft.height()/2)+67);spr.deleteSprite();输出显示:第8步:设计外壳/支架我使用AutodeskFusion360来设计支架。第9步:3D打印外壳/支架我使用黑色ABS灯丝打印支架。第10步:组装最后一部分是组装首先连接DHT11并拧紧。第11步:收获成果!如果您对此项目有任何想法、意见或问题,请在下方留言。以上内容翻译自网络,原作者:SalmanFaris,如涉及侵权,可联系删除。