亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

微型互联网气象站

组件和用品

Arduino Nano 33 IoT
× 1
BME 天气传感器
× 1
0.96 OLED 显示屏 - 128x 64
× 1
塑料外壳 3.9" x 2.7"
× 1
Micro USB 数据线
× 1
公对母面包板跳线
× 1
USB 壁式充电器
× 1

必要的工具和机器

热胶枪(通用)

应用和在线服务

Arduino IDE
Blynk

关于这个项目

有很多应用程序可以让您将智能手机连接到物联网。我已经尝试了很多,但通常都很失望。布林克不是这样!它非常灵活,拥有漂亮的用户界面,适用于各种物联网平台,并且可以在 Android 和 iPhone 上运行。业余爱好者也可以免费使用!所以这是一个相对简单的物联网项目,让我可以使用 Blynk 进行探索。

硬件

这个项目的硬件相当简单。我们使用处理 WiFi 的 Arduino Nano 33 IoT、一个 BME280 传感器板,将温度、湿度和气压都集成在一个单元中,以及一个 1 英寸的 OLED 显示屏。所有三个都在 3.3 伏下运行良好。显示显然是可选的 - 目标是让气象站显示在您的手机上。但是,在处理 Blynk 和您的智能手机之前,首先在 OLED 显示屏上启动并运行所有内容变得更加容易。

下面的示意图显示了硬件是如何互连的。传感器和显示接口均采用 I2C。理论上,一个I2C可以支持多个设备,但是sensor和display的库有一些冲突,所以我最终得到了两个不同的I2C端口。传感器在模拟处使用正常的默认 I2C 端口 引脚 4 和 5。显示器使用设置在 digital 的辅助 I2C 端口 引脚 4 和 5。(是的,它们是相反的 - SDA 是数字引脚 5))

硬件封装在一个正面清晰的小塑料外壳中,以便可以查看显示屏。它是塑料的,因为它需要对 WiFi 的 RF 透明。它需要相对防风雨,但传感器底部有一个 1/2" 孔,暴露在外面的天气中。传感器安装在那个孔内。我用热把所有东西都装在外壳里胶水,但如果您打算在炎热的夏季将其放在室外,则可能需要使用环氧树脂。

通过 USB 电缆供电。这样,它可以通过开箱即用的单根电缆进行编程或供电。该电缆可以在编程时连接到您的计算机,或者在用作气象站时连接到插入式 USB 电源。

软件

在 Arduino 上运行的软件只不过是传感器、显示器和 Blynk 的库示例的混搭。涉及的库是传感器的 Adafruit_BME280_Library、显示器的 ss_oled 库和 Blynk 的 Blynk 库。所有三个都可以直接从 Arduino 的库管理器下载。您可能希望分别试验这些库中的每一个,以更好地了解每个库。

Blynk 有一堆关于如何配置硬件以与之交互的示例:https://examples.blynk.cc/ 不幸的是,它没有将 Nano 33 IoT 列为其支持的 Arduino 之一。但是 Blynk 确实支持 WiFiNINA,它被 Nano 33 IoT 和其他几个 Arduino 处理器使用。所以添加这两个包含解决了这个问题:#include 和 #include

您将在我的代码中看到的另一个附加内容是: #include 这对于将来自传感器的数字转换为适合在 OLED 显示器上显示的字符串是必要的。一个让我有些悲伤的小变化是 Blynk 很乐意显示数据,无论是作为字符串还是数字发送。起初,我向 Blynk 发送了与发送到 OLED 相同的字符串。这可以很好地显示数字,但是当我添加图表时完全失败了。为了使图表工作,Blynk 显然需要实际数字。

注意 - 通常报告的大气压力已校正到海平面。在更高的海拔处,气压明显下降,因此要将传感器的值校正为它们在海平面上的等效读数,您必须在每 1000 英尺海拔的测量值中添加一个大约 1 英寸汞柱的值。在我自己的代码中,您会看到我添加了 1.3 来补偿我自己的海拔 1300 英尺。您需要更改此值以匹配您自己的海拔。每 1000 英尺 1" Hg 只是一个粗略的估计。如果你想要一个精确的修正,网上有表格可以为你提供精确的海拔修正。

没有 Blynk 的气象站

此时,您可以设置硬件,并使用我附带的软件在 OLED 显示屏上显示天气数据。只需在 Setup 中注释掉 Blynk.begin() 行即可让气象站自行运行。 (如果你不注释掉 Blink.begin(),没有与 Blynk 的有效连接,草图将在该点停止或挂起。)在下一节中,我们将讨论 Blynk,如何设置它在 Arduino 草图和智能手机上以在手机上显示气象站。

布莱克

Blynk 很容易安装在你的 iPhone 或 Android 上,并带有详细的文档:http://docs.blynk.cc/ 但是那里有很多信息和很多选项,我一开始觉得有点混乱,所以我会在此提供我自己的 Blynk 入门版本。

我将 Blynk 与 iPhone 一起使用,但我认为体验与 Android 非常相似,您可以按照我的说明进行操作。拥有该应用程序后,您需要创建一个帐户。从那里,在应用程序中,您创建一个新项目。您的项目提供了一个身份验证代码,用于将您的硬件与您的项目联系起来。你的第一份工作是让你的硬件通过 WiFi 连接到你的 Blynk 项目。您可以使用位于 examples.blynk.cc 的 Blynk 的默认草图/程序 Blynk Blink 来完成并测试它,它允许您打开和关闭 Nano 33 IoT 上的板载 LED。我的建议是,在尝试让气象站与 Blynk 一起工作之前,你先试试这个并让它工作。

我们已经讨论了一些关于配置我们的软件以使我们的 Nano 33 IoT 与 Blynk 一起工作的内容。如果打开 examples.blynk.cc,它默认为 ESP8266 板。找到 #include 和 #include 并将它们替换为 #include 和 #include

除了为 Nano 33 IoT 添加 WiFiNINA 支持之外,正如我们已经讨论过的,您需要添加您的 WiFi 凭据和您的 Blynk 项目的身份验证代码。我们将在一分钟内解释打开和关闭 LED,但首先,让我们检查连接。正确配置并运行 Blynk Blink 草图后,打开 Arduino 的串行监视器,您应该能够看到与 Blynk 云服务器的连接。此时,我们可以将硬件放在一边,在手机上使用 Blynk 应用程序。

我承认我发现 Blynk 应用程序有些混乱。左上角的图标允许您在项目之间进行选择,也可以注销您的帐户。右上角的一个允许您进入和退出编辑项目模式。中间的那个做什么取决于你在哪里。

要控制我们的板载 LED,我们需要在应用程序中进入编辑模式。然后您将看到一个空白屏幕。如果您向左滑动,它会移到一边以显示一个小部件工具箱。通过单击选择一个按钮,它现在将出现在主屏幕上。在那里单击它,它将打开以进行配置。将其从推送模式移动到切换模式。使用引脚选择来选择我们 Nano 33 IoT 上的板载 LED - 数字引脚 13。现在单击确定,然后点击右上角的图标退出编辑模式。您的按钮现在应该控制 LED。

Blynk 气象站

我们现在准备将我们的气象站连接到我们的 Blynk 项目。打开我附带的软件,在 Setup 中取消注释 Blynk.begin() 行,添加您的项目身份验证代码和 WiFi 凭据,然后上传到 Arduino。

在手机上打开 Blynk。如果您遵循了本教程,您的按钮仍然存在,并且应该仍然能够打开和关闭板载 LED。进入编辑模式,单击按钮进行配置,然后使用最底部的删除将其删除。现在转到工具箱并选择一个标签值。它在列表的下方显示。返回显示页面,单击 Labeled Value 显示进行配置。单击 pin,然后选择 Virtual pin V3。我们将在下一段中解释虚拟引脚。现在对于标签,在上面写着“例如 Temp”的地方输入“Temp /pin.#/ deg.F”。 .# 告诉应用程序显示小数点后一位。选择大文本大小,并保留推送刷新间隔和绿色文本颜色。现在单击确定。您的标签值现在几乎可以显示温度了,但它太窄了。慢慢选择它 - 足够慢以至于它不会重新进入配置模式。标签的轮廓将亮起。现在可以拉伸以显示整条线。它也可以四处移动,但我们不会在这里这样做。将其拉伸约 3/4 穿过屏幕。然后退出编辑模式,您应该会看到手机上显示的温度。

在我们完成配置 Blynk 之前,值得解释一下我们刚刚在设置温度显示时看到的一些事情。 Blynk 使用了一个有点独特的想法,称为虚拟引脚。显示值小部件可以设置为读取我们处理器上的模拟引脚,或设置为读取数字引脚是高电平还是低电平。但通常情况下,我们希望显示变量的内容。我们通过为该变量分配一个虚拟引脚号来做到这一点,从那时起,Blynk 应用程序将通过它的虚拟引脚号引用该变量。所以在我的软件中,你会看到我将华氏温度分配给虚拟引脚 V3 的地方。

另一个值得一提的 Blynk 想法是我们在推送模式下留下的刷新间隔。这意味着 Arduino 草图正在推送数据,在我们的例子中,每分钟更新一次温度、湿度和气压。但是 Blynk 也支持 Pull 方法,其中 Blynk 应用程序设置间隔并询问硬件以获取新数据。

所以现在让我们完成在 Blynk 上显示我们的气象站。您将需要另外两个标签值显示,一个显示湿度百分比(虚拟引脚 V4),另一个显示压力,单位为“in. HG”或英寸汞柱(虚拟引脚 V5)。为了让它看起来像我的,你需要金色的湿度和红色的压力。对于湿度,我显示了小数点后一位;对于压力,我显示了小数点后两位。

如果您现在拥有显示温度、湿度和气压的三个标签值显示,您可以添加所有三个的图表。这是通过添加 SuperChart 小部件来实现的。首先,将其向下拉伸,使其填满屏幕的其余部分。然后点击它进行配置。我打开了显示 x 轴值,并选择了实时、1 小时、6 小时、1 天、1 周、1 个月的分辨率。和 3 个月。我们需要三个数据流——一个用于我们的 3 个变量中的每一个。要配置每个数据流,请单击它右侧的图标。我们需要再次为每个选择虚拟引脚。对于 y 轴缩放,选择高度。然后对于温度,将高度设置为 67 - 100。对于湿度,将高度设置为 34 - 66。对于压力,将高度设置为 0 - 33。设置颜色以匹配标记值。打开显示 Y 轴。就是这样。退出编辑模式,您的手机显示屏应该和我的一样。图表开始需要一点时间。要获得快速结果,请查看实时或 1 小时分辨率。

您可能想了解的 Blynk 的另一项功能是与其他智能手机共享您完成的 Blynk 项目,以便不止一部手机可以查看气象站。要开始共享,请将您的项目置于编辑模式,然后单击项目设置的顶部中间图标。打开共享,然后生成链接。它会给你一个二维码,你可以通过电子邮件发送或以其他方式分享。新用户需要 Blynk 应用程序,但不需要 Blynk 上的帐户。未注册用户的应用程序有一个链接来加载另一个人的 Blynk 项目的二维码。而已。

这是对 Blynk 的一个非常有限的介绍,但应该给你一个很好的起点。我之前提到过 Blynk 是免费的——几乎是免费的。小部件和共享都消耗了 Blynk 称之为能量的点数。我认为您可以免费获得 2500 积分。这足以免费完成这个项目。但是分享或添加它可能会导致您耗尽 Blynk 能量。我花了 6 美元获得了额外的 5000 积分。如果您使用 Blynk 进行其他项目,您可能需要为 Blynk 燃料花费几美元。

代码

  • 微型互联网气象站
微型互联网气象站Arduino
使用 WiFi 和 Blynk 到智能手机
/*此草图适用于 Arduino Nano 33 IoT 它使用 BME280 传感器板它使用 0.96 英寸 128 x 64 OLED 显示屏它通过 WiFi 连接到 Blynk 云服务器以在智能手机上显示天气数据*/#include #include #include  // BME280 library#include  // 用于将天气数字转换为字符串以在 OLED 上显示#包含  // OLED 库 // 接下来的两个包含需要使 Nano 33 IoT 与 Blynk 一起工作#include #include char auth[] ="YourBlynkProjectCode";char ssid[ ] ="YourWifiID";char pass[] ="YourWiFiPassword";Adafruit_BME280 bme; // 使用I2C接口Adafruit_Sensor *bme_temp =bme.getTemperatureSensor();Adafruit_Sensor *bme_pressure =bme.getPressureSensor();Adafruit_Sensor *bme_humidity =bme.getHumiditySensor();#define SDA_PIN 5#define SCL_PIN 4#1Adafruit_define REOLED DDR -1#define FLIP180 0#define INVERT 0#define USE_HW_I2C 0#define MY_OLED OLED_128x64#define OLED_WIDTH 128#define OLED_HEIGHT 64SSOLED ssoled; // OLEDBlynkTimer 定时器实例; // Blynk timervoid setup() 的实例 { if (!bme.begin(0x76)) { // 等到检测到传感器而 (1) delay(10); bme_temp->printSensorDetails(); bme_pressure->printSensorDetails(); bme_湿度->printSensorDetails(); oledInit(&ssoled, MY_OLED, OLED_ADDR, FLIP180, INVERT, USE_HW_I2C, SDA_PIN, SCL_PIN, RESET_PIN, 400000L); oledFill(&ssoled, 0x0, 1); Blynk.begin(auth, ssid, pass); // 将此行注释掉以在没有 Blynk 的情况下运行气象站 timer.setInterval(60000L, myupdate); // 每分钟运行一次 myupdate myupdate(); // 运行对 Blynk 的显示和数据的初始更新,因为主循环等待一分钟}void loop() { Blynk.run(); // Blynk 更喜欢在主循环中自行运行。定时器运行(); // 其他一切都通过 Blynk 计时器处理}// 该例程由 Blynk 计时器调用以更新 OLED 显示器并将数据推送到 Blynkvoid myupdate(){sensors_event_t temp_event, pressure_event, height_event; bme_temp->getEvent(&temp_event); bme_pressure->getEvent(&pressure_event); bme_湿气->getEvent(&湿气_事件);浮动 ctemp =temp_event.temperature; // 获取摄氏温度 float ftemp =32 + (9*ctemp)/5; // 将温度转换为华氏度 float hum =modified_event.relative_humity; // 获取相对湿度 float ppress =pressure_event.pressure; // 以毫米为单位获取压力 float mpress =1.3 + ppress/33.8939; // 转换为英寸汞柱并加上 1.3 以匹配当地实际报告的气压 // 压力。您可能想要删除 1.3 和/或添加您自己的调整。字符 mytemp[8]; dtostrf(ftemp, 6, 2, mytemp); // 将 temp 转换为字符串 char myhum[8]; dtostrf(hum, 6, 2, myhum); // 将湿度转换为字符串 char mypress[8]; dtostrf(mpress, 6, 2, mypress); // 将压力转换为字符串 // 更新 OLED 显示 oledWriteString(&ssoled, 0,2,1,(char *)"Weather Station", FONT_NORMAL, 0, 1); oledWriteString(&ssoled, 0,2,3,(char *)"Temp =", FONT_NORMAL, 0, 1); oledWriteString(&ssoled, 0,50,3,(char *)mytemp, FONT_NORMAL, 0, 1); oledWriteString(&ssoled, 0,105,3,(char *)"F", FONT_NORMAL, 0, 1); oledWriteString(&ssoled, 0,2,5,(char *)"Humid=", FONT_NORMAL, 0, 1); oledWriteString(&ssoled, 0,50,5,(char *)myhum, FONT_NORMAL, 0, 1); oledWriteString(&ssoled, 0,105,5,(char *)"%", FONT_NORMAL, 0, 1); oledWriteString(&ssoled, 0,2,7,(char *)"Press=", FONT_NORMAL, 0, 1); oledWriteString(&ssoled, 0,50,7,(char *)mypress, FONT_NORMAL, 0, 1); oledWriteString(&ssoled, 0,105,7,(char *)"in", FONT_NORMAL, 0, 1); // 将新的天气数据推送到 Blynk Blynk.virtualWrite(V3, ftemp); Blynk.virtualWrite(V4, hum); Blynk.virtualWrite(V5, mpress); } 

示意图


制造工艺

  1. 集成电路
  2. 基于树莓派的气象站
  3. Raspberry Pi 2 气象站
  4. Raspberry Pi 气象站
  5. 与您的气象站一起加入 IOT – CWOP
  6. Weather Station V 2.0
  7. Model Rail Digital DCC Command Station Arduino 和免费应用程序
  8. 6-Shooter:Arduino 饮料混合站
  9. MotionSense
  10. Arduino Powered Weather Balloon Datalogger
  11. ArduFarmBot - 第 2 部分:远程站和物联网实施
  12. $10 便携式 Arduino 气象站 (AWS)