MKR FOX 1200 天气监视器
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
应用和在线服务
| ||||
| ||||
|
关于这个项目
注意:本教程可能已过时,请转到 这里 获取最新版本。
这个项目展示了如何转动 MKR FOX 1200 和一堆 I2C 传感器组成一个简单的、电池供电的气象站。
我们将使用:
- 板载温度传感器(低精度,± 1 °C)
- HTU21D I2C 传感器获取湿度水平
- Bosch BMP280 可获取大气压力和精确温度
- TSL2561 光传感器获得亮度
硬件设置
该项目的硬件连接非常简单:所有传感器都使用 I2C 接口并在 3.3V 下运行。
它们需要来自 MKR FOX 1200 的四根电线:GND、3.3V、SDA 在引脚 11 上和 SCL 在引脚 12 上。相同的四个连接可以与三个传感器并行共享,因为它们每个都有一个特定的 I2C 地址,因此相关的库和函数将负责区分它们中的每一个。
整个项目可以由两节AA或AAA碱性电池串联产生3V电压并连接到板上的螺丝接线端子块供电。
Sigfox 消息
由于 Sigfox 网络每天最多可以发送 140 条消息,我们将优化读数并以紧凑的二进制格式发送数据。
数据打包很重要,因为您可以发送的消息的最大大小为 12 字节。浮点数占用 4 个字节,因此我们需要将读数打包成一些更小的表示。
浮点格式非常宽(您可以表示大到 3.402823e+38 (!) 的数字),而且我们不需要整个数据空间;然后我们可以决定安全限制(基于我们要部署站点的位置)并在后端恢复原始表示。
云服务配置
我们将使用两个云服务:
- Sigfox 后端
- 事情说
使用 FirstConfiguration 示例提供的 PAC 和 ID 在 Sigfox 后端注册您的开发板(如果您已经为之前的项目这样做了,可以跳过)。
两者都需要配置为相互交谈并以正确的格式解释数据。注册两者并创建几个频道 在物语上。配置如下图所示。
我们配置的第一个通道将是接收原始数据的通道 (readChannelID
),而第二个将收集重新缩放的数据 (writeChannelID
).
是时候使用 Arduino Create Editor 上传草图了。默认草图允许您在现场部署之前广泛测试所有基础设施。
记得声明:
oneshot =false
当您确信所有后端基础设施设置正确时。草图等待串行端口,所以我们现在不会启动它。相反,打开 SigFox 后端并配置回调:
点击设备类型 -> 列表 -> 右键单击您的图板,然后单击编辑。
点击回调 在左侧菜单上:
你会看到这样的窗口:
点击新建 窗口右上角的按钮:
选择自定义回调:
相关配置报告如下。确保回调设置为:
- 类型:
数据/上行
- 频道:
网址
- Http 方法:
GET
作为自定义负载,设置:
status::uint:8 temp1::int:16:little-endian temp2::int:16:little-endian press::uint:16:little-endian hum::uint:16:little -endian light::uint:16:little-endian lastMsg::uint:8
这代表了我们在草图中打包的结构。我们为每个字段分配了一个变量,因此我们可以在 HTTP 回调中引用它们。
作为 URL 模式,设置:
https://api.thingspeak.com/update?api_key=XXXXXXXXXXXX&field1={customData#temp1}&field2={customData#press}&field3={customData#temp2}&field4={customData#hum}&field5={customData#light}&field6={customData#status}&field7={customData#lastMsg}
配置完成后,您的窗口应该是这样的:
记得更改 API 密钥 api_key
使用 Thingspeak 作为 Write API Key
提供的那个 Channel1
.
保存并退出。我们现在可以打开串行端口并观察发送的第一条消息。万岁!
从原始到图形
我们配置的设置会将我们的数据路由到 Thingspeak 后端,但它们仍然是原始格式;要重新转换它们,让我们使用带有此代码段的 Thingspeak 分析工具
% TODO - 将 [] 替换为通道 ID 以从中读取数据:readChannelID =[]; % TODO - 在下面的 '' 之间输入读取 API 密钥: readAPIKey ='T6UK7XO6A4H2AGT7'; % TODO - 将 [] 替换为通道 ID 以将数据写入:writeChannelID =[]; % TODO - 在下面的 '' 之间输入写入 API 密钥:writeAPIKey ='XU4TGY261P6B5USN'; %% 读取数据 %% 数据 =thingSpeakRead(readChannelID, 'ReadKey', readAPIKey,'OutputFormat','table');分析数据 =数据; %% 分析数据 %% INT16_t_MAX =32767; UINT16_t_MAX =65536;分析数据.('温度1') =数据.('温度1') / INT16_t_MAX * 120;分析数据.('温度2') =数据.('温度2') / INT16_t_MAX * 120;分析数据.('压力') =数据.('压力') / UINT16_t_MAX * 200000;分析数据.('光') =数据.('光') / UINT16_t_MAX * 100000;分析数据.('湿度') =数据.('湿度') / UINT16_t_MAX * 110; %% 写入数据 %% thingSpeakWrite(writeChannelID,analyzedData, 'WriteKey', writeAPIKey); %% 计划动作:反应 -> 每 10 分钟
通过替换频道 ID 使用我们自己的,我们最终可以将原始数据转换回实际值。请记住使用 React 每 10 分钟安排一次分析操作 否则永远不会被执行!
我们终于有了精彩的图表。
代码
天气监测
制造工艺