BMG700系列边缘计算网关二次开发说明

  • 时间 :2021-02-24
  • 作者 :佰马科技
  • 浏览数 :716

佰马BMG700系列边缘计算网关盒子,支持二次开发,它采用高性能的工业级ARM高端处理器,Linux 操作系统,集成Python开发环境和C语言开发环境,提供标准API接口及开发指导,为用户的应用开发提供稳定快捷的平台。用户可轻松调用系统各种接口及资源,打造差异化核心竞争力。


下文以佰马BMG700系列边缘计算网关为例,全面介绍网关是否可以二次开发,二次开发要求,编程语言要求,软件接口说明,如何编程及编译,二次开发示例等。


BMG700边缘计算网关.jpg


二次开发要求 

此二次开发指导文档只适用于佰马BMG700系列边缘计算网关,开始二次开发之前,请务必确认手上的设备是 BMG700系列网关。 


操作系统要求

64 位 CPU,2G 内存,10G 硬盘

二次开发只能在 centos,redhat,ubuntu 等 linux 系统,无法在 windows 系统上开发 


编程语言要求

二次开发只能使用 C、C++开发;需要开发者熟练掌握 socket,linux 设备文件操作。 


设备资源 

BMG700 边缘计算网关关键参数:

CPU: ARM 架构,主频 528MHZ, 32K Icache, 32K Dcache 

内存: 256MB

Flash: 256MB(1G 可选),其中 128M 用户可用

网口: 4 路,其中 1 路 WAN/LAN 复用

串口: 2路232, 3路485

开关量: 2路DI, 2路继电器

模拟量: 2 路 ADC 


软件接口说明 

1. 串口对应设备文件 

    a)  RS232_1 对应的设备接口是/dev/ttymxc0, 

    b)  RS232_2 对应的设备接口是/dev/ttymxc1 

    c)  RS485_1 对应的设备接口是/dev/ttymxc4 

    d)  RS485_2 对应的设备接口是/dev/ttymxc6 

    e)  RS485_3 对应的设备接口是/dev/ttymxc3 


2. 读取 adc 

    int read_adc_raw(int adc_num)

    参数说明:

    adc_num: 取值 1,2,用来指示读取哪一路 adc

    返回值:返回一个 0~4096 的原始值

    假设返回值是 X,需要使用公式 Y =(X/4096)*6.72 转化成实际电压值 


3. 设置 GPIO 输入,输出方向 

    int gpio_set_dir(unsigned int gpio_num, unsigned int dir)

    参数说明:

    gpio_num: 取值 GPIO_DI1,GPIO_DI2 或者 GPIO_RELAY1, GPIO_RELAY2,指示要操作哪一 路 gpio

    dir: 取值DIR_IN,DIR_OUT,控制要配置成输入,还是输出

    返回值: 配置成功返回 1,配置失败返回 0 


4. 获取 GPIO 的值

    int gpio_get_val(unsigned int gpio_num, unsigned int *val)

    gpio_num: 取值 GPIO_DI1,GPIO_DI2 或者 GPIO_RELAY1, GPIO_RELAY2,指示要操作哪一 路 gpio

    val: 对应 gpio 的值,有 0,1 两个取值

    返回值: 获取成功返回 1,获取失败返回 0 


5. 配置 GPIO 的值 

    int gpio_set_val(unsigned int gpio_num, unsigned int val)

    gpio_num: 取值 GPIO_DI1,GPIO_DI2 或者 GPIO_RELAY1, GPIO_RELAY2,指示要操作哪一 路 gpio

    val:只能 0 或者 1,其它值无法配置

    返回值: 配置成功返回 1,配置失败返回 0 


编码编译 

准备交叉编译环境 

如要您已经拿到我司的交叉编译工具,那么可以先把交叉编译工具拷贝到 linux 系统。 现假设您已经把交叉编译工具拷贝到 linux 系统,比如拷到/opt/,接下来是解压缩交叉编译 工具:

tar xzvf staging_dir.tgz –C /opt/ 

配置交叉编译环境:

export PATH=$PATH:"/opt/staging_dir/toolchain-arm_cortex-a7+neon_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin/" 在命令行输入命令: 

arm-openwrt-linux-gcc, 说明编译环境已经正常 


一个简单的例子: 

下面以一个简单例子来说明如何在佰马BMG700系列边缘计算网关的基础上进行二次开发:

比如现在要读取 adc1 的电压值,DI1 的开关量,控制继电器闭合,代码如下: 

#include <stdio.h> 

#include <string.h> 

#include <gpio.h> /* 必须 include , GPIO_DIx, GPIO_RELAYx 定义在这个头文件 */ 

    int main(void)

         { 

            int ret;

            int raw_adc;

            float voltage; 

            unsigned int val; 

            printf("start to test \n"); 

            raw_adc = read_adc_raw(1); /* 读 ADC 通道 1 */ 

            printf("raw adc 1 value is %d\n", raw_adc); 

            voltage = (float)raw_adc / 4096;

            voltage *= 6.72;

            printf("adc1 voltage is %.3f\n", voltage); 

            ret = gpio_set_dir(GPIO_DI1, DIR_IN); /* 配置 DI1 为输入 */ 

            if (ret == 1) { 

                ret = gpio_get_val(GPIO_DI1, &val); 

                printf("GPIO_DI1 value is %d\n", val); 

                } else { 

                    printf("Fails to set di dir %d\n", GPIO_DI1); 

                } 

            ret = gpio_set_dir(GPIO_RELAY1, DIR_OUT);/* 配置 RELAY1 为输出 */ 

             if (ret == 1) { 

                val = 1; 

                ret = gpio_set_val(GPIO_RELAY1, val);

                 } else { 

                    printf("Fails to set relay dir %d\n", GPIO_RELAY1); 

                    } 

        return 0; 

        } 


Makefile 的内容如下: 

LIB_DIR=/opt/staging_dir/target-arm_cortex-a7+neon_uClibc-0.9.33.2_eabi/usr/lib/ INCLUDE_DIR=/opt/staging_dir/target-arm_cortex-a7+neon_uClibc-0.9.33.2_eabi/usr/include CC=arm-openwrt-linux-gcc 

CFLAGS=-I $(INCLUDE_DIR) LDFLAGS=-L $(LIB_DIR) 

all: test 

%.o:%.c

    $(CC) $(CFLAGS) -c -o $@ $^ 

test: test.o

    $(CC) $(LDFLAGS) -o $@ $^ -lgpio 

我司会提供该程序代码;您可以在该示例代码上直接修改。 如果上面的交叉编译环境配置好了,那么直接 make,会生成 test 的可执行程序,如下图: 


代码示例1.jpg


编译好的可执行文件 test 现在可以 tftp 到设备主板上运行,比如你的电脑 IP 是 192.168.1.10; (注:路由器通过网线与电脑相连,接 LAN 口中的任何一个) 


a.那么先在你的电脑上运行 tftpd32 程序,把当前目录改成 test 文件所在的目录 


IP设置.jpg


b. telnet 192.168.1.1 到设备,默认用户名跟密码都是 admin 



c. 运行命令 tftp –r test –g 192.168.1.10 //下载 test 到设备 


运行示例1.jpg


d. chmod a+x test //修改程序为可运行 


运行示例2.jpg


e: ./test //运行程序 


运行示例3.jpg


如果程序调试 OK,可以把该程序放到/usr/bin/目录下

f. 如果要把该程序配置成开机运行,那么只要在/etc/rc.local 加上该程序,如下图: 


运行示例4.jpg


后面的&是必须的


联系我们
联系我们

佰马Baimatech,集M2M产品研发、IoT平台服务、国际化运营于一体,让我们联接,共创未来