完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
描述
Jigglypuff IoT 二氧化碳和粉尘监测器(跟踪器)带电报 由于 Telegram 是一个兼容 iOS 和 Android 的跨平台基于云的消息服务,我决定创建一个 Telegram 机器人来轻松监控多个设备上的灰尘和二氧化碳密度评估。在 Telegram 中,与任何其他消息传递应用程序不同,使用命令列表创建机器人很容易,这些消息应用程序是不需要额外电话号码来设置的特殊帐户。IoT Carbon Dioxide and Dust Monitor 是我为这个项目创建的 Telegram 机器人,它允许用户使用以下命令显示实时灰尘和二氧化碳密度评估:
我开发了一个 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 阻焊层和丝印选项 。 第 1 步:设计和焊接 Jigglypuff IoT 二氧化碳和灰尘监测器 PCB 在对我的 PCB 设计进行原型设计之前,我使用 Arduino Nano RP2040 Connect 测试了所有连接和接线。 然后,我利用 KiCad 设计了物联网二氧化碳和灰尘监测器 PCB - 灵感来自可爱迷人的 Jigglypuff :) 我在下面附上了 PCB 的 Gerber 文件。因此,如果您愿意,您可以从 PCBWay 订购此 PCB,以创建一个可爱的设备来跟踪任何地方的灰尘密度和二氧化碳密度。 首先,通过使用烙铁,我连接了接头(母)、电阻器(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(电源插孔) 为了让我的 PCB 设计更加精致,我在 PCB 背面安装了 GP2Y1010AU0F 灰尘传感器,并用热胶枪将其固定。我还添加了两个焊接跳线垫(JP1、JP2),将 Nano RP2040 Connect 连接到 MH-Z14A CO2 传感器的 UART 接口。 第 2 步:使用 BotFather 构建 Telegram 机器人 BotFather 是一个 Telegram 机器人,可让我们在 Telegram 上创建和管理机器人,而无需任何编码。 首先,在 Telegram 上打开 BotFather 并输入 /start 以查看可用的命令列表和手册。 使用 /newbot 命令创建一个新机器人。当 BotFather 要求您输入名称时,输入您的机器人的名称。它显示在联系方式和其他地方。 物联网二氧化碳和粉尘监测仪 然后,输入您的机器人的用户名。用户名长度为 5-32 个字符,不区分大小写,但只能包含拉丁字符、数字和下划线。它们必须以“bot”结尾,例如“tetris_bot”或“TetrisBot”。 co2_dust_bot 在这些步骤之后,BotFather 会为您的新机器人生成一个授权令牌。授权令牌是一个类似于 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 的字符串,它是授权机器人并向 Telegram Bot API 发送请求所必需的。确保您的令牌安全并安全存储。 此外,您可以使用/setuserpic 命令更改机器人的个人资料图片 。 最后,输入 /setcommands 命令来定义最近创建的机器人支持的命令列表。用户在与机器人的聊天中键入 / 时,会将这些命令视为建议。 我为 Telegram 机器人(IoT 二氧化碳和粉尘监测器)创建的命令列表:
第 3 步:用 PHP 开发一个 Web 应用程序以通过 Telegram Bot API 与机器人通信 成功创建 Telegram 机器人后,我需要从 Telegram Bot API 获取更新以与我的机器人通信。因此,我用 PHP 开发了一个 web 应用程序,名为 telegram_co2_and_dust_monitor,以便:
该应用程序包含一个文件 - index.php。我在 index.php 文件中创建了一个名为 telegram_co2_dust_monitor 的类,以保存 Nano RP2040 Connect 传输的信息到给定的 MySQL 数据库表,并在请求时将该信息发送到给定的 Telegram 机器人。 在 __init__ 函数中,该类需要四个参数来执行函数:
在 send_message 函数中,应用程序使用机器人的授权令牌通过 Telegram Bot API 将给定的文本发送给给定的机器人。 公共 函数 __init__ ($token, $server, $conn, $table) { $this ->token = $token; $this ->web_path = $server.$token; $this ->conn = $conn; $this ->table = $table; } // Telegram: public function send_message ($id, $string) { $new_message = $this -> web_path。"/sendMessage?chat_id=" .$id. "&text=" .urlencode($string); file_get_contents($new_message); } 公共 函数 send_photo ($id, $photo, $caption) { $new_photo = $this -> web_path。"/sendPhoto?chat_id=" .$id. “&照片=” .$照片。"&caption=" .$caption; 文件获取内容($new_photo); } 公共 函数 send_video ($id, $video, $caption) { $new_video = $this -> web_path。"/sendVideo?chat_id=" .$id. “&视频=” .$视频。"&caption=" .$caption; 文件获取内容($new_video); } 在 update_database 函数中,将给定信息保存到给定 MySQL 数据库表中的给定列。 公共 函数 update_database ($column, $value) { $sql = "UPDATE `$this->table` SET `$column`='$value' LIMIT 1" ; mysqli_query( $this ->conn, $sql); } 在 get_data_from_database 函数中,从给定 MySQL 数据库表的给定列中获取并返回请求的信息。 公共 函数 get_data_from_database ($_column) { $sql = "SELECT * FROM `$this->table` LIMIT 1" ; $result = mysqli_query( $this ->conn, $sql); if ($row = mysqli_fetch_assoc($result)){ return $row[$_column]; } } 定义所需的 MySQL 数据库连接设置和 co2_dust_monitor 对象及其所需参数。 $server = array ( "name" => "localhost" , "username" => "<__>" , "password" => "<__>" , "database" => "telegramco2dustmonitor" , "table" => “条目” ); $conn = mysqli_connect($server[ "name" ], $server[ "username" ], $server[ "password" ], $server[ "database" ]); // 定义新的 'co2_dust_monitor' 对象: $co2_dust_monitor = new telegram_co2_dust_monitor(); $bot_token = "<________________________>" ; // 例如,123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 $co2_dust_monitor->__init__($bot_token, "https://api.telegram.org/bot" , $conn, $server[ "table" ]); 从 Telegram Bot API 获取更新。 $updates = json_decode(file_get_contents( 'php://input' ), TRUE ); 如果应用程序从 Telegram Bot API 接收数据,则获取聊天 ID 和消息。 根据传入消息的类型 - 照片、视频、文档或文本 - 使用引发的聊天 ID 回复聊天。 Web 应用程序与来自给定 Telegram 机器人的这些命令兼容:
如果收到 /start 命令,应用程序会将聊天 ID 注册到给定的 MySQL 数据库表,以便发送消息而无需从 Telegram Bot API 进行更新。 如果收到 /co2_density 命令,Web 应用程序会将存储在数据库表中的最新二氧化碳密度评估和更新时间发送给给定的 Telegram 机器人。 如果收到 /dust_density 命令,Web 应用程序会将存储在数据库表中的最新灰尘密度评估和更新时间发送给给定的 Telegram 机器人。 如果接收到 /help 命令,Web 应用程序会将带有描述的支持命令列表发送到给定的 Telegram 机器人。 默认情况下,如果没有收到支持的命令而是文本,Web 应用程序会发送: 等待你的命令:) 如果($updates[ 'update_id' ]){ $chat_id = $updates[ '消息' ][ '聊天' ][ 'id' ]; $message = $updates[ '消息' ][ '文本' ]; 如果($updates[ “消息” ][ “照片” ]){ $co2_dust_monitor->send_message($chat_id, "谢谢你给我发照片,但我还不能处理??" ); } else if ($updates[ "message" ][ "video" ]){ $co2_dust_monitor->send_message($chat_id, "谢谢你给我发视频,但我还不能处理??" ); } else if ($updates[ "message" ][ "document" ]){ $co2_dust_monitor->send_message($chat_id, "谢谢你给我发了一个文件,但我还不能处理它??" ); } else { // 命令: switch ($message){ case '/start' : $co2_dust_monitor->update_database( "chat_id" , $chat_id); // 注册聊天 ID 以发送消息,而无需机器人更新。 $co2_dust_monitor->send_message($chat_id, "聊天ID已成功注册到应用数据库。 输入/help查看所有可用命令。" ); 休息; 案例 “/co2_density”: $co2 = $co2_dust_monitor->get_data_from_database( "co2" ); $date = $co2_dust_monitor->get_data_from_database( "date" ); $co2_dust_monitor->send_message($chat_id, "?? CO2 密度 ?? $co2 ppm ?? 最后更新: $date" ); 休息; 案例 '/dust_density': $dust = $co2_dust_monitor->get_data_from_database( "dust" ); $date = $co2_dust_monitor->get_data_from_database( "date" ); $co2_dust_monitor->send_message($chat_id, "?? 粉尘密度 ?? $dust mg/m3 ?? 最后更新: $date" ); 休息; 案例 “/帮助”: $co2_dust_monitor->send_message($chat_id, "/co2_density - 显示 MH-Z14A NDIR CO2 Sensor 产生的 CO2 浓度 /dust_density - 监控 GP2Y10 Dust Sensor 产生的灰尘浓度" ); 休息; 默认: $co2_dust_monitor->send_message($chat_id, "等待你的命令 :)" ); 休息; } } } 如果 Nano RP2040 Connect 将灰尘和二氧化碳密度评估传输到 Web 应用程序,请将它们保存到给定的 MySQL 数据库表中。然后,使用 date 函数设置时区以精确得出最新的更新时间,并将其保存到数据库表中。 if ( isset ($_GET[ "co2" ]) && isset ($_GET[ "dust" ])){ $co2_dust_monitor->update_database( "co2" , htmlentities($_GET[ "co2" ])); $co2_dust_monitor->update_database( "dust" , htmlentities($_GET[ "dust" ])); // 设置时区: date_default_timezone_set( "Europe/London" ); $co2_dust_monitor->update_database( "date" , date( "Ym-d___H:i:s" )); echo ( "数据注册成功!" ); } 步骤 3.1:创建 MySQL 数据库表并保存更新 在用 PHP 开发 Web 应用程序后,我在我的服务器上创建了一个新的 MySQL 数据库 (telegramco2dustmonitor)。然后,我在 telegramco2dustmonitor 数据库中创建了一个数据库表(条目),以收集 Nano RP2040 Connect 传输的灰尘和二氧化碳密度评估。最后,我在条目数据库表中为每个属性(列)插入了默认值: telegramco2dustmonitor > 条目 > 属性:
创建 表 `条目`( chat_id varchar(255)主键 不为 空, co2 varchar ( 255 )非 空, 灰尘varchar ( 255 ) NOT NULL , `date` varchar ( 255 ) NOT NULL ); 插入 “条目”(“chat_id ” 、“co2 ” 、 “dust” 、 “ date ”)值(“default”、“default”、“default”、“default”) theamplituhedron.com 当 Web 应用程序获取信息并将该信息成功保存到数据库表中时,应用程序会打印: 数据注册成功! 步骤 3.2:设置 Web 应用程序以与机器人通信 在开发 Web 应用程序(传出 webhook)并创建 MySQL 数据库表之后,我需要使用setWebhook方法为我的 Telegram 机器人(IoT 二氧化碳和灰尘监视器)指定应用程序 URL, 以接收来自 Telegram Bot API 的传入更新。 指定应用程序 URL 后,Telegram Bot API 会抛出此消息:Webhook 已设置。 要检查给定的 Telegram 机器人功能并将聊天 ID 注册到数据库表中,请打开机器人并输入 /start。 输入 /help 以查看支持的命令列表和说明。 第 4 步:为 Nano RP2040 Connect 安装 Mbed OS 内核 由于我决定在这个项目中使用 Arduino Nano RP2040 Connect,我需要将 Mbed OS 内核安装到 Arduino IDE 中。 在 Arduino IDE 上,导航到 Tools > Board > Boards Manager。 然后,搜索 Arduino Mbed OS Nano Boards 内核并安装它。 成功安装所需内核后,转到 Tools > Board > Arduino Mbed OS Nano Boards 并选择 Arduino Nano RP2040 Connect。 第 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 中搜索固件更新程序草图并将其上传到开发板。 成功上传草图后,打开 Tools > WiFi101 / WiFiNINA Firmware Updater。 启动 固件更新程序 后,选择 Wi-Fi 模块(板)的端口。在第 2 部分中,选择 NINA 固件 (1.3.0) (Arduino MKR WiFi 1010, Arduino Nano 33 IoT)。 然后,在第 3 部分中,单击添加域并进入网站以获取其 SSL 证书。 最后,在列表中选择最近添加的网站,然后点击 Upload Certificates to WiFi module。 第 6 步:对 Nano RP2040 Connect 进行编程 成功完成上述所有步骤后,我对 Arduino Nano RP2040 Connect 进行了编程。 包括所需的库。 #include #include #include #include 定义所需的 Wi-Fi 网络连接设置和 Web 应用程序路径。 字符ssid[] = "<____>" ;// 你的网络 SSID (name) char pass[] = "<____>" ;// 您的网络密码(用于 WPA,或用作 WEP 的密钥) int keyIndex = 0 ;// 您的网络密钥索引号(仅 WEP 需要) int status = WL_IDLE_STATUS; // 在运行代码之前更改下面的服务器。 char server[] = "www.theamplituhedron.com" ; // 定义 Web 应用程序路径。 字符串应用程序= “/telegram_co2_and_dust_monitor/”; // 初始化以太网客户端库。 WiFiSSLClient客户端;/* WiFiClient 客户端;*/ 定义 SSD1306 OLED (128x32) 屏幕设置。 #define SCREEN_WIDTH 128 // OLED 显示宽度,以像素为单位 #define SCREEN_HEIGHT 32 // OLED 显示高度,以像素为单位 #define OLED_RESET -1 // 重置引脚 #(如果共享 Arduino 重置引脚,则为 -1) Adafruit_SSD1306显示(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); 启动计时器并启动 SSD1306 屏幕。 heat_timer = 毫秒(); // 初始化 SSD1306 屏幕: display.begin(SSD1306_SWITCHCAPVCC, 0x3C ); display.clearDisplay(); 显示.setTextSize( 2 ); display.setCursor( 0 , 0 ); display.setTextColor(SSD1306_WHITE); display.println( "加热&" ); 展示。打印(“连接”); 显示.显示(); 延迟(1000); 检查Wi-Fi模块与Wi-Fi网络的连接状态。如果连接成功,则将 RGB LED 变为蓝色。 if (WiFi.status() == WL_NO_MODULE) { adjustColor( 255 , 0 , 0 ); 而(真);} // 尝试连接到 WiFi 网络:while (status != WL_CONNECTED) { // 连接到 WPA/WPA2 网络。如果使用开放或 WEP 网络,请更改此行: 状态 = WiFi.开始(ssid,通过); // 等待 10 秒连接: delay( 10000 ); } // 如果连接成功: adjustColor( 0 , 0 , 255 ); 等待 5 分钟,直到 MH-Z14A NDIR CO2 传感器正常加热以生成准确的数据。 收集数据时将 RGB LED 变为紫色: 获取 MH-Z14A NDIR CO2 传感器每 20 秒产生的二氧化碳浓度评估。 引出 GP2Y1010AU0F 灰尘传感器生成的灰尘密度评估。 while (millis() - heat_timer < 300000 ){ if (millis() - timer > 1000 ){ timer = millis(); } } // 每 20 秒从 CO2 传感器获取读数。调整 颜色( 255,0,255 );_ if (millis() - timer > 20000 ){ MH_Z14A_readings(); 计时器 = 毫秒();make_a_get_request(); } // 导出 GP2Y1010AU0F 灰尘传感器产生的灰尘密度。 GP2Y10_dust_sensor_readings(); 在 SSD1306 屏幕上打印灰尘和二氧化碳密度评估。 display.clearDisplay(); 显示.setTextSize( 1 ); display.setCursor( 0 , 0 ); display.setTextColor(SSD1306_WHITE); 展示。打印(“灰尘:”); 展示。打印(灰尘密度); 展示。打印(“毫克/立方米”); 展示。打印(“ CO2:”); 展示。打印(co2_level); 展示。打印(“ppm”); 显示.显示(); 在 GP2Y10_dust_sensor_readings 函数中,评估灰尘密度 (mg/m3) 并在必要时校准传感器。 我需要将灰尘传感器的评估校准 0.05 以获得准确的结果。您可能需要根据传感器的评估更改校准值。 calcVoltage = voMeasured*(3.3/1024); 灰尘密度 = 0.17*calcVoltage-0.1; void GP2Y10_dust_sensor_readings () { // 计算电压。 数字写入(ledPower,低); 延迟微秒(280); voMeasured = 模拟读取(测量引脚); 延迟微秒(40); 数字写入(ledPower,HIGH); 延迟微秒(9680); // 评估粉尘密度 (mg/m3)。 calcVoltage = voMeasured*( 3.3 / 1024 ); 灰尘密度 = 0.17 *calcVoltage -0.1 ; // 校准数据:if(dustDensity < 0){dustDensity =dustDensity + 校准;} 延迟(1000); } 在 MH_Z14A_readings 函数中,利用定时器和 MH-Z14A CO2 传感器的 PWM 接口计算二氧化碳浓度 (ppm)。 长 ppm = 5000L * (tH - 2) / (tH + tL - 4); void MH_Z14A_readings () { // 获取 CO2 粉尘传感器 (PWM) 产生的 CO2 浓度:while (digitalRead(MH_Z14A_PWM) == LOW) {}; 长t0 = 毫秒(); 而(数字读取(MH_Z14A_PWM)==高){}; 长t1 = 毫秒(); 而(数字读取(MH_Z14A_PWM)==低){}; 长t2 = 毫秒(); 长tH = t1-t0; 长tL = t2-t1; 长ppm = 5000L * (tH - 2 ) / (tH + tL - 4 ); 而(数字读取(MH_Z14A_PWM)==高){}; co2_level = ( int )ppm; 延迟(10); } 在 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 屏幕上。 void make_a_get_request () { // 连接到名为 telegram_co2_and_dust_monitor 的 Web 应用程序。如果您不使用 SSL 连接,请将 '443' 更改为 '80'。 if (client.connect(server, 443)){ // 如果成功: adjustColor( 255 , 255 , 0 ); // 创建查询字符串: String query = application + "?co2=" +co2_level+ "&dust=" +dustDensity; // 发出 HTTP Get 请求: client.println( "GET " + query + " HTTP/1.1" ); client.println( "主机: client.println( "连接:关闭" ); 客户端.println(); }其他{调整颜色 (255,0,0);_ } 延迟(2000);// 连接后等待 2 秒...// 如果有可用的传入字节,则从 Web 应用程序获取响应。 字符串响应 = "" ; while (client.available()) { char c = client.read(); 响应 += c; } if (response != "" && response.indexOf( "数据注册成功!" ) > 0 ){调整颜色( 0,255,0 );_ display.clearDisplay(); 显示.setTextSize( 1 ); display.setCursor( 0 , 0 ); display.setTextColor(SSD1306_WHITE); display.println( "数据注册" ); display.println( "成功!" ); 显示.显示(); } } 连接和调整 // 连接 // Arduino Nano RP2040 连接 : // MH-Z14A NDIR CO2 传感器 // D2 --------------- PWM / / RX --------------- TX(可选) // TX -------------- ------------- RX(可选) // GP2Y1010AU0F 灰尘传感器 // D4 ------------------------- -- LED // A0 --------------- S // SSD1306 OLED 128x32 // A4 -------- ------------------- SDA // A5 --------------- SCL // 5mm 共阳极 RGB LED // D3 --------------------------- R // D5 -------- --------- - G // D6 --------------- B 完成焊接并上传代码后,我通过接头将所有剩余组件连接到 PCB - Arduino Nano RP2040 Connect 和 SSD1306 OLED (128x32) 屏幕。 由于 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背面。 模式和功能 启动时,设备会在 SSD1306 OLED 屏幕上打印 Heating & Connecting 并尝试连接到给定的 Wi-Fi 网络。 如果 Wi-Fi 模块与 Wi-Fi 网络连接成功,设备会将 RGB LED 变为蓝色并等待 5 分钟,直到 MH-Z14A NDIR CO2 Sensor 正常加热以生成准确的二氧化碳浓度评估。 在从传感器(GP2Y1010AU0F 和 MH-Z14A)收集灰尘和二氧化碳密度评估时,该设备将 RGB LED 变为紫色并将结果打印在 SSD1306 OLED 屏幕上。 如果 Wi-Fi 模块成功连接到 Web 应用程序的服务器,设备会将 RGB LED 变为黄色。否则,设备会将 RGB LED 变为红色。 如果 Web 应用程序将传输的数据成功保存到 MySQL 数据库表中,则设备将 RGB LED 变为绿色并打印 数据注册成功! SSD1306 OLED屏幕上。 在 Telegram 机器人(IoT 二氧化碳和粉尘监测器)上: 如果输入 /co2_density 命令,机器人会显示存储在 MySQL 数据库表中的最新二氧化碳密度评估和更新时间。 如果输入 /dust_density 命令,机器人将显示存储在 MySQL 数据库表中的最新灰尘密度评估和更新时间。
|
|
|
|
【高手问答】电路的功能是为了0.6v到40v之间调压,运放发热严重
2611 浏览 8 评论
USB3.0 工业相机的传输速率是否受到电脑主板某些硬件的限制?
1091 浏览 0 评论
2285 浏览 1 评论
1298 浏览 0 评论
2845 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 14:30 , Processed in 0.763291 second(s), Total 72, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号