本文将基于esda开发套件快速在开发板上搭建http服务器,为http客户端提供了访问板子的外设资源,数据以及文件读写等接口,实现设备与网络服务的互联互通。
项目简介
在物联网应用中,在开发板上搭建http服务器是一项很重要的技术,可以实现设备间的数据通信和远程控制。本文将介绍如何使用 epc6450-awi开发板 ,以及图形化设计工具awflow designer搭建http服务器,对设备数据进行远程访问和控制。
项目概述当客户端发送http请求时,服务器接收请求,并根据请求的内容做出相应的处理,如读写开发板资源的配置和数据,读写文件等操作。开发板搭建的http服务器,通过http协议与客户端进行通信。本文http服务器的项目可为客户端提供以下五个接口:
写内容到开发板的文件中;读开发板中的文件内容;提供读取adc通道的电压值;提供读取温湿度传感器的温度值和湿度值;提供设置modbus从站的寄存器值。本项目采用的modbus从站是模拟modbus从站设备的上位机modbus slave(工具使用请见【esda 应用】modbus rtu master 转 mqtt 的“3.2.4、modbus slave安装并使用”章节)。
前期准备
读者可以阅读以下文章对http通信和esda的一些基础项目操作进行熟络:
【esda 应用】快速实现串口转http请求
【esda应用】modbus应用详解
【esda应用】5分钟实现一个串口通信业务
【esda 应用】常用io设备节点详解
1. 硬件准备
在标有丝印为tf card 丝印的卡槽处,插入sd卡。在标有丝印为duart的调试串口模块上,将ttl转usb串口模块的tx与板子丝印为rxd连接,ttl转usb串口模块的rx与板子丝印为txd相连;并将ttl转usb串口模块的usb端口接入电脑。在标有丝印为type-c 的接口处,插上type-c线,并将type-c线的另一端usb口插入电脑。在标有丝印为net0 或 net1的rj45插座处接上网线的水晶头,网线另一端的水晶头插在pc的网络接口处。1.1 提供温湿度传感器值的接口项目
在标有丝印为 5v 的排针针脚处接上温湿度变送器的 dc5v_+ 引脚;在标有丝印为 gnd 的排针针脚处接上温湿度变送器的 dc5v_- 引脚;在标有丝印为 485a 的排针针脚处接上温湿度变送器的 rs485_a 的引脚;在标有丝印为 485b 的排针针脚处接上温湿度变送器的 rs485_b 的引脚上。
1.2 设置modbus从站寄存器值的接口项目
在标有丝印位 5v 的排针针脚处接上usb转485串口设备的 +5v 电源引脚;在标有丝印位 gnd 的排针针脚处接上usb转485串口设备的 gnd 接地引脚;在标有丝印位 485a 的排针针脚处接上usb转485串口设备的 rs485a引脚;在标有丝印位 485b 的排针针脚处接上usb转485串口设备的 rs485b引脚。
2. 网络搭建
打开串口调试助手,检索并打开ttl转usb串口模块的设备端口号后,使用shell命令ip addr,查看网口的ip地址,根据下图可知,本文使用的网口设备ip地址是192.168.137.251。
配置pc上的以太网的ip与开发板的ip地址在同一局域网下。在串口调试助手输入shell指令ping 192.168.137.223,ping成功即开发板可以单方面ping成功pc,若ping失败则可以关闭pc端的防火墙之后再尝试。电脑端执行 win+r 输入cmd 回车即可打开cmd命令提示符窗口,执行ping 192.168.137.251,ping成功则电脑可以单方面ping成功开发板。当开发板和pc可以互ping成功则联网成功。
项目实施1. 写文件接口
本接口业务主要是将写入的文件内容通过http客户端发送post请求上传到http服务器,服务器收到请求后做出相应处理。可分为以下四个部分:
用户在http客户端的body中编辑需要写入的文件内容;
http客户端设置服务器对应的url接口和请求方式,向开发板搭建的http服务器发送http请求;
http服务器监听指定端口,处理对应接口的请求并响应;
查看写入到文件的内容,检验是否成功通过开发板搭建的http服务器提供的接口,实现远程文件内容的输入。
1.1 流图绘制
添加http_in,fscript,http_out,timer,fscript和fileout节点到画布中并连线如下图。
1.2 节点配置
双击http_in节点,该节点主要是给http客户端提供一个post方法的写文件内容的接口,统一资源定位符可以根据用户需要更改。点击完成按钮即可保存配置。
点击http_server旁边的铅笔图标对http_server节点进行配置,通常情况下修改访问的端口号即可,点击更新按钮即可保存配置。
本项目其他的接口都是在同一个http服务器上处理,所以后续的接口添加新的http_in节点,直接选中之前配置好的http_server,不用再重新添加新的http_server节点(不用重新创建一个http_server)。后面的接口项目不再赘述。
双击http_in节点的消费者节点fscript,该节点主要是接收http客户端上传消息体的内容,并将接收写文件接口请求的标志位置一。点击完成按钮即可保存配置。
global.put_file_status = 1global.putfile = str(msg.payload,true)
双击http_out节点,可以根据用户实际需要设置响应码和消息头,本项目使用默认的就可以了。点击完成按钮即可保存配置。
双击timer节点,设置定时写入文件的周期时间。双击timer的消费者节点fscript,该节点主要是处理当写文件接口的http_in节点被触发时那么put_file_status(写文件标志位)置一,之后才将收到的请求体的内容写入文件中。
if(global.put_file_status == 1) { wb = wbuffer_create() wbuffer_write_string(wb,global.putfile)
output.payload = wbuffer_get_data(wb) output.payloadlength = len(global.putfile) global.put_file_status = 0}
双击fileout节点,可根据用户需要配置属性参数。因为本项目的数据来源是从前节点fscript的payload中获取的,所以属性数据来源选择payload选项。1.3 流图下载
绘制完流图后,点击ctrl+s 即可保存流图,点击下载流图。
在http客户端postman上发起写文件请求,http服务器收到请求后将写入的内容作为响应返回到客户端进行显示,并执行写文件的操作,在串口调试助手上输入cat flow/test.txt即可看到写入文件的内容。结果如下图所示则表示http服务器搭建写文件的接口已基本实现。
2. 读文件接口本接口业务主要是http客户端发送get方法的读文件请求,http服务器接收到请求之后将文件内容作为响应返回到客户端进行显示。可分为以下两个部分:
http客户端设置读文件的url接口和请求方式,向开发板搭建的http服务器发送http请求;
http服务器监听指定端口,接收到读文件的请求后将读文件标志位置一,等待读取文件内容,并将读到的内容作为响应发送到http客户端。
2.1 流图绘制
添加http_in,fscript,http_out,timer和filein节点到画布中并连线如下图。
2.2 节点配置双击http_in节点,该节点主要是给http客户端提供一个get方法的读文件内容的接口,统一资源定位符可以根据用户需要更改。点击完成按钮即可保存配置。
双击http_in的消费者节点fscript,该节点的主要功能是当http服务器接收到了来自客户端的读文件接口的请求,那么将读文件标志位(get_file_status)置一,延时等待读取文件的业务,最后将读取到的数据作为响应发送到http客户端。
global.get_file_status = 1sleep_ms(500)msg.payload = you get file data is +global.getfile
http_out节点在本项目中使用默认参数值即可。双击timer配置定时读文件的周期时间。
双击timer的消费者节点fscript,该节点主要是检测读文件标志位(get_file_status)置一时,设置filein节点的配置参数。点击完成即可保存配置。
if(global.get_file_status == 1) { set(msg.topic, exec:read_all) set(msg.payload, 4096) global.get_file_status = 0}
双击filein节点,配置需要读取的文件名。点击完成即可保存配置。
双击filein的消费者节点fscript,该节点主要是将filein节点读取出来的文件内容,赋值给可供其他节点访问的全局参数。点击完成即可保存配置。
global.getfile = str(msg.payload, true)
2.3 流图下载绘制完流图后,点击ctrl+s 即可保存流图,点击下载流图。
在postman中发送http客户端get方法的读文件请求,后续可以在响应报文部分看到由http服务器发出的读取文件内容的响应正文。结果如下图所示则表示http服务器搭建读文件的接口已基本实现。
3. 读取adc通道值的接口本接口业务主要是http服务器提供adc通道的电压值的接口,当http客户端发起该请求时,http服务器将采集到的adc通道电压值作为响应返回到http客户端进行显示。可分为以下两个部分:
http客户端设置服务器获取adc通道值的url接口和请求方式,向开发板搭建的http服务器发送http请求;http服务器监听指定端口,接收到对应接口的请求后将采集到的adc通道的电压值作为响应并发送到http客户端。3.1 流图绘制
添加http_in,fscript,http_out和adc节点到画布中并连线如下图。
3.2 节点配置双击http_in节点,该节点主要是给http客户端提供一个get方法的获取adc通道电压值的接口,统一资源定位符可以根据用户需要更改。点击完成按钮即可保存配置。
双击http_in的消费者节点fscript,该节点主要目的是将采集到的adc通道的电压值作为响应发送到http客户端。点击完成即可保存配置。
var a = adc status is + global.adc_valuewb = wbuffer_create()wbuffer_write_string(wb,a)msg.payload = wbuffer_get_data(wb)msg.payloadlength = len(a)
本项目中http_out节点使用默认配置即可。
双击adc节点,配置需要采集的通道号。点击完成即可保存配置。
双击adc的消费者节点fscript,该节点主要是将采集到的adc电压值赋值给全局变量,供其他节点使用。点击完成即可保存配置。
global.adc_value=adc value is :+ +msg.payload + mv
3.3 流图下载绘制完流图后,点击ctrl+s 即可保存流图,点击下载流图。
在postman中发送http服务器提供的采集adc通道值的接口请求,后续可以在响应部分看到http服务器返回的实时采集到的adc电压值。结果如下图所示则表示http服务器搭建的获取adc通道电压值的接口已基本实现。
4. 提供读取传感器值的接口本接口业务主要是http服务器提供温湿度传感器采集的温度和湿度值的接口,当http客户端发起该请求时,http服务器将采集的温湿度值作为响应返回到http客户端进行显示。可分为以下两个部分:
http客户端设置获取温湿度传感器值的url接口和请求方式,向开发板搭建的http服务器发送http请求;http服务器监听指定端口,接收到对应接口的请求后将采集到的温湿度值作为响应并发送到http客户端。4.1 流图绘制添加http_in,fscript,http_out,modbus_master_in和modbus_parse_in节点到画布中并连线如下图。
4.2 节点配置双击http_in节点,该节点主要是给http客户端提供一个post方法的接收温湿度传感器数据的接口,统一资源定位符可以根据用户需要更改。点击完成按钮即可保存配置。
双击http_in节点的消费者节点fscript,该节点主要处理是将采集到的温湿度传感器的值作为响应发送给http客户端。点击完成按钮即可保存配置。
msg.payload = global.temp_value
http_out节点配置在本项目中不需要任何更改,使用默认配置即可。双击modbus_master_in节点,配置温湿度传感器从站的相关配置信息如下。点击完成即可保存配置。
点击modbus_master_in节点的属性主机参数配置旁边的铅笔图标,因为是通过rs485进行modbus通信,所以选择rtu传输模式并选择对应的串口设备名,其他串口参数配置根据实际需要进行配置,点击更新即可保存配置。
双击modbus_parse_in节点,因为地址0是温度值,1是湿度值,所以配置节点参数如下所示。点击完成即可保存配置。
双击modbus_parse_in的消费者节点fscript,本节点主要是解析处理采集到的数据,并赋值给可供其他节点使用的全局变量。点击完成即可保存配置。
global.temp_value = temp:+array_get(msg.payload,0)/10+c, +humi:+array_get(msg.payload,1)/10+rh
4.3 流图下载绘制完流图后,点击ctrl+s 即可保存流图,点击下载流图。
在postman中发送http服务器提供的采集温湿度传感器值的接口请求,后续可以在响应部分看到http服务器返回的温度值和湿度值。结果如下图所示则表示http服务器搭建的获取温湿度传感器值的接口已基本实现。
5. 设置modbus从站寄存器值的接口本接口业务主要是将需要写入的modbus从站寄存器值通过http客户端发送post请求上传到http服务器,服务器收到请求后做出相应处理。可分为以下四个部分:
用户在http客户端的body中编辑需要写入的modbus从站寄存器值内容;
http客户端设置对应的url接口和请求方式,向开发板搭建的http服务器发送http请求;
http服务器监听指定端口,处理对应接口的请求并响应;
查看写入到modbus从站寄存器的内容,检验是否成功通过开发板搭建的http服务器提供的接口,实现modbus从站寄存器值的远程输入。
5.1 流图绘制
添加http_in,fscript,http_out,modbus_parse_out和modbus_master_out节点到画布中并连线如下图。
5.2 节点配置双击http_in节点,该节点主要是给http客户端提供一个post方法的设置modbus从站寄存器值的接口,统一资源定位符可以根据用户需要更改。点击完成按钮即可保存配置。
点击http_in的消费者节点fscript,该节点主要是处理将客户端发送的请求消息体解析为modbus_parse_out节点可以接收的类型。内容如下:
a = array_create();
str b = str(msg.payload,true)b = replace(b,',',:)data1 = one_of(b,1,:)data2 = one_of(b,3,:)data3 = one_of(b,5,:)array_insert(a, 0, u16(data1))array_insert(a, 1, u16(data2))array_insert(a, 2, u16(data3))
output.payload = a;output.slaveid = 1;output.address = 0;
本项目中http_out节点使用默认配置即可。
双击modbus_parse_out节点,配置需要从哪个寄存器开始写值。点击完成即可保存配置。
双击modbus_master_out节点,配置从机id和写入的寄存器类型。点击完成即可保存配置。
双击modbus_master_out节点的属性主机参数配置旁边的铅笔图标,因为是通过rs485进行modbus通信,所以选择rtu传输模式并选择对应的串口设备名,其他串口参数配置根据实际需要进行配置,点击更新即可保存配置。
5.3 流图下载绘制完流图后,点击ctrl+s 即可保存流图,点击下载流图。
在postman中发送http服务器提供的设置modbus从站寄存器值的接口请求,后续可以在modbus slave上位机中查看写入的寄存器的值。结果如下图所示则表示http服务器搭建的设置modbus从站寄存器值的接口已基本实现。
降压—升压电源设计中降压控制器的使用
华为Mate 30系列屏幕将由三星供货?
阀门试压装置的原理及设计
区块链智能合约的郊区房地产投资分散平台ECONEUARK介绍
“该充电还是换电”特斯拉和蔚来吵起来了
如何利用AWFlow搭建HTTP服务器
医疗电子强势崛起 企业掘金市场“富矿”
为什么在新一代双向OBC设计中选择SiC而非Si?
如何对工业平板电脑进行维护
中兴奋发图强 坚决自主开发研发5nm芯片
武极游戏PC整机开启促销,搭载8核i7-9700F处理器
雷蛇Blade新年硬件换血 它仍是颜值最高的游戏本
2012 LED照明前景
智慧交通是怎样催生新业态的
小米MIX3评测 完全沦为另一台撞面手机
当无凸轮轴发动机真的装在车上时,究竟实际效果如何?
乐视宣布电视产业史最大收购计划 三年颠覆格局?
聚焦云栖大会黑科技 电子商务消亡后如何飞天
英特尔今年资本支出 超越三星台积
自动酶标仪是什么,它的工作原理是怎样的