当前位置:首页 » 《随便一记》 » 正文

阿里云开发板HaaS510响应UART串口指令_拓思创测控的博客

18 人参与  2021年12月30日 16:49  分类 : 《随便一记》  评论

点击全文阅读


摘要:开发物联网设备时,常用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 - 串口icon-default.png?t=L892https://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开发环境搭建icon-default.png?t=L892https://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的简便性体现的更加明显。

下一步,我们将实现串口获取的数据直接报送到云平台。


点击全文阅读


本文链接:http://zhangshiyu.com/post/32418.html

串口  接收  指令  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1