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

基于STM32L4的Azure Stream Analytics

[复制链接]
木木&点点 发布时间:2019-4-2 18:13
本帖最后由 点点&木木 于 2019-4-12 09:10 编辑
) Q( X% s3 F$ m+ b
  d& ^' g% _* ~- u0 O7 l
Azure Stream Analytics自动监视传感器,可在发生危险时发送推文和警报。也可通过智能手机控制。

1 x) ^+ a, L8 B5 g' E
1.jpg

" ~8 T5 S/ e+ E+ n, O0 E& ?, p6 f3 v! ^0 Q& @5 G0 b
* U. g# _# n/ T# L0 l
这个项目中使用的东西
硬件组件
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      

: B+ N* i" v0 Y# l$ q1 T4 [, d5 S& q! X9 i0 x7 Z
手动工具和制造机器
烙铁(通用)         
3D打印机(通用)        
绳钻
  n+ S& H. H0 i) x) N3 B
在我国,天然气压力在需求高峰时段内全天波动。每年有无人看管的加热器有很多人丧生,一氧化碳中毒。
& y" e; T8 \# J# G" T7 Q0 E5 M
这个项目的灵感来自一个冬天的夜晚,当我女儿的房间太冷,但我不能在她睡觉时让加热器保持开启状态。
! u* [5 U* X! A
当我开始设计这个项目的时候,我想,如果我把一个支持WiFi的控制器如MKR1000放在那里,那么除了安全之外我还可以做很多很酷的事情。这就是智能手机连接,使用摩托车零件自动点火的情况。
4 A2 J- s  J2 s2 [4 e9 c
框图

; c! o8 h4 \, X7 \6 E
2.png

, _0 f" n) q7 a) h
/ {( [1 _& Y! Y; ~+ R+ D( f4 j7 c( \/ l; X1 m: e
加热器通过物联网中心向Azure发送遥测数据。Stream Analytics正在对设备数据进行近乎实时的分析,并将根据配置的SQL请求发布警报。Worker角色将获取Stream Analytics生成的警报,并通过IoT Hub将警报转发给设备。
/ j! Q, F/ d- f1 S0 C/ F4 R

% u$ q- U! C9 ?1 S' Y
如果您有足够的气体和电子工作经验,可尝试此项目。
为避免火灾危险,在将纸板和电子设备连接到燃气设备时要小心。

& h, _  O( t. Q
6 D$ }( T& T! g8 x( N, J, @) g$ R
硬件设置

' P3 [' ~8 T, B6 G; m) h
在构建此项目时,MKR1000未发布且文档未公开。我担心的是MQ5气体传感器使用加热器,如果连接到MKR1000电源,可能无法满足电流需求。为安全起见,我使用降压转换器为模块提供5v工作电压。然后在板载稳压器上使用MKR1000提供3.3V工作电压。

. B4 u8 M1 e  v: W
如果您有来自Sparkfun的符合3V标准的MOSFET,如FQP30N06L,那么您不需要Quad NAND芯片,但您需要将MOSFET的电压拉低的10k电阻。
7 N- U# v. j4 c2 X4 P8 }% f2 f
我强烈建议使用可测量电流的台式电源。这将非常有用的,当您在软件或布线中出错并且意外地让MOSFET导通或处于浮动状态时。桌面电源电流消耗会将在您闻到燃烧的硅的味道之前提醒您
& _0 C4 P2 a5 p
/ G( S# D; w: b+ ~$ o. m5 ~
3.1.jpg
DHT11安装

# b6 v" A- g% {- I) p% _1 p& R# ?
: h, K, |$ k$ w6 r& Q) r( G7 u4 R4 J
3.2.jpg
温度传感器安装
( q# ]. [& y8 ?  D1 x5 n2 c5 o& _
' ]# k3 [1 u! K2 \. i' Z
3.3.jpg

0 \5 b: x2 Z$ \" g
0 d% F% b0 I9 J8 f5 s' J7 c
6 P2 G/ c/ @" W$ d" j  k9 \
3.4.jpg
液晶显示

2 n% S1 ?6 G. ?( Y# |, c- ]; B% C1 |# E  _( j9 X! h4 \

' T1 s  c# N7 S, S
3.5.jpg
火焰传感器

( _/ h  J  Q' q. j/ |1 \- V3 k! e
5 S" s! b, J; t$ T. {, h
! t: t  K! i# l
3.6.jpg
带盖的火焰传感器

0 T) G3 N6 y* o. R* ^9 |9 ?% e! {9 i9 l9 N5 F- S6 r/ B

1 V% B) r  ?& s" b
3.7.jpg
& h/ b: J$ R. H8 R) O0 o. n
0 |2 P% Z' M" p  V1 L+ ]: L
" c3 ]- _$ H. ^7 A" z
3.8.jpg
添加气体传感器

9 k# x2 c+ b, h5 t2 k% l4 ~4 E. y( w! |5 h

3 K- U; y5 b* z6 w# M# W$ r+ n% u
制作盒子
1 A1 S3 d% t( `( V. i: v" V
4.1.jpg

* Y! s% W' p% l9 h
7 G) a! U5 N! }
$ o+ }7 u5 s+ O+ |; I
4.2.jpg

# c* `# M2 Q1 z) P: ^
1 W' E% y5 F; o0 `
7 _! m, f  E+ Z0 M- W% P$ i+ |
4.3.jpg

7 }6 D- e, D6 }6 U# P
" x) G1 |& ?& f# y
2 j& t4 l- Z! Y& w% X% b; D. K" g/ |" r4 y) F
我只是用了一个旧鞋盒,然后把它切成我的规格。激光切割亚克力板是我的第一选择。
( z/ F8 W- V9 b. V4 `" ^6 {& F5 s

) L8 h3 F# [/ w; S4 u9 D* i' K6 ^* v7 Y. x8 j
钻孔
; h( l# g, |- D0 y  ~- |
5.1.jpg
需要一个好的钻头来钻孔
( e3 P- ?5 K/ E* ~, ]( ^
9 K" D4 V( Z6 W7 a4 L7 O

; d! c* m6 H2 \0 x/ M7 ], X) [
5.2.jpg
点火线圈需要连接到金属体上

/ g; x  b5 u7 Q9 C. I: E
/ Z4 q/ f, U8 g* D, q, B9 D
' X0 i$ \  M+ m9 W
& h7 F; h* }' r3 {2 Q
电磁阀故障排除
4 k  A+ S) C0 k+ Z1 [1 a
装配后我意识到我的螺线管漏气了。我打开它,在它的磁盘上发现了洞。用一点点超级胶水固定它。
8 N% B9 B# U- W6 R& W! x
6.1.jpg

5 w$ i; r3 q3 G7 r: I3 Q8 }" S- W- _' B1 u

% U5 G% x! _& k
6.2.jpg

; |. m3 Z: B( {& }$ v) K: u9 H3 U% k4 E
使用聚四氟乙烯胶带棉线密封
; M" S5 A  G1 y& c* }& g7 V

; x& P$ C9 K3 g9 z5 ]  T3 a, g$ g" ]
6.3.jpg

2 `; W1 |- d, }/ u  v) B% r
& A$ |$ [; _% t
6.4.jpg
3 ^2 O& t# E1 f- y
) ?. A* n; [+ \  F$ L+ k- E/ C
1 R! T# u+ ~0 X
6.5.jpg
这是我检验泄露的方法

* u, |1 m7 G1 X- p: _8 l  ^
8 S) [0 a$ z7 y2 L
- P( F; q& `1 s
6.6.jpg
请注意,反激式二极管直接焊接在端子上
4 s% w& M6 f9 S1 U
( C( R1 L3 }7 S0 |- z% D
" k$ ^- h) h7 p
6.7.jpg
/ F. Z& E+ E& |  k, [

6 Z3 d8 E( `! [" \$ X
3 `; E' C% D3 ?1 b- B4 W
6.8.jpg

: c7 g: l3 p/ s9 D. Q1 r
* S: `& R/ f+ P; ^/ e7 b' t7 {/ m6 S& s3 f5 f, z  ^  A% A
7 Q1 B/ K; X* a) a
3D打印
" X5 z' P& G% `3 v) e0 N
我需要一个用于火焰传感器的支架,这样我就可以调节它以获得最佳的火焰视野而不会产生大量的热量。3D打印解决了这个问题。此外,需要保护火焰传感器免受周围阳光的照射。我为此目的3D打印了一个封面。
  q( A, q  _% s- A  N4 {  H
需要使用LCD支架将其抬高至靠近盖板以便于读取。
7.jpg
要打印的型号
9 G1 o: ]6 k' Q9 C, {5 }

$ h5 E* N2 x) W) z5 ]+ i( @% J9 y3 X, p1 |) ~: |! p+ x% k' U
8.1.jpg

( z  j& S" U7 H8 G0 i+ j( W5 {6 q; f! E5 a' e& ]. M

; d5 s' S0 Y. u9 w, L- H* f) _
8.2.jpg
" h2 e' l8 |. p) A) w

* Z) l4 M% b7 X5 _9 A7 K. g/ Q. Z! ?9 [( V# b( O) o" @. Y

' ~3 {8 d1 f- ^
8.3.jpg

6 w+ }* a, o6 t' o' D0 ?. j* U
( x) n" p9 E; Z: p, d) p) y  q% q$ O8 c# _4 O7 M
9.1.jpg
安装火焰传感器
# [' s( K  |* F0 c9 Q

8 H5 r- x2 U/ i( p
9.2.jpg
安装支架
2 E0 V( {  V+ E  @! d5 [$ Z( f  X
8 [! W3 h4 c2 A% p6 g1 [; s' j3 P

) q! ?: v" {! o* _
10.1.jpg
! W3 @6 Q1 y: H  J) v( ]

8 C% b$ L- \3 z/ Q$ |
, a2 @! |+ K" T8 a8 D
10.2.jpg

/ \0 @/ o; O5 y, u
3 H% b- J6 ?& W# X0 j9 I
2 U3 _8 B; v! Y1 J( \1 ]8 c8 B
11.1.jpg

, U  I. M  a  I) i5 m, s. A* K* ?$ Z1 `% S1 `4 k

# [, ~( b5 ?" z+ K: \
11.2.jpg
安装火焰传感器盖

8 Y3 ]$ \- D) R- E1 w  O+ U0 q# [( l7 Z; k
# Y, q$ g3 o% |5 G, o  n% Z, N
12.jpg
LCD支架
) U0 @& t# P! s- H- L

) C+ i' b# t0 n/ R$ ~; T. A; @# o& j. F0 s1 A! K
13.jpg
LCD安装

7 a% [! h7 A& G6 t. z- V4 l' c: y1 N/ _- f( W1 d
LCD正在运行屏幕保护程序。代码是我的Sketch的一部分,但在最终版本中未启用。

% C& }- r1 J6 L) h
) z( F" n$ H! r9 W+ [
* ^6 {' `7 L8 R
Azure云安装
要运行应用程序,您需要执行以下操作:

# c& b: E, R/ k5 Y2 O8 V
创建一个IoT集线器,它将从设备接收数据并将命令发送回设备
创建一对Event hub和StreamAnalytics作业,该作业将从IoT中心读取数据并将警报发布到事件中心
为桥接控制器和设备创建另一对Stream Analytics作业和事件中心。
创建将由工作者角色使用的存储帐户。
部署工作者角色,这些角色将从事件中心读取警报,并通过IoT中心将警报转发给设备并发送推文。

+ \% R2 o, Z% v3 Y
) m( ~: u( A( h! @/ T4 ^0 @# b8 B9 F8 \
创建物联网中心
" w5 {8 |. P: a; O* |
登录Azure门户。
在跳转栏中,单击“新建”,然后单击“物联网”,再单击“IoT Hub”。
在New IoT Hub中,为IoT Hub指定所需的配置。
在“名称”框中,输入名称以标识您的IoT中心。验证名称后,“名称”框中会出现绿色复选标记。
" A' c. S, Y7 J2 {9 z( Y6 D
根据需要更改定价和比例等级。此应用程序需要允许多个设备的付费层。
在“资源”组框中,创建新资源组,或选择现有资源组。有关更多信息,请参阅使用资源组管理Azure资源。
使用位置指定托管IoT中心的地理位置。
配置新的IoT中心选项后,单击“创建”。可能需要几分钟才能创建IoT中心。要检查状态,您可以监控Startboard上的进度。或者,您可以从“通知”部分监控进度。
成功创建IoT集线器后,打开新IoT集线器的刀片,记下主机名,然后选择顶部的密钥图标。
选择名为iothubowner的共享访问策略,然后复制并记下右刀片上的连接字符串。另请注意主键

# ^' I2 {1 j. X4 S9 j
您的IoT中心现已创建,您需要在软件中更新主机名和连接字符串。
要创建Stream Analytics作业输入,您需要从IoT Hub中检索一些信息:
从Messaging刀片(在设置刀片中找到)中,记下与Event Hub兼容的名称
查看与Event-hub兼容的端点,并记下这部分:sb://thispart.servicebus.windows.net/让我们称之为IoTHub与EventHub兼容的命名空间
对于密钥,您将需要在步骤#6中读取主键
创建两个事件中心
2 o  ]' ~0 N  a! m  h& n
登录Azure管理门户。
在页面的左下角,单击+ NEW按钮。
选择应用服务,服务总线,事件中心,快速创建
为Event Hub输入以下设置(使用您为事件中心和命名空间选择的名称):
事件中心名称:“myeventhubname”
地区:您的选择
订阅:您的选择
命名空间名称:“mynamespacename-ns”
单击“创建事件中心”
选择mynamespacename-ns并进入Event Hub选项卡
选择myeventhubname事件中心,然后进入Configure选项卡
在“共享访问策略”部分中,添加新策略:
Name =“readwrite”
权限=发送,收听
单击“保存”,然后转到evnet hub Dashboard选项卡,并单击底部的“连接信息”
记下读写策略名称的连接字符串。
创建两个Stream Analytics作业

$ c$ t- v6 j& _0 R5 @. y$ g9 R! R, b/ I- n% M
登录Azure门户。
在跳转栏中,单击“新建”,然后单击“物联网”,再单击“流分析作业”。
输入作业名称,选择订阅,选择创建IoT Hub时创建的同一资源组,选择位置,然后单击“创建”。
创建作业后,单击作业拓扑部分中的“输入”磁贴。在“输入”边栏选项卡中,单击“添加”

; A& ]! ~( @) |
输入以下设置:
输入别名=“gassense”
Type =“数据流”
来源=“IoT Hub”
IoT Hub =“myiothubname”(使用您之前创建的IoT Hub的名称)
共享访问策略名称=“iothubowner”
共享访问策略密钥=“iothubowner主密钥”(这是您在创建IoT中心时记下的密钥)
IoT Hub Consumer Group =“”(将其保留为默认空值)
事件序列化格式=“JSON”
编码=“UTF-8”
返回Stream Analytics作业刀片,单击“查询”磁贴。
: p4 u3 E  w# u1 Z5 W  U. O$ K
气体传感器检查和推文工作的查询将是:
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刀片,单击顶部的“开始”按钮启动作业

' D+ E$ L% K) M3 U
桥接作业的查询将只是:
SELECT
*
INTO
gassense4phone
FROM
gassense
我还尝试使用流分析工作来监控火焰传感器并使用以下查询:
SELECT
  *
INTO
  gassense4phone
FROM
  gassense
WHERE
  gassense.flamesense < 500
但最终没有使用它。
! a+ q9 a; ^" v+ z9 I
请注意火焰传感器值在看到火焰时会下降,而气体传感器值在闻到气体时会上升。
创建存储帐户

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

  V( D2 L; C1 m/ h% T, z" ]
Azure Worker角色将通过IoT Hub触发警报。要在此处构建和部署工作者角色,请执行以下步骤:

# e: V' Z( s  G- z' c
在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

, V  ]  S) V( F2 Z
在IoT Hub中创建新的设备标识

' r+ n0 ~. h. l1 N( ]* N
要将设备连接到IoT Hub实例,您需要生成唯一的标识和连接字符串。物联网中心为您做到了这一点。要创建新的设备标识,您可以使用设备资源管理器工具(目前仅在Windows上运行)
2 E! H1 v# M! e( G. j3 o6 E
5 }# @) M. O& a& O( l

! i2 [7 b% j! m$ x
软件
您需要安装以下功能才能构建和运行应用程序和Azure Web角色项目。
14.1.jpg
) {# q' E/ T, |7 J/ Q& M1 w

3 Q  w# U8 T4 s5 `7 d' o' u% u9 }8 u1 ?' D
14.2.jpg
9 r9 \! N2 u$ n) }$ Y

4 ^* w4 b. Q4 }! {* T
( A  R* F7 W+ D7 v; D
最新版本的Arduino SAMD电路板定义不适用于MRK1000。我必须安装较早版本1.6.3才能使其正常运行。

" h. ^/ e2 r4 [+ `: F
构建Arduino Sketch需要以下库
15.jpg
. z0 j3 Z6 X- K- h3 k9 K. a

& m; Y6 j# Q+ K) j8 J6 q& s0 j, S* O1 J
Arduino的Azure Iot
Arduino的WiFi 101
Adafruit统一传感器库(适用于DHT)
Adafruit Gfx图书馆
Adafruit的-PCD8544 - 诺基亚5110-LCD库
WiFi固件
$ }; o6 G) Q: r

! @3 M  V! d; t9 _8 f5 [0 N( z8 B, P5 q
请务必遵循以下说明:
' d, y; `" b- U
http://github.com/arduino-libraries/WiFi101-FirmwareUpdater  让您的设备与Azure HTTPS通信。您需要使用IoT中心的主机名。

5 `& [7 i7 u& h& R7 W! G- M* }6 ~7 q& Q# O9 N7 q4 s

8 e/ M: T9 _  ]& _
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的文档可以帮助我找出问题所在。

3 x- }8 W1 m# F# a; O
我注意到了JTAG调试端口。我环顾四周,发现Adafruit 对Arduino Zero的优秀  写作。它没有开箱即用,但我仍然需要解决一些编译器问题。我能够恢复引导程序,我的电路板恢复正常。
16.jpg

; ~) z' Y9 }' Z/ h% ?% j
开发技巧
一个周末我需要外出旅行,我想参与这个项目。在没有硬件的情况下,我编写了一个通用Windows应用程序来模拟Azure云的加热器行为。
17.jpg
加热器模拟器应用程序

& l' B* w1 ]* ~
4 j: Y9 c  s; s4 s& |
  h: s- w, f+ H: ]7 a1 r+ [7 P. [
它是一个非常有用的测试工具,即使在返回之后,我仍然使用它来尝试不同的场景和云设置的部分,这些场景要么很难,要么对实际硬件来说太慢。模拟器的代码存在于GitHub中。
6 T" W8 ~2 x3 ?0 V5 U
在Stream Analytic作业上编辑查询时,我发现在旧的Azure管理端口中使用“测试”功能很有用。在这里,您可以上传json数据并立即查看查询结果。

* D3 K  R4 K  C
18.jpg

4 d& Q. {. X0 [! S- ~9 C* _% q3 l3 w2 l

7 \$ \* e$ v) ]& q( G4 `$ m  ~, F
原理图
19.jpg

: F3 W  \( o: L' U! I9 h
5 }1 T9 ?- m5 O9 |# W
相关代码--- 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 手机版