EsDA開發(fā)平臺(tái)為產(chǎn)品上線提供動(dòng)力。本文將基于EsDA開發(fā)平臺(tái),通過拖拽、連線方式,10分鐘快速搭建一個(gè)I2C數(shù)據(jù)采集監(jiān)測業(yè)務(wù),為客戶產(chǎn)品開發(fā)、部署、上線縮短周期。
簡介
I2C 是一種串行通信總線,只需SCK、SDA兩根雙向I/O線即可在連接到總線上的設(shè)備之間傳送信息。因其所需引腳少,可擴(kuò)展性強(qiáng),數(shù)據(jù)傳輸速率快等,所以現(xiàn)被廣泛使用于IC間的通訊。在各種嵌入式應(yīng)用場景中,使用I2C總線通信的傳感器也有很多。比如 eeprom、溫濕度傳感器、流量傳感器、壓力傳感器等。
EsDA 平臺(tái)在使用I2C總線通信時(shí)只需要通過拖拽節(jié)點(diǎn)、連線繪制流圖,即可實(shí)現(xiàn)從I2C從機(jī)讀取數(shù)據(jù),大大的簡化了開發(fā)流程,縮短了項(xiàng)目開發(fā)周期,為客戶產(chǎn)品搶占市場提供先機(jī)。
本文基于EsDA開發(fā)平臺(tái),MPC_ZC1作為I2C主機(jī)設(shè)備,定時(shí)從TPS02RAH從機(jī)設(shè)備中去讀取溫度寄存器的值,并將采集到的溫度值上傳到ZWS云端,實(shí)現(xiàn)溫度實(shí)時(shí)監(jiān)控功能,該實(shí)驗(yàn)主要用了到timer、fscript、i2c_master_read、log和zws節(jié)點(diǎn),具體實(shí)現(xiàn)請(qǐng)見下文。
I2C相關(guān)節(jié)點(diǎn)介紹
I2C外設(shè)共有3個(gè)幾點(diǎn),分別是i2c_master、i2c_master_read和i2c_master_write節(jié)點(diǎn)。i2c_master節(jié)點(diǎn)主要用來配置I2C的設(shè)備名稱以及設(shè)備參數(shù),i2c_master_read節(jié)點(diǎn)主要用于讀取從機(jī)設(shè)備的數(shù)據(jù),i2c_master_write節(jié)點(diǎn)主要用于向從機(jī)設(shè)備寫入數(shù)據(jù)。
1. i2c_master_write節(jié)點(diǎn)
I2C主機(jī)向從機(jī)設(shè)備寫數(shù)據(jù),可配置從機(jī)相關(guān)的設(shè)備信息和通信參數(shù)。
1.1 屬性
名稱(name):節(jié)點(diǎn)名稱,用于索引查找本節(jié)點(diǎn);
顯示名稱(displayName):用于畫布上顯示的名稱;
主機(jī)配置(i2c master config):綁定一個(gè)I2C主機(jī)的配置節(jié)點(diǎn);
從機(jī)地址(Slave address):從機(jī)設(shè)備的地址;
地址位數(shù)(address bits):從機(jī)的地址位數(shù),由于7位尋址和10位尋址是兼容的所以可以在同一個(gè)I2C總線上同時(shí)使用7位和10位兩種不同模式的設(shè)備,可配為7位(7 bits);10位(10 bits);
是否忽略從機(jī)應(yīng)答(whether to ignore the slave ack signal):可配:忽略從機(jī)應(yīng)答(ignore);不忽略從機(jī)應(yīng)答(do not ignore);
從機(jī)設(shè)備寄存器地址位寬(SubAddressBitWidth):可配:do not set sub-address表示不設(shè)置從機(jī)的寄存器地址寬度;1 bytes sub-address表示從機(jī)具有1字節(jié)(8位)的寄存器地址寬度;2 bytes sub-address表示從機(jī)具有2字節(jié)(16位)的寄存器地址寬度;4 bytes sub-address表示從機(jī)具有4字節(jié)(32位)的寄存器地址寬度;
從機(jī)設(shè)備寄存器地址(SubAddress):從機(jī)設(shè)備子地址(寄存器地址)。注意從機(jī)設(shè)備寄存器地址位寬為0則不能設(shè)置從機(jī)子地址。
1.2輸入
payload :輸入數(shù)據(jù)流,存放需要寫入的數(shù)據(jù)。此節(jié)點(diǎn)接收如下類型的數(shù)據(jù):binary type(二進(jìn)制類型); wbuffer object type(指針類型); string type(字符串類型);
payloadLength :需要寫入的數(shù)據(jù)長度,單位字節(jié);
subAddress :從機(jī)設(shè)備子地址(寄存器地址)。注意從機(jī)設(shè)備寄存器地址位寬為0則不能設(shè)置從機(jī)子地址。
1.3輸出
sink類型節(jié)點(diǎn)一般并不具備數(shù)據(jù)輸出。
2.i2c_master_read節(jié)點(diǎn)
I2C主機(jī)向從機(jī)設(shè)備中讀數(shù)據(jù):對(duì)從機(jī)的設(shè)備地址等進(jìn)行輸入/配置,最后將從機(jī)中讀取到數(shù)據(jù)和長度等信息進(jìn)行輸出。
2.1 屬性
名稱(name):節(jié)點(diǎn)名稱,用于索引查找本節(jié)點(diǎn);
顯示名稱(displayName):用于畫布上顯示的名稱;
主機(jī)配置(i2c master config):綁定一個(gè)I2C主機(jī)的配置節(jié)點(diǎn);
從機(jī)地址(Slave address):從機(jī)設(shè)備的地址;
地址位數(shù)(address bits):從機(jī)的地址位數(shù),可配為7位(7 bits);10位(10 bits);
是否忽略從機(jī)應(yīng)答(whether to ignore the slave ack signal):可配:忽略從機(jī)應(yīng)答(ignore);不忽略從機(jī)應(yīng)答(do not ignore);
是否發(fā)送應(yīng)答(whether send nak):當(dāng)主機(jī)讀取數(shù)據(jù)時(shí)主機(jī)是否發(fā)送給從機(jī)的應(yīng)答ACK信號(hào); do not send表示不發(fā)送主機(jī)ACK信號(hào); send表示發(fā)送主機(jī)的ACK信號(hào);
從機(jī)設(shè)備寄存器地址位寬(SubAddressBitWidth):可配:do not set sub-address表示不設(shè)置從機(jī)的寄存器地址寬度;1 bytes sub-address表示從機(jī)具有1字節(jié)(8位)的寄存器地址寬度;2 bytes sub-address表示從機(jī)具有2字節(jié)(16位)的寄存器地址寬度;4 bytes sub-address表示從機(jī)具有4字節(jié)(32位)的寄存器地址寬度;
從機(jī)設(shè)備寄存器地址(SubAddress):從機(jī)設(shè)備子地址(寄存器地址)。注意從機(jī)設(shè)備寄存器地址位寬為0則不能設(shè)置從機(jī)子地址。
2.2輸入
Length :讀的數(shù)據(jù)長度,單位字節(jié);
subAddress :從機(jī)設(shè)備子地址(寄存器地址)。注意從機(jī)設(shè)備寄存器地址位寬為0則不能設(shè)置從機(jī)子地址;
2.3輸出
payload :讀緩沖區(qū),用于存放接受讀取到的數(shù)據(jù),類型pointer.如果下一個(gè)節(jié)點(diǎn)為fscript,則可以使用rbuffer讀取數(shù)據(jù);
payloadLength :讀的數(shù)據(jù)長度,單位字節(jié);
subAddress :從機(jī)設(shè)備子地址(寄存器地址)。注意從機(jī)設(shè)備寄存器地址位寬為0則沒有從機(jī)子地址。
3.i2c_master配置節(jié)點(diǎn)
I2C主機(jī)的通用配置。
3.1 屬性
名稱(name):節(jié)點(diǎn)名稱,用于索引查找本節(jié)點(diǎn),在某些aw_flow_designer的版本被隱藏起來了,只能通過點(diǎn)擊i2c_master_read和i2c_master_write這兩個(gè)節(jié)點(diǎn)主機(jī)配置去顯現(xiàn);
顯示名稱(displayName):用于畫布上顯示的名稱;
設(shè)備名(Devname):I2C主機(jī)設(shè)備路徑名;
時(shí)鐘頻率(clock frequency):I2C設(shè)備的SCK時(shí)鐘頻率。
3.2輸入
config配置節(jié)點(diǎn)一般不具備數(shù)據(jù)輸入。
3.3輸出
config配置節(jié)點(diǎn)一般不具備數(shù)據(jù)輸出。
業(yè)務(wù)開發(fā)
1. 采集PT100的實(shí)時(shí)溫度
MPC_ZC1作為I2C主機(jī)設(shè)備,定時(shí)從TPS02RAH從機(jī)設(shè)備中去讀取溫度寄存器的值,并將采集到的溫度值上傳到ZWS云端,實(shí)現(xiàn)溫度實(shí)時(shí)監(jiān)控。
該實(shí)驗(yàn)主要用到timer、fscript、i2c_master_read、log和zws節(jié)點(diǎn):
timer:timer節(jié)點(diǎn)用于定時(shí)觸發(fā)采集PT100的溫度;
i2c_master_read:i2c_master_read節(jié)點(diǎn)主要用于從從機(jī)設(shè)備讀取數(shù)據(jù);
fscript:fscript節(jié)點(diǎn)主要用于對(duì)TPS02RAH從機(jī)設(shè)備讀取的數(shù)據(jù)進(jìn)行轉(zhuǎn)換處理
和對(duì)i2c_master_read節(jié)點(diǎn)進(jìn)行輸入配置(配置要讀取的字節(jié)長度);
log:log對(duì)采集到的溫度值進(jìn)行打印顯示;
zws:zws節(jié)點(diǎn)將fscript節(jié)點(diǎn)輸出溫度值上報(bào)到zws云端。
1.1添加節(jié)點(diǎn)并連線 周期性的去讀取I2C從機(jī)TPS02RAH設(shè)備溫度寄存器的值,將timer,fscript,i2c_master_read,log節(jié)點(diǎn)添加到畫布中,并連線繪圖。
1.2配置節(jié)點(diǎn)
雙擊timer節(jié)點(diǎn),打開屬性面板設(shè)置定時(shí)周期(ms),周期性的去讀取TPS02的溫度值。 雙擊i2c_master_read的輸入節(jié)點(diǎn)fscript,并查看TPS02RAH溫度傳感器的數(shù)據(jù)手冊(cè)。 得知TPS02RAH溫度寄存器的值有6個(gè)字節(jié),且數(shù)據(jù)傳輸順序:先傳輸高字節(jié)后傳輸?shù)妥止?jié),可知前3個(gè)字節(jié)存儲(chǔ)通道1的溫度測試結(jié)果,后3個(gè)字節(jié)存儲(chǔ)通道2的溫度測試結(jié)果。 所以i2c_master_read節(jié)點(diǎn)的輸入:fscript需讀取兩個(gè)通道6個(gè)字節(jié)的數(shù)據(jù)。其他的參數(shù)可在i2c_master_read節(jié)點(diǎn)的屬性中配置。
雙擊i2c_master_read節(jié)點(diǎn),打開屬性面板根據(jù)TPS02RAH的數(shù)據(jù)手冊(cè)設(shè)置如下圖所示,并點(diǎn)擊I2C主機(jī)配置的鉛筆圖標(biāo)去設(shè)置I2C主機(jī)設(shè)備路徑名和時(shí)鐘頻率。
雙擊i2c_master_read的輸出消費(fèi)者節(jié)點(diǎn)fscript,將讀取到溫度寄存器的兩個(gè)通道溫度根據(jù)下面的溫度轉(zhuǎn)換公式將溫度輸出并打印到log中。 TPS02ARH的溫度轉(zhuǎn)換公式: 兩通道六字節(jié)數(shù)據(jù),前三位字節(jié)數(shù)據(jù)對(duì)應(yīng)通道 1,后三位字節(jié)數(shù)據(jù)對(duì)應(yīng)通道 2,操作方法一樣,取通道一數(shù)據(jù)分析如下:
當(dāng) value≥223時(shí),即當(dāng)前測量溫度為負(fù)溫度值:
當(dāng) value<223時(shí), 即當(dāng)前測量溫度為正溫度值:
i2c_master_read的輸出消費(fèi)者節(jié)點(diǎn)fscript的內(nèi)容如下:
//將讀取的6個(gè)uint8_t類型的數(shù)據(jù)打印 rb = rbuffer_create(msg.payload, msg.payloadLength) temperature1 = 0 //通道1的溫度 temperature2 = 0 //通道2的溫度 for (var i = 0; i < msg.payloadLength; i = i+1) { d = rbuffer_read_uint8(rb); if(i > 2){ temperature2 = temperature2 + (u32(d)<<(8*(5-i))); } temperature1 = temperature1 + (u32(d)<<(8*(2-i))); } if (temperature1 < 8388608) {//temperature<2^23正溫度 msg.temperature1 = temperature1/8192 } else {//負(fù)溫度 msg.temperature1 = -(16777216 - temperature1)/8192 } if (temperature2 < 8388608) { msg.temperature2 = temperature2/8192 } else {//負(fù)溫度 msg.temperature2 = -(16777216 - temperature2)/8192 } msg.payload = join(",","channel 1:",msg.temperature1,"channel 2:",msg.temperature2) print(msg.payload)
1.3下載驗(yàn)證
選擇流圖下載接口,并點(diǎn)擊運(yùn)行按鈕。
完成流圖下載,根據(jù)實(shí)物連線可知PT100連接的是通道1,隨著手捂探頭,可以看到channel 1(通道1)的溫度從27.67上升到30.23,因?yàn)閏hannel 2(通道2)沒有接PT100的探頭所以數(shù)值保持850不變。
1.4接入zws云端
登錄:https://www.zlgcloud.com/ 按照EsDA MPC-ZC1應(yīng)用:IoT監(jiān)測控制系統(tǒng)(一)這篇文章中接入云端方法的介紹,在ZWS云端上為MPC-ZC1添加新的數(shù)據(jù)點(diǎn),如下圖所示: 添加通道1 的溫度顯示:
添加通道2 的溫度顯示:
在AW_FLOW Designer畫布中添加zws_iot_data_out節(jié)點(diǎn)并連線。
輸入對(duì)應(yīng)的三元組信息并選擇正確的數(shù)據(jù)上報(bào)方式和目標(biāo)鍵值對(duì)。
下載流圖并觀察云端設(shè)備列表的實(shí)時(shí)數(shù)據(jù)如下圖所示。
-
數(shù)據(jù)采集
+關(guān)注
關(guān)注
39文章
6267瀏覽量
114097 -
監(jiān)測系統(tǒng)
+關(guān)注
關(guān)注
8文章
2763瀏覽量
81559 -
I2C
+關(guān)注
關(guān)注
28文章
1495瀏覽量
124717 -
ESDA
+關(guān)注
關(guān)注
0文章
28瀏覽量
7540
原文標(biāo)題:【Z站推薦】基于 EsDA MPC-ZC1 快速實(shí)現(xiàn) I2C采集監(jiān)測
文章出處:【微信號(hào):ZLG_zhiyuan,微信公眾號(hào):ZLG致遠(yuǎn)電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
ARM I2C 總線接口模塊在數(shù)據(jù)采集中的應(yīng)用
什么是軟件I2C和硬件I2C
如何去實(shí)現(xiàn)基于I2C的AHT20溫濕度傳感器的數(shù)據(jù)采集及串口輸出
基于LabVIEW數(shù)據(jù)采集系統(tǒng)的快速開發(fā)
基于I2C協(xié)議的AHT20溫濕度傳感器的數(shù)據(jù)采集
![基于<b class='flag-5'>I2C</b>協(xié)議的AHT20溫濕度傳感器的<b class='flag-5'>數(shù)據(jù)采集</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
基于I2C下的溫濕度采集實(shí)驗(yàn)
![基于<b class='flag-5'>I2C</b>下的溫濕度<b class='flag-5'>采集</b>實(shí)驗(yàn)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
基于I2C的AHT20溫濕度傳感器的數(shù)據(jù)采集及串口輸出
![基于<b class='flag-5'>I2C</b>的AHT20溫濕度傳感器的<b class='flag-5'>數(shù)據(jù)采集</b>及串口輸出](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
【EsDA應(yīng)用】5分鐘快速實(shí)現(xiàn)攝像頭圖像采集
【產(chǎn)品應(yīng)用】基于 EsDA MPC-ZC1 快速實(shí)現(xiàn) I2C采集監(jiān)測
![【產(chǎn)品應(yīng)用】基于 <b class='flag-5'>EsDA</b> MPC-ZC1 <b class='flag-5'>快速</b>實(shí)現(xiàn) <b class='flag-5'>I2C</b><b class='flag-5'>采集</b><b class='flag-5'>監(jiān)測</b>](https://file1.elecfans.com/web2/M00/8E/61/wKgaomTE2VeAJyyVAAABH5UOQQI173.jpg)
【Z站推薦】基于 EsDA MPC-ZC1 快速實(shí)現(xiàn) I2C采集監(jiān)測
![【Z站推薦】基于 <b class='flag-5'>EsDA</b> MPC-ZC1 <b class='flag-5'>快速</b>實(shí)現(xiàn) <b class='flag-5'>I2C</b><b class='flag-5'>采集</b><b class='flag-5'>監(jiān)測</b>](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
【EsDA應(yīng)用】串口轉(zhuǎn)UDP服務(wù)器
![【<b class='flag-5'>EsDA</b>應(yīng)用】串口轉(zhuǎn)UDP服務(wù)器](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
【產(chǎn)品應(yīng)用】基于 EsDA MPC-ZC1 快速實(shí)現(xiàn) I2C采集監(jiān)測
![【產(chǎn)品應(yīng)用】基于 <b class='flag-5'>EsDA</b> MPC-ZC1 <b class='flag-5'>快速</b>實(shí)現(xiàn) <b class='flag-5'>I2C</b><b class='flag-5'>采集</b><b class='flag-5'>監(jiān)測</b>](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
數(shù)之能設(shè)備數(shù)據(jù)采集平臺(tái)如何搭建?有什么功能和應(yīng)用場景?
基于EsDA MPC-ZC1 快速實(shí)現(xiàn)I2C 監(jiān)控報(bào)警
![基于<b class='flag-5'>EsDA</b> MPC-ZC1 <b class='flag-5'>快速</b>實(shí)現(xiàn)<b class='flag-5'>I2C</b> 監(jiān)控報(bào)警](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
評(píng)論