×

Jigglypuff IoT二氧化碳和粉尘监测器(跟踪器)带电报

消耗积分:2 | 格式:zip | 大小:0.18 MB | 2022-06-15

陈伟

分享资料个

pYYBAGKh1M-AYn9gAAXhtLo06jA192.png
poYBAGKh1NGALn6PAACTiT6SNPc844.jpg
poYBAGKh1NOAPrE1AAB_FY3_WZE529.jpg

成分

PCBWay定制PCB
 
× 1
Arduino Nano RP2040 连接
 
× 1
5000ppm二氧化碳传感器红外模块
 
× 1
GP2Y1010AU0F 灰尘传感器
 
× 1
0.91" OLED液晶显示模组
 
× 1
5mm共阳极RGB LED
 
× 1
220µF 电容
 
× 1
150Ω电阻
 
× 1
2.2K电阻
 
× 1
3.3K电阻
 
× 1
电源插座
 
× 1
外接电池
 
× 1

描述

Jigglypuff IoT 二氧化碳和粉尘监测器(跟踪器)带电报

 

The dust density and the carbon dioxide (CO2) density affect my sleep quality and health detrimentally due to the fact that I have allergic bronchitis. Allergic bronchitis is a chronic pulmonary disease, and exposure to allergy triggers like tobacco smoke, pollution, or dust can instigate it. When the dust density and the carbon dioxide density are higher, it becomes struggling for me to breathe, especially while sleeping. Therefore, I decided to create this project to track the dust density and the carbon dioxide density in my room remotely so as to get a prescient warning to extenuate my symptoms before going to bed.

 

由于 Telegram 是一个兼容 iOS 和 Android 的跨平台基于云的消息服务,我决定创建一个 Telegram 机器人来轻松监控多个设备上的灰尘和二氧化碳密度评估。在 Telegram 中,与任何其他消息传递应用程序不同,使用命令列表创建机器人很容易,这些消息应用程序是不需要额外电话号码来设置的特殊帐户。IoT Carbon Dioxide and Dust Monitor 是我为这个项目创建的 Telegram 机器人,它允许用户使用以下命令显示实时灰尘和二氧化碳密度评估:

 

  • /co2_density
  • /dust_density

 

我开发了一个 PHP Web 应用程序(传出)来与我的 Telegram 机器人通信。该应用程序从 Telegram Bot API 更新,将传感器生成的灰尘和二氧化碳密度评估(如下所述)保存到给定的 MySQL 数据库表中,并在请求时将密度评估发送到我的 Telegram bot。

 

为了准确获取灰尘密度和二氧化碳浓度,我使用了 MH-Z14A NDIR CO2 传感器和 GP2Y1010AU0F 灰尘传感器。我选择使用 Arduino Nano RP2040 Connect 来读取评估并将其传输到 Web 应用程序,因为它是具有内置 u-blox NINA-W102 无线电模块的高性能开发板。顾名思义,该板基于 Raspberry Pi Foundation 的 RP2040 微控制器。

 

为了在将评估发送到 Web 应用程序之前在设备上显示评估,我使用了 SSD1306 OLED (128x32) 屏幕。最后,我添加了一个 5mm 共阳极 RGB LED 来显示设备(通过 Nano RP2040 Connect)和 Web 应用程序之间的连接状态。

 

在完成面包板上的接线并测试代码后,Jigglypuff 启发我为这个项目设计了一个 PCB。由于 Jigglypuff 有一个臭名昭著的睡眠发作,我认为为一个项目设计一个 Jigglypuff PCB 会很可爱,这有助于我在睡觉前缓解我的过敏症状 :)

 

由于粉红色 PCB 并不普遍,您之前可能没有见过粉红色阻焊层选项。如果您想像我的 PCB 一样设计带有粉色阻焊层选项的 PCB,我强烈推荐 PCBWay。他们为独特的 PCB 颜色和要求提供快速、可靠且经济实惠的服务。您可以从这里检查 PCBWay 阻焊层和丝印选项 

 

poYBAGKh1OGAaZSuAAP1gp2UL5o672.jpg

 

pYYBAGKh1OiAIxn6AAMzZmGuCbM127.jpg

 

pYYBAGKh1QyAdiuvAFz3rpSTWO0942.gif

 

pYYBAGKh1TSAc4J5AHAbIQJnUW8567.gif

 

第 1 步:设计和焊接 Jigglypuff IoT 二氧化碳和灰尘监测器 PCB

 

在对我的 PCB 设计进行原型设计之前,我使用 Arduino Nano RP2040 Connect 测试了所有连接和接线。

 

poYBAGKh1TiABFtVAAjgqCR1_L8803.jpg

 

然后,我利用 KiCad 设计了物联网二氧化碳和灰尘监测器 PCB - 灵感来自可爱迷人的 Jigglypuff :) 我在下面附上了 PCB 的 Gerber 文件。因此,如果您愿意,您可以从 PCBWay 订购此 PCB,以创建一个可爱的设备来跟踪任何地方的灰尘密度和二氧化碳密度。

 

pYYBAGKh1TuAMSGyAAYVh55F-OM428.jpg

 

poYBAGKh1UGAfps0AAX30bRFsHo291.jpg

 

首先,通过使用烙铁,我连接了接头(母)、电阻器(150Ω、2.2K、3.3K)、MH-Z14A NDIR CO2 传感器、GP2Y1010AU0F 灰尘传感器、5mm 共阳极 RGB LED、电容器(220μF)和电源插孔。

 

PCB上的元件清单:

 

A1(用于 Arduino Nano RP2040 连接的接头)

SSD1306(SSD1306 OLED (128x32) 屏幕的接头)

MHZ14(MH-Z14A NDIR CO2 传感器)

GP2Y10(GP2Y1010AU0F灰尘传感器)

D1 (5mm 共阳极 RGB LED)

C1 (220μF电容)

R1(2.2K电阻)

R2(3.3K电阻)

R3(150Ω电阻)

J1(电源插孔)

 

pYYBAGKh1UWAUe93AAZcT9m0_g0369.jpg

 

pYYBAGKh1UmAJUPNAAY1A3mvX2A746.jpg

 

pYYBAGKh1VCAY3tMAAcGJ0WceUE129.jpg

 

为了让我的 PCB 设计更加精致,我在 PCB 背面安装了 GP2Y1010AU0F 灰尘传感器,并用热胶枪将其固定。我还添加了两个焊接跳线垫(JP1、JP2),将 Nano RP2040 Connect 连接到 MH-Z14A CO2 传感器的 UART 接口。

 

pYYBAGKh1VSAPKsEAAarDbdl6oY222.jpg

 

第 2 步:使用 BotFather 构建 Telegram 机器人

 

BotFather 是一个 Telegram 机器人,可让我们在 Telegram 上创建和管理机器人,而无需任何编码。

 

? 首先,在 Telegram 上打开 BotFather 并输入 /start 以查看可用的命令列表和手册。

 

pYYBAGKh1VeAUr8uAAfpijl7niw998.jpg

 

? 使用 /newbot 命令创建一个新机器人。当 BotFather 要求您输入名称时,输入您的机器人的名称。它显示在联系方式和其他地方。

 

物联网二氧化碳和粉尘监测仪

 

? 然后,输入您的机器人的用户名。用户名长度为 5-32 个字符,不区分大小写,但只能包含拉丁字符、数字和下划线。它们必须以“bot”结尾,例如“tetris_bot”或“TetrisBot”。

 

co2_dust_bot

 

? 在这些步骤之后,BotFather 会为您的新机器人生成一个授权令牌。授权令牌是一个类似于 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 的字符串,它是授权机器人并向 Telegram Bot API 发送请求所必需的。确保您的令牌安全并安全存储。

 

poYBAGKh1VyARllnAAXTgXxg0AE696.jpg

 

? 此外,您可以使用/setuserpic 命令更改机器人的个人资料图片 。

 

poYBAGKh1V-ADWmWAAWXTv7qgZY199.jpg

 

? 最后,输入 /setcommands 命令来定义最近创建的机器人支持的命令列表。用户在与机器人的聊天中键入 / 时,会将这些命令视为建议。

 

?? 我为 Telegram 机器人(IoT 二氧化碳和粉尘监测器)创建的命令列表:

 

  • /co2_density - 显示 MH-Z14A NDIR CO2 传感器产生的 CO2 密度
  • /dust_density - 监控 GP2Y10 灰尘传感器产生的灰尘密度
  • /帮助 - 帮助

 

pYYBAGKh1WOAEtCIAAeO45EykVo501.jpg

 

第 3 步:用 PHP 开发一个 Web 应用程序以通过 Telegram Bot API 与机器人通信

 

成功创建 Telegram 机器人后,我需要从 Telegram Bot API 获取更新以与我的机器人通信。因此,我用 PHP 开发了一个 web 应用程序,名为 telegram_co2_and_dust_monitor,以便:

 

  • 通过Telegram Bot API从我的 Telegram 机器人(IoT 二氧化碳和粉尘监测器)获取更新
  • 获取 Nano RP2040 Connect 传输的灰尘和二氧化碳密度评估,并将它们保存到给定的 MySQL 数据库表中,
  • 根据要求向我的 Telegram 机器人发送消息(灰尘和二氧化碳密度评估)。

 

该应用程序包含一个文件 - index.php。我在 index.php 文件中创建了一个名为 telegram_co2_dust_monitor 的类,以保存 Nano RP2040 Connect 传输的信息到给定的 MySQL 数据库表,并在请求时将该信息发送到给定的 Telegram 机器人。

 

? 在 __init__ 函数中,该类需要四个参数来执行函数:

 

  • 令牌?给定电报机器人的授权令牌
  • 网络路径?Telegram Bot API 请求服务器
  • 康?MySQL数据库连接设置
  • 桌子 ?MySQL数据库表名

 

? 在 send_message 函数中,应用程序使用机器人的授权令牌通过 Telegram Bot API 将给定的文本发送给给定的机器人。

 

语法:https://api.telegram.org/bot/sendMessage?chat_id=&text=

 

? 在 send_photo 函数中,应用程序使用机器人的授权令牌通过 Telegram Bot API 将给定的图片发送给给定的机器人。

 

语法:https://api.telegram.org/bot/sendPhoto?chat_id=&photo=&caption=

 

? 在 send_video 函数中,应用程序使用机器人的授权令牌通过 Telegram Bot API 将给定的视频发送到给定的机器人。

 

语法:https://api.telegram.org/bot/sendVideo?chat_id=&video=&caption=

 

	   {
		  ->token = $token;
		 ->web_path = $server.$token;
		 ->conn = $conn;
		 ->table = $table;
	}
	
	   {
		$new_message =  -> web_path。 .$id.  .urlencode($string);
		file_get_contents($new_message);
	}
	
	   {
	$new_photo =  -> web_path。 .$id.  .$照片。 .$caption;
	文件获取内容($new_photo);
	}

	   {
	$new_video =  -> web_path。 .$id.  .$视频。 .$caption;
	文件获取内容($new_video);
	}

 

? 在 update_database 函数中,将给定信息保存到给定 MySQL 数据库表中的给定列。

 

	   {
		$sql =  ;
		mysqli_query(  ->conn, $sql);
	}

 

? 在 get_data_from_database 函数中,从给定 MySQL 数据库表的给定列中获取并返回请求的信息。

 

	   {
		$sql =  ;
		$result = mysqli_query(  ->conn, $sql);
		 ($row = mysqli_fetch_assoc($result)){
			  $row[$_column];
		}
	}

 

? 定义所需的 MySQL 数据库连接设置和 co2_dust_monitor 对象及其所需参数。

 

$server =  (
	  =>  ,
	  =>  ,
	  =>  ,
	  =>  ,
	  => 

);

$conn = mysqli_connect($server[  ], $server[  ], $server[  ], $server[  ]);

 
$co2_dust_monitor =  telegram_co2_dust_monitor();
$bot_token =  ;  
$co2_dust_monitor->__init__($bot_token,  , $conn, $server[  ]);

 

? 从 Telegram Bot API 获取更新。

 

$updates = json_decode(file_get_contents(  ),  );

 

? 如果应用程序从 Telegram Bot API 接收数据,则获取聊天 ID 和消息。

 

? 根据传入消息的类型 - 照片、视频、文档或文本 - 使用引发的聊天 ID 回复聊天。

 

? Web 应用程序与来自给定 Telegram 机器人的这些命令兼容:

 

  • /开始
  • /co2_density
  • /dust_density
  • /帮助

 

? 如果收到 /start 命令,应用程序会将聊天 ID 注册到给定的 MySQL 数据库表,以便发送消息而无需从 Telegram Bot API 进行更新。

 

? 如果收到 /co2_density 命令,Web 应用程序会将存储在数据库表中的最新二氧化碳密度评估和更新时间发送给给定的 Telegram 机器人。

 

? 如果收到 /dust_density 命令,Web 应用程序会将存储在数据库表中的最新灰尘密度评估和更新时间发送给给定的 Telegram 机器人。

 

? 如果接收到 /help 命令,Web 应用程序会将带有描述的支持命令列表发送到给定的 Telegram 机器人。

 

? 默认情况下,如果没有收到支持的命令而是文本,Web 应用程序会发送:

 

等待你的命令:)

 

($updates[  ]){
	$chat_id = $updates[  ][  ][  ];
	$message = $updates[  ][  ];

	($updates[  ][  ]){
		$co2_dust_monitor->send_message($chat_id,  );
	}   ($updates[  ][  ]){
		$co2_dust_monitor->send_message($chat_id,  );
	}   ($updates[  ][  ]){
		$co2_dust_monitor->send_message($chat_id,  );
	}  {
		 
		 ($message){
		   :
		$co2_dust_monitor->update_database(  , $chat_id); 
		$co2_dust_monitor->send_message($chat_id,  );
		;	
		 :
		$co2 = $co2_dust_monitor->get_data_from_database(  );
		$date = $co2_dust_monitor->get_data_from_database(  );
		$co2_dust_monitor->send_message($chat_id,  );
		;	
		 :
		$dust = $co2_dust_monitor->get_data_from_database(  );
		$date = $co2_dust_monitor->get_data_from_database(  );
		$co2_dust_monitor->send_message($chat_id,  );
		;
		 :
		$co2_dust_monitor->send_message($chat_id,  );
		;
:
$co2_dust_monitor->send_message($chat_id,  );
;		
	}
	}
}

 

? 如果 Nano RP2040 Connect 将灰尘和二氧化碳密度评估传输到 Web 应用程序,请将它们保存到给定的 MySQL 数据库表中。然后,使用 date 函数设置时区以精确得出最新的更新时间,并将其保存到数据库表中。

 

 (  ($_GET[  ]) &&  ($_GET[  ])){
	$co2_dust_monitor->update_database(  , htmlentities($_GET[  ]));
	$co2_dust_monitor->update_database(  , htmlentities($_GET[  ]));
	 
	date_default_timezone_set(  );
	$co2_dust_monitor->update_database(  , date(  ));
	 (  );
}

 

poYBAGKh1WWAafjPAAC3q-9jNeo853.png

 

poYBAGKh1WeARR5nAAC7HpM0-cU183.png

 

poYBAGKh1WmAVlJTAAD0twCSSQk834.png

 

步骤 3.1:创建 MySQL 数据库表并保存更新

 

在用 PHP 开发 Web 应用程序后,我在我的服务器上创建了一个新的 MySQL 数据库 (telegramco2dustmonitor)。然后,我在 telegramco2dustmonitor 数据库中创建了一个数据库表(条目),以收集 Nano RP2040 Connect 传输的灰尘和二氧化碳密度评估。最后,我在条目数据库表中为每个属性(列)插入了默认值:

 

telegramco2dustmonitor > 条目 > 属性:

 

  • 聊天ID
  • 二氧化碳
  • 灰尘
  • 日期

 

  (
 chat_id )主  ,
 co2  (  ) ,
 灰尘 (  )   ,
  (  )  
);

  ” 、 “dust” 、 “ 

 

pYYBAGKh1WuACiSwAADhLg7bvls552.png

 

poYBAGKh1W2AGC5XAADbV2HzDNY231.png

 

通过向 https://api.telegram.org/ 发出请求从 Telegram Bot API 获取更新需要 SSL 连接,因此我使用我网站的服务器来托管 Web 应用程序。

 

theamplituhedron.com

 

但是,  Telegram Bot API 是开源的,可在 telegram-bot-api获得。您可以在本地运行它并将请求发送到您的服务器而不是 https://api.telegram.org。

 

poYBAGKh1W-Ae4ReAAAd3Zwybds527.png

 

???当 Web 应用程序获取信息并将该信息成功保存到数据库表中时,应用程序会打印:

 

数据注册成功!

 

pYYBAGKh1XGAK2QYAAAl2c81dC4479.png

 

步骤 3.2:设置 Web 应用程序以与机器人通信

 

在开发 Web 应用程序(传出 webhook)并创建 MySQL 数据库表之后,我需要使用setWebhook方法为我的 Telegram 机器人(IoT 二氧化碳和灰尘监视器)指定应用程序 URL,  以接收来自 Telegram Bot API 的传入更新。

 

https://api.telegram.org/bot/setWebhook?url=https://www.theamplituhedron.com/telegram_co2_and_dust_monitor/

 

poYBAGKh1XOAM54qAABQr52fGPY357.png

 

? 指定应用程序 URL 后,Telegram Bot API 会抛出此消息:Webhook 已设置。

 

? 要检查给定的 Telegram 机器人功能并将聊天 ID 注册到数据库表中,请打开机器人并输入 /start。

 

poYBAGKh1XaAUsxqAAGB2q4EzI8327.jpg

 

pYYBAGKh1XqAXDAqAANFDnFoMAQ919.jpg

 

? 输入 /help 以查看支持的命令列表和说明。

 

poYBAGKh1X6AX-QFAAUe1GuIiVk584.jpg

 

第 4 步:为 Nano RP2040 Connect 安装 Mbed OS 内核

 

由于我决定在这个项目中使用 Arduino Nano RP2040 Connect,我需要将 Mbed OS 内核安装到 Arduino IDE 中。

 

? 在 Arduino IDE 上,导航到 Tools > Board > Boards Manager。

 

pYYBAGKh1YCAb7RkAADjHaMvDXA397.png

 

? 然后,搜索 Arduino Mbed OS Nano Boards 内核并安装它。

 

pYYBAGKh1YKAAy9qAACaS8mC4ow968.png

 

? 成功安装所需内核后,转到 Tools > Board > Arduino Mbed OS Nano Boards 并选择 Arduino Nano RP2040 Connect

 

poYBAGKh1YSAPbWlAAC-pM80kP8999.png

 

第 5 步:将证书添加到 Nano RP2040 Connect

 

在 Arduino IDE 上安装 Arduino Nano RP2040 Connect 所需的内核后,我设置了开发板以通过 SSL 连接连接到我网站的服务器。不幸的是,对于 Nano RP2040 Connect,通过 SSL 连接连接到服务器并不像其他 Arduino IoT 板那么简单。它需要预安装 SSL 证书,该证书不包含在开发板中。

因此,我需要将我网站服务器的 SSL 证书上传到 Nano RP2040 Connect。

 

? 首先,为了能够在 Nano RP2040 Connect 上使用 Wi-Fi 模块,请从 此处下载 WiFiNINA 库。

 

? 连接 Nano RP2040 通过 USB 数据线连接到 PC,然后在 Tools > Port and Tools > Board 中选择正确的端口和板。

 

? 在 Example > WiFi101 / WiFiNINA > Tools > Firmware Updater 中搜索固件更新程序草图并将其上传到开发板。

 

poYBAGKh1YaAFjXQAAFREpZoHk0678.png

 

? 成功上传草图后,打开 Tools > WiFi101 / WiFiNINA Firmware Updater

 

pYYBAGKh1YiAAR-2AAC7Y0ztvnA708.png

 

? 启动 固件更新程序 后,选择 Wi-Fi 模块(板)的端口。在第 2 部分中,选择 NINA 固件 (1.3.0) (Arduino MKR WiFi 1010, Arduino Nano 33 IoT)

 

pYYBAGKh1YuALotpAADfrDNGg5c409.png

 

? 然后,在第 3 部分中,单击添加域并进入网站以获取其 SSL 证书。

 

theamplituhedron.com

 

pYYBAGKh1Y2AQJfAAADrbAU2r5g843.png

 

? 最后,在列表中选择最近添加的网站,然后点击 Upload Certificates to WiFi module

 

pYYBAGKh1Y-AB2RpAADsj37odZM251.png

 

第 6 步:对 Nano RP2040 Connect 进行编程

 

成功完成上述所有步骤后,我对 Arduino Nano RP2040 Connect 进行了编程。

 

? 包括所需的库。

 





 

? 定义所需的 Wi-Fi 网络连接设置和 Web 应用程序路径。

 

ssid[] =  ;
 pass[] =  ;
 keyIndex =  ;
 status = WL_IDLE_STATUS;


 server[] =  ;


字符串应用程序= 
WiFiSSLClient客户端;

 

? 定义 SSD1306 OLED (128x32) 屏幕设置。

 





 

? 启动计时器并启动 SSD1306 屏幕。

 

heat_timer = 毫秒();

 
display.begin(SSD1306_SWITCHCAPVCC,  );
display.clearDisplay();
显示.setTextSize(  );
display.setCursor(  ,  );
display.setTextColor(SSD1306_WHITE);
display.println(  );
展示。);
显示.显示();
延迟();

 

? 检查Wi-Fi模块与Wi-Fi网络的连接状态。如果连接成功,则将 RGB LED 变为蓝色。

 

 (WiFi.status() == WL_NO_MODULE) { adjustColor(  ,  ,  ); );}
 

状态 = WiFi.开始(ssid,通过);
 
delay(  );
}
 
adjustColor(  ,  ,  );

 

? 等待 5 分钟,直到 MH-Z14A NDIR CO2 传感器正常加热以生成准确的数据。

 

? 收集数据时将 RGB LED 变为紫色:

 

? 获取 MH-Z14A NDIR CO2 传感器每 20 秒产生的二氧化碳浓度评估。

 

? 引出 GP2Y1010AU0F 灰尘传感器生成的灰尘密度评估。

 

 (millis() - heat_timer <  ){  (millis() - timer >  ){ timer = millis(); } }
 调整
(
255,0,255 ) (millis() - timer >  ){ MH_Z14A_readings(); 计时器 = 毫秒();make_a_get_request(); }


GP2Y10_dust_sensor_readings();

 

? 在 SSD1306 屏幕上打印灰尘和二氧化碳密度评估。

 

display.clearDisplay();
显示.setTextSize(  );
display.setCursor(  ,  );
display.setTextColor(SSD1306_WHITE);
展示。);
展示。(灰尘密度);
展示。);
展示。);
展示。(co2_level);
展示。);
显示.显示();

 

? 在 GP2Y10_dust_sensor_readings 函数中,评估灰尘密度 (mg/m3) 并在必要时校准传感器。

我需要将灰尘传感器的评估校准 0.05 以获得准确的结果。您可能需要根据传感器的评估更改校准值。

 

calcVoltage = voMeasured*(3.3/1024);

灰尘密度 = 0.17*calcVoltage-0.1;

 

  {

数字写入(ledPower,低);
延迟微秒();
voMeasured = 模拟读取(测量引脚);
延迟微秒();
数字写入(ledPower,HIGH);
延迟微秒();

calcVoltage = voMeasured*(  /  );
灰尘密度 =  *calcVoltage  ;

延迟();
}

 

? 在 MH_Z14A_readings 函数中,利用定时器和 MH-Z14A CO2 传感器的 PWM 接口计算二氧化碳浓度 (ppm)。

 

长 ppm = 5000L * (tH - 2) / (tH + tL - 4);

 

  {

t0 = 毫秒();
(数字读取(MH_Z14A_PWM)==高){};
t1 = 毫秒();
(数字读取(MH_Z14A_PWM)==低){};
t2 = 毫秒();
tH = t1-t0;
tL = t2-t1;
ppm = * (tH - ) / (tH + tL - );
(数字读取(MH_Z14A_PWM)==高){};
co2_level = (  )ppm;
延迟();
}

 

? 在 make_a_get_request 函数中:

 

? 连接到名为 telegram_co2_and_dust_monitor 的 Web 应用程序。

 

? 如果与给定服务器的连接成功,则将 RGB LED 变为黄色并创建查询字符串,包括灰尘和二氧化碳密度评估。否则,将 RGB LED 变为红色。

 

? 然后,使用查询字符串发出 GET 请求,将给定的参数发送到 Web 应用程序。

 

? 如果有可用的传入字节,则从 Web 应用程序获取响应。

 

? 如果 Web 应用程序成功将传输的数据存储到 MySQL 数据库表中,则将 RGB LED 变为绿色并打印 Data Registered Successful!在 SSD1306 屏幕上。

 

  {

 
adjustColor( , , );
 
String query = application + +co2_level+ +dustDensity;
 
client.println( + query + );
client.println(  );
client.println(  );
客户端.println();
}{调整);
}
延迟();
字符串响应 =  ;
 (client.available()) {  c = client.read(); 响应 += c; }
  (response !=  && response.indexOf(  ) >  ){(
0,255,0 );
display.clearDisplay();
显示.setTextSize(  );
display.setCursor(  ,  );
display.setTextColor(SSD1306_WHITE);
display.println(  );
display.println(  );
显示.显示();
}
}

 

poYBAGKh1ZGAfEdeAACV4m2M3x8862.png

 

pYYBAGKh1ZOAYXGhAAB2Rjj__Xc843.png

 

pYYBAGKh1ZeAPQVGAACAIKB8C_g548.png

 

poYBAGKh1ZmAV2HwAACGV3GGg0I970.png

 

pYYBAGKh1ZuAcrnsAACZ8o0pBc0213.png

 

连接和调整

 

















 

完成焊接并上传代码后,我通过接头将所有剩余组件连接到 PCB - Arduino Nano RP2040 Connect 和 SSD1306 OLED (128x32) 屏幕。

 

poYBAGKh1Z-ANkQDAAaN5E6K8C0845.jpg

 

由于 Nano RP2040 Connect 的工作电压为 3.3V,而 MH-Z14A NDIR CO2 传感器需要 4.5V - 5.5V 的工作电压,因此我在 Nano RP2040 Connect 上启用并使用了内置的 5V 引脚 (VUSB)。

 

我利用 MH-Z14A CO2 传感器的 PWM 接口引出传感器生成的二氧化碳密度评估。但是,我添加了两个焊接跳线垫(JP1、JP2),将 Nano RP2040 Connect 连接到 MH-Z14A CO2 传感器的 UART 接口。因此,如果需要,可以使用传感器的 UART 接口。

 

如下图,我用热胶枪将GP2Y1010AU0F灰尘传感器固定在PCB背面。

 

pYYBAGKh1OiAIxn6AAMzZmGuCbM127.jpg

 

模式和功能

 

???启动时,设备会在 SSD1306 OLED 屏幕上打印 Heating & Connecting 并尝试连接到给定的 Wi-Fi 网络。

 

pYYBAGKh1aSALAH5AAPp4lj_usw907.jpg

 

???如果 Wi-Fi 模块与 Wi-Fi 网络连接成功,设备会将 RGB LED 变为蓝色并等待 5 分钟,直到 MH-Z14A NDIR CO2 Sensor 正常加热以生成准确的二氧化碳浓度评估。

 

poYBAGKh1aeAH9CGAAQX6bFA3B4832.jpg

 

???在从传感器(GP2Y1010AU0F 和 MH-Z14A)收集灰尘和二氧化碳密度评估时,该设备将 RGB LED 变为紫色并将结果打印在 SSD1306 OLED 屏幕上。

 

pYYBAGKh1aqAEzwaAAQFRvdALAM984.jpg

 

pYYBAGKh1beAFbdAAALXbEHbV_A889.jpg

 

poYBAGKh1bmAGDYlAAKAuyW05Hg270.jpg

 

???如果 Wi-Fi 模块成功连接到 Web 应用程序的服务器,设备会将 RGB LED 变为黄色。否则,设备会将 RGB LED 变为红色。

 

pYYBAGKh1byARsFwAAQrhbmJzyI314.jpg

 

poYBAGKh1b6AEKVdAAJfJtTgYuQ772.jpg

 

???如果 Web 应用程序将传输的数据成功保存到 MySQL 数据库表中,则设备将 RGB LED 变为绿色并打印 数据注册成功! SSD1306 OLED屏幕上。

 

pYYBAGKh1cuAQxgNAARN0nceg7c292.jpg

 

pYYBAGKh1c2AYpm5AAJzhSKFWO8193.jpg

 

?? 在 Telegram 机器人(IoT 二氧化碳和粉尘监测器)上:

 

???如果输入 /co2_density 命令,机器人会显示存储在 MySQL 数据库表中的最新二氧化碳密度评估和更新时间。

 

poYBAGKh1dGAIieiAAYijnej2w0821.jpg

 

???如果输入 /dust_density 命令,机器人将显示存储在 MySQL 数据库表中的最新灰尘密度评估和更新时间。

 

poYBAGKh1dWAbLnfAAcpp3mkN6I650.jpg

 

pYYBAGKh1diAC34FAAcOpPVH6tY991.jpg

 

视频和结论

 

 

 

 

代码

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'Jigglypuff IoT二氧化碳和粉尘监测器(跟踪器)带电报',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);