本文介紹如何通過EsDA開發(fā)套件,快速熟悉常用IO設(shè)備節(jié)點(diǎn)及其使用方法,大大縮短了用戶對EsDA的學(xué)習(xí)開發(fā)周期。
本文選用EPC6450-AWI開發(fā)板,以及圖形化設(shè)計(jì)工具AWFlow Designer進(jìn)行測試講解,對常用IO設(shè)備節(jié)點(diǎn)和使用方法進(jìn)行詳細(xì)說明。
前期了解
對AWFlow工具以及AWFlow理論并不了解的,可以點(diǎn)擊AWFlow文檔進(jìn)行學(xué)習(xí):https://awtk.zlg.cn/pro/docs/AWFlow/
對AWFlow有一定的了解但是對EsDA和相關(guān)節(jié)點(diǎn)的綜合應(yīng)用并不了解的,可以點(diǎn)擊Z站的EsDA專欄進(jìn)行學(xué)習(xí):https://z.zlg.cn/specialInfo?id=134
常用節(jié)點(diǎn)簡介
本文將對gpio引腳電平操作的gpio節(jié)點(diǎn),gpio_in節(jié)點(diǎn),gpio_out節(jié)點(diǎn)三個節(jié)點(diǎn),對led燈操作的led節(jié)點(diǎn),對按鍵操作的button節(jié)點(diǎn),對adc通道采集的adc節(jié)點(diǎn)進(jìn)行詳細(xì)描述。
1. gpio節(jié)點(diǎn)
1.1 查看幫助文檔
在搜索框中輸入gpio關(guān)鍵字即可檢索出gpio節(jié)點(diǎn),點(diǎn)擊gpio節(jié)點(diǎn)即可看到右邊彈出gpio節(jié)點(diǎn)的幫助文檔界面,里面包含節(jié)點(diǎn)的簡介以及屬性,輸入和輸出的相關(guān)參數(shù)介紹。用戶可以在此操作下找尋相關(guān)節(jié)點(diǎn)的幫助文檔去了解節(jié)點(diǎn)的相關(guān)參數(shù)。
此節(jié)點(diǎn)將屬性值“GPIO序號”配置為GPIO輸入模式。因該節(jié)點(diǎn)為filter類型節(jié)點(diǎn),所以有1輸入1輸出,當(dāng)本節(jié)點(diǎn)輸入值msg.payload不為0時,則讀取屬性值“GPIO序號”的電平值作為輸出;若輸入值msg.payload為0則不將讀取到的引腳電平值進(jìn)行輸出傳遞,此時無輸出。1.2 屬性
- 名稱:可用于索引查找本節(jié)點(diǎn);顯示名稱:用于畫布上顯示的名稱,僅做顯示;GPIO序號:對需要操作的GPIO引腳序號進(jìn)行選定,此引腳序號與目標(biāo)板的絲印一一對應(yīng);模式:設(shè)置GPIO序號引腳的輸入模式,float是浮空輸入,pull up是輸入上拉,pull down是輸入下拉。
1.3 輸入
msg.payload :不為0則表示讀取屬性值“GPIO序號”的電平值,為0則不將讀取到的電平值進(jìn)行輸出傳遞給下一個節(jié)點(diǎn)。
所有節(jié)點(diǎn)的輸入?yún)?shù)都是由上級節(jié)點(diǎn)的輸出提供的,且通常為msg對象攜帶的對應(yīng)屬性參數(shù)。
1.4 輸出
msg.payload:輸出的數(shù)據(jù),需要注意的是只有當(dāng)輸入的msg.payload不為0時才有輸出,0表示讀取屬性值“GPIO序號”的電平值為低電平,1表示讀取到的是高電平。
1.5 加載demo示例
在相關(guān)節(jié)點(diǎn)的幫助文檔旁邊有一個示例,點(diǎn)擊后則可以看到對應(yīng)的節(jié)點(diǎn)demo示例,選中查看的demo示例,并加載到項(xiàng)目中即可查看。
1.6 自定義demo1.6.1 繪制流圖添加timer,fscript,gpio,fscript節(jié)點(diǎn)到畫布中并連線如下圖。
1.6.2 節(jié)點(diǎn)配置timer節(jié)點(diǎn)周期性的觸發(fā)fscript節(jié)點(diǎn),需要更改周期性的時長可雙擊timer節(jié)點(diǎn),修改屬性值“定時周期”即可。而fscript節(jié)點(diǎn)作為gpio的上級節(jié)點(diǎn),那么傳遞的則是gpio的輸入值,在此希望能周期性的讀取電平值,所以msg.payload的值不為0即可,gpio的上級節(jié)點(diǎn)fscript的內(nèi)容:
msg.payload = 666
雙擊gpio節(jié)點(diǎn),選擇目標(biāo)板對應(yīng)絲印的GPIO序號,在此選擇的模式是浮空輸入如下圖。
gpio節(jié)點(diǎn)的消費(fèi)者fscript節(jié)點(diǎn)作為輸出,直接打印gpio節(jié)點(diǎn)的輸出值顯示電平值即可,gpio節(jié)點(diǎn)的消費(fèi)者fscript節(jié)點(diǎn)內(nèi)容如下:
print("read gpio level value is "+msg.payload)
關(guān)于timer,fscript節(jié)點(diǎn)的介紹可參考AWFlow節(jié)點(diǎn)使用手冊:
https://awtk.zlg.cn/pro/docs/AWFlow/1.6.3 下載驗(yàn)證
將此流圖下載到目標(biāo)板后,連接調(diào)試串口后,打開串口助手,改變UTX5的電平值可得到如下顯示:
2. gpio_in節(jié)點(diǎn)
將GPIO配置為輸入模式,并輪詢讀取電平狀態(tài)且將其作為輸出值。與gpio節(jié)點(diǎn)功能類似,都是配置為輸入模式且可以將讀取到的電平值作為輸出,只不過gpio_in是不間斷循環(huán)的輸出?,并且gpio節(jié)點(diǎn)還加了一個是否開啟讀電平的輸入。
2.1 屬性
名稱:可用于索引查找本節(jié)點(diǎn);
顯示名稱:用于畫布上顯示的名稱,僅做顯示;
GPIO序號:對需要操作的GPIO引腳序號進(jìn)行選定,此引腳序號與目標(biāo)板的絲印一一對應(yīng);
模式:設(shè)置GPIO序號引腳的輸入模式,float是浮空輸入,pull up是輸入上拉,pull down是輸入下拉;
輪詢:是否開啟以設(shè)定值去輪詢的讀取GPIO序號的電平狀態(tài),off則關(guān)閉用設(shè)定值去輪詢讀取電平狀態(tài)而使用默認(rèn)的50ms去輪詢讀取,on則以設(shè)定值去輪詢讀取電平狀態(tài)值;
輪詢間隔(ms):以設(shè)定值去輪詢讀取電平狀態(tài),設(shè)置生效的前提是輪詢需為on。
2.2 輸出
-
- msg.payload:屬性值“GPIO序號”的電平狀態(tài)值,0為低電平,1為高電平;
msg.topic:固定輸出gpio_in字符串。
pump類型節(jié)點(diǎn)無輸入,相關(guān)類型節(jié)點(diǎn)介紹可查看AWFlow節(jié)點(diǎn)開發(fā)指南進(jìn)行更多的了解。
2.3 使用方法
2.3.1 繪制流圖
添加timer,fscript,log節(jié)點(diǎn)到畫布中并連接如下圖所示:
2.3.2 節(jié)點(diǎn)配置雙擊gpio_in節(jié)點(diǎn),選擇目標(biāo)板對應(yīng)絲印的GPIO序號,在此選擇的模式是浮空輸入,開啟以設(shè)定值2000ms去輪詢讀取gpio電平狀態(tài)值如下圖所示。
gpio_in節(jié)點(diǎn)的消費(fèi)者節(jié)點(diǎn)fscript是對gpio_in的輸出參數(shù)進(jìn)行輸出顯示,內(nèi)容如下:
msg.payload = "read gpio status is " + msg.payload + "n" + "msg.topic:"+msg.topic
用log節(jié)點(diǎn)對上一級節(jié)點(diǎn)的msg.payload輸出到調(diào)試窗口進(jìn)行顯示。
2.3.3 下載驗(yàn)證
將此流圖以下載運(yùn)行的模式下載到目標(biāo)板后,可在AWFlow Designer的調(diào)試窗口查看到如下信息:
3. gpio_out節(jié)點(diǎn)
配置為GPIO輸出,將輸入的msg.payload的值設(shè)置為GPIO的電平值。
3.1 屬性
名稱:可用于索引查找本節(jié)點(diǎn);
顯示名稱:用于畫布上顯示的名稱,僅做顯示;
GPIO序號:對需要操作的GPIO引腳序號進(jìn)行選定,此引腳序號與目標(biāo)板的絲印一一對應(yīng);
模式:設(shè)置GPIO輸出模式,push pull為推挽輸出模式,open drain為開漏輸出模式;
GPIO初始狀態(tài):設(shè)置GPIO初始輸出的狀態(tài)值,0為低電平,1為高電平。
3.2 輸入
msg.payload:設(shè)置屬性GPIO序號的輸出電平值,0為低電平,1為高電平,2為電平翻轉(zhuǎn)。
sink類型節(jié)點(diǎn)無輸出。
3.3 使用方法
3.3.1 繪制流圖添加timer,fscript,gpio_out節(jié)點(diǎn)到畫布中,并連線如下圖所示。
3.3.2 節(jié)點(diǎn)配置timer節(jié)點(diǎn)周期性定時觸發(fā)fscript節(jié)點(diǎn),這里的timer的屬性定時周期值配置為3000ms,而fscript節(jié)點(diǎn)作為gpio_out節(jié)點(diǎn)的上一級節(jié)點(diǎn),主要內(nèi)容是設(shè)置gpio_out的輸入?yún)?shù),內(nèi)容如下:
if(((msg.payload/1000)%2)==0) {
msg.payload = 0
print("low leveln")
}else {
msg.payload = 1
print("high leveln")
}
雙擊gpio_out節(jié)點(diǎn),選擇目標(biāo)板對應(yīng)絲印的GPIO序號,在此選擇的模式是推挽輸出。
3.3.3 下載驗(yàn)證
下載流圖到目標(biāo)板后,可以用萬用表去查詢GPIO序號對應(yīng)的引腳電平值可知,電平是周期性的翻轉(zhuǎn)。
4. led節(jié)點(diǎn)
該節(jié)點(diǎn)主要有兩種模式,一種是設(shè)置led燈的狀態(tài),一種是設(shè)置快閃燈。
4.1 屬性
名稱:可用于索引查找本節(jié)點(diǎn);
顯示名稱:用于畫布上顯示的名稱,僅做顯示;
led設(shè)備名稱:Led設(shè)備名稱,可根據(jù)不同的目標(biāo)板對應(yīng)絲印進(jìn)行設(shè)備選擇;
初始狀態(tài):對選中的led的設(shè)備設(shè)置初始狀態(tài)值,0為led燈的初始狀態(tài)為滅,1為led燈的初始狀態(tài)為亮。
4.2 輸入
-
- msg.device_name:led設(shè)備名稱,將與屬性值“l(fā)ed設(shè)備名稱”進(jìn)行對比,若不同則該節(jié)點(diǎn)功能無效;msg.payload:模式一,設(shè)置led的狀態(tài)值。0為關(guān)閉led燈,1為開啟led燈,2為翻轉(zhuǎn)led燈;msg.timer:模式二,快閃燈。該輸入?yún)?shù)為設(shè)置定時閃爍的時間,單位ms,若為0則關(guān)閉快閃,大于0則設(shè)置閃爍間隔時間;
msg.fast_blink:模式二,快閃燈。設(shè)置定時快閃的次數(shù),在定時閃爍周期中的快閃次數(shù),輸入?yún)?shù)msg.timer與msg.fast_blink需同步設(shè)置才能生效。
sink類型節(jié)點(diǎn)無輸出。
4.3 設(shè)置燈狀態(tài)示例
4.3.1 繪制流圖
添加timer,fscript,led節(jié)點(diǎn)到畫布中并連線如下圖所示:
4.3.2 節(jié)點(diǎn)配置
timer節(jié)點(diǎn)周期性的去設(shè)置led燈的狀態(tài)值,fscript節(jié)點(diǎn)作為led的上一級節(jié)點(diǎn),其內(nèi)容主要是對led設(shè)備狀態(tài)的設(shè)置:
msg.payload = 2
雙擊led節(jié)點(diǎn),在屬性“l(fā)ed設(shè)備名稱”的下拉框中選擇對應(yīng)絲印的LED設(shè)備如下:
4.3.3 下載驗(yàn)證下載流圖后可看到RUN燈周期性的3s翻轉(zhuǎn)一次。
4.4 快閃燈示例
4.4.1 繪制流圖
添加gpio_in,fscript,led節(jié)點(diǎn)到畫布,并連線如下圖所示:
4.4.2 節(jié)點(diǎn)配置
雙擊gpio_in節(jié)點(diǎn),本節(jié)點(diǎn)主要作用就是運(yùn)行流圖后只觸發(fā)一次fscript節(jié)點(diǎn),所以要開啟定時輪詢,且輪詢間隔需設(shè)置盡量大一點(diǎn)如下圖所示:
fscript節(jié)點(diǎn)作為led的上一級節(jié)點(diǎn),主要內(nèi)容是led相關(guān)的輸入?yún)?shù),內(nèi)容如下:
if(msg.payload == 0) {
msg.timer = 2000
msg.device_name = "/dev/led_run"
msg.fast_blink = 2
print("fast ledn")
}
雙擊led節(jié)點(diǎn),在屬性“l(fā)ed設(shè)備名稱”的下拉框中選擇對應(yīng)絲印的LED設(shè)備如下:
4.4.3 下載驗(yàn)證
下載流圖到目標(biāo)板后,對gpio_in節(jié)點(diǎn)配置的引腳進(jìn)行電平置低,5s內(nèi)切換到高電平后即可看到led燈2s閃爍2次的實(shí)驗(yàn)現(xiàn)象。
5. button節(jié)點(diǎn)
5.1 屬性
- 名稱:可用于索引查找本節(jié)點(diǎn);顯示名稱:用于畫布上顯示的名稱,僅做顯示;對應(yīng)的GPIO編號:對需要操作的GPIO引腳序號進(jìn)行選定,此引腳序號與目標(biāo)板的絲印一一對應(yīng);觸發(fā)條件:按鈕按下時的觸發(fā)條件,fall表示按鈕按下的觸發(fā)條件為GPIO下降沿觸發(fā),up表示按鈕按下的觸發(fā)條件為GPIO上升沿觸發(fā)。
5.2 輸出msg.payload :按鈕按下狀態(tài)輸出為on,松開狀態(tài)輸出為off,在初始化完成以及按鈕狀態(tài)發(fā)生改變的時候會輸出當(dāng)前的狀態(tài)。
pump類型節(jié)點(diǎn)沒有輸入。
5.3 使用方法
5.3.1 繪制流圖
添加button,fscript,led節(jié)點(diǎn)到畫布中并連線如下圖所示:
5.3.2 節(jié)點(diǎn)配置
雙擊button節(jié)點(diǎn),對需要操作的引腳進(jìn)行選擇如下:
fscript節(jié)點(diǎn)作為button的消費(fèi)者節(jié)點(diǎn),內(nèi)容是button的相關(guān)輸出參數(shù):
if(msg.payload == "on"){
? ?msg.payload = 1
}else if(msg.payload == "off") {
? ?msg.payload = 0
}
雙擊led節(jié)點(diǎn),選擇閃燈的led設(shè)備。
5.3.3 下載驗(yàn)證
下載流圖后,對button配置的按鈕進(jìn)行按下和松開的操作可以看到相應(yīng)led燈的效果。
6. adc節(jié)點(diǎn)
6.1 屬性
- 名稱:可用于索引查找本節(jié)點(diǎn);顯示名稱:用于畫布上顯示的名稱,僅做顯示;通道號:進(jìn)行采樣的ADC通道號,可根據(jù)不同的目標(biāo)板對應(yīng)絲印進(jìn)行設(shè)備選擇;采集次數(shù):ADC 通道對ADC值的采集次數(shù);采樣率:ADC通道號采樣率(每秒ADC的采樣次數(shù))。
6.2 輸出
-
- msg.payload:通道采樣的最終電壓值(mv);msg.vref:基準(zhǔn)電壓;msg.bits:ADC通道位數(shù);
msg.rate:ADC通道采樣率。
pump類型節(jié)點(diǎn)沒有輸入。
6.3 使用方法
6.3.1 繪制流圖
添加adc,fscript,log節(jié)點(diǎn)到畫布中并連線。
6.3.2 節(jié)點(diǎn)配置
雙擊adc選擇對應(yīng)絲印的ADC設(shè)備如下:
fscript節(jié)點(diǎn)作為adc的消費(fèi)者節(jié)點(diǎn),其內(nèi)容主要是adc的相關(guān)輸出參數(shù):
msg.payload = "adc value is "+msg.payload
log節(jié)點(diǎn)對上一級fscript節(jié)點(diǎn)進(jìn)行輸出顯示。6.3.3 下載流圖
下載流圖后,對adc配置的通道號進(jìn)行不同電壓值的采樣結(jié)果如下: