当前位置:首页 > 物联网 > IoT设计分享
[导读]在这个项目中,我们将学习如何创建一个气象站,它将在web服务器中显示来自BME280模块的读数和来自OpenWeatherMap API的实时天气数据。该设备将从BME280传感器获取温度、湿度、气压和高度,并从OpenWeatherMap API获取外部温度、湿度、天气状况以及日出和日落。我们可以在网络浏览器中看到他们在阅读。

在这个项目中,我们将学习如何创建一个气象站,它将在web服务器中显示来自BME280模块的读数和来自OpenWeatherMap API的实时天气数据。该设备将从BME280传感器获取温度、湿度、气压和高度,并从OpenWeatherMap API获取外部温度、湿度、天气状况以及日出和日落。我们可以在网络浏览器中看到他们在阅读。

BME280温度,湿度和压力传感器

BME280是一款专为移动应用和可穿戴设备开发的集成环境传感器,尺寸和低功耗是关键设计参数。该装置结合了高线性度和高精度传感器,是完全可行的低电流消耗和长期稳定。BME280传感器提供了极快的响应时间,因此支持新兴应用的性能要求,例如上下文感知,以及在宽温度范围内的高精度。

该传感器测量相对湿度范围为0 ~ 100%,精度为±3%,气压范围为300Pa ~ 1100hpa,绝对精度为±1hpa,温度范围为-40℃~ 85℃,精度为±1.0℃。

BME280支持I2C接口和SPI接口。我们使用的模块支持1.7 - 3.3V的电压范围。当以1Hz的刷新率测量所有参数时,BME280的平均电流消耗为3.6µA。传感器支持休眠、正常、强制三种电源模式。

在购买BME280模块时要记住的一件事是,外观相似的模块也带有缺乏湿度测量功能的BMP280传感器,这使得它比BME280便宜得多。识别BME280和BMP280传感器的最佳方法是查看产品代码。BME280传感器将有一个以“U”开头的产品代码,例如UP, UN等。而BMP280将有一个以“K”开头的产品代码,例如KN, KP等。另一个视觉差异是BME280有点方形,而BMP280是矩形。

OpenWeatherMap API

OpenWeatherMap是一个在线服务,通过API提供全球天气数据,包括当前天气数据、预报、临近预报和任何地理位置的历史天气数据。通过他们的API,我们可以访问地球上任何位置的当前天气数据,包括超过20万个城市!他们收集和处理来自不同来源的天气数据,如全球和当地天气模型、卫星、雷达和一个庞大的气象站网络。数据有JSON、XML和HTML三种格式。我们将使用HTTP GET来请求这个项目的JSON数据。

气象站线路图

连接相当简单。按照上面的连接图进行操作。我们增加了一个18650电池和TP4056充电模块,并为备份提供保护。首先将电池的负极连接到TP4056模块的B-引脚,将正极连接到模块的B+引脚。现在将模块的OUT+连接到ESP32 Devkit的VIN引脚,B-连接到GND引脚。TP4056模块还包含DW01保护芯片,可以防止电池过放电和短路。

现在让我们将BME280模块连接到ESP32 Devkit。BME280的VCC引脚接3.3V引脚,GND接GND引脚。该模块同时支持SPI和I2C。我们将使用I2C接口进行通信。为此,将SDA引脚连接到ESP32 Devkit的D22,将SCL引脚连接到D21。

代码说明和Arduino IDE安装库

对于这个项目,我们需要安装几个Arduino库,它可以直接通过库管理器完成。要安装库,请导航到Arduino IDE > Sketch > Include Library > Manage libraries…等待Library Manager下载库索引并更新已安装库列表。然后搜索并安装以下库。

•Adafruit BME280库

•Adafruit统一传感器

•Arduino_JSON图书馆

使用zip文件安装以下库。

•ESPAsyncWebServer

•AsyncTCP

在Arduino IDE中安装ESP32文件系统上传器

我们使用SPIFFS来托管web服务器文件。我们可以像使用普通文件系统一样使用ESP32闪存,就像在SD卡或USB大容量存储中一样,借助SPIFFS将这些文件上传到文件系统中,我们需要一个称为ESP32文件系统上传器的工具。要将此工具安装到Arduino IDE,请遵循以下步骤

•到GitHub发布页面下载ESP32FS-1.0.zip。

•将zip文件解压缩到Arduino IDE目录下的Tools文件夹。解压后的路径看起来像这样“C:\Users\Username\Documents\Arduino\tools\ESP32FS\tool\ ESP32FS .jar”

•重新启动Arduino IDE,您可以通过单击Tools Menu使用此工具。

web服务器文件结构

正如我们已经说过的,我们将使用ESP32文件系统来托管web服务器。文件系统结构如下所示。需要加载到文件系统的所有数据都存储在sketch文件夹中名为data的文件夹中。

HTML文件

html文件是服务器收到请求时加载的主文件。它包含了网页的所有结构编程。

CSS文件

css文件用于定义HTML页面的样式。使用CSS,我们可以控制颜色,字体,文字大小,元素之间的间距,元素如何定位和布局,使用什么背景图像或背景颜色,不同设备和屏幕尺寸的不同显示,等等!

JavaScript文件

javascript文件负责图像操作、JSON解码和内容的动态更改。这有助于我们更新网页上的值。它控制数据更新的事件侦听器。

Arduino草图

这是ESP32气象站的草图。

让我们看一下代码是如何从传感器读取数据,从API获取天气数据,并将其发送到web服务器的。

包括库

WiFi、HTTPClient、AsyncTCP和ESPAsyncWebServer库用于WiFi通信和web服务器的创建和维护。

SPIFFS库用于文件系统管理,Arduino_JSON库用于处理JSON字符串。

最后,Adafruit传感器库和Adafruit BME280库用于处理BME280传感器。

用户可修改参数

在代码中,需要更改一些值才能使其正常工作。将“您的WiFi SSID”和“您的WiFi密码”替换为您的WiFi SSID和密码。另外,根据您的城市代码和温度测量单位更改。

下一个也是最重要的参数是API密钥。这个密钥是唯一的,这是我们从OpenWeatherMap服务器提取数据的认证密钥。获取API密钥的过程非常简单。去OpenWeatherMap网站,创建一个账户。如果你已经有一个帐户,就登录进去。。在该页面上,您可以看到您的默认API密钥。如果您愿意,可以稍后创建密钥。复制API密钥并将其粘贴到代码中。这样就可以从OpenWeatherMap服务器获取数据了。

获取BME280读数

下面的函数用于从BME280获取读数。

在这个函数中,每次读取都从BME280传感器获取,并将其编码为JSON字符串,然后将JSON字符串返回给事件处理程序。当事件被触发时,事件处理程序将把这些数据发送到web页面。

从OpenWeatherMap API获取天气数据

为此,我们创建了另一个函数。它将以JSON格式从API获取天气数据,解码,并将其排列成我们需要的格式。然后,与BME280读取函数类似,该函数将这些编码为JSON字符串,并在触发特定事件时将其发送到服务器。HTTP GET用于从服务器获取数据。

Web设置和事件请求处理

下面的setup函数部分将创建和设置web服务器,并在网页加载时处理事件请求。当收到加载网页的请求时,第一个事件处理程序将发送网页数据。第二个事件处理程序将监听重置请求,并将页面上显示的所有变量设置为零。第三个even处理程序是检查客户端连通性,如果客户端断开连接,服务器将尝试在一秒钟的间隔内重新建立连接。

在循环函数中,还可以看到另外两个事件处理程序。这些处理程序不会监听任何请求。它们将在设定的时间定期发送数据。这将刷新网页上的数据。BME280的数据更新速度比开放天气图数据快。

上传代码和文件

上传代码很简单。就像其他Arduino板一样,将ESP32 Devkit连接到PC上。选择正确的“Board”和“Port”,单击“upload”。就是这样。要上传Web Server文件,请确保所有文件都位于名为data的文件夹中,该文件夹与.ino文件位于同一文件夹中。进入“工具-> ESP32草图数据上传”。IDE将上传文件并重新启动ESP32。上传文件时,请确保未打开串行监视器。如果它被打开,你会得到一个错误。如果是,只需关闭串行监视器并再次上传文件。您可以从以下链接下载草图和web服务器文件。

访问Web服务器

现在,一旦代码被编译并编程到ESP32中,你可以检查串行监视器,一旦ESP32连接到WiFi网络,它就会打印出IP地址。

或者你可以检查你的路由器和分配给ESP32的IP是什么。这取决于你的路由器。一旦你获得了IP,你就可以通过简单地在浏览器中输入这个地址并进入页面来访问网络服务器。这就是结果。

天气状况图标会根据从API接收到的数据而改变。日出和日落时间也从OWM API中提取。

本文编译自iotdesignpro

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭