你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32L4的Azure Stream Analytics

[复制链接]
木木&点点 发布时间:2019-4-2 18:13
本帖最后由 点点&木木 于 2019-4-12 09:10 编辑
! x& v2 {5 G9 e* I
; N) @& C" Z& I* R2 B
Azure Stream Analytics自动监视传感器,可在发生危险时发送推文和警报。也可通过智能手机控制。
% ~% i/ c2 q& ^% M& E# @
1.jpg

: y7 s1 W# R3 A& J& i3 m# J1 J: o! g8 L1 D

4 v4 t; g8 y' E
这个项目中使用的东西
硬件组件
Arduino MKR1000       ×     1      
SparkFun Graphic LCD 84x48 - 诺基亚5110    ×      1      
Texas Instruments LM2596 DC-DC 4.5-40V可调节降压电源模块     ×         1      
DHT11温湿度传感器(4针)      ×     1      
ElecFreaks MQ-5气体传感器    ×     1      
KEYES火焰传感器模块   ×         1      
恩智浦74LS00 TTL四路2输入正与非门     ×        1      
ST STM32L4,STM32F7STB75NF75 N沟道功率MOSFET     ×       3      
气流电磁阀常闭    ×   1      
2线点火线圈      × 1      
电阻10k欧姆      ×  2      
电阻4.75k欧姆        ×         1      
面包板(通用)       ×         1      
33欧姆10W电阻绕线   ×       1      
跳线(通用)          ×  1      
SparkFun DC桶式千斤顶适配器     ×  1      
用于电压调节器或MOSFET的散热器散热器   ×   3      
1N4007  - 高电压,高电流额定二极管         ×     1      
8 f4 K1 [4 g0 A
' P5 [8 y6 o5 {( r
手动工具和制造机器
烙铁(通用)         
3D打印机(通用)        
绳钻

: n2 w: m+ v: ]9 D$ C* e* V
在我国,天然气压力在需求高峰时段内全天波动。每年有无人看管的加热器有很多人丧生,一氧化碳中毒。
$ q3 L. {  z, U5 q6 x
这个项目的灵感来自一个冬天的夜晚,当我女儿的房间太冷,但我不能在她睡觉时让加热器保持开启状态。

2 y0 t% K, m9 q
当我开始设计这个项目的时候,我想,如果我把一个支持WiFi的控制器如MKR1000放在那里,那么除了安全之外我还可以做很多很酷的事情。这就是智能手机连接,使用摩托车零件自动点火的情况。

2 R5 @# G" p& Q7 w' m. E, E+ e
框图

! ]7 W( a: i( S$ O( f
2.png

8 S$ n4 J% r3 `" ]0 v6 P3 G- U- U# j. t! v. _
) Y# H# `! U5 M0 S/ ~) U/ M
加热器通过物联网中心向Azure发送遥测数据。Stream Analytics正在对设备数据进行近乎实时的分析,并将根据配置的SQL请求发布警报。Worker角色将获取Stream Analytics生成的警报,并通过IoT Hub将警报转发给设备。
( x% E' R8 M5 N9 O/ ?' Q+ S
8 n4 T+ {. F5 i
如果您有足够的气体和电子工作经验,可尝试此项目。
为避免火灾危险,在将纸板和电子设备连接到燃气设备时要小心。
% m2 ]" m7 |) z+ ~8 X

8 ?0 q+ y- o7 [. h" I$ F
硬件设置
1 M7 v4 e$ ~5 y# U2 [5 N. }. T
在构建此项目时,MKR1000未发布且文档未公开。我担心的是MQ5气体传感器使用加热器,如果连接到MKR1000电源,可能无法满足电流需求。为安全起见,我使用降压转换器为模块提供5v工作电压。然后在板载稳压器上使用MKR1000提供3.3V工作电压。

$ F( E% J- x* b  d! R" |1 Q& A
如果您有来自Sparkfun的符合3V标准的MOSFET,如FQP30N06L,那么您不需要Quad NAND芯片,但您需要将MOSFET的电压拉低的10k电阻。

+ }/ ^- s8 |) W0 R
我强烈建议使用可测量电流的台式电源。这将非常有用的,当您在软件或布线中出错并且意外地让MOSFET导通或处于浮动状态时。桌面电源电流消耗会将在您闻到燃烧的硅的味道之前提醒您

% T0 t: W; P3 t* s* ^1 Q7 m% d. y5 H. d
3.1.jpg
DHT11安装

; i% Q* W. A2 j& p! `+ A9 A$ U) P9 }  g' l
3.2.jpg
温度传感器安装
0 z2 [8 N" K0 R; b) Z/ @

% R9 m) e$ R$ A2 ~& j& }9 o) X
3.3.jpg

/ `9 O! i7 ?+ F2 t# E! Y% X! \' t
5 D2 V! d4 `+ B# U
3.4.jpg
液晶显示

9 H* c5 v- w1 Y0 \9 Z. T/ `+ W. |/ I/ s& [: i/ J9 P1 k
2 W) J- ]" @* ~9 _
3.5.jpg
火焰传感器

0 r8 P! d, R2 H8 c# e! h5 o
. e' E: P5 |! e0 j" w: h
% G# U9 g2 v2 |$ J. U" I* Z
3.6.jpg
带盖的火焰传感器

) C& o* ~0 n" f& r- Z0 D4 ?+ j- L* E8 \, S7 g: `% F4 P

) \  P* J. j3 E( k! u+ Q4 l* z
3.7.jpg
  z) a0 k3 t$ X7 T' U

$ Y: j1 c2 G( J9 P+ I" m) p; t: l# D6 z6 f
3.8.jpg
添加气体传感器

' d4 z! A' v; k9 {+ u* h; b/ J! W4 _& h4 _4 @; n

. V& h, P6 L/ |; U" k6 A! l
制作盒子

% r0 d4 C' Z0 N5 e4 c2 y
4.1.jpg

8 H- H, a3 ~9 M' o- E" B% G, ]9 ]" d  ^5 }4 i1 j- O  l2 n

- D+ X' U: `5 v' p, R2 m# C, S5 S) b
4.2.jpg

; b/ f- L) }1 z. E' j. J; z, d% m6 K( r" ]  ]+ U0 h% Q$ p) `2 U' N- \  H

% o9 |7 A" y7 w) g  @! ~
4.3.jpg

( ?7 l# _5 }1 ~
, e0 Q& `# ]0 J3 |/ |/ w! c0 [
& E0 D: x2 m1 [) U0 q6 G/ B+ }% B
我只是用了一个旧鞋盒,然后把它切成我的规格。激光切割亚克力板是我的第一选择。

9 i5 g6 F- B0 {: r2 M
- M: r& ]7 l0 |) W; ?; O9 B- i! U5 Q7 d7 B- U9 E
钻孔
  c. i+ |  T6 s. k' ~
5.1.jpg
需要一个好的钻头来钻孔
" g% y5 U5 W' x/ p2 s! x- \
4 ^% p/ x9 v( k6 v- E' E+ z
% C3 ^% j& r0 j" C/ n
5.2.jpg
点火线圈需要连接到金属体上

" o/ H) S/ i5 w  K& ?/ L0 C2 ~6 v" q& v( x* X
9 @$ i  f# D* \$ ^8 p6 T# H" _3 c

3 m; U2 j2 V/ O/ ^( s8 f
电磁阀故障排除

3 p, v  I& |* t& P1 @' k( U% ^, s
装配后我意识到我的螺线管漏气了。我打开它,在它的磁盘上发现了洞。用一点点超级胶水固定它。

  F, n" t& R9 [8 w
6.1.jpg

( ?' U( [' s6 }( {! X
  f9 N2 u3 E7 O& v4 A. L5 x9 ^2 f5 t- }# S
6.2.jpg

  y/ H2 a- L5 }! E$ I/ j8 Y  E# y+ S, S
使用聚四氟乙烯胶带棉线密封

9 t4 j% o3 V- b' v5 f
: E. y$ d" u8 |& d; {6 K: C( X9 l: k2 s* j/ ^
6.3.jpg

. ]9 G& O  X5 C! a) z/ L: L+ K! p6 {* Y) X" m
6.4.jpg

+ ]5 n8 J5 ^+ U! W
- W9 q' G) Y, g: V- B2 X7 e+ \/ M* q1 G  x0 ]
6.5.jpg
这是我检验泄露的方法

3 u9 }* q; `; j( @" X5 a' W. g% `+ G' u
$ {0 z6 n, T: U, _9 U- l: N/ P2 B
6.6.jpg
请注意,反激式二极管直接焊接在端子上

& G1 S) x1 {% P# [8 A
0 V, Q" h, I; {6 U0 y3 U2 ~# r% a) G
9 K2 ]" @. p: _# S9 _
6.7.jpg

: @3 C& R$ S- k2 ?
6 j7 z% ~5 u) I5 B" A# `" v3 Q4 x3 N8 b# H
6.8.jpg

1 |* W# F; W  z/ R, S4 q. Q1 k% y3 v" q" Q* S+ A

  d, n6 ]" f4 n5 J( _% ~8 p
: j+ |0 _( F& y9 S! F9 {- N
3D打印
  P. q* g, d  l7 b8 S$ l
我需要一个用于火焰传感器的支架,这样我就可以调节它以获得最佳的火焰视野而不会产生大量的热量。3D打印解决了这个问题。此外,需要保护火焰传感器免受周围阳光的照射。我为此目的3D打印了一个封面。
* e( T6 x) x' j/ G
需要使用LCD支架将其抬高至靠近盖板以便于读取。
7.jpg
要打印的型号
4 F* x; C0 M! M; X
  b6 e/ y0 r2 o

  G- j5 g; n2 a8 }& `: D, z9 ^
8.1.jpg

/ K8 M. @& ]$ }  b8 _4 z4 s8 z" X# j5 J

2 W' S5 U8 @& @+ q9 U' w- j: d6 r
8.2.jpg
3 s, R5 n: _/ B

* `$ \7 \* T+ ~% }, E: }, o0 {  C5 e; ~5 o- W

/ W5 ^" I9 T" L$ c* R
8.3.jpg
) e8 }  v! J5 X( x. q

, w* y: X0 d5 n5 r0 ]7 x% q* A
2 r% j* t0 R1 U4 Z
9.1.jpg
安装火焰传感器
6 H8 `8 @2 H: s9 }/ y0 F8 Y

' K$ k% {, X1 F" |' w# Z
9.2.jpg
安装支架

* q* O: O) Q3 J8 j& `& F& V3 B7 \4 n
; i- R7 x3 r6 n* A) r
10.1.jpg
/ m% V& H& f  _

/ C% q3 i. |. H, o$ O( V
/ ]5 N9 P/ ]5 j# X
10.2.jpg

- [! r% E9 s- X8 r1 d1 P4 B
! p2 N7 W! C9 _; B5 b/ L
/ p1 N  `5 ^4 u9 F
11.1.jpg

% n* D1 H, J( w' G* }
7 [' H' Y! M) l' W9 h. d  F, a, K- E0 f/ s. i
11.2.jpg
安装火焰传感器盖
7 f5 b, D' X4 S( J
: t! Y+ {! r4 C$ m( i5 k

8 |, |- n  R! |0 n% O
12.jpg
LCD支架
% J2 O/ |! I# t6 a8 ~" H! K

; G& T3 }9 z( q  m  P2 V2 A
2 W; C/ J2 |5 l; z7 W0 @
13.jpg
LCD安装
3 b! o; {9 N% Y  q/ K7 \
9 D* M5 O" m$ o( p  K& r" h+ l$ e  j
LCD正在运行屏幕保护程序。代码是我的Sketch的一部分,但在最终版本中未启用。
' r3 R. I# Q. D: C1 P& ^- s

+ B2 ~" z+ \$ x% @2 e) f% g7 q) p8 \0 l
Azure云安装
要运行应用程序,您需要执行以下操作:
; R* T8 b& s  M, [
创建一个IoT集线器,它将从设备接收数据并将命令发送回设备
创建一对Event hub和StreamAnalytics作业,该作业将从IoT中心读取数据并将警报发布到事件中心
为桥接控制器和设备创建另一对Stream Analytics作业和事件中心。
创建将由工作者角色使用的存储帐户。
部署工作者角色,这些角色将从事件中心读取警报,并通过IoT中心将警报转发给设备并发送推文。
0 i: ^/ |1 y+ O9 e3 e. G6 I1 D+ `
3 F5 E* d8 O, q% ]

* o+ g2 [# U  D
创建物联网中心

8 U7 @3 S/ F" r0 I: b% ~  G
登录Azure门户。
在跳转栏中,单击“新建”,然后单击“物联网”,再单击“IoT Hub”。
在New IoT Hub中,为IoT Hub指定所需的配置。
在“名称”框中,输入名称以标识您的IoT中心。验证名称后,“名称”框中会出现绿色复选标记。
0 W* G" K/ f- G0 r
根据需要更改定价和比例等级。此应用程序需要允许多个设备的付费层。
在“资源”组框中,创建新资源组,或选择现有资源组。有关更多信息,请参阅使用资源组管理Azure资源。
使用位置指定托管IoT中心的地理位置。
配置新的IoT中心选项后,单击“创建”。可能需要几分钟才能创建IoT中心。要检查状态,您可以监控Startboard上的进度。或者,您可以从“通知”部分监控进度。
成功创建IoT集线器后,打开新IoT集线器的刀片,记下主机名,然后选择顶部的密钥图标。
选择名为iothubowner的共享访问策略,然后复制并记下右刀片上的连接字符串。另请注意主键

+ v: e: g& H6 @: y
您的IoT中心现已创建,您需要在软件中更新主机名和连接字符串。
要创建Stream Analytics作业输入,您需要从IoT Hub中检索一些信息:
从Messaging刀片(在设置刀片中找到)中,记下与Event Hub兼容的名称
查看与Event-hub兼容的端点,并记下这部分:sb://thispart.servicebus.windows.net/让我们称之为IoTHub与EventHub兼容的命名空间
对于密钥,您将需要在步骤#6中读取主键
创建两个事件中心

6 c: F+ p' ^+ W) P- b
登录Azure管理门户。
在页面的左下角,单击+ NEW按钮。
选择应用服务,服务总线,事件中心,快速创建
为Event Hub输入以下设置(使用您为事件中心和命名空间选择的名称):
事件中心名称:“myeventhubname”
地区:您的选择
订阅:您的选择
命名空间名称:“mynamespacename-ns”
单击“创建事件中心”
选择mynamespacename-ns并进入Event Hub选项卡
选择myeventhubname事件中心,然后进入Configure选项卡
在“共享访问策略”部分中,添加新策略:
Name =“readwrite”
权限=发送,收听
单击“保存”,然后转到evnet hub Dashboard选项卡,并单击底部的“连接信息”
记下读写策略名称的连接字符串。
创建两个Stream Analytics作业
$ h2 I1 V, s1 O2 ^" X0 X
登录Azure门户。
在跳转栏中,单击“新建”,然后单击“物联网”,再单击“流分析作业”。
输入作业名称,选择订阅,选择创建IoT Hub时创建的同一资源组,选择位置,然后单击“创建”。
创建作业后,单击作业拓扑部分中的“输入”磁贴。在“输入”边栏选项卡中,单击“添加”

0 Z+ w' `# z, Z0 _! }+ j6 w' B
输入以下设置:
输入别名=“gassense”
Type =“数据流”
来源=“IoT Hub”
IoT Hub =“myiothubname”(使用您之前创建的IoT Hub的名称)
共享访问策略名称=“iothubowner”
共享访问策略密钥=“iothubowner主密钥”(这是您在创建IoT中心时记下的密钥)
IoT Hub Consumer Group =“”(将其保留为默认空值)
事件序列化格式=“JSON”
编码=“UTF-8”
返回Stream Analytics作业刀片,单击“查询”磁贴。
8 z- ]7 d6 v- _+ `, `9 x
气体传感器检查和推文工作的查询将是:
SELECT
  *
INTO
  gassense4phone
FROM
  gassense
WHERE
  gassense.gassense > 1500
返回Stream Analytics作业刀片,单击“输出”磁贴,然后在“输出”中单击“添加”
输入以下设置,然后单击“创建”:
输出别名=“gassense4phone”
来源=“事件中心”
Service Bus Namespace =“mynamespacename-ns
事件中心名称=“myeventhubname”
事件中心策略名称=“readwrite”
事件中心策略密钥=“读写策略名称的主键”(这是您在创建事件中心后记下的那个)
分区键列=“4”
事件序列化格式=“JSON”
编码=“UTF-8”
格式=“行分隔”
返回Stream Analytics刀片,单击顶部的“开始”按钮启动作业
9 ]& E1 m4 W" [: T; N* o- p" }3 W
桥接作业的查询将只是:
SELECT
*
INTO
gassense4phone
FROM
gassense
我还尝试使用流分析工作来监控火焰传感器并使用以下查询:
SELECT
  *
INTO
  gassense4phone
FROM
  gassense
WHERE
  gassense.flamesense < 500
但最终没有使用它。
9 q4 e4 C- _8 x6 q+ l- q
请注意火焰传感器值在看到火焰时会下降,而气体传感器值在闻到气体时会上升。
创建存储帐户
3 y& f- b2 S5 W% Q- p) e% }# `- z" Y" a
登录Azure门户。
在跳转栏中,单击“新建”,然后选择“数据+存储”,“存储帐户”
为部署模型选择Classic,然后单击create
输入您选择的名称(即帐户名称的“mystorageaccountname”,然后选择您的资源组,订阅,...然后单击“创建”
创建帐户后,在资源刀片中找到它并记下主连接字符串以配置工作者角色
部署辅助角色

/ L5 z0 Y- O$ Z4 N+ c5 f, t
Azure Worker角色将通过IoT Hub触发警报。要在此处构建和部署工作者角色,请执行以下步骤:
' Y+ @- A5 _# a$ e4 a+ u
在Visual Studio 2015中打开解决方案events_to_device_service.sln
打开文件app.config并将以下字段替换为事件中心,存储帐户和Iot Hub中的连接字符串
<add key="Microsoft.ServiceBus.ConnectionString"value="[EventHub Connection String]" />
<add key="Microsoft.ServiceBus.EventHubName"value="[Event Hub Name]" />
<add key="AzureStorage.AccountName"value="[Storage Account Name]" />
<add key="AzureStorage.Key" value="[StorageAccount Key]" />
<add key="AzureIoTHub.ConnectionString"value="[IoT Hub Connection String]" />
编译项目并发布到Azure
' {: ?; \# T9 }8 B/ E
在IoT Hub中创建新的设备标识

2 O( a: }: ?% k1 Z; J% w
要将设备连接到IoT Hub实例,您需要生成唯一的标识和连接字符串。物联网中心为您做到了这一点。要创建新的设备标识,您可以使用设备资源管理器工具(目前仅在Windows上运行)
" K& A+ v. y. r% G% b
0 }" }6 c) m! p5 |1 [5 C) |

; C% m1 @; Y& t6 b  F
软件
您需要安装以下功能才能构建和运行应用程序和Azure Web角色项目。
14.1.jpg
2 {' R- O; {) L# B1 Q4 o6 g
$ v; C. a2 N! J# R7 x
8 `' o  V, y: `4 {+ E2 d
14.2.jpg

6 u0 J) `! E; z. O2 o( |0 u* {3 x! F
' I  `4 J, f  V! I7 [9 ^1 b% I8 Q, X3 s# [$ N* f
最新版本的Arduino SAMD电路板定义不适用于MRK1000。我必须安装较早版本1.6.3才能使其正常运行。
1 t0 g$ V8 F3 ^
构建Arduino Sketch需要以下库
15.jpg
, w3 g! P2 k5 p/ a2 v, f
3 {1 j" f: |# y3 |- _) b. e  O
3 E1 N6 g8 B$ k* m
Arduino的Azure Iot
Arduino的WiFi 101
Adafruit统一传感器库(适用于DHT)
Adafruit Gfx图书馆
Adafruit的-PCD8544 - 诺基亚5110-LCD库
WiFi固件

* m( A9 M; _1 J( N5 [# d5 F  M" z8 C

+ a# ]7 O: u9 @4 w6 ?0 g
请务必遵循以下说明:

0 C; X$ y* D6 V
http://github.com/arduino-libraries/WiFi101-FirmwareUpdater  让您的设备与Azure HTTPS通信。您需要使用IoT中心的主机名。
! n; p6 U" y3 b3 O
: w0 E/ A+ J# w/ u6 O8 o
7 E! g1 S* h& \% L2 H7 ^) L
Adafruit LCD库上存在编译器错误,只能在ARM工具链中发生。这是我的解决方案:
---/home/asad/Arduino/libraries/Adafruit_PCD8544_Nokia_5110_LCD_library/Adafruit_PCD8544.cpp           2016-03-31 04:29:58.000000000
+++/media/asad/AC78E1AF78E1788A/Users/Asad/Documents/Arduino/libraries/Adafruit_PCD8544_Nokia_5110_LCD_library/Adafruit_PCD8544.cpp     1979-11-30 00:00:00.000000000
@@ -181,15 +181,15 @@
   // Set software SPI specific pin outputs.
   pinMode(_din, OUTPUT);
   pinMode(_sclk, OUTPUT);
   // Set software SPI ports and masks.
-    clkport    = (PortReg*)portOutputRegister(digitalPinToPort(_sclk));
+    clkport    = portOutputRegister(digitalPinToPort(_sclk));
   clkpinmask = digitalPinToBitMask(_sclk);
-    mosiport   = (PortReg*)portOutputRegister(digitalPinToPort(_din));
+    mosiport   = portOutputRegister(digitalPinToPort(_din));
   mosipinmask = digitalPinToBitMask(_din);
}
// Set common pin outputs.
pinMode(_dc, OUTPUT);
if (_rst > 0)
取消MKR1000
在提交前两天,我遭遇了令人不快的事情,我的MKR1000停止出现在USB串口上,我无法再编程了。这确实是一个反复无常的事情。没有关于MKR1000的文档可以帮助我找出问题所在。
/ K, \# O2 v2 E) ]/ y
我注意到了JTAG调试端口。我环顾四周,发现Adafruit 对Arduino Zero的优秀  写作。它没有开箱即用,但我仍然需要解决一些编译器问题。我能够恢复引导程序,我的电路板恢复正常。
16.jpg
, b9 `- ?1 g3 m+ \! C/ \' K( z& m) Y
开发技巧
一个周末我需要外出旅行,我想参与这个项目。在没有硬件的情况下,我编写了一个通用Windows应用程序来模拟Azure云的加热器行为。
17.jpg
加热器模拟器应用程序

8 O5 B7 o, J' e( b9 E) z( C
1 T1 a6 a& Z4 X# H2 N: \
! s7 `( B: d7 @% x! j
它是一个非常有用的测试工具,即使在返回之后,我仍然使用它来尝试不同的场景和云设置的部分,这些场景要么很难,要么对实际硬件来说太慢。模拟器的代码存在于GitHub中。
1 d1 ]- f# Q: Y3 s9 a
在Stream Analytic作业上编辑查询时,我发现在旧的Azure管理端口中使用“测试”功能很有用。在这里,您可以上传json数据并立即查看查询结果。

( Z# [$ [5 H/ s$ B6 A, I
18.jpg

, P5 C7 C- @, U4 I6 |, i+ o3 A$ R9 h. `) b6 x" _% t( T% H

2 T2 L( [$ `5 m, M
原理图
19.jpg
- G) J  p+ I  ?# t, k& M7 X

3 o9 H( R2 d" N* @2 X/ R2 T
相关代码--- Azure-Stream-Analytics-master.zip (248.53 KB, 下载次数: 2)
赞 收藏 评论0 发布时间:2019-4-2 18:13

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版