×

如何将MKR FOX 1200和I2C传感器变成电池供电气象站

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2023-06-15

分享资料个

描述

注意:本教程可能已过时,请到此处获取更新版本。

 

该项目展示了如何将MKR FOX 1200和一堆 I2C 传感器变成一个简单的电池供电气象站。

我们将使用:

  • 板载温度传感器(低精度,± 1 °C)
  • HTU21D I2C 传感器获取湿度水平
  • 博世 BMP280 获取大气压力和精确温度
  • TSL2561光传感器获取光度

硬件设置

该项目的硬件连接非常简单:所有传感器都使用 I2C 接口并在 3.3V 下运行。

它们需要来自 MKR FOX 1200 的四根线:GND、3.3V、引脚 11 上的 SDA 和引脚 12 上的 SCL。相同的四个连接可以与三个传感器并联共享,因为它们每个都有一个特定的 I2C 地址,因此相关的库和函数将负责区分它们中的每一个。

整个项目可以由两节AA或AAA碱性电池串联产生3V并接线到板上的螺丝接线端子块供电。

Sigfox 消息

由于 Sigfox 网络每天最多可以发送 140 条消息,因此我们将优化读数并以紧凑的二进制格式发送数据。

数据打包很重要,因为您可以发送的消息的最大大小为 12 个字节。一个浮点数占用 4 个字节,所以我们需要将我们的读数打包成一些更小的表示形式。

浮点格式非常宽(您可以表示大到 3.402823e+38 (!) 的数字),我们不需要整个数据空间;然后我们可以决定安全限制(基于我们将要部署站点的位置)并在后端恢复原始表示。

云服务的配置

我们将使用两种云服务:

使用FirstConfiguration 示例提供的 PAC 和 ID 在 Sigfox 后端注册您的开发板(如果您已经为之前的项目做过,可以跳过)。

两者都需要配置为相互交谈并以正确的格式解释数据。在 Thingspeak 上注册并创建几个频道。配置如下图所示。

我们配置的第一个通道将接收原始数据(readChannelID),而第二个将收集重新缩放的数据(writeChannelID)。

 
pYYBAGNgtomAaSG9AABjMA_7zgM139.png
 

是时候使用 Arduino Create Editor 上传草图了。默认草图允许您在现场部署之前广泛测试所有基础架构。

记得声明:

oneshot  = false

当您确信所有后端基础架构设置正确时。草图等待串口,所以我们现在不会启动它。相反,打开SigFox 后端并配置回调:

单击设备类型->列表-> 右键单击​​您的电路板,然后单击编辑。

 
pYYBAGNgtpCActIpAAGFrYZZ6t4236.png
 

点击左侧菜单中的回调:

 
pYYBAGNgtpSAME-hAAIHC4MS17M271.png
 

你会看到这样的窗口:

点击窗口右上角的新建按钮:

 
poYBAGNgtpmAI5lgAAIVLXk4tY4259.png
 

选择自定义回调:

 
poYBAGNgtqCAbsR3AAPbODHglIk453.png
 

 

 
pYYBAGNgtqOAcahIAAG8zLcSh6w641.png
 

相关配置报告如下。确保回调设置为:

  • 类型:DATA/UPLINK
  • 渠道:URL
  • 方法: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} 

配置完成后,您的窗口应如下所示:

 
poYBAGNgtqeAMX5SAADRU2_wH-Y831.png
SigFox 后端回调(使用您的 API 密钥!)
 

请记住将 API 密钥更改为api_keyThingspeak 提供的Write API Key密钥Channel1

 
poYBAGNgtruARDUFAAA-W6wKtdY118.png
 

保存并退出。我们现在可以打开串口并观察正在发送的第一条消息。万岁!

从原始到图形

我们配置的设置会将我们的数据路由到 Thingspeak 后端,但它们仍然是原始格式;要重新转换它们,让我们使用带有此代码段的Thingspeak 分析工具

% TODO - Replace the [] with channel ID to read data from: 
readChannelID = []; 
% TODO - Enter the Read API Key between the '' below: 
readAPIKey = 'T6UK7XO6A4H2AGT7';  
% TODO - Replace the [] with channel ID to write data to: 
writeChannelID = []; 
% TODO - Enter the Write API Key between the '' below: 
writeAPIKey = 'XU4TGY261P6B5USN';  
%% Read Data %% 
data = thingSpeakRead(readChannelID, 'ReadKey', readAPIKey,'OutputFormat','table');  
analyzedData = data;  
%% Analyze Data %% 
INT16_t_MAX = 32767; 
UINT16_t_MAX = 65536; 
analyzedData.('Temperature1') = data.('Temperature1') / INT16_t_MAX * 120 ; 
analyzedData.('Temperature2') = data.('Temperature2') / INT16_t_MAX * 120 ; 
analyzedData.('Pressure') = data.('Pressure') / UINT16_t_MAX * 200000 ; 
analyzedData.('Light') = data.('Light') / UINT16_t_MAX * 100000 ; 
analyzedData.('Humidity') = data.('Humidity') / UINT16_t_MAX * 110 ; 
%% Write Data %% 
thingSpeakWrite(writeChannelID, analyzedData, 'WriteKey', writeAPIKey); 
%% Schedule action: React -> every 10 minutes

通过用我们自己的替换通道 ID,我们最终可以将原始数据转换回实际值。请记住使用React每 10 分钟安排一次分析操作,否则将永远不会执行!

 
poYBAGNgttKACbYpAAFiCB7Y1kI639.png
 

 

 
pYYBAGNgttWANBZCAABHgOIt6hY292.png
 

 

 
poYBAGNgttqAJGkcAAB7l1oJ0JM122.png
 

我们终于有了精彩的图表。

 
pYYBAGNgtt2AXkAjAAAxs44e9FU575.png
 

 

 
pYYBAGNgtt-ARxBfAAAYfSJdqoI743.png
有人在 11.30 开暖气吗?:)
 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !