首页 / 一种基于物联网嵌入式图形化编程开发方法、设备及介质

一种基于物联网嵌入式图形化编程开发方法、设备及介质公开 发明

技术领域

[0001] 本发明涉及物联网和嵌入式系统开发领域,尤其涉及一种基于物联网嵌入式图形化编程开发方法、设备及介质。

相关背景技术

[0002] 随着微控制器技术的快速发展,ARM Cortex‑M/A系列、STM32、ESP8266、树莓派等小型低功耗微控制器越来越普及。这些微控制器为需要嵌入式控制的各种设备提供了强大的计算能力和通信接口。
[0003] 物联网的快速发展对小型嵌入式设备提出了更高的要求,需要设备具有更强的通信、处理和编程能力。传统的汇编语言和C语言编程在功能和开发效率上相对受限,急需一种更高级、更易学的编程语言。
[0004] Python凭借其简单易学、功能强大的特点,在各行各业广泛应用,成为了最流行的编程语言之一。将Python移植到小型微控制器上,可以为物联网开发提供一种全新的编程方式。
[0005] 传统的嵌入式系统编程模式,基于C语言的固件开发,对开发人员的要求相对较高,需要深入的硬件知识。现有嵌入式编程模式存在以下问题:
[0006] 1、开发效率低和学习难度大:嵌入式系统开发往往需要编写大量底层代码和驱动相关的外设接口,开发周期长且调试复杂;
[0007] 2、嵌入式系统具有不同的硬件接口和驱动,传统开发需要为每个接口编写特定的代码,难以实现模块化设计和重用。
[0008] 3、随着嵌入式技术的发展,新硬件平台和新技术不断涌现,传统开发工具都是各个芯片厂家各自独立开发,如果用到多款芯片需要下载配套厂家的开发环境,工具繁多,难以快速支持新技术。

具体实施方式

[0109] 下面结合附图和实施例,对本发明作进一步的详细描述。特别指出的是,以下实施例仅用于说明本发明,但不对本发明的范围进行限定。同样的,以下实施例仅为本发明的部分实施例而非全部实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
[0110] 请参见图1,本发明的一种基于物联网嵌入式图形化编程开发方法,包括如下步骤:
[0111] 步骤1、创建包含Blockly框架的图形化编程系统应用,并在图形化编程系统应用上添加依赖库和进行页面布局和初始化配置;
[0112] 图形化编程系统应用支持图形化和支持拖拉拽模块编程的方式实现Modbus_RTU协议的设备通信、串口‑RS485通信、NetManage网络管理、Home Assiatant智能家居平台通信、ThingBoard平台的通信和输入/输出GPIO控制;开发者可以使用预先生成的图形化模板、组件和其他工具来创建软件应用程序,显著降低人工编写的代码总量和代码的复杂度;
[0113] 采用Blockly框架的图形化编程系统应用,Blockly是一个由Google开发的可视化编程框架,它允许开发者在Web和移动应用程序中添加基于块的代码编辑器。这个编辑器使用类似拼图的图形块来表示编程概念,比如变量、逻辑表达式、循环等,使得用户可以在不关注语法细节的情况下,直接按照编程原则进行编程。
[0114] 在本实施例中,所述步骤1具体包括:
[0115] 步骤11、创建图形化编程系统应用,在所述图形化编程系统应用中添加Blockly框架和相关依赖库,使用NPM(即Node Package Manager,是Node.js的官方包管理工具,用于安装、发布、管理JavaScript包和依赖关系)运行命令(npminstall‑‑save blockly,该命令是用于在Node.js项目中安装Blockly框架,并将其添加到项目的依赖列表中)来安装Blockly框架和相关依赖库;
[0116] 步骤12、对Blockly框架进行配置:
[0117] Blockly框架的基础配置:引入Blockly框架,在项目的HTML文件(HyperText Markup Language,用于创建网页的标准标记语言,通过使用一系列的标签来告诉浏览器如何显示网页内容)中导入Blockly框架的JavaScript文件(是一种包含JavaScript代码的文件);
[0118] 添加基本的工作区:在HTML文件中定义一个div元素(是HTML中非常常用的一个块级元素,它用于作为一个容器来包装其他HTML元素),用来放置Blockly工作区,并初始化配置,包括网格大小、滚动条和工具箱位置;
[0119] 设置工具箱(Toolbox):设计和添加工具箱(拖拽区域),包括Blockly框架支持的基本块(如逻辑、循环、数学等);
[0120] 添加实时预览:设置预览窗口,显示生成代码的实时效果;
[0121] 步骤13、通过pnpm build(pnpm build是一个命令,通常在Node.js项目中使用,它用于构建或编译项目代码)编译构建工程,如果没有报错,则通过web服务器启动前端web应用,启动后,通过浏览器访问网址(http://localhost:30080),在本地验证Blockly框架的开发环境是否成功导入,验证成功后,进入步骤14;
[0122] 步骤14、将Blockly框架的核心脚本文件blockly_compressed.js(是Blockly框架的核心压缩文件,它包含了Blockly框架的主要功能,经过压缩以减少文件大小,加快加载速度)添加到应用程序代码中进行加载;
[0123] 步骤15、注入可调整尺寸的工作区:将blocklyDiv元素(用于在网页中承载Blockly工作区的一个HTML
元素。它是Blockly的核心组件之一,负责显示可视化编程界面)放在blocklyArea元素(用于表示包含Blockly编辑器区域的HTML
元素的ID。这个元素通常用于定义Blockly工作区在页面上的显示区域)上并从blocklyDiv元素中删除任何height和width样式并添加绝对定位;
[0124] 步骤16、将注入脚本替换为将blocklyDiv置于blocklyArea上的脚本,代码生成器生成代码并导入Blockly框架/JavaScript文件;
[0125] 步骤17、引入Blockly框架之后,再引入代码生成包括python_compressed.js(用于生成Python代码的压缩文件)的文件描述;至此完成了图形化编程系统应用的初始化配置。
[0126] 图形化编程系统应用通过统一的图形模块,通过图拉拽的形式实现了代码开发生成和部署平台;将可视代码编辑器添加到Web应用程序的库。使用了Blockly开源框架,编辑器使用互锁的图形块来表示代码概念,如变量、逻辑表达式、循环等。
[0127] 步骤2、在所述图形化编程系统应用上构建不同功能的图形块组件,并确定所需图形块:
[0128] S1、构建ModbusRTU(是一种广泛应用于工业自动化领域的串行通信协议)功能的图形块组件,根据ModbusRTU工业协议的工作业务流程进行任务型图形块的需求分析,确定所需图形块,所需图形块包含任务型图形块和语句型图形块;
[0129] ModbusRTU_Tools图形块类:该图形块类是一种基于串行通信的工业协议,广泛用于工业自动化和控制系统。它采用主从架构,主设备(如PLC或计算机)可以与多个从设备(如传感器、执行器)进行数据交换。Modbus RTU使用紧凑、高效的数据帧,数据通过串行线路传输,支持多达247个从设备。通信由主设备发起,从设备通过唯一地址识别请求并作出响应。通信速率较高,通常使用CRC校验保证数据完整性。Modbus RTU特别适用于需要在低带宽、长距离环境中进行实时数据传输的场合,如监控和控制设备的运行状态、传感数据采集和远程操作。其广泛用于工业自动化、楼宇管理、能源监控等领域。
[0130] 在本实施例中,如图2所示,所述步骤S1具体包括:
[0131] 步骤S11、构建ModbusRTU_Tools(工具)图形块类;
[0132] 步骤S12、在所述ModbusRTU_Tools图形块类中加入ModbusRTU协议的功能函数图形块,包括:功能码01图形块read_coils(读取线圈)、功能码02图形块read_discrete_inputs(读取离散输入)、功能码03图形块read_holding_registers(读取保持寄存器)、功能码04图形块read_input_registers(读取输入寄存器)、功能码05图形块write_single_coil(写单个线圈)、功能码06图形块write_single_registers(写单个寄存器)和功能码16块write_multi_registers(写多个寄存器);这些功能码在Modbus RTU协议中非常重要,能够实现对设备的状态读取和控制。
[0133] 所述功能码01图形块read_coils:向绑定的串口发送slave_address(从站地址,用于标识网络上的每个从站设备)、起始地址和数据长度,之后读取1路或多路开关量线圈输出状态;
[0134] 所述功能码02图形块read_discrete_inputs:向绑定的串口发送slave_address、起始地址和数据长度,之后读取1路或多路开关量输入状态;
[0135] 所述功能码03图形块read_holding_registers:向绑定的串口发送slave_address、起始地址和数据长度,之后读取多路保持寄存器的数据(寄存器可读可写,修改寄存器数据使用06或10功能码);
[0136] 所述功能码04图形块read_input_registers:向绑定的串口发送slave_address、起始地址和数据长度,之后读取多路输入寄存器的数据(寄存器只能读取不能写入);
[0137] 所述功能码05图形块write_single_coil:向绑定的串口发送slave_address、起始地址和写入的数据开或者关,写开关量输出;
[0138] 所述功能码06图形块write_single_registers:向绑定的串口发送slave_address、起始地址和写入的数据,写单路寄存器;
[0139] 所述功能码16图形块write_multi_registers:向绑定的串口发送slave_address、起始地址和写多路的数据,写多路寄存器操作;
[0140] 步骤S13、初始化该ModbusRTU_Tools图形块类,并初始化ModbusRTU协议绑定的串口,根据ModbusRTU协议的节点支持的功能码进行相关的功能码操作,并根据判断CRC校验成功与否来获取相应的协议数据;
[0141] 步骤S14、编程人员通过拖动具体的小任务模块进行参数配置,与ModbusRTU协议的节点进行通信;
[0142] 步骤S15、对于非预知型或者相对复杂的任务,编程人员通过语句性编程图形块进行逻辑组合,以合成具体的需求。
[0143] S2、构建串口‑Rs485功能的图形块组件,根据串口‑Rs485通信的工作流程进行任务型图形块的需求分析,确定所需图形块,所需图形块包含任务型图形块和语句型图形块;
[0144] 串口‑Rs485图形块类:该图形块类提供uart串口数据传输功能,包括初始化RS485串口设置波特率、数据位[5~8]、奇偶校验(0–NONE,1–EVEN,2–ODD)、停止位[1~2]硬件控制流,设置数据收发控制引脚,获取接收缓存未读数据大小,设置串口数据回调函数,发送串口数据的作用;
[0145] 在本实施例中,所述步骤S2具体包括:
[0146] 步骤S21、构建串口‑Rs485图形块类,用于提供串口通信的功能;
[0147] 步骤S22、在所述串口‑Rs485图形块类中加入uartInit(串口初始化)图形块、uart_control_485_pin(控制串口‑rs485的引脚)图形块、uart_set_callback(设置串口回调)图形块、uartWrite(串口数据发送)图形块、uartRead(串口数据接收)图形块和uart_callback_fun(串口接收回调)图形块;
[0148] 所述uartInit图形块用于串口初始化,通过uartInit图形块设置串口波特率、数据位、奇偶校验和停止位、硬件控制流;
[0149] 所述uart_control_485_pin图形块用于设置rs‑485收发引脚控制;
[0150] 所述uart_set_callback图形块用于设置串口回调函数;
[0151] 所述uartWrite图形块用于控制串口数据发送;
[0152] 所述uartRead图形块用于控制串口数据接收;
[0153] 所述uart_callback_fun图形块用于执行串口接收回调函数;
[0154] 步骤S23、编程人员通过拖动具体的小任务模块进行参数配置,完成串口数据收发;
[0155] 步骤S24、对于非预知型或者相对复杂的任务,编程人员通过语句性编程图形块进行逻辑组合,以合成具体的需求。
[0156] S3、构建NetManage(是一个全面的网络设备管理系统)功能的图形块组件,根据设备网络网口的通信方式进行任务型图形块的需求分析,确定所需图形块,所需图形块包含任务型图形块和语句型图形块;
[0157] NetManage_Tools图形块类:该图形块类提供了网络通信管理的方法,能够控制设备通过有线网口基于动态IP或者静态IP的方式访问外网,也可使用4G SIM卡的方式访问外网;
[0158] 在本实施例中,所述步骤S3具体包括:
[0159] 步骤S31、构建NetManage_Tools图形块类,用于管理不同的通信方式,包括通过有线的方式连接网络(包括通过网口静态IP的方式进行网络通信和通过网口动态IP的方式进行网络通信)和无线SIM卡4G通信的方式连接网络;
[0160] 步骤S32、在所述NetManage_Tools图形块类中加入eth_set_DHCP_mode(设置以太网为DHCP模式)图形块、eth_set_Static_mode(设置以太网为静态模式)图形块、sim_status(SIM卡状态)图形块、wait_connect(等待连接)图形块和reconnect(重新连接)图形块;
[0161] 所述eth_set_DHCP_mode图形块用于将设备设置使用动态IP,从路由器获取IP,通过路由器接入网络;
[0162] 所述eth_set_Static_mode图形块用于将设备设置为使用静态IP,通过路由器接入网络;
[0163] 所述sim_status图形块用于读取SIM卡状态;
[0164] 所述wait_connect图形块用于4G拨号上网并等待网络连接完成;
[0165] 所述reconnect图形块用于当有插入SIM卡且拨号失败时,进行重新连接网络;
[0166] 步骤S33、编程人员通过拖动具体的小任务模块进行参数配置,并连接到网络;
[0167] 步骤S34、对于非预知型或者相对复杂的任务,编程人员通过语句性编程图形块进行逻辑组合,以合成具体的需求。
[0168] S4、构建Home Assistant(是一个开源的智能家居平台,它允许用户连接、自动化和控制各种智能设备)功能的图形块组件,根据Home Assistant平台的通信API进行任务型图形块的需求分析,确定所需图形块,所需图形块包含任务型图形块和语句型图形块;
[0169] 连接HomeAssistant图形块类:通过MQTT连接Home Assistant主要使用MQTT协议的相关接口,用于实现物联网设备与Home Assistant的通信与控制。Home Assistant中主要调用的接口包括:MQTT订阅(Subscribe):Home Assistant通过订阅特定的MQTT主题(topic),接收来自设备的状态更新、传感器数据等信息。MQTT发布(Publish):通过发布特定消息到MQTT主题,Home Assistant可以控制设备,比如开关设备、调整亮度等。MQTT自动发现(Auto Discovery):该接口允许设备自动向Home Assistant报告其功能和状态,简化设备的配置过程。
[0170] 在本实施例中,所述步骤S4:
[0171] 步骤S41、构建Home Assistant图形块类,支持MQTT(也称为MQ遥测传输,是一种建立在TCP/IP之上的物联网连接协议,用于支持轻量级发布/订阅消息传输)通信;
[0172] 步骤S42、在所述Home Assistant图形块类中加入init(初始化)图形块、set_callback(设置回调)图形块、publish(发布)图形块、subscribe(订阅)图形块、wait_msg(等待消息)图形块、add_actuator_to_HA(将执行器添加到Home Assistant)图形块、add_sensor_to_HA(将传感器添加到Home Assistant)图形块和add_binary_to_HA(将二进制设备添加到Home Assistant)图形块;
[0173] 所述init图形块用于初始化并创建MQTT客户端与服务器的连接;
[0174] 所述set_callback图形块用于设置回调;
[0175] 所述publish图形块用于发布消息到对应topic主题;
[0176] 所述subscribe图形块用于订阅MQTT主题;
[0177] 所述wait_msg图形块用于阻塞等待服务器消息响应,获取MQTT连接状态;
[0178] 所述add_actuator_to_HA图形块用于向Home Assistant平台添加执行器实体;
[0179] 所述add_sensor_to_HA图形块用于向Home Assistant平台添加传感器实体;
[0180] 所述add_binary_to_HA图形块用于向Home Assistant平台添加二元传感器实体;
[0181] 步骤S43、编程人员通过拖动具体的小任务模块进行参数配置,并连接到Home Assistant平台;
[0182] 步骤S44、对于非预知型或者相对复杂的任务,编程人员通过语句性编程图形块进行逻辑组合,以合成具体的需求。
[0183] S5、构建ThingsBoard(是一个开源的物联网(IoT)平台,主要用于数据收集、处理、可视化和设备管理)功能的图形块组件,根据ThingsBoard平台的通信API进行任务型图形块的需求分析,确定所需图形块,所需图形块包含任务型图形块和语句型图形块;
[0184] 连接ThingsBoard图形块类:通过MQTT连接ThingBoard时,主要调用的接口用于设备与物联网平台之间的数据传输与控制。ThingBoard提供以下主要MQTT接口:设备遥测(Telemetry):设备通过发布MQTT消息将传感器数据或状态信息发送到ThingBoard平台,ThingBoard平台可对这些数据进行存储和展示。设备属性(Attributes):设备可以通过MQTT接口上传静态或动态属性,ThingBoard也可以通过该接口查询或设置设备的属性。RPC(远程过程调用):ThingBoard可通过MQTT调用设备上的功能或指令,设备接收到消息后执行相应操作,如远程开关、模式调整等。这些接口的作用是实现设备与ThingBoard之间的实时数据交互、远程控制和状态监控。
[0185] 在本实施例中,所述步骤S5具体包括:
[0186] 步骤S51、构建ThingsBoard图形块类,支持Mqtt通信(也称为MQ遥测传输,是一种建立在TCP/IP之上的物联网连接协议,用于支持轻量级发布/订阅消息传输),用于MQ遥测传输;
[0187] 步骤S52、在所述ThingsBoard图形块类中加入init(初始化)图形块、set_callback(设置回调)图形块、shed_telemetry(遥测数据传输)图形块和send_rpc_reply(发送RPC响应)图形块;
[0188] 所述init图形块用于初始化并创建MQTT客户端与服务器的连接;
[0189] 所述set_callback图形块用于设置回调;
[0190] 所述shed_telemetry图形块用于发布遥测数据到ThingsBoard平台;
[0191] 所述send_rpc_reply图形块用于回复服务端下发的RPC命令请求;
[0192] 步骤S53、编程人员通过拖动具体的小任务模块进行参数配置,并连接到ThingsBoard平台;
[0193] 步骤S54、对于非预知型或者相对复杂的任务,编程人员通过语句性编程图形块进行逻辑组合,以合成具体的需求。
[0194] S6、构建输入输出控制功能的图形块组件,根据GPIO输入输出控制过程进行任务型图形块的需求分析,确定所需图形块,所需图形块包含任务型图形块和语句型图形块;
[0195] GPIO输入输出控制图形块类:用于初始化GPIO、控制PIN的引脚方向、设置GPIO的输入输出模式和设置GPIO的引脚电平高低的作用;
[0196] 在本实施例中,所述步骤S6具体包括:
[0197] 步骤S61、构建GPIO输入输出控制图形块类;
[0198] 步骤S62、在所述GPIO输入输出控制图形块类中加入machine.Pin(控制引脚)图形块、set_dir(设置引脚方向)图形块和get_dir(获取引脚方向)图形块;
[0199] 所述machine.Pin图形块用于初始化GPIO引脚,并设置是否上下拉和默认电平;
[0200] 所述set_dir图形块用于设置machine.Pin初始化完成pin的引脚的输入和输出模式;
[0201] 所述get_dir图形块用于获取引脚当前的输入和输出模式,之后即可调用gpio.read(读取引脚电平)图形块或者gpio.write(写入引脚电平)图形块来读取或者设置gpio输出高低电平;
[0202] 步骤S63、编程人员通过拖动具体的小任务模块进行参数配置,并控制GPIO;
[0203] 步骤S64、对于非预知型或者相对复杂的任务,编程人员通过语句性编程图形块进行逻辑组合,以合成具体的需求。
[0204] 步骤3、结合具体业务需求,并通过S1到S6中确定的所需图形块进行自由组合搭建业务场景,通过图形化编程完成程序开发,显著降低人工编写的代码总量和代码的复杂度;
[0205] 以采集ModbusRTU协议设备并使用Modbus Slave软件模拟设备为例;
[0206] 首先,要使用步骤S2的串口‑Rs485图形块组件完成串口的初始化,拖入uartInit图形块,通过uartInit图形块设置串口波特率、数据位、奇偶校验、停止位和硬件控制流,通过uart_control_485_pin图形块设置Rs‑485收发引脚控制,通过uart_set_callback图形块设置串口回调函数,通过uartWrite图形块实现串口数据发送,通过uartRead图形块实现串口数据接收,通过uart_callback_fun图形块执行串口接收回调函数;
[0207] 接着,根据步骤S1完成的ModbusRTU图形块组件,图形化编程完成modbusRTU协议的开发,具体包括首先使用ModbusRTU_Tools图形块类,使用功能码01图形块read_coils:向绑定的串口发送slave_address、起始地址和数据长度,之后即可读1路或多路开关量线圈输出状态;使用功能码02图形块read_discrete_inputs:向绑定的串口发送slave_address、起始地址和数据长度,之后即可读1路或多路开关量状态输入;使用功能码03图形块read_holding_registers:向绑定的串口发送slave_address、起始地址和数据长度,之后即可读多路保持寄存器(寄存器可读可写,修改寄存器数据使用06或10功能码)。
[0208] 步骤4、将图形化编程后的程序下载到设备(如:4G边缘终端)进行运行。
[0209] 使用步骤S1和步骤S2图形化编程组合迅速完成使用串口‑Rs485采集modbus slave软件模拟硬件设备;首先使用了串口‑Rs485图形块类的接口完成串口参数的初始化,之后调用ModbusRTU图形块类完成功能码的初始化配置与图形化功能码开发,之后把开发完成的代码下载到4G边缘终端实现了与Modbus slave软件的通信连接,并验证了图形化编程实现不同功能码的功能。
[0210] 如图3所示,本发明实施例还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述的一种基于物联网嵌入式图形化编程开发方法。
[0211] 如图4所示,本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述的一种基于物联网嵌入式图形化编程开发方法。
[0212] 另外,在本发明各个实施方式中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0213] 集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施方式方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0214] 以上所述仅为本发明的部分实施例,并非因此限制本发明的保护范围,凡是利用本发明说明书及附图内容所作的等效装置或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页 第1页 第2页 第3页
相关技术
图形化相关技术
嵌入式相关技术
洪顺利发明人的其他相关专利技术