看来大气压不仅影响天气的变化,还影响头痛等身体状况。大气压力因地区和条件而异,因此最好测量它在您所在位置的变化情况。

参考)

气压计采用 M5Stack Basic 和绝对压力传感器 (2SMPB-02E)

完成表格

只需用双面胶带将绝压传感器粘贴在 M5Stack Basic 的主体上即可。
M5Stack Basic と絶対圧センサー(2SMPB-02E)で作る気圧計
LCD 上不显示任何内容。我觉得我没有充分利用 M5Stack 的优点,但这不是重点,所以这次我跳过它。

累积数据

我们使用物联网数据收集和存储服务“SORACOM Harvest Data”。
M5Stack Basic と絶対圧センサー(2SMPB-02E)で作る気圧計

图表

M5Stack Basic と絶対圧センサー(2SMPB-02E)で作る気圧計

与绝对压力传感器的连接是 I2C。 M5Stack Basic 定期读取和发送数据。
通信使用 Wi-Fi。电线护罩利用 ”SORACOM 弧”,您甚至可以通过 Wi-Fi 使用 SORACOM 的物联网服务。
这一次,其中,物联网数据积累/收集服务“SORACOM 收获数据”保存大气压力数据。

M5Stack代码

  • 绝对压力传感器的读数由传感器本身降噪。了解更多信息使用 Grove 将传感器连接到 M5Stack 并测量大气压力解释在
  • UDP 用于向 SORACOM Harvest Data 发送数据。有效负载格式本身是 JSON。代码比HTTP简单,可以减少数据量。目的地是uni.soracom.io,但它是一种从这里路由到启用的服务的机制(统一端点)。
  • 当检测到 Wi-Fi 断开连接时,它将重新启动并尝试重新连接。
m5stack_2SMPB-02E_wireguard_soracom.ino
/*
   Barometer made with M5Stack Basic and pressure sensor (2SMPB-02E)
   Copyright (c) 2022 Kohei "Max" MATSUSHITA (ma2shita+git@ma2shita.jp)
   Released under the MIT license
   https://opensource.org/licenses/mit-license.php
   
   NOTE: Also follow the library's license.
*/

static const char _VERSION_[] = "2SMPB-WG-0.1";

#include <M5Stack.h>
static const char TAG[] = "TAG"; // for ESP_LOG*

#include <WiFi.h>
static const char WIFI_SSID[] = "YOUR_WIFI_SSID";
static const char WIFI_PASSWORD[] = "YOUR_WIFI_PASS";
WiFiUDP ctx;
static const char ENTRYPOINT_HOST[] = "uni.soracom.io";
static const int ENTRYPOINT_PORT = 23080;

#include <WireGuard-ESP32.h> // Install from lib. manager. "WireGuard-ESP32 by Kenta Ida"
static WireGuard wg;
static const char PRIVATE_KEY[] = "VzOe......kq4="; // [Interface] PrivateKey
static const IPAddress LOCAL_IP(999, 999, 999, 999); // [Interface] Address
static const char PUBLIC_KEY[] = "cx/QH.......VA=";  // [Peer] PublicKey
static const char ENDPOINT_ADDRESS[] = "XXXX.soracom.io"; // [Peer] Endpoint(address)
static const uint16_t ENDPOINT_PORT = 99999; // [Peer] Endpoint(port)

#include <ArduinoJson.h> // Install from lib. manager. "ArduinoJson by Benoit Blanchon"

#include "Omron2SMPB02E.h" // Install from GitHub then a tweak fix by your hand. "https://github.com/omron-devhub/2smpb02e-grove-arduino"
Omron2SMPB02E prs;

template <typename T> void connect_to_network(T *wifi) {
  int32_t _enter = millis();
  wifi->mode(WIFI_STA);
  ESP_LOGD(TAG, "begin():");
  wifi->begin(WIFI_SSID, WIFI_PASSWORD);
  while (wifi->status() != WL_CONNECTED) {
    ESP_LOGV(TAG, ".");
    delay(200);
  }
  ESP_LOGD(TAG, "localIP(): %s", wifi->localIP().toString().c_str());
  ESP_LOGD(TAG, "elapsed(ms): %d", millis() - _enter);
}

template <typename T> bool is_network_connected(T *wifi) {
  bool result = (wifi->status() == WL_CONNECTED);
  if (!result) ESP_LOGE(TAG, "status() != WL_CONNECTED");
  return result;
}

void connect_to_wireguard(WireGuard *wg) {
  int32_t _enter = millis();
  ESP_LOGD(TAG, "Adjust system time. (with winting 3 seconds for adjusting.)");
  configTime(9 * 60 * 60, 0, "ntp.jst.mfeed.ad.jp", "ntp.nict.jp", "time.google.com");
  delay(3000); // Wait for adjust
  ESP_LOGD(TAG, "begin():");
  wg->begin(LOCAL_IP, PRIVATE_KEY, ENDPOINT_ADDRESS, PUBLIC_KEY, ENDPOINT_PORT);
  ESP_LOGD(TAG, "elapsed(ms): %d", millis() - _enter);
}

void mcu_restart() {
  ESP_LOGD(TAG, "enter.");
  delay(3000); // waiting for flush of serial buffer
  M5.Power.reset();
}

void setup() {
  delay(1000);
  
  M5.begin();
  dacWrite(25, 0); // Speaker OFF // bad known how for M5Stack ...
  
  Serial.begin(115200); // for log
  ESP_LOGD(TAG, "--- START: %s", _VERSION_);

  M5.Lcd.sleep();
  M5.Lcd.setBrightness(0);
  
  connect_to_network(&WiFi);
  connect_to_wireguard(&wg);

  prs.begin();
  prs.set_average(AVG_1, AVG_8);
  delay(300);
  prs.set_filter(FILTER_4);
  delay(300);
  prs.set_mode(MODE_NORMAL);
  delay(300);
}

static const uint32_t LOOP_INTERVAL_MS_IN_LOOP = 60000; // msec
void loop() {
  if (!is_network_connected(&WiFi)) mcu_restart();
  
  StaticJsonDocument<16> doc;
  doc["hPa"] = prs.read_pressure() / 100.0;
  serializeJson(doc, Serial); // logging => e.g.) `{"hPa": 1014.1980135}`
  Serial.println(); // for CRLF
  
  ctx.beginPacket(ENTRYPOINT_HOST, ENTRYPOINT_PORT);
  serializeJson(doc, ctx);
  ctx.println();
  ctx.endPacket();
  
  delay(LOOP_INTERVAL_MS_IN_LOOP);
}

绝压传感器库返工

绝压传感器库截至2022年8月在主分支存在bug,无法编译出现如下错误。

In file included from \...\Arduino\libraries\2smpb02e-grove-arduino-master\src\Omron2SMPB02E.cpp:5:
\...\Arduino\libraries\2smpb02e-grove-arduino-master\src/Omron2SMPB02E.h:124:3: note: previous specification in 'Omron2SMPB02E::Omron2SMPB02E(uint8_t)' here
   Omron2SMPB02E(uint8_t SDO = 1);
   ^~~~~~~~~~~~~

https://github.com/omron-devhub/2smpb02e-grove-arduino/pull/2/files手动应用此 P-R 中建议的内容将编译。
具体来说,更改第 39 行的src/Omron2SMPB02E.cpp 并删除src/Omron2SMPB02E.h 的第 11 到 13 行。

综上所述

如果您想自己使用测量数据,您不必担心,但如果您想向公众发布,则需要遵守气象业务法。为自己阅读更多内容。
https://www.jma.go.jp/jma/kishou/shinsei/kentei/index.html

SORACOM 成本

参考资料

物联网


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308623305.html

相关文章: