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

基于STM32L4的Azure Stream Analytics

[复制链接]
木木&点点 发布时间:2019-4-2 18:13
本帖最后由 点点&木木 于 2019-4-12 09:10 编辑
, b3 k0 {' m3 s* U) ]
8 M$ [) t5 s5 J; R. l6 M
Azure Stream Analytics自动监视传感器,可在发生危险时发送推文和警报。也可通过智能手机控制。
7 n# X( y7 M$ ^' @
1.jpg

" V6 `. Z) _/ }- U& v8 v) ~
7 e8 U: |/ X" h3 p4 s/ [6 W* k. {7 X! Q; R+ V5 L; a
这个项目中使用的东西
硬件组件
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      

3 g- |( |3 d) v3 f& V0 W5 ^6 R/ K0 {$ L- X, ?* O
手动工具和制造机器
烙铁(通用)         
3D打印机(通用)        
绳钻

2 {! w+ {# G5 j5 Q. C
在我国,天然气压力在需求高峰时段内全天波动。每年有无人看管的加热器有很多人丧生,一氧化碳中毒。

9 F) W- L, d, Y7 x3 n7 |! D7 |3 X4 F
这个项目的灵感来自一个冬天的夜晚,当我女儿的房间太冷,但我不能在她睡觉时让加热器保持开启状态。
4 [4 i1 w4 S, i. p8 E- W- }' K
当我开始设计这个项目的时候,我想,如果我把一个支持WiFi的控制器如MKR1000放在那里,那么除了安全之外我还可以做很多很酷的事情。这就是智能手机连接,使用摩托车零件自动点火的情况。

8 V: k8 H; R# w3 G' d3 Q4 H  {6 w% g
框图
2 H  F; y2 d2 D
2.png
8 x. p: t5 R' B# ]. V3 c- \3 V

- A* ^3 n: Q3 w( Z
! x/ k4 ^! M9 k9 r, D) s
加热器通过物联网中心向Azure发送遥测数据。Stream Analytics正在对设备数据进行近乎实时的分析,并将根据配置的SQL请求发布警报。Worker角色将获取Stream Analytics生成的警报,并通过IoT Hub将警报转发给设备。
0 J0 s  Q% C# o) s! i- \6 d3 j

6 l7 U4 N1 l1 U" k  C; q5 A3 e
如果您有足够的气体和电子工作经验,可尝试此项目。
为避免火灾危险,在将纸板和电子设备连接到燃气设备时要小心。

6 c" B' }5 D4 o5 Q+ a  r! k
5 e, j$ ?. H+ n: @
硬件设置

7 l- g9 ~3 Z7 ~) g( a. q8 t
在构建此项目时,MKR1000未发布且文档未公开。我担心的是MQ5气体传感器使用加热器,如果连接到MKR1000电源,可能无法满足电流需求。为安全起见,我使用降压转换器为模块提供5v工作电压。然后在板载稳压器上使用MKR1000提供3.3V工作电压。

$ [) R/ y; r7 f
如果您有来自Sparkfun的符合3V标准的MOSFET,如FQP30N06L,那么您不需要Quad NAND芯片,但您需要将MOSFET的电压拉低的10k电阻。

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

0 v# W4 b4 ^: ?% z! X, X& A" W! w! r+ z0 U" Z  ?8 E0 J
3.1.jpg
DHT11安装
+ M2 f  W/ L5 q- n

! N4 }/ ^2 w8 H2 Q
3.2.jpg
温度传感器安装
9 b9 V( B4 K  v
1 j8 P5 U1 ~/ y9 Z# @9 U
3.3.jpg

, M' Z+ l. y+ V) ?# N9 O
& v# a- e% v7 B+ E6 @3 @1 b5 R/ v% |" ?+ l
3.4.jpg
液晶显示
9 h, l# k" W- J, b( i; w$ U
& _0 n( v- J5 f% N7 n9 }* H

  N: y( N: M& b7 m! U7 g
3.5.jpg
火焰传感器
* r; y8 d8 j0 M
* @( x3 Q+ B; b  X! y8 H2 ?
: Q7 ~$ Q5 u4 X. W. v
3.6.jpg
带盖的火焰传感器

+ a8 ?2 W' ]3 R1 s3 y1 ^$ a0 c3 h2 g9 w( {# ?  n$ q5 B8 w
  D! l4 I9 C1 v2 o+ q8 X
3.7.jpg

( C# ]5 o. h* f9 b# X9 Q
7 P2 r# g! |& n% @8 M; r: x9 ]  h5 B5 F; j0 E
3.8.jpg
添加气体传感器
8 y( k9 ^& m/ Q$ ~  `% l

$ E2 i, o8 I7 a) U  n+ \8 T1 W1 a# b5 \; S
2 N/ @, c6 x/ b$ s/ m' @$ q
制作盒子
$ F# Q& d6 R7 i0 v+ F* b. {- \- K8 ]+ s
4.1.jpg

1 G7 g4 O+ ?; B/ i- p" `( ]% N" M2 a- t

$ h3 w% B3 n: w0 G/ ?0 }& W5 S
4.2.jpg
3 v2 q8 _( I$ z# c

5 t, }  y4 ^8 _# E; e+ ?1 C1 X( _  @; {, S: ~) L7 E( v0 w( Y
4.3.jpg

1 N2 A  h+ ^7 P: \: z* G3 {3 G3 Q6 F9 h& ?- Q- W5 c5 i

. g) Q  N" m' P" K* h. i  M! F* h6 t$ {; E# f& U' u1 m3 y
我只是用了一个旧鞋盒,然后把它切成我的规格。激光切割亚克力板是我的第一选择。
' @# i5 i. p. O8 x
# }$ Q1 ?: R/ a3 ^( j
, |' R6 R9 h6 T/ D
钻孔

& \! n# `7 W/ @% U1 q) @6 n
5.1.jpg
需要一个好的钻头来钻孔

% }7 I# D! N6 v2 Q2 V. [$ K/ k5 r/ }
2 R0 g& x& b7 a7 [
5.2.jpg
点火线圈需要连接到金属体上
" S* M  F" p7 a3 a

* @# `" X( J0 G: y" i( V4 J* E$ m9 x, q6 K2 o+ w5 q/ ?

9 z+ O$ ]- N, N6 M
电磁阀故障排除
, L* L0 w: H* m  r: q
装配后我意识到我的螺线管漏气了。我打开它,在它的磁盘上发现了洞。用一点点超级胶水固定它。
8 Q0 R- O1 V) k4 D) b6 m! Y; X
6.1.jpg

1 l# [+ I3 F- T3 e* w6 T" Q  V; P, c# d! d, Z1 e" V
2 e* u& w: }0 ?- x% G; B
6.2.jpg
! Q2 L: Q" d' W+ n
4 O; H3 V  k' H+ A( p
使用聚四氟乙烯胶带棉线密封
* I6 j, V; ?8 E9 u6 Z: ~/ w

6 l: T( |4 W) j  a5 V$ @% g9 F1 e( J5 j- T: R2 v# y
6.3.jpg
7 [6 b% c8 B+ i" P! x/ j
% `$ X8 u6 b' ]  e; |5 z! v& r
6.4.jpg

3 H: |" J9 f3 e: ~* s( y2 u; t, x  j, [' _' H8 h
& V, v: B2 n% V+ x: x  X/ Q- e
6.5.jpg
这是我检验泄露的方法

; E; E5 g- o# [2 ?' J* V" S; S8 b! T9 u* s' l7 m+ u
# w( ?. D2 g, G& I
6.6.jpg
请注意,反激式二极管直接焊接在端子上

, H+ u$ f- N2 m. n7 b( T( h% k$ _# H  K- I. J, ?+ L7 \- Z

" p2 f9 o9 l0 o8 |" D1 ?4 ~
6.7.jpg

2 }# f. C2 O2 @, s9 j  O' i
$ E3 X- b6 H5 N+ {' ?! r5 d. J4 ]7 R4 y
6.8.jpg

& F0 A' F: T$ Y1 U; I
# s+ m+ l: H  J) E' H2 s6 b
- j7 @2 Y% i3 y2 v- k( A1 }* |8 V+ n) [
3D打印
# k5 n9 v" T4 A: A0 a' P( k2 O
我需要一个用于火焰传感器的支架,这样我就可以调节它以获得最佳的火焰视野而不会产生大量的热量。3D打印解决了这个问题。此外,需要保护火焰传感器免受周围阳光的照射。我为此目的3D打印了一个封面。

& ?5 P( n) P. o: b4 P
需要使用LCD支架将其抬高至靠近盖板以便于读取。
7.jpg
要打印的型号

" i* V4 ]" k4 |; w5 Y4 c+ F: ^
8 S! R1 Z) [+ U# A0 y2 W
6 O# q4 G- d: _, _" H
8.1.jpg
- B$ ]7 f% W; K+ c- s

" d' o) N9 z. ?  r( S
+ O& [; ^5 h8 ]# ~6 x  p& ~! M
8.2.jpg
* |9 t. O; H$ ~6 f( K  N* {2 l4 B6 ~

. ?( t! K3 o0 l9 b4 \; Y3 y# ^
2 X' [! N& Z- A) `7 \1 M( h% R; r& ?: k( f# z  d
8.3.jpg

! G8 F- [: e9 }, m" ?6 T
  I$ l& J+ W5 R
* {: |( ]- v4 [0 x/ ~
9.1.jpg
安装火焰传感器

: K+ ~: H1 d, ^
% W% E! M. d' `: [2 j9 ~$ b* e3 p
9.2.jpg
安装支架

) \3 D' ~% s3 S/ |) C' v' Z4 V( M& T1 B4 b/ [" c" ~
& Q3 v3 m. s2 c( E
10.1.jpg

0 }; k+ x  i* i8 H+ p
/ Y( g: G% B0 y
- ~. m; c, z# }% o9 m" @2 D4 ]
10.2.jpg

5 Q  A6 N7 y! v  A* k2 C& ~, d! O, J+ D6 u3 @

, g! Y; E, n% f8 Z" g- H. ]$ W
11.1.jpg
1 J5 Y" @' R! N* `0 ]
3 L' u9 P3 K+ a

, X9 g4 }) U9 O, {( G7 p
11.2.jpg
安装火焰传感器盖
2 \1 \) G1 V. O/ [: c6 A

2 e5 E! e% }6 l3 g) p) M1 M+ P" q
/ h& w% }; w5 V$ U6 u  Q6 C3 F
12.jpg
LCD支架

" D( U+ X6 W! X6 I* q* _* ?; t  ^2 ]; \; x2 F$ ]+ k

) _: C/ e! B4 a- J1 e" ^/ L, N
13.jpg
LCD安装
# G% J7 m+ D/ p1 I( g

# Z* f: i& t" w0 V
LCD正在运行屏幕保护程序。代码是我的Sketch的一部分,但在最终版本中未启用。

6 K7 X6 {# }4 Q9 D1 B
; I* B* W' }" T. Z: n" w  U$ \8 G% B3 g
Azure云安装
要运行应用程序,您需要执行以下操作:
$ L0 I: {6 ^( U0 O# s' }
创建一个IoT集线器,它将从设备接收数据并将命令发送回设备
创建一对Event hub和StreamAnalytics作业,该作业将从IoT中心读取数据并将警报发布到事件中心
为桥接控制器和设备创建另一对Stream Analytics作业和事件中心。
创建将由工作者角色使用的存储帐户。
部署工作者角色,这些角色将从事件中心读取警报,并通过IoT中心将警报转发给设备并发送推文。
+ l% B* `" T! o  Y

5 M3 m* c7 {, `8 a
2 M( B4 @8 w/ S9 x1 ~2 F7 P, k
创建物联网中心

& l* }/ Y3 G7 X
登录Azure门户。
在跳转栏中,单击“新建”,然后单击“物联网”,再单击“IoT Hub”。
在New IoT Hub中,为IoT Hub指定所需的配置。
在“名称”框中,输入名称以标识您的IoT中心。验证名称后,“名称”框中会出现绿色复选标记。

4 Y% h/ \- x7 {/ l
根据需要更改定价和比例等级。此应用程序需要允许多个设备的付费层。
在“资源”组框中,创建新资源组,或选择现有资源组。有关更多信息,请参阅使用资源组管理Azure资源。
使用位置指定托管IoT中心的地理位置。
配置新的IoT中心选项后,单击“创建”。可能需要几分钟才能创建IoT中心。要检查状态,您可以监控Startboard上的进度。或者,您可以从“通知”部分监控进度。
成功创建IoT集线器后,打开新IoT集线器的刀片,记下主机名,然后选择顶部的密钥图标。
选择名为iothubowner的共享访问策略,然后复制并记下右刀片上的连接字符串。另请注意主键

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

6 h8 T, T, u5 h
登录Azure管理门户。
在页面的左下角,单击+ NEW按钮。
选择应用服务,服务总线,事件中心,快速创建
为Event Hub输入以下设置(使用您为事件中心和命名空间选择的名称):
事件中心名称:“myeventhubname”
地区:您的选择
订阅:您的选择
命名空间名称:“mynamespacename-ns”
单击“创建事件中心”
选择mynamespacename-ns并进入Event Hub选项卡
选择myeventhubname事件中心,然后进入Configure选项卡
在“共享访问策略”部分中,添加新策略:
Name =“readwrite”
权限=发送,收听
单击“保存”,然后转到evnet hub Dashboard选项卡,并单击底部的“连接信息”
记下读写策略名称的连接字符串。
创建两个Stream Analytics作业

% a; x1 q* y) g! }' ^
登录Azure门户。
在跳转栏中,单击“新建”,然后单击“物联网”,再单击“流分析作业”。
输入作业名称,选择订阅,选择创建IoT Hub时创建的同一资源组,选择位置,然后单击“创建”。
创建作业后,单击作业拓扑部分中的“输入”磁贴。在“输入”边栏选项卡中,单击“添加”
' a" j& N% G% \# `0 ~( O
输入以下设置:
输入别名=“gassense”
Type =“数据流”
来源=“IoT Hub”
IoT Hub =“myiothubname”(使用您之前创建的IoT Hub的名称)
共享访问策略名称=“iothubowner”
共享访问策略密钥=“iothubowner主密钥”(这是您在创建IoT中心时记下的密钥)
IoT Hub Consumer Group =“”(将其保留为默认空值)
事件序列化格式=“JSON”
编码=“UTF-8”
返回Stream Analytics作业刀片,单击“查询”磁贴。
$ A* [; u! S. A$ k1 v7 w7 g
气体传感器检查和推文工作的查询将是:
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刀片,单击顶部的“开始”按钮启动作业
* C1 d! y% ]: y; }9 \* Z
桥接作业的查询将只是:
SELECT
*
INTO
gassense4phone
FROM
gassense
我还尝试使用流分析工作来监控火焰传感器并使用以下查询:
SELECT
  *
INTO
  gassense4phone
FROM
  gassense
WHERE
  gassense.flamesense < 500
但最终没有使用它。
" |) [8 K7 Y/ j+ t; i+ Y
请注意火焰传感器值在看到火焰时会下降,而气体传感器值在闻到气体时会上升。
创建存储帐户

+ j8 L  R: G! u6 Y, F
登录Azure门户。
在跳转栏中,单击“新建”,然后选择“数据+存储”,“存储帐户”
为部署模型选择Classic,然后单击create
输入您选择的名称(即帐户名称的“mystorageaccountname”,然后选择您的资源组,订阅,...然后单击“创建”
创建帐户后,在资源刀片中找到它并记下主连接字符串以配置工作者角色
部署辅助角色

7 \  s  V. ^7 j. W/ J
Azure Worker角色将通过IoT Hub触发警报。要在此处构建和部署工作者角色,请执行以下步骤:

% e! Y9 k# T" K4 J* q/ X
在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
/ ^; Z" ]& O; r2 ]$ b
在IoT Hub中创建新的设备标识
# v& Q6 F/ |) f
要将设备连接到IoT Hub实例,您需要生成唯一的标识和连接字符串。物联网中心为您做到了这一点。要创建新的设备标识,您可以使用设备资源管理器工具(目前仅在Windows上运行)
4 W0 _- {) G; w) N( [# E" M# z

5 w. B% c; G; u! I1 Q! k
- _6 b0 _' g; r2 V5 E- Z8 k
软件
您需要安装以下功能才能构建和运行应用程序和Azure Web角色项目。
14.1.jpg
: M3 ~# R' L9 w
/ E+ |* w3 P4 ]+ T
, r- K: M% C, R$ }5 l
14.2.jpg
3 [  t" Y" x% K( f/ L
. v( g1 E3 }6 {/ F

& ]9 ~+ D$ H1 L* q
最新版本的Arduino SAMD电路板定义不适用于MRK1000。我必须安装较早版本1.6.3才能使其正常运行。

: K4 X/ T/ c" G  w: D5 K
构建Arduino Sketch需要以下库
15.jpg

* k  F# a% d6 Q: s
9 n5 e5 F* K0 J& H3 M2 q# E, t* j) D# E
Arduino的Azure Iot
Arduino的WiFi 101
Adafruit统一传感器库(适用于DHT)
Adafruit Gfx图书馆
Adafruit的-PCD8544 - 诺基亚5110-LCD库
WiFi固件

$ C, K4 W1 k. Y( F
0 E; k( b0 i% i- `5 i
4 W$ x3 |, I! t9 w
请务必遵循以下说明:

; Q* W+ ~6 i6 q! ^* L6 r+ M
http://github.com/arduino-libraries/WiFi101-FirmwareUpdater  让您的设备与Azure HTTPS通信。您需要使用IoT中心的主机名。
& ^* H0 b  ^! ~0 v" C$ t- P; ~

/ R* X# L5 y8 Z% Q/ j- \
, O8 R6 b( v9 c; w
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的文档可以帮助我找出问题所在。
; P4 C$ u8 `. }8 e" i
我注意到了JTAG调试端口。我环顾四周,发现Adafruit 对Arduino Zero的优秀  写作。它没有开箱即用,但我仍然需要解决一些编译器问题。我能够恢复引导程序,我的电路板恢复正常。
16.jpg
6 P( f) A' n$ O1 T( W
开发技巧
一个周末我需要外出旅行,我想参与这个项目。在没有硬件的情况下,我编写了一个通用Windows应用程序来模拟Azure云的加热器行为。
17.jpg
加热器模拟器应用程序

. m, j' X  o% x; Y- ]) \* p8 s
2 D0 v3 _4 o0 i( e6 w3 T0 d
; @8 z  h! m- j! M, F
它是一个非常有用的测试工具,即使在返回之后,我仍然使用它来尝试不同的场景和云设置的部分,这些场景要么很难,要么对实际硬件来说太慢。模拟器的代码存在于GitHub中。
7 |8 N0 F, \- \
在Stream Analytic作业上编辑查询时,我发现在旧的Azure管理端口中使用“测试”功能很有用。在这里,您可以上传json数据并立即查看查询结果。
# O6 p( ^- [& I- {
18.jpg

4 z) j; z8 X  q3 B' r
4 C9 Q5 n& L4 h8 Q. x  l( Y, ~" m  }
原理图
19.jpg
4 X! r. Q' B$ Q. d3 D1 B% j( s, n

( Z2 D5 R. b1 a2 b0 ?% K& Y; P; y; ?
相关代码--- Azure-Stream-Analytics-master.zip (248.53 KB, 下载次数: 2)
收藏 评论0 发布时间:2019-4-2 18:13

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版