摘要:開發物聯網設備時,常用MCU+物聯網模塊的硬體結構,HaaS510就是一款非常好的物聯網模塊,本文與大家分享HaaS510在成功上云基礎上,如何回應UART串口指令,

實驗目的:通過haas510接收上位機發來的串口指令,通過DEBUG串口顯示出來,
硬體:haas510 (2.0版本),USB串口
軟體:win7 x64,vscode
目錄
1.HaaS510板子上的串口有幾個?
2.接收串口指令并發送出去的原理
3.amp輕應用關于串口的使用方法
4.撰寫串口回應代碼
5.觀察運行效果
1.HaaS510板子上的串口有幾個?
開發板上的串口有2個,分別是用戶串口MAIN UART和除錯串口DEBUG UART,

HaaS510是基于EC600S開發的,它對外引出的串口就是EC600S的串口,EC600S模塊對外引出的是郵票孔,此外還有底部的焊盤,如下圖紅框所示,EC600S模塊的引腳中,向外提供了2個串口,其中一個是除錯,另一個是用戶使用,

由于EC600S已經將必要的電路都封裝到了兼顧的金屬殼內,因此使用這兩個串口的話,僅僅需要將線引到相應的接線端子上,阿里云開發板采用的接線端子是XH2.54,

2.接收串口指令并發送出去的原理
作者繪制了一個簡圖,用來說明串行通信的基本程序,在不同的MCU編程時,代碼不盡相同,但是核心的內容都是一樣的,就是依次接收,接收的時候有緩沖區,緩沖區滿了會有中斷,中斷之后就要回應,可能還會有資料校驗等內容,往往一串字串的接收和處理就需要幾十行的代碼來完成,
本實驗的目的是為了實作HaaS510接收上位機發來的指令,接收到指令之后,我們就可以對這些指令進行決議,或者作為資料上傳到物聯網平臺,為了觀察到資料是否接收正確,我們采取的方式是接收之后再通過串口發送出來,假如發來的收到的相同,那么就證明實驗成功,

3.amp輕應用關于串口的使用方法
使用“低代碼”開發的我們當然不愿意用過多的陳述句來搞定一個古老的串口,
HaaS團隊已經幫我們做好了,
就用JavaScript,
官方API幫助檔案連接是
uart - 串口
https://help.aliyun.com/document_detail/268752.html
由于JavaScript語言是采用事件驅動的機制來回應用戶操作的,阿里云已經幫我們將UART時間與底層驅動除錯好了,
所以,我們就可以通過非常簡單的JavaScript陳述句,回應上位機或者其他MCU發來的串口指令事件,就可以實作復雜的串行通信程序,
在HaaS中,這個事件的名字是“data”,名如其事,串口上傳遞的的確是“data”,
對該事件進行編程的參考操作是:

4.撰寫串口回應代碼
本實驗的目的是通過haas510接收上位機發來的串口指令,通過DEBUG串口顯示出來,
我們在一個HaaS510成功上云并且上報屬性的例程基礎上進行除錯,這樣便于下一步將串口接收的資料上云,
代碼如下:
var iot = require('iot');
var network = require('network');
var uart = require('uart');
var net = network.openNetWorkClient();
/* 設備三元組資訊獲取請參考common目錄下的iot組件說明 */
var productKey = 'gcXXXXXvu2';
var deviceName = 'cewSSSSS001';
var deviceSecret = 'ee213aSSSSSSSSSadcdedb3a9';
// 構建物聯網連接實體
var device;
var lightSwitch = 0;
// 打開用戶串口,在HaaS中,用戶串口號是UART2
var serial = uart.open({
id: 'UART2'
});
var msgbuf = [97, 98, 99, 100];
function ArrayToString(fileData) {
var dataString = "";
for (var i = 0; i < fileData.length; i++) {
dataString += String.fromCharCode(fileData[i]);
}
return dataString;
}
//net.on用來使用三元組資料連接物聯網平臺,核心是實作了一個MQTT客戶端
net.on('connect', function () {
device = iot.device({
productKey: productKey,
deviceName: deviceName,
deviceSecret: deviceSecret,
region: 'cn-shanghai',
success: function () {
console.log('iot: [success] connect');
},
fail: function () {
console.log('iot: [failed] connect');
}
});
})
//定時程式,這個程式實作的是5秒鐘定時,每次都翻轉主燈開關的狀態,向用戶串口發送一個陣列資料
//再將主燈開關狀態發送到物聯網平臺
setInterval(function () {
lightSwitch = 1 - lightSwitch;
// user uart send data
serial.write(msgbuf);
/* 錯誤示范 iot.postProps({
payload: {LightSwitch:'0'}
})*/
/*正確示范,要想發送屬性,就得使用stringify才行*/
device.postProps(
JSON.stringify({
LightSwitch: lightSwitch
})
);
}, 5000);
// serial.on用于回應串口資料接收事件,用戶串口接收啥,就通過除錯串口發送啥,
//注意,兩個串口不是同一個,
serial.on('data', function(data) {
console.log('uart receive data is ' + ArrayToString(data));
});
5.觀察運行效果
我們想實作的效果是在設備上云在線基礎上,接收上位機或者MCU發來的串口指令,
首先將硬體與電腦連接,在此我們使用2個串口,

然后燒錄程式,燒錄的方法請參考文章
阿里云開發板vscode開發環境搭建
https://blog.csdn.net/youngwah292/article/details/120356887?spm=1001.2014.3001.5501
打開物聯網平臺,查看設備是否在線

再觀察是否間隔5秒鐘上報屬性,發現是可以正常上報屬性的,

接下來打開2個串口助理,分別對應用戶串口和除錯串口,經過實驗發現,達到了想要的效果,接收的資訊完整、準確,

核心的代碼其實只有一句話,就這樣一句話,就能夠實作HaaS510時刻盯著用戶串口上的資料,一旦有資料,就發送出來,
serial.on('data', function(data) {
console.log('uart receive data is ' + ArrayToString(data));
});
在工程應用中,使用串口外接物聯網模塊的結構非常常見,公司原有的硬體工程師可以專注于硬體功能的研發,設備上云的時候,只需要外接一塊物聯網模塊就行了,需要在云上發送什么資料,直接通過串口將指令發送出去,
這種結構的物聯網設備有一個缺點,就是結構松散,可靠性不是特別高,例如用AT指令形式的物聯網模塊,操作起來需要多個步驟才能上云,如果要上報屬性,需要經過復雜的字串運算才能獲得云端設定所需的效果,
而是用HaaS510就可以彌補這個缺點,HaaS510只需幾個陳述句就能實作設備上云,
今天我們又學到了使用1個陳述句就能實作串口指令的接收,HaaS的簡便性體現的更加明顯,
下一步,我們將實作串口獲取的資料直接報送到云平臺,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/301594.html
標籤:其他
