当前位置:网站首页>阿里云开发板HaaS510响应UART串口指令
阿里云开发板HaaS510响应UART串口指令
2022-06-12 13:45:00 【TMS320VC5257H】
摘要:开发物联网设备时,常用MCU+物联网模块的硬件结构,HaaS510就是一款非常好的物联网模块。本文与大家分享HaaS510在成功上云基础上,如何响应UART串口指令。

实验目的:通过haas510接收上位机发来的串口指令,通过DEBUG串口显示出来。
硬件:haas510 (2.0版本),USB串口
软件:win7 x64,vscode
目录
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
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
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的简便性体现的更加明显。
下一步,我们将实现串口获取的数据直接报送到云平台。
边栏推荐
- Innovation training (XII) project summary
- 上海解封背后,这群开发者“云聚会”造了个AI抗疫机器人
- Seeking magic square of order n with C language
- VGA display color bar and picture (FPGA)
- 618 entered the second half of the period, apple occupied the high-end market, and the domestic mobile phones finally undercut the price competition
- The problem of Joseph in Informatics
- 高通平台开发系列讲解(协议篇)QMI简单介绍及使用方法
- 开发中使用的语言技巧
- Codeforces 1637 F. Towers - thinking, DFS
- jsp跳转问题,不能显示数据库数据,并且不能跳转
猜你喜欢

Is MySQL query limit 1000,10 as fast as limit 10? How to crack deep paging

Web3.0, the era of "stimulating creativity"

Pytorch to onnx, onnxruntime reasoning in mmclas
Introduction to color coding format

Formal analysis of Woo Lam protocol with scyther tool

xcode 调试openGLES

618进入后半段,苹果占据高端市场,国产手机终于杀价竞争

Codeforces 1629 F2. Game on sum (hard version) - Yang Hui's triangle, violence, finding rules
![[Title brushing] Super washing machine](/img/f9/0c69afafa8b32afc5df5e91d6af172.png)
[Title brushing] Super washing machine

Octopus network progress monthly report | may 1-May 31, 2022
随机推荐
Successfully rated Tencent t3-2, 10000 word parsing
D1 哪吒开发板 了解基本的启动加载流程
Wechat web developer tools tutorial, web development issues
Introduction to color coding format
A method of quickly creating test window
Recursion of subviews of view
Pytorch to onnx, onnxruntime reasoning in mmclas
基于华为云鲲鹏弹性云服务器ECS部署openGauss数据库【这次高斯不是数学家】
Real time software source code of COVID-19
jupyternotebook有汉字数据库吗。在深度学习中可以识别手写中文吗
NVIDIA Jetson Nano Developer Kit 入门
Is MySQL query limit 1000,10 as fast as limit 10? How to crack deep paging
Dameng database DM8 Windows environment installation
Transmission and response of events and use cases
Formal analysis of Woo Lam protocol with scyther tool
2068: [example 2.6] chicken and rabbit in the same cage
Possible solutions to problems after CodeBlocks installation
jsp跳转问题,不能显示数据库数据,并且不能跳转
Tensorrt, onnx to tensorrt in mmclas
安装MySQL时出错,照着下面这个链接,做到cmd就不行了